@cqa-lib/cqa-ui 1.1.471 → 1.1.473

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.
@@ -509,7 +509,8 @@ export class TestCaseDetailsEditComponent {
509
509
  this.dataDrivenEnabled = !!this.getConfigItemValue('Key Flags', 'Data Driven');
510
510
  const enableAiSmartness = this.getConfigItemValue('AI Configuration', 'Enable AI Smartness');
511
511
  const defaultAiAction = this.getConfigItemValue('AI Configuration', 'Default AI Action');
512
- const knowledgeBaseDefaultTestCase = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');
512
+ const knowledgeBaseDefaultTestCaseRaw = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');
513
+ const knowledgeBaseDefaultTestCase = this.resolveToOptionValue(knowledgeBaseDefaultTestCaseRaw, this.selectConfigOverrides?.['knowledgeBaseDefaultTestCase']?.options) ?? knowledgeBaseDefaultTestCaseRaw;
513
514
  const useAiMetadataRaw = this.getConfigItemValue('AI Configuration', 'Enable AI metadata collection');
514
515
  const useAiMetadata = this.normalizeBooleanSelectValue(useAiMetadataRaw);
515
516
  const prerequisiteCases = this.getPrerequisiteCasesFromConfig();
@@ -643,6 +644,13 @@ export class TestCaseDetailsEditComponent {
643
644
  if (defaultAiRaw)
644
645
  patch['defaultAiAction'] = defaultAiRaw;
645
646
  }
647
+ const kbCtrl = this.editForm.get('knowledgeBaseDefaultTestCase');
648
+ if (kbCtrl && !kbCtrl.dirty) {
649
+ const kbRaw = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');
650
+ const kbResolved = this.resolveToOptionValue(kbRaw, this.selectConfigOverrides?.['knowledgeBaseDefaultTestCase']?.options) ?? kbRaw;
651
+ if (kbResolved)
652
+ patch['knowledgeBaseDefaultTestCase'] = kbResolved;
653
+ }
646
654
  if (Object.keys(patch).length) {
647
655
  this.editForm.patchValue(patch, { emitEvent: false });
648
656
  }
@@ -678,7 +686,8 @@ export class TestCaseDetailsEditComponent {
678
686
  if (changes['configSections'] || changes['configSectionsRow2']) {
679
687
  const enableAiSmartness = this.getConfigItemValue('AI Configuration', 'Enable AI Smartness');
680
688
  const defaultAiAction = this.getConfigItemValue('AI Configuration', 'Default AI Action');
681
- const knowledgeBaseDefaultTestCase = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');
689
+ const knowledgeBaseDefaultTestCaseRaw = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');
690
+ const knowledgeBaseDefaultTestCase = this.resolveToOptionValue(knowledgeBaseDefaultTestCaseRaw, this.selectConfigOverrides?.['knowledgeBaseDefaultTestCase']?.options) ?? knowledgeBaseDefaultTestCaseRaw;
682
691
  const prerequisiteCases = this.getPrerequisiteCasesFromConfig();
683
692
  const typeRaw = (this.getConfigItemValue('Execution', 'Type') || this.typeItem?.value) ?? '';
684
693
  const testDataProfileRaw = this.getConfigItemValue('Execution', 'Test Data Profile') ?? '';
@@ -963,4 +972,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
963
972
  }], labelAdded: [{
964
973
  type: Output
965
974
  }] } });
966
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUt4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBaUN4RCxvR0FBb0c7QUFDcEcsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtJQUNoQixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxXQUFXLEVBQUUsYUFBYTtJQUMxQixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGlCQUFpQixFQUFFLG1CQUFtQjtJQUN0QyxlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLDRCQUE0QixFQUFFLDhCQUE4QjtJQUM1RCxhQUFhLEVBQUUsZUFBZTtJQUM5QixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsUUFBUSxFQUFFLFVBQVU7Q0FDWixDQUFDO0FBY1gsTUFBTSxzQkFBc0IsR0FB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bXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbixcbiAgVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtLFxufSBmcm9tICcuLi90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMnO1xuaW1wb3J0IHtcbiAgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLFxuICBTZWxlY3RPcHRpb24sXG59IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbi8qKiBPdmVycmlkZSBjb25maWcgZm9yIGEgc3BlY2lmaWMgc2VsZWN0LiBVc2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCwgbG9hZCBtb3JlLCBjdXN0b20gb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0Q29uZmlnT3ZlcnJpZGUge1xuICAvKiogUmVwbGFjZSBvcHRpb25zIChlLmcuIGZyb20gQVBJKS4gVXBkYXRlIHdoZW4gQVBJIHJldHVybnMuICovXG4gIG9wdGlvbnM/OiBTZWxlY3RPcHRpb25bXTtcbiAgLyoqIEVuYWJsZSBzZXJ2ZXItc2lkZSBzZWFyY2g7IGNvbXBvbmVudCBlbWl0cyBzZWxlY3RTZWFyY2ggaW5zdGVhZCBvZiBsb2NhbCBmaWx0ZXJpbmcuICovXG4gIHNlcnZlclNlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBJbmRpY2F0ZXMgbW9yZSByZXN1bHRzIGF2YWlsYWJsZSBmb3IgaW5maW5pdGUgc2Nyb2xsLiAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgLyoqIExvYWRpbmcgc3RhdGUgKGUuZy4gZHVyaW5nIEFQSSBjYWxsKS4gKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBzZWFyY2ggaW5wdXQgaW4gdGhlIHNlbGVjdC4gKi9cbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRyaWdnZXJzIGluaXRpYWwgc2VhcmNoIG9uIHBhbmVsIG9wZW4gKHNlcnZlclNlYXJjaCBtb2RlKS4gKi9cbiAgaW5pdGlhbEZldGNoT25PcGVuPzogYm9vbGVhbjtcbiAgLyoqIENhbGxiYWNrIHdoZW4gdXNlciB0eXBlcyBpbiBzZWFyY2guIENhbGwgQVBJLCB0aGVuIHVwZGF0ZSBvcHRpb25zIHZpYSBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG4gIG9uU2VhcmNoPzogKHF1ZXJ5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUuIENhbGwgQVBJLCBhcHBlbmQgb3B0aW9ucyB2aWEgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzLiAqL1xuICBvbkxvYWRNb3JlPzogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG4vKiogTWFwIG9mIHNlbGVjdCBrZXkgLT4gY29uZmlnIG92ZXJyaWRlLiBFbmFibGVzIEFQSS1kcml2ZW4gb3B0aW9ucywgaW5maW5pdGUgc2VhcmNoLCBsb2FkIG1vcmUuICovXG5leHBvcnQgdHlwZSBTZWxlY3RDb25maWdPdmVycmlkZXMgPSBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIFNlbGVjdENvbmZpZ092ZXJyaWRlPj47XG5cbi8qKiBLZXlzIGZvciBlYWNoIGR5bmFtaWMgc2VsZWN0IGluIHRlc3QtY2FzZS1kZXRhaWxzLWVkaXQuIFVzZSB0aGVzZSB3aXRoIHNlbGVjdENvbmZpZ092ZXJyaWRlcy4gKi9cbmV4cG9ydCBjb25zdCBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUyA9IHtcbiAgc3RhdHVzOiAnc3RhdHVzJyxcbiAgcHJpb3JpdHk6ICdwcmlvcml0eScsXG4gIHR5cGU6ICd0eXBlJyxcbiAgbGFiZWxzOiAnbGFiZWxzJyxcbiAgcHJlcmVxdWlzaXRlQ2FzZXM6ICdwcmVyZXF1aXNpdGVDYXNlcycsXG4gIHRlc3REYXRhUHJvZmlsZTogJ3Rlc3REYXRhUHJvZmlsZScsXG4gIHRlc3REYXRhU2V0OiAndGVzdERhdGFTZXQnLFxuICB2aWRlb1JlY29yZGluZzogJ3ZpZGVvUmVjb3JkaW5nJyxcbiAgZW5hYmxlQWlTbWFydG5lc3M6ICdlbmFibGVBaVNtYXJ0bmVzcycsXG4gIGRlZmF1bHRBaUFjdGlvbjogJ2RlZmF1bHRBaUFjdGlvbicsXG4gIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6ICdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyxcbiAgdXNlQWlNZXRhZGF0YTogJ3VzZUFpTWV0YWRhdGEnLFxuICBkZWZhdWx0QnJvd3NlcjogJ2RlZmF1bHRCcm93c2VyJyxcbiAgZGVmYXVsdFZpZXdwb3J0OiAnZGVmYXVsdFZpZXdwb3J0JyxcbiAgZGV2aWNlVHlwZTogJ2RldmljZVR5cGUnLFxuICBkZXZpY2VPUzogJ2RldmljZU9TJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhIHtcbiAgZGVzY3JpcHRpb25Db250ZW50OiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBwcmlvcml0eTogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICB0ZXN0RGF0YVByb2ZpbGVJZD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIHRlc3REYXRhU2V0SW5kZXg/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICBjb25maWdTZWN0aW9uczogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdO1xuICBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXTtcbn1cblxuY29uc3QgRlJFUVVFTlRMWV9VU0VEX0xBQkVMUyA9IFtcbiAgJ0Nhc2UnLFxuICAnQ3JpdGljYWwnLFxuICAnUE8nLFxuICAnVXBsb2FkJyxcbiAgJ1ZhbGlkYXRpb24nLFxuICAnUmV2aWV3JyxcbiAgJ0VkZ2UtY2FzZXMnLFxuICAnU2VjdXJpdHknLFxuICAnSW50ZWdyYXRpb24nLFxuICAnU21va2UnLFxuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkZXNjcmlwdGlvblRpdGxlID0gJ0Rlc2NyaXB0aW9uJztcbiAgQElucHV0KCkgZGVzY3JpcHRpb25Db250ZW50ID0gJyc7XG4gIC8qKiBXaGVuIHRydWUsIGRlc2NyaXB0aW9uIHVzZXMgVHJpeCByaWNoIHRleHQgZWRpdG9yIChCb2xkLCBJdGFsaWMsIGV0Yy4pLiBIb3N0IGFwcCBtdXN0IGxvYWQgVHJpeC4gKi9cbiAgQElucHV0KCkgZW5hYmxlTWFya2Rvd24gPSBmYWxzZTtcbiAgQElucHV0KCkgbWV0YWRhdGFJdGVtczogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBjb25maWdUaXRsZSA9ICdDb25maWd1cmF0aW9uJztcbiAgQElucHV0KCkgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBpc1NhdmluZyA9IGZhbHNlO1xuICAvKiogT3B0aW9uYWwgbGlzdCBvZiBwcmVyZXF1aXNpdGUgdGVzdCBjYXNlIG9wdGlvbnMgZm9yIHRoZSBtdWx0aS1zZWxlY3QuIElmIG5vdCBwcm92aWRlZCwgdXNlcyBkZWZhdWx0IHNhbXBsZSBvcHRpb25zLiAqL1xuICBASW5wdXQoKSBwcmVyZXF1aXNpdGVDYXNlT3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdID0gW107XG4gIC8qKiBQbGF0Zm9ybTogJ3dlYicgc2hvd3MgRGVmYXVsdCBCcm93c2VyICsgVmlld3BvcnQ7ICdtb2JpbGUnIHNob3dzIERldmljZSBUeXBlICsgT1MuIERlZmF1bHRzIHRvICd3ZWInLiAqL1xuICBASW5wdXQoKSBwbGF0Zm9ybTogJ3dlYicgfCAnbW9iaWxlJyA9ICd3ZWInO1xuXG4gIC8qKiBXaGVuIHRydWUsIGhpZGVzIFByaW9yaXR5LCBUeXBlLCBhbmQgVGVzdCBEYXRhIFNldCBmaWVsZHMgKHN0ZXAgZ3JvdXBzIGRvbid0IGhhdmUgdGhlc2UpLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgQElucHV0KCkgaXNTdGVwR3JvdXAgPSBmYWxzZTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgY29uZmlnIHBlciBzZWxlY3Qga2V5LiBVc2UgZm9yOlxuICAgKiAtIEFQSS1kcml2ZW4gb3B0aW9uczogcGFzcyBvcHRpb25zIGFycmF5ICh1cGRhdGUgd2hlbiBBUEkgcmV0dXJucylcbiAgICogLSBTZXJ2ZXItc2lkZSBzZWFyY2g6IHNlcnZlclNlYXJjaDogdHJ1ZSwgb25TZWFyY2ggaW4gb3ZlcnJpZGUgb3IgbGlzdGVuIHRvIHNlbGVjdFNlYXJjaFxuICAgKiAtIEluZmluaXRlIHNjcm9sbDogaGFzTW9yZTogdHJ1ZSwgb25Mb2FkTW9yZSBpbiBvdmVycmlkZSBvciBsaXN0ZW4gdG8gc2VsZWN0TG9hZE1vcmVcbiAgICogLSBJbml0aWFsIGZldGNoIG9uIG9wZW46IGluaXRpYWxGZXRjaE9uT3BlbjogdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzOiBTZWxlY3RDb25maWdPdmVycmlkZXMgPSB7fTtcblxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzZWFyY2hlcyBpbiBhIHNlbGVjdCAoc2VydmVyU2VhcmNoIG1vZGUpLiBDYWxsIEFQSSBhbmQgdXBkYXRlIG9wdGlvbnMgdmlhIHNlbGVjdENvbmZpZ092ZXJyaWRlcy4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZS4gQ2FsbCBBUEksIGFwcGVuZCB0byBvcHRpb25zIHZpYSBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RMb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBzZWxlY3QgcGFuZWwgaXMgb3BlbmVkLiBVc2UgdG8gY2FsbCBBUEkgZm9yIGluaXRpYWwgbG9hZCAoZS5nLiB3aGVuIGluaXRpYWxGZXRjaE9uT3BlbikuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmcgfT4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzIGluIGFueSBzZWxlY3QuICovXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGFkZHMgYSBuZXcgY3VzdG9tIGxhYmVsIHZpYSB0aGUgXCJOZXdcIiBvcHRpb24uICovXG4gIEBPdXRwdXQoKSBsYWJlbEFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIC8qKiBGb3JtIHN0YXRlICovXG4gIGVkaXREZXNjcmlwdGlvbiA9ICcnO1xuICBlZGl0U3RhdHVzID0gJyc7XG4gIGVkaXRQcmlvcml0eSA9ICcnO1xuICBlZGl0TGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICB0ZXN0Q2FzZVRpbWVvdXQgPSAnJztcbiAgd2FpdFRpbWVvdXRMb2NhdG9ycyA9ICcnO1xuICBhdXRvV2FpdEVuYWJsZWQgPSBmYWxzZTtcbiAgcmV0cnlGYWlsZWRTdGVwcyA9ICcnO1xuICBjb25maWdFeHBhbmRlZCA9IHRydWU7XG4gIGV4ZWN1dGlvbkV4cGFuZGVkID0gdHJ1ZTtcbiAgYWlDb25maWdFeHBhbmRlZCA9IHRydWU7XG4gIHdhaXRzUmV0cmllc0V4cGFuZGVkID0gdHJ1ZTtcbiAgZGV2aWNlRXhwYW5kZWQgPSB0cnVlO1xuICBrZXlGbGFnc0V4cGFuZGVkID0gdHJ1ZTtcbiAgbW9iaWxlVGVzdGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgZXh0ZW5zaW9uVXNlRW5hYmxlZCA9IGZhbHNlO1xuICBkYXRhRHJpdmVuRW5hYmxlZCA9IGZhbHNlO1xuXG4gIHJlYWRvbmx5IGZyZXF1ZW50bHlVc2VkTGFiZWxzID0gRlJFUVVFTlRMWV9VU0VEX0xBQkVMUztcbiAgcHJpdmF0ZSBfaW5pdGlhbEZvcm1TbmFwc2hvdDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEZvcm1Hcm91cCBmb3IgY3FhLWR5bmFtaWMtc2VsZWN0IGJpbmRpbmdzICovXG4gIGVkaXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhdHVzOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIHByaW9yaXR5OiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIHR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgbGFiZWxzOiBuZXcgRm9ybUNvbnRyb2woW10gYXMgc3RyaW5nW10pLFxuICAgIHByZXJlcXVpc2l0ZUNhc2VzOiBuZXcgRm9ybUNvbnRyb2woW10gYXMgc3RyaW5nW10pLFxuICAgIHRlc3REYXRhUHJvZmlsZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICB0ZXN0RGF0YVNldDogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBkZWZhdWx0QnJvd3NlcjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICB2aWRlb1JlY29yZGluZzogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBkZWZhdWx0Vmlld3BvcnQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGV2aWNlVHlwZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBkZXZpY2VPUzogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBlbmFibGVBaVNtYXJ0bmVzczogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBkZWZhdWx0QWlBY3Rpb246IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICB1c2VBaU1ldGFkYXRhOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICB9KTtcblxuICBnZXQgc3RhdHVzSXRlbSgpOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhSXRlbXMuZmluZCgobSkgPT4gbS5sYWJlbCA9PT0gJ1N0YXR1cycpO1xuICB9XG5cbiAgZ2V0IHByaW9yaXR5SXRlbSgpOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhSXRlbXMuZmluZCgobSkgPT4gbS5sYWJlbCA9PT0gJ1ByaW9yaXR5Jyk7XG4gIH1cblxuICBnZXQgdHlwZUl0ZW0oKTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbmQoKG0pID0+IG0ubGFiZWwgPT09ICdUeXBlJyk7XG4gIH1cblxuICBnZXQgc3RhdHVzT3B0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnRHJhZnQnLCAnSW4gUmV2aWV3JywgJ0FwcHJvdmVkJywgJ0FjdGl2ZScsICdJbmFjdGl2ZScsICdCbG9ja2VkJ107XG4gIH1cblxuICBnZXQgcHJpb3JpdHlPcHRpb25zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydDcml0aWNhbCcsICdNYWpvcicsICdIaWdoJywgJ01lZGl1bScsICdMb3cnLCAnTWlub3InLCAnTm90IHNldCddO1xuICB9XG5cbiAgLyoqIENhY2hlZCBjb25maWdzIHRvIGF2b2lkIG5ldyBvYmplY3QgcmVmcyBlYWNoIGNoYW5nZSBkZXRlY3Rpb24gKHByZXZlbnRzIGluZmluaXRlIGxvb3BzKSAqL1xuICByZWFkb25seSBzdGF0dXNTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdzdGF0dXMnLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1N0YXR1cycsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ0RyYWZ0JywgbmFtZTogJ0RyYWZ0JyB9LFxuICAgICAgeyB2YWx1ZTogJ0luIFJldmlldycsIG5hbWU6ICdJbiBSZXZpZXcnIH0sXG4gICAgICB7IHZhbHVlOiAnQXBwcm92ZWQnLCBuYW1lOiAnQXBwcm92ZWQnIH0sXG4gICAgICB7IHZhbHVlOiAnQWN0aXZlJywgbmFtZTogJ0FjdGl2ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdJbmFjdGl2ZScsIG5hbWU6ICdJbmFjdGl2ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdCbG9ja2VkJywgbmFtZTogJ0Jsb2NrZWQnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSB0eXBlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndHlwZScsXG4gICAgbGFiZWw6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnVHlwZScsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICBvcHRpb25zOiBbXSxcbiAgfTtcblxuICByZWFkb25seSB0ZXN0RGF0YVByb2ZpbGVTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICd0ZXN0RGF0YVByb2ZpbGUnLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1Rlc3QgRGF0YSBQcm9maWxlJyxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHJlYWRvbmx5IHRlc3REYXRhU2V0U2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndGVzdERhdGFTZXQnLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1Rlc3QgRGF0YSBTZXQnLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgb3B0aW9uczogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UHJlcmVxdWlzaXRlQ2FzZU9wdGlvbnMgPSBbXG4gICAgeyB2YWx1ZTogJ1RDLTAwMScsIG5hbWU6ICdUQy0wMDE6IExvZ2luIGZsb3cnIH0sXG4gICAgeyB2YWx1ZTogJ1RDLTAwMicsIG5hbWU6ICdUQy0wMDI6IFVzZXIgcmVnaXN0cmF0aW9uJyB9LFxuICAgIHsgdmFsdWU6ICdUQy0wMDMnLCBuYW1lOiAnVEMtMDAzOiBQYXNzd29yZCByZXNldCcgfSxcbiAgICB7IHZhbHVlOiAnVEMtMDA0JywgbmFtZTogJ1RDLTAwNDogRGFzaGJvYXJkIGxvYWQnIH0sXG4gICAgeyB2YWx1ZTogJ1RDLTAwNScsIG5hbWU6ICdUQy0wMDU6IEFQSSBoZWFsdGggY2hlY2snIH0sXG4gIF07XG5cbiAgcmVhZG9ubHkgdmlkZW9SZWNvcmRpbmdTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICd2aWRlb1JlY29yZGluZycsXG4gICAgbGFiZWw6ICdSZWNvcmQgdGVzdCBleGVjdXRpb24gdmlkZW8nLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAndHJ1ZScsIG5hbWU6ICdUcnVlJyB9LFxuICAgICAgeyB2YWx1ZTogJ2ZhbHNlJywgbmFtZTogJ0ZhbHNlJyB9LFxuICAgICAgeyB2YWx1ZTogJ09yZyBsZXZlbCcsIG5hbWU6ICdPcmcgbGV2ZWwnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBhaU1ldGFkYXRhQ29sbGVjdGlvblNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3VzZUFpTWV0YWRhdGEnLFxuICAgIGxhYmVsOiAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAndHJ1ZScsIG5hbWU6ICdUcnVlJyB9LFxuICAgICAgeyB2YWx1ZTogJ2ZhbHNlJywgbmFtZTogJ0ZhbHNlJyB9LFxuICAgICAgeyB2YWx1ZTogJ09yZyBsZXZlbCcsIG5hbWU6ICdPcmcgbGV2ZWwnIH0sXG4gICAgXSxcbiAgfTtcblxuICAvKiogQ2FjaGVkIGxhYmVscyBjb25maWcgdG8gYXZvaWQgbmV3IG9iamVjdCBvbiBldmVyeSBDRCAocHJldmVudHMgZnJlZXplKSAqL1xuICBwcml2YXRlIF9sYWJlbHNTZWxlY3RDb25maWdDYWNoZTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2xhYmVsc1NlbGVjdENvbmZpZ0RpcnR5ID0gdHJ1ZTtcblxuICAvKiogTGFiZWxzIG11bHRpLXNlbGVjdDogb3B0aW9ucyA9IGZyZXF1ZW50bHkgdXNlZCArIGN1cnJlbnQgKyBBUEkgb3B0aW9ucyBmcm9tIHNlbGVjdENvbmZpZ092ZXJyaWRlcyAqL1xuICBnZXQgbGFiZWxzU2VsZWN0Q29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgaWYgKCF0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSAmJiB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZSkgcmV0dXJuIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0NhY2hlO1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXNbVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMubGFiZWxzXTtcbiAgICBjb25zdCBhcGlPcHRpb25zID0gb3ZlcnJpZGU/Lm9wdGlvbnMgPz8gW107XG4gICAgY29uc3QgYWxsTGFiZWxzID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgICAgIC4uLnRoaXMuZnJlcXVlbnRseVVzZWRMYWJlbHMsXG4gICAgICAuLi50aGlzLmVkaXRMYWJlbHMsXG4gICAgICAuLi5hcGlPcHRpb25zLm1hcCgobykgPT4gU3RyaW5nKG8ubmFtZSA/PyBvLnZhbHVlID8/ICcnKS50cmltKCkpLmZpbHRlcihCb29sZWFuKSxcbiAgICBdKTtcbiAgICBjb25zdCBvcHRpb25zID0gQXJyYXkuZnJvbShhbGxMYWJlbHMpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKVxuICAgICAgLm1hcCgodikgPT4gKHsgdmFsdWU6IHYsIG5hbWU6IHYgfSkpO1xuICAgIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0NhY2hlID0ge1xuICAgICAga2V5OiAnbGFiZWxzJyxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoIGxhYmVscyB0byBhZGQgLi4uLi4uJyxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG9wdGlvblN0eWxlOiAnY2hlY2tib3gnLFxuICAgICAgYWxsb3dDdXN0b21WYWx1ZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgfTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZTtcbiAgfVxuXG4gIHByZXJlcXVpc2l0ZUNhc2VTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdwcmVyZXF1aXNpdGVDYXNlcycsXG4gICAgbGFiZWw6ICdQcmVyZXF1aXNpdGUgQ2FzZScsXG4gICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QnLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgb3B0aW9uU3R5bGU6ICdjaGVja2JveCcsXG4gICAgc2hvd1NlbGVjdEFsbDogdHJ1ZSxcbiAgICBzZWxlY3RBbGxMYWJlbDogJ0FsbCcsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ1RDLTAwMScsIG5hbWU6ICdUQy0wMDE6IExvZ2luIGZsb3cnIH0sXG4gICAgICB7IHZhbHVlOiAnVEMtMDAyJywgbmFtZTogJ1RDLTAwMjogVXNlciByZWdpc3RyYXRpb24nIH0sXG4gICAgICB7IHZhbHVlOiAnVEMtMDAzJywgbmFtZTogJ1RDLTAwMzogUGFzc3dvcmQgcmVzZXQnIH0sXG4gICAgICB7IHZhbHVlOiAnVEMtMDA0JywgbmFtZTogJ1RDLTAwNDogRGFzaGJvYXJkIGxvYWQnIH0sXG4gICAgICB7IHZhbHVlOiAnVEMtMDA1JywgbmFtZTogJ1RDLTAwNTogQVBJIGhlYWx0aCBjaGVjaycgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRWaWV3cG9ydFNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RlZmF1bHRWaWV3cG9ydCcsXG4gICAgbGFiZWw6ICdEZWZhdWx0IFZpZXdwb3J0JyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJzEyODB4NzIwJywgbmFtZTogJzEyODB4NzIwJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgZGV2aWNlVHlwZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RldmljZVR5cGUnLFxuICAgIGxhYmVsOiAnRGV2aWNlIFR5cGUnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnaVBob25lIDE0JywgbmFtZTogJ2lQaG9uZSAxNCcgfSxcbiAgICAgIHsgdmFsdWU6ICdpUGhvbmUgMTUnLCBuYW1lOiAnaVBob25lIDE1JyB9LFxuICAgICAgeyB2YWx1ZTogJ2lQaG9uZSAxNycsIG5hbWU6ICdpUGhvbmUgMTcnIH0sXG4gICAgICB7IHZhbHVlOiAnSXBob25lIDE3JywgbmFtZTogJ0lwaG9uZSAxNycgfSxcbiAgICAgIHsgdmFsdWU6ICdTYW1zdW5nIEdhbGF4eScsIG5hbWU6ICdTYW1zdW5nIEdhbGF4eScgfSxcbiAgICAgIHsgdmFsdWU6ICdQaXhlbCcsIG5hbWU6ICdQaXhlbCcgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGRldmljZU9TU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZGV2aWNlT1MnLFxuICAgIGxhYmVsOiAnT1MnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnaXBhJywgbmFtZTogJ2lPUyAoaXBhKScgfSxcbiAgICAgIHsgdmFsdWU6ICdhcGsnLCBuYW1lOiAnQW5kcm9pZCAoYXBrKScgfSxcbiAgICAgIHsgdmFsdWU6ICdpT1MgMTYnLCBuYW1lOiAnaU9TIDE2JyB9LFxuICAgICAgeyB2YWx1ZTogJ2lPUyAxNycsIG5hbWU6ICdpT1MgMTcnIH0sXG4gICAgICB7IHZhbHVlOiAnQW5kcm9pZCAxMycsIG5hbWU6ICdBbmRyb2lkIDEzJyB9LFxuICAgICAgeyB2YWx1ZTogJ0FuZHJvaWQgMTQnLCBuYW1lOiAnQW5kcm9pZCAxNCcgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRCcm93c2VyU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZGVmYXVsdEJyb3dzZXInLFxuICAgIGxhYmVsOiAnRGVmYXVsdCBCcm93c2VyJyxcbiAgICBwbGFjZWhvbGRlcjogJ0Nocm9tZScsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ0Nocm9tZScsIG5hbWU6ICdDaHJvbWUnIH0sXG4gICAgICB7IHZhbHVlOiAnRmlyZWZveCcsIG5hbWU6ICdGaXJlZm94JyB9LFxuICAgICAgeyB2YWx1ZTogJ1NhZmFyaScsIG5hbWU6ICdTYWZhcmknIH0sXG4gICAgICB7IHZhbHVlOiAnRWRnZScsIG5hbWU6ICdFZGdlJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgcHJpb3JpdHlTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdwcmlvcml0eScsXG4gICAgbGFiZWw6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnUHJpb3JpdHknLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdDcml0aWNhbCcsIG5hbWU6ICdDcml0aWNhbCcgfSxcbiAgICAgIHsgdmFsdWU6ICdNYWpvcicsIG5hbWU6ICdNYWpvcicgfSxcbiAgICAgIHsgdmFsdWU6ICdIaWdoJywgbmFtZTogJ0hpZ2gnIH0sXG4gICAgICB7IHZhbHVlOiAnTWVkaXVtJywgbmFtZTogJ01lZGl1bScgfSxcbiAgICAgIHsgdmFsdWU6ICdMb3cnLCBuYW1lOiAnTG93JyB9LFxuICAgICAgeyB2YWx1ZTogJ01pbm9yJywgbmFtZTogJ01pbm9yJyB9LFxuICAgICAgeyB2YWx1ZTogJ05vdCBzZXQnLCBuYW1lOiAnTm90IHNldCcgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGVuYWJsZUFpU21hcnRuZXNzU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZW5hYmxlQWlTbWFydG5lc3MnLFxuICAgIGxhYmVsOiAnRW5hYmxlIEFJIFNtYXJ0bmVzcycsXG4gICAgcGxhY2Vob2xkZXI6ICdBZHZhbmNlZCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ0Jhc2ljJywgbmFtZTogJ0Jhc2ljJyB9LFxuICAgICAgeyB2YWx1ZTogJ0FkdmFuY2VkJywgbmFtZTogJ0FkdmFuY2VkJyB9LFxuICAgICAgeyB2YWx1ZTogJ09mZicsIG5hbWU6ICdPZmYnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZWZhdWx0QWlBY3Rpb25TZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdkZWZhdWx0QWlBY3Rpb24nLFxuICAgIGxhYmVsOiAnRGVmYXVsdCBBSSBBY3Rpb24nLFxuICAgIHBsYWNlaG9sZGVyOiAnU21hcnQgd2FpdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ1NtYXJ0IHdhaXQnLCBuYW1lOiAnU21hcnQgd2FpdCcgfSxcbiAgICAgIHsgdmFsdWU6ICdTbWFydCBXYWl0JywgbmFtZTogJ1NtYXJ0IFdhaXQnIH0sXG4gICAgICB7IHZhbHVlOiAnV2FpdCBmb3IgZWxlbWVudCcsIG5hbWU6ICdXYWl0IGZvciBlbGVtZW50JyB9LFxuICAgICAgeyB2YWx1ZTogJ1JldHJ5JywgbmFtZTogJ1JldHJ5JyB9LFxuICAgICAgeyB2YWx1ZTogJ1NraXAnLCBuYW1lOiAnU2tpcCcgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2VTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyxcbiAgICBsYWJlbDogJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyxcbiAgICBwbGFjZWhvbGRlcjogJ05vbmUnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdub25lJywgbmFtZTogJ05vbmUnIH0sXG4gICAgXSxcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBtZXJnZWQgY29uZmlnIGZvciBhIHNlbGVjdDogYmFzZSBjb25maWcgKyBvdmVycmlkZS5cbiAgICogV2lyZXMgb25TZWFyY2gsIG9uTG9hZE1vcmUgdG8gYm90aCBvdmVycmlkZSBjYWxsYmFja3MgYW5kIG91dHB1dCBldmVudHMuXG4gICAqL1xuICBnZXRDb25maWdGb3JTZWxlY3Qoa2V5OiBzdHJpbmcsIGJhc2VDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uW2tleV07XG4gICAgaWYgKCFvdmVycmlkZSkgcmV0dXJuIGJhc2VDb25maWc7XG5cbiAgICBjb25zdCBtZXJnZWQ6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICAgIC4uLmJhc2VDb25maWcsXG4gICAgICAuLi5vdmVycmlkZSxcbiAgICAgIG9wdGlvbnM6IG92ZXJyaWRlLm9wdGlvbnMgPz8gYmFzZUNvbmZpZy5vcHRpb25zLFxuICAgICAga2V5OiBiYXNlQ29uZmlnLmtleSxcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJyaWRlLnNlcnZlclNlYXJjaCB8fCBvdmVycmlkZS5vblNlYXJjaCkge1xuICAgICAgbWVyZ2VkLm9uU2VhcmNoID0gKHF1ZXJ5KSA9PiB7XG4gICAgICAgIG92ZXJyaWRlLm9uU2VhcmNoPy4ocXVlcnkpO1xuICAgICAgICB0aGlzLnNlbGVjdFNlYXJjaC5lbWl0KHsga2V5LCBxdWVyeSB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChvdmVycmlkZS5oYXNNb3JlIHx8IG92ZXJyaWRlLm9uTG9hZE1vcmUpIHtcbiAgICAgIG1lcmdlZC5vbkxvYWRNb3JlID0gKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHEgPSBxdWVyeSA/PyAnJztcbiAgICAgICAgb3ZlcnJpZGUub25Mb2FkTW9yZT8uKHEpO1xuICAgICAgICB0aGlzLnNlbGVjdExvYWRNb3JlLmVtaXQoeyBrZXksIHF1ZXJ5OiBxIH0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgb25TZWxlY3RPcGVuZWQoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdE9wZW5lZC5lbWl0KHsga2V5IH0pO1xuICB9XG5cbiAgb25TZWxlY3RTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0U2VhcmNoLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LltldmVudC5rZXldO1xuICAgIG92ZXJyaWRlPy5vblNlYXJjaD8uKGV2ZW50LnF1ZXJ5KTtcbiAgfVxuXG4gIG9uU2VsZWN0TG9hZE1vcmUoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0TG9hZE1vcmUuZW1pdChldmVudCk7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uW2V2ZW50LmtleV07XG4gICAgb3ZlcnJpZGU/Lm9uTG9hZE1vcmU/LihldmVudC5xdWVyeSk7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09IFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscykge1xuICAgICAgY29uc3QgdmFsID0gZXZlbnQudmFsdWU7XG4gICAgICB0aGlzLmVkaXRMYWJlbHMgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwubWFwKCh2KSA9PiBTdHJpbmcodikpLmZpbHRlcihCb29sZWFuKSA6IHZhbCAhPSBudWxsID8gW1N0cmluZyh2YWwpXSA6IFtdO1xuICAgICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8vIE1hcmsgVGVzdCBEYXRhIHNlbGVjdHMgYXMgZGlydHkgc28gbGF0ZXIgaW5wdXQgY2hhbmdlcyAob3B0aW9ucy9jb25maWcpIGRvbid0IG92ZXJ3cml0ZSB1c2VyIGNob2ljZVxuICAgIGlmIChldmVudC5rZXkgPT09IFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLnRlc3REYXRhUHJvZmlsZSB8fCBldmVudC5rZXkgPT09IFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLnRlc3REYXRhU2V0KSB7XG4gICAgICBjb25zdCBjdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoZXZlbnQua2V5KTtcbiAgICAgIGN0cmw/Lm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyBrZXk6IGV2ZW50LmtleSwgdmFsdWU6IGV2ZW50LnZhbHVlIH0pO1xuICB9XG5cbiAgb25MYWJlbHNBZGRDdXN0b21WYWx1ZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgdiA9IChldmVudC52YWx1ZSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghdiB8fCB0aGlzLmVkaXRMYWJlbHMuaW5jbHVkZXModikpIHJldHVybjtcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSBbLi4udGhpcy5lZGl0TGFiZWxzLCB2XTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5lZGl0Rm9ybS5nZXQoVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMubGFiZWxzKT8uc2V0VmFsdWUodGhpcy5lZGl0TGFiZWxzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5sYWJlbEFkZGVkLmVtaXQodik7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbmZpZ0l0ZW1WYWx1ZShzZWN0aW9uVGl0bGU6IHN0cmluZywgaXRlbUxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBbLi4udGhpcy5jb25maWdTZWN0aW9ucywgLi4udGhpcy5jb25maWdTZWN0aW9uc1JvdzJdLmZpbmQoXG4gICAgICAocykgPT5cbiAgICAgICAgcy50aXRsZSA9PT0gc2VjdGlvblRpdGxlIHx8XG4gICAgICAgIHMudGl0bGU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VjdGlvblRpdGxlLnRvTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgICBjb25zdCBpdGVtID0gc2VjdGlvbj8uaXRlbXM/LmZpbmQoXG4gICAgICAoaSkgPT5cbiAgICAgICAgaS5sYWJlbCA9PT0gaXRlbUxhYmVsIHx8XG4gICAgICAgIGkubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaXRlbUxhYmVsLnRvTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgICByZXR1cm4gKGl0ZW0/LnZhbHVlIGFzIHN0cmluZykgPz8gJyc7XG4gIH1cblxuICAvKiogR2V0IHZhbHVlIGZyb20gRGV2aWNlIHNlY3Rpb24gLSBzdXBwb3J0cyBib3RoICdEZXZpY2UnIGFuZCAnRGV2aWNlIFNldHRpbmcnIHRpdGxlcyAqL1xuICBwcml2YXRlIGdldERldmljZUNvbmZpZ1ZhbHVlKGl0ZW1MYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWwgPVxuICAgICAgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0RldmljZScsIGl0ZW1MYWJlbCkgfHxcbiAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UgU2V0dGluZycsIGl0ZW1MYWJlbCk7XG4gICAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycgJiYgU3RyaW5nKHZhbCkudHJpbSgpICE9PSAnJyA/IFN0cmluZyh2YWwpIDogJyc7XG4gIH1cblxuICAvKiogR2V0IHZhbHVlIGZyb20gV2FpdHMgc2VjdGlvbiAtIHN1cHBvcnRzIGJvdGggJ1dhaXQgYW5kIHJldHJpZXMnIGFuZCAnV2FpdHMgJiBSZXRyaWVzJyB0aXRsZXMgKi9cbiAgcHJpdmF0ZSBnZXRXYWl0c1JldHJpZXNWYWx1ZShpdGVtTGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdjEgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnV2FpdCBhbmQgcmV0cmllcycsIGl0ZW1MYWJlbCk7XG4gICAgY29uc3QgdjIgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnV2FpdHMgJiBSZXRyaWVzJywgaXRlbUxhYmVsKTtcbiAgICBsZXQgdmFsID0gKHYxICE9PSAnJyAmJiB2MSAhPSBudWxsKSA/IHYxIDogdjI7XG5cbiAgICAvLyBXaGVuIHZhbHVlcyBhcmUgY29taW5nIGZyb20gb3JnYW5pemF0aW9uIHNldHRpbmdzLCB0aGUgcG9ydGFsIHdyYXBzIHRoZW0gYXNcbiAgICAvLyBcIk9yZyBMZXZlbCAoQUNUVUFMIFZBTFVFKVwiLiBGb3IgZWRpdCBpbnB1dHMgKFJldHJ5IEZhaWxlZCBTdGVwcywgVGVzdCBDYXNlIFRpbWVvdXQsXG4gICAgLy8gV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyksIHdlIG9ubHkgd2FudCB0byBzaG93IHRoZSBpbm5lciB2YWx1ZSwgbm90IHRoZSB3cmFwcGVyLlxuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcmF3ID0gU3RyaW5nKHZhbCkudHJpbSgpO1xuICAgICAgY29uc3QgbG93ZXIgPSByYXcudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdvcmcgbGV2ZWwgKCc7XG4gICAgICBpZiAobG93ZXIuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIGNvbnN0IG9wZW5JZHggPSByYXcuaW5kZXhPZignKCcpO1xuICAgICAgICBjb25zdCBjbG9zZUlkeCA9IHJhdy5sYXN0SW5kZXhPZignKScpO1xuICAgICAgICBpZiAob3BlbklkeCA+PSAwICYmIGNsb3NlSWR4ID4gb3BlbklkeCkge1xuICAgICAgICAgIHZhbCA9IHJhdy5zdWJzdHJpbmcob3BlbklkeCArIDEsIGNsb3NlSWR4KS50cmltKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gcmF3LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsICE9IG51bGwgJiYgdmFsICE9PSAnJyAmJiBTdHJpbmcodmFsKS50cmltKCkgIT09ICcnID8gU3RyaW5nKHZhbCkgOiAnJztcbiAgfVxuXG4gIC8qKiBTdHJpcCB0cmFpbGluZyAncycgZnJvbSB2YWx1ZSAoZS5nLiBcIjEwc1wiIC0+IFwiMTBcIikgZm9yIGRpc3BsYXkgaW4gdGltZW91dCBpbnB1dHMgKi9cbiAgcHJpdmF0ZSBzdHJpcFRyYWlsaW5nVW5pdFModmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgPT09ICcnKSByZXR1cm4gdmFsO1xuICAgIGNvbnN0IHMgPSBTdHJpbmcodmFsKS50cmltKCk7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXFxzKnMkL2ksICcnKTtcbiAgfVxuXG4gIC8qKiBBbGxvdyBvbmx5IGRpZ2l0czsgdXNlZCBmb3IgUmV0cnkgRmFpbGVkIFN0ZXBzLCBUZXN0IENhc2UgVGltZW91dCwgV2FpdCBUaW1lb3V0IGlucHV0cyAqL1xuICBvbmx5RGlnaXRzKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSAnJykgcmV0dXJuICcnO1xuICAgIHJldHVybiBTdHJpbmcodmFsKS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICB9XG5cbiAgLyoqIEZvciB1cGRhdGU6IHVzZSBcIjBcIiB3aGVuIHZhbHVlIGlzIGVtcHR5IHNvIEFQSSBnZXRzIGEgbnVtYmVyICovXG4gIHByaXZhdGUgZW1wdHlOdW1Ub1plcm8odmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh2YWwgPT0gbnVsbCB8fCBTdHJpbmcodmFsKS50cmltKCkgPT09ICcnKSByZXR1cm4gJzAnO1xuICAgIHJldHVybiBTdHJpbmcodmFsKS50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFByZXJlcXVpc2l0ZUNhc2VzRnJvbUNvbmZpZygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdQcmVyZXF1aXNpdGUgQ2FzZScpO1xuICAgIGlmICghdmFsKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHZhbC5pbmNsdWRlcygnLCcpID8gdmFsLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW3ZhbF07XG4gIH1cblxuICAvKiogRWRpdCBtb2RlIHNob3VsZCBzaG93IHBsYWNlaG9sZGVyIHdoZW4gZGF0YXNldCBpcyBub3Qgc2VsZWN0ZWQuICovXG4gIHByaXZhdGUgbm9ybWFsaXplVGVzdERhdGFTZXRSYXdWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSAnbm90IHNldCcgPyAnJyA6IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGhhc1ByZXJlcXVpc2l0ZUNhc2VDb25maWcoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VjdGlvbiA9IFsuLi50aGlzLmNvbmZpZ1NlY3Rpb25zLCAuLi50aGlzLmNvbmZpZ1NlY3Rpb25zUm93Ml0uZmluZChcbiAgICAgIChzKSA9PiBzLnRpdGxlID09PSAnRXhlY3V0aW9uJ1xuICAgICk7XG4gICAgcmV0dXJuICEhc2VjdGlvbj8uaXRlbXM/LnNvbWUoKGkpID0+IGkubGFiZWwgPT09ICdQcmVyZXF1aXNpdGUgQ2FzZScpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0RGVzY3JpcHRpb24gPSB0aGlzLmRlc2NyaXB0aW9uQ29udGVudDtcbiAgICB0aGlzLmVkaXRTdGF0dXMgPSB0aGlzLnN0YXR1c0l0ZW0/LnZhbHVlID8/ICcnO1xuICAgIHRoaXMuZWRpdFByaW9yaXR5ID0gdGhpcy5wcmlvcml0eUl0ZW0/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHR5cGVSYXcgPSAodGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUeXBlJykgfHwgKHRoaXMudHlwZUl0ZW0/LnZhbHVlIGFzIHN0cmluZykpID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVGVzdCBEYXRhIFByb2ZpbGUnKSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVNldFJhdyA9IHRoaXMubm9ybWFsaXplVGVzdERhdGFTZXRSYXdWYWx1ZShcbiAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVGVzdCBEYXRhIFNldCcpID8/ICcnXG4gICAgKTtcbiAgICBjb25zdCB0eXBlVmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0eXBlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0eXBlJ10/Lm9wdGlvbnMpID8/IHR5cGVSYXc7XG4gICAgY29uc3QgdGVzdERhdGFQcm9maWxlVmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVByb2ZpbGVSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3Rlc3REYXRhUHJvZmlsZSddPy5vcHRpb25zKSA/PyB0ZXN0RGF0YVByb2ZpbGVSYXc7XG4gICAgY29uc3QgdGVzdERhdGFTZXRWYWwgPSB0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHRlc3REYXRhU2V0UmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVNldCddPy5vcHRpb25zKSA/PyB0ZXN0RGF0YVNldFJhdztcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSBbLi4udGhpcy5sYWJlbHNdO1xuICAgIGNvbnN0IGF1dG9XYWl0VmFsID0gdGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnRW5hYmxlIEF2b2lkIEF1dG8gd2FpdCBmb3Igc3RlcHMnKSB8fCB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnV2FpdHMgJiBSZXRyaWVzJywgJ0F1dG8gV2FpdCcpO1xuICAgIHRoaXMuYXV0b1dhaXRFbmFibGVkID0gISEoYXV0b1dhaXRWYWwgJiYgYXV0b1dhaXRWYWwudHJpbSgpICE9PSAnJyAmJiBTdHJpbmcoYXV0b1dhaXRWYWwpICE9PSAnZmFsc2UnKTtcbiAgICB0aGlzLnJldHJ5RmFpbGVkU3RlcHMgPSB0aGlzLmdldFdhaXRzUmV0cmllc1ZhbHVlKCdSZXRyeSBGYWlsZWQgU3RlcHMnKTtcbiAgICB0aGlzLnRlc3RDYXNlVGltZW91dCA9IHRoaXMuc3RyaXBUcmFpbGluZ1VuaXRTKHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpKTtcbiAgICB0aGlzLndhaXRUaW1lb3V0TG9jYXRvcnMgPSB0aGlzLnN0cmlwVHJhaWxpbmdVbml0Uyh0aGlzLmdldFdhaXRzUmV0cmllc1ZhbHVlKCdXYWl0IFRpbWVvdXQgZm9yIExvY2F0b3JzIChzZWNzKScpKTtcbiAgICB0aGlzLm1vYmlsZVRlc3RpbmdFbmFibGVkID0gISF0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnS2V5IEZsYWdzJywgJ01vYmlsZSBUZXN0aW5nJyk7XG4gICAgdGhpcy5leHRlbnNpb25Vc2VFbmFibGVkID0gISF0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnS2V5IEZsYWdzJywgJ0V4dGVuc2lvbiBVc2UnKTtcbiAgICB0aGlzLmRhdGFEcml2ZW5FbmFibGVkID0gISF0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnS2V5IEZsYWdzJywgJ0RhdGEgRHJpdmVuJyk7XG4gICAgY29uc3QgZW5hYmxlQWlTbWFydG5lc3MgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdFbmFibGUgQUkgU21hcnRuZXNzJyk7XG4gICAgY29uc3QgZGVmYXVsdEFpQWN0aW9uID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRGVmYXVsdCBBSSBBY3Rpb24nKTtcbiAgICBjb25zdCBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnS25vd2xlZGdlIEJhc2UgRGVmYXVsdCBUZXN0IENhc2UnKTtcbiAgICBjb25zdCB1c2VBaU1ldGFkYXRhUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCB1c2VBaU1ldGFkYXRhID0gdGhpcy5ub3JtYWxpemVCb29sZWFuU2VsZWN0VmFsdWUodXNlQWlNZXRhZGF0YVJhdyk7XG4gICAgY29uc3QgcHJlcmVxdWlzaXRlQ2FzZXMgPSB0aGlzLmdldFByZXJlcXVpc2l0ZUNhc2VzRnJvbUNvbmZpZygpO1xuICAgIGNvbnN0IGRlZmF1bHRCcm93c2VyID1cbiAgICAgIHRoaXMucGxhdGZvcm0gPT09ICd3ZWInXG4gICAgICAgID8gdGhpcy5nZXREZXZpY2VDb25maWdWYWx1ZSgnRGVmYXVsdCBCcm93c2VyJykgfHwgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdEZWZhdWx0IEJyb3dzZXInKVxuICAgICAgICA6IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnRGVmYXVsdCBCcm93c2VyJyk7XG4gICAgY29uc3QgdmlkZW9SZWNvcmRpbmdSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1ZpZGVvIFJlY29yZGluZycpO1xuICAgIGNvbnN0IHZpZGVvUmVjb3JkaW5nID0gdGhpcy5ub3JtYWxpemVCb29sZWFuU2VsZWN0VmFsdWUodmlkZW9SZWNvcmRpbmdSYXcgYXMgc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZGVmYXVsdFZpZXdwb3J0ID0gdGhpcy5nZXREZXZpY2VDb25maWdWYWx1ZSgnRGVmYXVsdCBWaWV3cG9ydCcpIHx8IHRoaXMuZ2V0RGV2aWNlQ29uZmlnVmFsdWUoJ1ZpZXdwb3J0JykgfHwgJyc7XG4gICAgY29uc3QgZGV2aWNlVHlwZSA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UnLCAnVHlwZScpO1xuICAgIGNvbnN0IGRldmljZU9TID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0RldmljZScsICdPUycpO1xuICAgIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXRGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgc3RhdHVzOiB0aGlzLmVkaXRTdGF0dXMsXG4gICAgICBwcmlvcml0eTogdGhpcy5lZGl0UHJpb3JpdHksXG4gICAgICB0eXBlOiB0eXBlVmFsIHx8ICcnLFxuICAgICAgbGFiZWxzOiB0aGlzLmVkaXRMYWJlbHMsXG4gICAgICB0ZXN0RGF0YVByb2ZpbGU6IHRlc3REYXRhUHJvZmlsZVZhbCB8fCAnJyxcbiAgICAgIHRlc3REYXRhU2V0OiB0ZXN0RGF0YVNldFZhbCA/PyAnJyxcbiAgICAgIHByZXJlcXVpc2l0ZUNhc2VzLFxuICAgICAgZGVmYXVsdEJyb3dzZXI6IGRlZmF1bHRCcm93c2VyIHx8ICdDaHJvbWUnLFxuICAgICAgdmlkZW9SZWNvcmRpbmc6IHZpZGVvUmVjb3JkaW5nIHx8ICcnLFxuICAgICAgZGVmYXVsdFZpZXdwb3J0OiBkZWZhdWx0Vmlld3BvcnQgfHwgJycsXG4gICAgICBkZXZpY2VUeXBlOiBkZXZpY2VUeXBlIHx8ICcnLFxuICAgICAgZGV2aWNlT1M6IGRldmljZU9TIHx8ICcnLFxuICAgICAgZW5hYmxlQWlTbWFydG5lc3M6IGVuYWJsZUFpU21hcnRuZXNzIHx8ICdBZHZhbmNlZCcsXG4gICAgICBkZWZhdWx0QWlBY3Rpb246IGRlZmF1bHRBaUFjdGlvbiB8fCAnU21hcnQgd2FpdCcsXG4gICAgICBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlOiBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlIHx8ICdub25lJyxcbiAgICAgIHVzZUFpTWV0YWRhdGE6IHVzZUFpTWV0YWRhdGEgfHwgJycsXG4gICAgfSk7XG4gICAgdGhpcy5faW5pdGlhbEZvcm1TbmFwc2hvdCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRTYXZlUGF5bG9hZCgpKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCBoYXNVbnNhdmVkQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5faW5pdGlhbEZvcm1TbmFwc2hvdCA9PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmJ1aWxkU2F2ZVBheWxvYWQoKSkgIT09IHRoaXMuX2luaXRpYWxGb3JtU25hcHNob3Q7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2F2ZVBheWxvYWQoKTogVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmVkaXRGb3JtLmdldCgnc3RhdHVzJyk/LnZhbHVlID8/IHRoaXMuZWRpdFN0YXR1cztcbiAgICBjb25zdCBwcmlvcml0eSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdwcmlvcml0eScpPy52YWx1ZSA/PyB0aGlzLmVkaXRQcmlvcml0eTtcbiAgICBjb25zdCB0eXBlVmFsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgdGVzdERhdGFQcm9maWxlVmFsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhUHJvZmlsZScpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVNldFZhbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVNldCcpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCBjb25maWdTZWN0aW9uc01lcmdlZCA9IHRoaXMubWVyZ2VDb25maWdTZWN0aW9ucygpO1xuICAgIGNvbnN0IGNvbmZpZ1NlY3Rpb25zUm93Mk1lcmdlZCA9IHRoaXMubWVyZ2VDb25maWdTZWN0aW9uc1JvdzIoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzY3JpcHRpb25Db250ZW50OiB0aGlzLmVkaXREZXNjcmlwdGlvbixcbiAgICAgIHN0YXR1cyxcbiAgICAgIHByaW9yaXR5LFxuICAgICAgdHlwZTogdHlwZVZhbCxcbiAgICAgIGxhYmVsczogdGhpcy5lZGl0TGFiZWxzLFxuICAgICAgdGVzdERhdGFQcm9maWxlSWQ6IHRlc3REYXRhUHJvZmlsZVZhbCB8fCBudWxsLFxuICAgICAgdGVzdERhdGFTZXRJbmRleDogdGVzdERhdGFTZXRWYWwgPz8gbnVsbCxcbiAgICAgIGNvbmZpZ1NlY3Rpb25zOiBjb25maWdTZWN0aW9uc01lcmdlZCxcbiAgICAgIGNvbmZpZ1NlY3Rpb25zUm93MjogY29uZmlnU2VjdGlvbnNSb3cyTWVyZ2VkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUb09wdGlvblZhbHVlKFxuICAgIGNvbmZpZ1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gfCB1bmRlZmluZWRcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY29uZmlnVmFsdWUgPT0gbnVsbCB8fCBjb25maWdWYWx1ZSA9PT0gJycpIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICBjb25zdCBvcHRzID0gb3B0aW9ucyA/PyBbXTtcbiAgICBpZiAoIW9wdHMubGVuZ3RoKSByZXR1cm4gY29uZmlnVmFsdWU7XG4gICAgY29uc3QgbnVtID0gdHlwZW9mIGNvbmZpZ1ZhbHVlID09PSAnbnVtYmVyJyA/IGNvbmZpZ1ZhbHVlIDogTnVtYmVyKGNvbmZpZ1ZhbHVlKTtcbiAgICBjb25zdCBpc051bWVyaWMgPSAhTnVtYmVyLmlzTmFOKG51bSkgJiYgU3RyaW5nKGNvbmZpZ1ZhbHVlKS50cmltKCkgPT09IFN0cmluZyhudW0pO1xuICAgIGlmIChpc051bWVyaWMpIHtcbiAgICAgIC8vIElmIG9wdGlvbnMgdXNlIG51bWVyaWMgdmFsdWVzIChlLmcuIGluZGljZXMgZm9yIFRlc3QgRGF0YSBTZXQpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1lcmljIGZvcm0gc28gdGhlIHNlbGVjdCBjYW4gbWF0Y2ggYnkgc3RyaWN0IGVxdWFsaXR5LlxuICAgICAgY29uc3QgaGFzTnVtZXJpY09wdGlvbiA9IG9wdHMuc29tZShcbiAgICAgICAgKG8pID0+IHR5cGVvZiBvLnZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgKG8gYXMgYW55KS5pZCA9PT0gJ251bWJlcidcbiAgICAgICk7XG4gICAgICByZXR1cm4gaGFzTnVtZXJpY09wdGlvbiA/IG51bSA6IGNvbmZpZ1ZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoY29uZmlnVmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1hdGNoID0gb3B0cy5maW5kKChvKSA9PiB7XG4gICAgICBjb25zdCBuID0gU3RyaW5nKG8ubmFtZSA/PyBvLmxhYmVsID8/IG8udmFsdWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG4gPT09IHN0cjtcbiAgICB9KTtcbiAgICByZXR1cm4gbWF0Y2ggIT0gbnVsbCA/IChtYXRjaC52YWx1ZSA/PyAobWF0Y2ggYXMgYW55KS5pZCA/PyBtYXRjaCkgOiBjb25maWdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQm9vbGVhblNlbGVjdFZhbHVlKHZhbDogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09ICd0cnVlJykgcmV0dXJuICd0cnVlJztcbiAgICBpZiAodmFsID09PSBmYWxzZSB8fCB2YWwgPT09ICdmYWxzZScpIHJldHVybiAnZmFsc2UnO1xuICAgIGlmIChcbiAgICAgIHZhbCA9PT0gJ09yZyBsZXZlbCcgfHxcbiAgICAgIHZhbCA9PT0gJ09yZyBMZXZlbCcgfHxcbiAgICAgICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnb3JnIGxldmVsICgnKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAnT3JnIGxldmVsJztcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gJ09uIFdhaXQnIHx8IHZhbCA9PT0gJ29uIHdhaXQnKSByZXR1cm4gJ3RydWUnO1xuICAgIHJldHVybiB2YWwgJiYgU3RyaW5nKHZhbCkudHJpbSgpID8gU3RyaW5nKHZhbCkgOiAnJztcbiAgfVxuXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydsYWJlbHMnXSB8fCBjaGFuZ2VzWydzZWxlY3RDb25maWdPdmVycmlkZXMnXSkge1xuICAgICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgICAgaWYgKGNoYW5nZXNbJ3NlbGVjdENvbmZpZ092ZXJyaWRlcyddICYmIHRoaXMuZWRpdEZvcm0/LmdldCgndHlwZScpKSB7XG4gICAgICAgIGNvbnN0IHR5cGVDdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgY29uc3QgdGRwQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVByb2ZpbGUnKTtcbiAgICAgICAgY29uc3QgdGRzQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVNldCcpO1xuICAgICAgICBjb25zdCBlbmFibGVBaUN0cmwgPSB0aGlzLmVkaXRGb3JtLmdldCgnZW5hYmxlQWlTbWFydG5lc3MnKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFpQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZWZhdWx0QWlBY3Rpb24nKTtcbiAgICAgICAgY29uc3QgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xuICAgICAgICBpZiAodHlwZUN0cmwgJiYgIXR5cGVDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3QgdHlwZVJhdyA9ICh0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1R5cGUnKSB8fCAodGhpcy50eXBlSXRlbT8udmFsdWUgYXMgc3RyaW5nKSkgPz8gJyc7XG4gICAgICAgICAgcGF0Y2hbJ3R5cGUnXSA9ICh0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHR5cGVSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3R5cGUnXT8ub3B0aW9ucykgPz8gdHlwZVJhdykgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIFRlc3QgRGF0YSBQcm9maWxlIC8gU2V0LCBhbGxvdyBvbmUtdGltZSByZS1yZXNvbHZlIGZyb20gY29uZmlnIHdoZW4gb3B0aW9ucyBhcnJpdmUsXG4gICAgICAgIC8vIGJ1dCBuZXZlciBvdmVyd3JpdGUgYSB1c2VyLWVkaXRlZCAoZGlydHkpIHZhbHVlLlxuICAgICAgICBpZiAodGRwQ3RybCAmJiAhdGRwQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVGVzdCBEYXRhIFByb2ZpbGUnKSA/PyAnJztcbiAgICAgICAgICBwYXRjaFsndGVzdERhdGFQcm9maWxlJ10gPVxuICAgICAgICAgICAgKHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFQcm9maWxlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVByb2ZpbGUnXT8ub3B0aW9ucykgPz9cbiAgICAgICAgICAgICAgdGVzdERhdGFQcm9maWxlUmF3KSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGRzQ3RybCAmJiAhdGRzQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IHRlc3REYXRhU2V0UmF3ID0gdGhpcy5ub3JtYWxpemVUZXN0RGF0YVNldFJhd1ZhbHVlKFxuICAgICAgICAgICAgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUZXN0IERhdGEgU2V0JykgPz8gJydcbiAgICAgICAgICApO1xuICAgICAgICAgIHBhdGNoWyd0ZXN0RGF0YVNldCddID1cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFTZXRSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3Rlc3REYXRhU2V0J10/Lm9wdGlvbnMpID8/XG4gICAgICAgICAgICB0ZXN0RGF0YVNldFJhdyA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZS1yZXNvbHZlIEFJIGZpZWxkcyB3aGVuIHRoZWlyIG9wdGlvbnMgYXJyaXZlICh0aGV5IHVzZSBkaXNwbGF5IG5hbWVzIGFzIHZhbHVlcykuXG4gICAgICAgIGlmIChlbmFibGVBaUN0cmwgJiYgIWVuYWJsZUFpQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGFpU21hcnRuZXNzUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgICAgICAgIGlmIChhaVNtYXJ0bmVzc1JhdykgcGF0Y2hbJ2VuYWJsZUFpU21hcnRuZXNzJ10gPSBhaVNtYXJ0bmVzc1JhdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmYXVsdEFpQ3RybCAmJiAhZGVmYXVsdEFpQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRBaVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0RlZmF1bHQgQUkgQWN0aW9uJyk7XG4gICAgICAgICAgaWYgKGRlZmF1bHRBaVJhdykgcGF0Y2hbJ2RlZmF1bHRBaUFjdGlvbiddID0gZGVmYXVsdEFpUmF3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5lZGl0Rm9ybS5wYXRjaFZhbHVlKHBhdGNoLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2Rlc2NyaXB0aW9uQ29udGVudCddIHx8IGNoYW5nZXNbJ2xhYmVscyddIHx8IGNoYW5nZXNbJ21ldGFkYXRhSXRlbXMnXSkge1xuICAgICAgdGhpcy5lZGl0RGVzY3JpcHRpb24gPSB0aGlzLmRlc2NyaXB0aW9uQ29udGVudDtcbiAgICAgIHRoaXMuZWRpdExhYmVscyA9IFsuLi50aGlzLmxhYmVsc107XG4gICAgICB0aGlzLmVkaXRTdGF0dXMgPSB0aGlzLnN0YXR1c0l0ZW0/LnZhbHVlID8/ICcnO1xuICAgICAgdGhpcy5lZGl0UHJpb3JpdHkgPSB0aGlzLnByaW9yaXR5SXRlbT8udmFsdWUgPz8gJyc7XG4gICAgICBjb25zdCB0eXBlVmFsID0gKHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVHlwZScpIHx8ICh0aGlzLnR5cGVJdGVtPy52YWx1ZSBhcyBzdHJpbmcpKSA/PyAnJztcbiAgICAgIGNvbnN0IHN0YXR1c0NvbnRyb2wgPSB0aGlzLmVkaXRGb3JtLmdldCgnc3RhdHVzJyk7XG4gICAgICBjb25zdCBwcmlvcml0eUNvbnRyb2wgPSB0aGlzLmVkaXRGb3JtLmdldCgncHJpb3JpdHknKTtcbiAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3R5cGUnKTtcbiAgICAgIGNvbnN0IGxhYmVsc0NvbnRyb2wgPSB0aGlzLmVkaXRGb3JtLmdldChURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpO1xuICAgICAgY29uc3QgcHJlc2VydmVTdGF0dXMgPSBzdGF0dXNDb250cm9sPy50b3VjaGVkIHx8IHN0YXR1c0NvbnRyb2w/LmRpcnR5O1xuICAgICAgY29uc3QgcHJlc2VydmVQcmlvcml0eSA9IHByaW9yaXR5Q29udHJvbD8udG91Y2hlZCB8fCBwcmlvcml0eUNvbnRyb2w/LmRpcnR5O1xuICAgICAgY29uc3QgcHJlc2VydmVUeXBlID0gdHlwZUNvbnRyb2w/LnRvdWNoZWQgfHwgdHlwZUNvbnRyb2w/LmRpcnR5O1xuICAgICAgY29uc3QgcHJlc2VydmVMYWJlbHMgPSBsYWJlbHNDb250cm9sPy50b3VjaGVkIHx8IGxhYmVsc0NvbnRyb2w/LmRpcnR5O1xuICAgICAgdGhpcy5lZGl0Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgLi4uKHByZXNlcnZlU3RhdHVzID8ge30gOiB7IHN0YXR1czogdGhpcy5lZGl0U3RhdHVzIH0pLFxuICAgICAgICAuLi4ocHJlc2VydmVQcmlvcml0eSA/IHt9IDogeyBwcmlvcml0eTogdGhpcy5lZGl0UHJpb3JpdHkgfSksXG4gICAgICAgIC4uLihwcmVzZXJ2ZVR5cGUgPyB7fSA6IHsgdHlwZTogdHlwZVZhbCB9KSxcbiAgICAgICAgLi4uKHByZXNlcnZlTGFiZWxzID8ge30gOiB7IGxhYmVsczogdGhpcy5lZGl0TGFiZWxzIH0pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydwcmVyZXF1aXNpdGVDYXNlT3B0aW9ucyddICYmIHRoaXMucHJlcmVxdWlzaXRlQ2FzZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnByZXJlcXVpc2l0ZUNhc2VTZWxlY3RDb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMucHJlcmVxdWlzaXRlQ2FzZVNlbGVjdENvbmZpZyxcbiAgICAgICAgb3B0aW9uczogdGhpcy5wcmVyZXF1aXNpdGVDYXNlT3B0aW9ucyxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb25maWdTZWN0aW9ucyddIHx8IGNoYW5nZXNbJ2NvbmZpZ1NlY3Rpb25zUm93MiddKSB7XG4gICAgICBjb25zdCBlbmFibGVBaVNtYXJ0bmVzcyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0VuYWJsZSBBSSBTbWFydG5lc3MnKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRBaUFjdGlvbiA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0RlZmF1bHQgQUkgQWN0aW9uJyk7XG4gICAgICBjb25zdCBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnS25vd2xlZGdlIEJhc2UgRGVmYXVsdCBUZXN0IENhc2UnKTtcbiAgICAgIGNvbnN0IHByZXJlcXVpc2l0ZUNhc2VzID0gdGhpcy5nZXRQcmVyZXF1aXNpdGVDYXNlc0Zyb21Db25maWcoKTtcbiAgICAgIGNvbnN0IHR5cGVSYXcgPSAodGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUeXBlJykgfHwgKHRoaXMudHlwZUl0ZW0/LnZhbHVlIGFzIHN0cmluZykpID8/ICcnO1xuICAgICAgY29uc3QgdGVzdERhdGFQcm9maWxlUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUZXN0IERhdGEgUHJvZmlsZScpID8/ICcnO1xuICAgICAgY29uc3QgdGVzdERhdGFTZXRSYXcgPSB0aGlzLm5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUoXG4gICAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVGVzdCBEYXRhIFNldCcpID8/ICcnXG4gICAgICApO1xuICAgICAgY29uc3QgdHlwZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodHlwZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndHlwZSddPy5vcHRpb25zKSA/PyB0eXBlUmF3O1xuICAgICAgY29uc3QgdGVzdERhdGFQcm9maWxlVmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVByb2ZpbGVSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3Rlc3REYXRhUHJvZmlsZSddPy5vcHRpb25zKSA/PyB0ZXN0RGF0YVByb2ZpbGVSYXc7XG4gICAgICBjb25zdCB0ZXN0RGF0YVNldFZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFTZXRSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3Rlc3REYXRhU2V0J10/Lm9wdGlvbnMpID8/IHRlc3REYXRhU2V0UmF3O1xuICAgICAgY29uc3QgZGVmYXVsdEJyb3dzZXIgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ0RlZmF1bHQgQnJvd3NlcicpO1xuICAgICAgY29uc3QgdmlkZW9SZWNvcmRpbmdSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1ZpZGVvIFJlY29yZGluZycpO1xuICAgICAgY29uc3QgdmlkZW9SZWNvcmRpbmcgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh2aWRlb1JlY29yZGluZ1JhdyBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHVzZUFpTWV0YWRhdGFSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdFbmFibGUgQUkgbWV0YWRhdGEgY29sbGVjdGlvbicpO1xuICAgICAgY29uc3QgdXNlQWlNZXRhZGF0YSA9IHRoaXMubm9ybWFsaXplQm9vbGVhblNlbGVjdFZhbHVlKHVzZUFpTWV0YWRhdGFSYXcgYXMgc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBkZWZhdWx0Vmlld3BvcnQgPSB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdEZWZhdWx0IFZpZXdwb3J0JykgfHwgdGhpcy5nZXREZXZpY2VDb25maWdWYWx1ZSgnVmlld3BvcnQnKSB8fCAnJztcbiAgICAgIGNvbnN0IGRldmljZVR5cGUgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlJywgJ1R5cGUnKTtcbiAgICAgIGNvbnN0IGRldmljZU9TID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0RldmljZScsICdPUycpO1xuICAgICAgY29uc3QgYXV0b1dhaXRWYWwgPSB0aGlzLmdldFdhaXRzUmV0cmllc1ZhbHVlKCdFbmFibGUgQXZvaWQgQXV0byB3YWl0IGZvciBzdGVwcycpIHx8IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdXYWl0cyAmIFJldHJpZXMnLCAnQXV0byBXYWl0Jyk7XG4gICAgICB0aGlzLmF1dG9XYWl0RW5hYmxlZCA9ICEhKGF1dG9XYWl0VmFsICYmIGF1dG9XYWl0VmFsLnRyaW0oKSAhPT0gJycgJiYgU3RyaW5nKGF1dG9XYWl0VmFsKSAhPT0gJ2ZhbHNlJyk7XG4gICAgICB0aGlzLnJldHJ5RmFpbGVkU3RlcHMgPSB0aGlzLmdldFdhaXRzUmV0cmllc1ZhbHVlKCdSZXRyeSBGYWlsZWQgU3RlcHMnKTtcbiAgICAgIHRoaXMudGVzdENhc2VUaW1lb3V0ID0gdGhpcy5zdHJpcFRyYWlsaW5nVW5pdFModGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnVGVzdCBDYXNlIFRpbWVvdXQgKG1pbnV0ZXMpJykpO1xuICAgICAgdGhpcy53YWl0VGltZW91dExvY2F0b3JzID0gdGhpcy5zdHJpcFRyYWlsaW5nVW5pdFModGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknKSk7XG4gICAgICB0aGlzLm1vYmlsZVRlc3RpbmdFbmFibGVkID0gISF0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnS2V5IEZsYWdzJywgJ01vYmlsZSBUZXN0aW5nJyk7XG4gICAgICB0aGlzLmV4dGVuc2lvblVzZUVuYWJsZWQgPSAhIXRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdLZXkgRmxhZ3MnLCAnRXh0ZW5zaW9uIFVzZScpO1xuICAgICAgdGhpcy5kYXRhRHJpdmVuRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdEYXRhIERyaXZlbicpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBjb25zdCBwYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgIGlmIChlbmFibGVBaVNtYXJ0bmVzcykgcGF0Y2hbJ2VuYWJsZUFpU21hcnRuZXNzJ10gPSBlbmFibGVBaVNtYXJ0bmVzcztcbiAgICAgIGlmIChkZWZhdWx0QWlBY3Rpb24pIHBhdGNoWydkZWZhdWx0QWlBY3Rpb24nXSA9IGRlZmF1bHRBaUFjdGlvbjtcbiAgICAgIGlmIChrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlKSBwYXRjaFsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddID0ga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZTtcbiAgICAgIGlmICh1c2VBaU1ldGFkYXRhKSBwYXRjaFsndXNlQWlNZXRhZGF0YSddID0gdXNlQWlNZXRhZGF0YTtcbiAgICAgIGlmIChwcmVyZXF1aXNpdGVDYXNlcy5sZW5ndGgpIHBhdGNoWydwcmVyZXF1aXNpdGVDYXNlcyddID0gcHJlcmVxdWlzaXRlQ2FzZXM7XG4gICAgICBpZiAodHlwZVZhbCkgcGF0Y2hbJ3R5cGUnXSA9IHR5cGVWYWw7XG5cbiAgICAgIC8vIFJlLXN5bmMgVGVzdCBEYXRhIFByb2ZpbGUgLyBTZXQgZnJvbSBjb25maWcgb25seSB3aGVuIGNvbnRyb2xzIGFyZSBOT1QgZGlydHlcbiAgICAgIGNvbnN0IHRkcEN0cmwyID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhUHJvZmlsZScpO1xuICAgICAgY29uc3QgdGRzQ3RybDIgPSB0aGlzLmVkaXRGb3JtLmdldCgndGVzdERhdGFTZXQnKTtcbiAgICAgIGNvbnN0IHByZXNlcnZlVGRwMiA9IHRkcEN0cmwyPy5kaXJ0eTtcbiAgICAgIGNvbnN0IHByZXNlcnZlVGRzMiA9IHRkc0N0cmwyPy5kaXJ0eTtcblxuICAgICAgaWYgKHRlc3REYXRhUHJvZmlsZVZhbCAmJiAhcHJlc2VydmVUZHAyKSBwYXRjaFsndGVzdERhdGFQcm9maWxlJ10gPSB0ZXN0RGF0YVByb2ZpbGVWYWw7XG4gICAgICBpZiAodGVzdERhdGFTZXRWYWwgIT0gbnVsbCAmJiB0ZXN0RGF0YVNldFZhbCAhPT0gJycgJiYgIXByZXNlcnZlVGRzMikgcGF0Y2hbJ3Rlc3REYXRhU2V0J10gPSB0ZXN0RGF0YVNldFZhbDtcbiAgICAgIGlmIChkZWZhdWx0QnJvd3NlcikgcGF0Y2hbJ2RlZmF1bHRCcm93c2VyJ10gPSBkZWZhdWx0QnJvd3NlcjtcbiAgICAgIGlmICh2aWRlb1JlY29yZGluZykgcGF0Y2hbJ3ZpZGVvUmVjb3JkaW5nJ10gPSB2aWRlb1JlY29yZGluZztcbiAgICAgIGlmIChkZWZhdWx0Vmlld3BvcnQpIHBhdGNoWydkZWZhdWx0Vmlld3BvcnQnXSA9IGRlZmF1bHRWaWV3cG9ydDtcbiAgICAgIGlmIChkZXZpY2VUeXBlKSBwYXRjaFsnZGV2aWNlVHlwZSddID0gZGV2aWNlVHlwZTtcbiAgICAgIGlmIChkZXZpY2VPUykgcGF0Y2hbJ2RldmljZU9TJ10gPSBkZXZpY2VPUztcbiAgICAgIGlmIChPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoKSB0aGlzLmVkaXRGb3JtLnBhdGNoVmFsdWUocGF0Y2gpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVtb3ZlTGFiZWwobGFiZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWRpdExhYmVscyA9IHRoaXMuZWRpdExhYmVscy5maWx0ZXIoKGwpID0+IGwgIT09IGxhYmVsKTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5lZGl0Rm9ybS5nZXQoVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMubGFiZWxzKT8uc2V0VmFsdWUodGhpcy5lZGl0TGFiZWxzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkNsZWFyQWxsTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdExhYmVscyA9IFtdO1xuICAgIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXRGb3JtLmdldChURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpPy5zZXRWYWx1ZShbXSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25BZGRGcmVxdWVudExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdExhYmVscy5pbmNsdWRlcyhsYWJlbCkpIHtcbiAgICAgIHRoaXMuZWRpdExhYmVscyA9IFsuLi50aGlzLmVkaXRMYWJlbHMsIGxhYmVsXTtcbiAgICAgIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk/LnNldFZhbHVlKHRoaXMuZWRpdExhYmVscywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZS5lbWl0KHRoaXMuYnVpbGRTYXZlUGF5bG9hZCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VDb25maWdTZWN0aW9ucygpOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW10ge1xuICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5wbGF0Zm9ybTtcbiAgICBjb25zdCB2aWRlb1JlY29yZGluZ1ZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3ZpZGVvUmVjb3JkaW5nJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHZpZGVvUmVjb3JkaW5nID0gdmlkZW9SZWNvcmRpbmdWYWx1ZSA9PT0gJ3RydWUnID8gdHJ1ZSA6IHZpZGVvUmVjb3JkaW5nVmFsdWUgPT09ICdmYWxzZScgPyBmYWxzZSA6IHZpZGVvUmVjb3JkaW5nVmFsdWU7XG4gICAgY29uc3QgdXNlQWlNZXRhZGF0YVZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3VzZUFpTWV0YWRhdGEnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgdXNlQWlNZXRhZGF0YSA9IHVzZUFpTWV0YWRhdGFWYWx1ZSA9PT0gJ3RydWUnID8gdHJ1ZSA6IHVzZUFpTWV0YWRhdGFWYWx1ZSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogdXNlQWlNZXRhZGF0YVZhbHVlO1xuICAgIGNvbnN0IHByZXJlcXVpc2l0ZUNhc2VzUmF3ID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3ByZXJlcXVpc2l0ZUNhc2VzJyk/LnZhbHVlO1xuICAgIGNvbnN0IHByZXJlcXVpc2l0ZUNhc2VzID0gQXJyYXkuaXNBcnJheShwcmVyZXF1aXNpdGVDYXNlc1JhdylcbiAgICAgID8gcHJlcmVxdWlzaXRlQ2FzZXNSYXcubWFwKCh2KSA9PiBTdHJpbmcodikpLmZpbHRlcihCb29sZWFuKVxuICAgICAgOiBwcmVyZXF1aXNpdGVDYXNlc1JhdyAhPSBudWxsICYmIHByZXJlcXVpc2l0ZUNhc2VzUmF3ICE9PSAnJ1xuICAgICAgICA/IFtTdHJpbmcocHJlcmVxdWlzaXRlQ2FzZXNSYXcpXVxuICAgICAgICA6IFtdO1xuICAgIGNvbnN0IHByZXJlcXVpc2l0ZUNhc2VWYWx1ZSA9IHByZXJlcXVpc2l0ZUNhc2VzLmxlbmd0aCA/IHByZXJlcXVpc2l0ZUNhc2VzLmpvaW4oJywnKSA6IG51bGw7XG4gICAgY29uc3QgdHlwZVZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3R5cGUnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgdGVzdERhdGFQcm9maWxlVmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgndGVzdERhdGFQcm9maWxlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgndGVzdERhdGFTZXQnKT8udmFsdWUgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbi50aXRsZSA9PT0gJ0V4ZWN1dGlvbicpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzZWN0aW9uLml0ZW1zXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gIShwbGF0Zm9ybSA9PT0gJ3dlYicgJiYgaXRlbS5sYWJlbCA9PT0gJ0RlZmF1bHQgQnJvd3NlcicpKVxuICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVmlkZW8gUmVjb3JkaW5nJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHZpZGVvUmVjb3JkaW5nIH07XG4gICAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1ByZXJlcXVpc2l0ZSBDYXNlJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHByZXJlcXVpc2l0ZUNhc2VWYWx1ZSB9O1xuICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdUeXBlJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHR5cGVWYWx1ZSB9O1xuICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdUZXN0IERhdGEgUHJvZmlsZScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0ZXN0RGF0YVByb2ZpbGVWYWx1ZSB9O1xuICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdUZXN0IERhdGEgU2V0JykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHRlc3REYXRhU2V0VmFsdWUgfTtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdBSSBDb25maWd1cmF0aW9uJykge1xuICAgICAgICBjb25zdCBlbmFibGVBaVNtYXJ0bmVzc1ZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2VuYWJsZUFpU21hcnRuZXNzJyk/LnZhbHVlO1xuICAgICAgICBjb25zdCBkZWZhdWx0QWlBY3Rpb25WYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZWZhdWx0QWlBY3Rpb24nKT8udmFsdWU7XG4gICAgICAgIGNvbnN0IGtub3dsZWRnZUJhc2VWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyk/LnZhbHVlO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdFbmFibGUgQUkgbWV0YWRhdGEgY29sbGVjdGlvbicpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB1c2VBaU1ldGFkYXRhIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdFbmFibGUgQUkgU21hcnRuZXNzJyAmJiBlbmFibGVBaVNtYXJ0bmVzc1ZhbHVlICE9IG51bGwgJiYgZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSAhPT0gJycpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiBlbmFibGVBaVNtYXJ0bmVzc1ZhbHVlIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdEZWZhdWx0IEFJIEFjdGlvbicgJiYgZGVmYXVsdEFpQWN0aW9uVmFsdWUgIT0gbnVsbCAmJiBkZWZhdWx0QWlBY3Rpb25WYWx1ZSAhPT0gJycpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiBkZWZhdWx0QWlBY3Rpb25WYWx1ZSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnS25vd2xlZGdlIEJhc2UgRGVmYXVsdCBUZXN0IENhc2UnICYmIGtub3dsZWRnZUJhc2VWYWx1ZSAhPSBudWxsICYmIGtub3dsZWRnZUJhc2VWYWx1ZSAhPT0gJycpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiBrbm93bGVkZ2VCYXNlVmFsdWUgfTtcbiAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IC4uLnNlY3Rpb24sIGl0ZW1zIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VjdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VDb25maWdTZWN0aW9uc1JvdzIoKTogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdIHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMucGxhdGZvcm07XG4gICAgY29uc3QgZGVmYXVsdEJyb3dzZXIgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGVmYXVsdEJyb3dzZXInKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgZGVmYXVsdFZpZXdwb3J0ID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RlZmF1bHRWaWV3cG9ydCcpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RldmljZVR5cGUnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgZGV2aWNlT1MgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGV2aWNlT1MnKT8udmFsdWUgPz8gJyc7XG5cbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5jb25maWdTZWN0aW9uc1JvdzIubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbi50aXRsZSA9PT0gJ1dhaXRzICYgUmV0cmllcycgfHwgc2VjdGlvbi50aXRsZSA9PT0gJ1dhaXQgYW5kIHJldHJpZXMnKSB7XG4gICAgICAgIGNvbnN0IGF1dG9XYWl0VmFsdWUgPSB0aGlzLmF1dG9XYWl0RW5hYmxlZCA/ICdFbmFibGVkJyA6ICcnO1xuICAgICAgICBjb25zdCBpdGVtcyA9IHNlY3Rpb24uaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdBdXRvIFdhaXQnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogYXV0b1dhaXRWYWx1ZSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRW5hYmxlIEF2b2lkIEF1dG8gd2FpdCBmb3Igc3RlcHMnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGhpcy5hdXRvV2FpdEVuYWJsZWQgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1JldHJ5IEZhaWxlZCBTdGVwcycpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0aGlzLmVtcHR5TnVtVG9aZXJvKHRoaXMucmV0cnlGYWlsZWRTdGVwcykgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0aGlzLmVtcHR5TnVtVG9aZXJvKHRoaXMudGVzdENhc2VUaW1lb3V0KSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGhpcy5lbXB0eU51bVRvWmVybyh0aGlzLndhaXRUaW1lb3V0TG9jYXRvcnMpIH07XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdEZXZpY2UnIHx8IHNlY3Rpb24udGl0bGUgPT09ICdEZXZpY2UgU2V0dGluZycpIHtcbiAgICAgICAgY29uc3QgaXRlbXM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXG4gICAgICAgICAgLi4uKHBsYXRmb3JtID09PSAnd2ViJ1xuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgQnJvd3NlcicsIHZhbHVlOiBkZWZhdWx0QnJvd3NlciB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZpZXdwb3J0JywgdmFsdWU6IGRlZmF1bHRWaWV3cG9ydCB9LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnVHlwZScsIHZhbHVlOiBkZXZpY2VUeXBlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ09TJywgdmFsdWU6IGRldmljZU9TIH0sXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGlzdGluZ0RldmljZSA9IHJlc3VsdC5maW5kKChzKSA9PiBzLnRpdGxlID09PSAnRGV2aWNlJyB8fCBzLnRpdGxlID09PSAnRGV2aWNlIFNldHRpbmcnKTtcbiAgICBpZiAoIWV4aXN0aW5nRGV2aWNlKSB7XG4gICAgICBjb25zdCBkZXZpY2VTZWN0aW9uOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uID0ge1xuICAgICAgICB0aXRsZTogJ0RldmljZScsXG4gICAgICAgIGljb246ICdkZXZpY2VzJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAuLi4ocGxhdGZvcm0gPT09ICd3ZWInXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBCcm93c2VyJywgdmFsdWU6IGRlZmF1bHRCcm93c2VyIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmlld3BvcnQnLCB2YWx1ZTogZGVmYXVsdFZpZXdwb3J0IH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdUeXBlJywgdmFsdWU6IGRldmljZVR5cGUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnT1MnLCB2YWx1ZTogZGV2aWNlT1MgfSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgZGV2aWNlU2VjdGlvbl07XG4gICAgfVxuXG4gICAgY29uc3Qga2V5RmxhZ3NTZWN0aW9uOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uID0ge1xuICAgICAgdGl0bGU6ICdLZXkgRmxhZ3MnLFxuICAgICAgaWNvbjogJ2ZsYWcnLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAgeyBsYWJlbDogJ01vYmlsZSBUZXN0aW5nJywgdmFsdWU6IHRoaXMubW9iaWxlVGVzdGluZ0VuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXh0ZW5zaW9uIFVzZScsIHZhbHVlOiB0aGlzLmV4dGVuc2lvblVzZUVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGF0YSBEcml2ZW4nLCB2YWx1ZTogdGhpcy5kYXRhRHJpdmVuRW5hYmxlZCA/ICdFbmFibGVkJyA6ICcnIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgZXhpc3RpbmdLZXlGbGFncyA9IHJlc3VsdC5maW5kKChzKSA9PiBzLnRpdGxlID09PSAnS2V5IEZsYWdzJyk7XG4gICAgaWYgKGV4aXN0aW5nS2V5RmxhZ3MpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoKHMpID0+XG4gICAgICAgIHMudGl0bGUgPT09ICdLZXkgRmxhZ3MnID8ga2V5RmxhZ3NTZWN0aW9uIDogc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwga2V5RmxhZ3NTZWN0aW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIHRyYWNrQnlMYWJlbChfaTogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICB0cmFja0J5Q29uZmlnVGl0bGUoX2k6IG51bWJlciwgc2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlY3Rpb24udGl0bGU7XG4gIH1cblxuICAvKiogQ3VycmVudCBsYWJlbHMgdXNlIGNvbnNpc3RlbnQgaW5kaWdvIHN0eWxlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgTEFCRUxfQ0hJUF9TVFlMRSA9IHtcbiAgICBiZzogJyM2MzY2RjEnLFxuICAgIGJvcmRlcjogJyM2MzY2RjEnLFxuICAgIHRleHQ6ICcjRkZGRkZGJyxcbiAgICBpY29uOiAnI0ZGRkZGRicsXG4gIH07XG5cbiAgZ2V0Q3VycmVudExhYmVsQ2hpcFN0eWxlKF9sYWJlbDogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5MQUJFTF9DSElQX1NUWUxFO1xuICAgIHJldHVybiB7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGNvbG9ycy5iZyxcbiAgICAgICdib3JkZXItY29sb3InOiBjb2xvcnMuYm9yZGVyLFxuICAgICAgJ2JvcmRlci13aWR0aCc6ICcxcHgnLFxuICAgICAgJ2JvcmRlci1zdHlsZSc6ICdzb2xpZCcsXG4gICAgICBjb2xvcjogY29sb3JzLnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGdldExhYmVsQ2xvc2VJY29uQ29sb3IoX2xhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLkxBQkVMX0NISVBfU1RZTEUuaWNvbjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1weS00XCI+XG4gIDwhLS0gQmFzaWMgZGV0YWlsczogRGVzY3JpcHRpb24sIFN0YXR1cy9Qcmlvcml0eS9UeXBlLCBMYWJlbHMgKGxpZ2h0IGJhY2tncm91bmQgY29udGFpbmVyKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1iZy1bI0Y4RjlGRV0gY3FhLXAtNFwiPlxuICA8IS0tIERlc2NyaXB0aW9uIChGaWdtYTogZG9jdW1lbnQgaWNvbiwgdGV4dGFyZWEgd2l0aCBsaWdodCBwdXJwbGUgYmcpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMi41XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzE5LjZweF1cIj57eyBkZXNjcmlwdGlvblRpdGxlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxjcWEtY3VzdG9tLXRleHRhcmVhXG4gICAgICBbdmFsdWVdPVwiZWRpdERlc2NyaXB0aW9uXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJlZGl0RGVzY3JpcHRpb24gPSAkZXZlbnRcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIFtyb3dzXT1cIjRcIlxuICAgICAgW2VuYWJsZU1hcmtkb3duXT1cImVuYWJsZU1hcmtkb3duXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgZGVzY3JpcHRpb24uLi5cIlxuICAgICAgdGV4dGFyZWFJbmxpbmVTdHlsZT1cInBhZGRpbmc6IDEycHg7IGZvbnQtc2l6ZTogMTJweDsgbGluZS1oZWlnaHQ6IDEwMCVcIlxuICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+XG4gICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICA8L2Rpdj5cblxuICA8IS0tIFN0YXR1cywgUHJpb3JpdHkgJiBUeXBlIChGaWdtYTogc2lkZS1ieS1zaWRlIGRyb3Bkb3ducywgY3FhLWR5bmFtaWMtc2VsZWN0KSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1ncmlkIGNxYS1ncmlkLWNvbHMtMiBjcWEtZ2FwLTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPlN0YXR1czwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdzdGF0dXMnLCBzdGF0dXNTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnc3RhdHVzJylcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc1N0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPlByaW9yaXR5PC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3ByaW9yaXR5JywgcHJpb3JpdHlTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgncHJpb3JpdHknKVwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbWVkaXVtXCI+VHlwZTwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCd0eXBlJywgdHlwZVNlbGVjdENvbmZpZylcIlxuICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCd0eXBlJylcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTGFiZWxzIChGaWdtYTogQ3VycmVudCBMYWJlbHMgd2l0aCBDbGVhciBBbGwsIGNxYS1iYWRnZSB3aXRoIHgsIEZyZXF1ZW50bHkgdXNlZCwgU2VhcmNoKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LVsxNXB4XSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5DdXJyZW50IExhYmVscyAoe3sgZWRpdExhYmVscy5sZW5ndGggfX0pPC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJlZGl0TGFiZWxzLmxlbmd0aCA+IDBcIlxuICAgICAgICBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjREMyNjI2XSBob3ZlcjpjcWEtdW5kZXJsaW5lIGNxYS1mb250LW5vcm1hbFwiXG4gICAgICAgIChjbGljayk9XCJvbkNsZWFyQWxsTGFiZWxzKClcIj5cbiAgICAgICAgQ2xlYXIgQWxsXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTJcIiAqbmdJZj1cImVkaXRMYWJlbHMubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgbGFiZWwgb2YgZWRpdExhYmVsczsgdHJhY2tCeTogdHJhY2tCeUxhYmVsXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtcHgtMi41IGNxYS1weS0xIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bSBjcWEtcm91bmRlZC1tZCBjcWEtYm9yZGVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q3VycmVudExhYmVsQ2hpcFN0eWxlKGxhYmVsKVwiPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctMy41IGNxYS1oLTMuNSBjcWEtcm91bmRlZCBob3ZlcjpjcWEtb3BhY2l0eS04MCBjcWEtdHJhbnNpdGlvbi1vcGFjaXR5IGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXAtMCBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRMYWJlbENsb3NlSWNvbkNvbG9yKGxhYmVsKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlTGFiZWwobGFiZWwpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgJyArIGxhYmVsXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS13LTMuNSBjcWEtaC0zLjVcIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPkZyZXF1ZW50bHkgdXNlZDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1nYXAtMlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGZyZXF1ZW50bHlVc2VkTGFiZWxzOyB0cmFja0J5OiB0cmFja0J5TGFiZWxcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwib25BZGRGcmVxdWVudExhYmVsKGxhYmVsKVwiPlxuICAgICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICB2YXJpYW50PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiI0U4RTlGRlwiXG4gICAgICAgICAgICB0ZXh0Q29sb3I9XCIjM0Y0M0VFXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPVwiI0U4RTlGRlwiPlxuICAgICAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5BZGQgbGFiZWxzPC9sYWJlbD5cbiAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICBbY29uZmlnXT1cImxhYmVsc1NlbGVjdENvbmZpZ1wiXG4gICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdsYWJlbHMnKVwiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGFkZEN1c3RvbVZhbHVlKT1cIm9uTGFiZWxzQWRkQ3VzdG9tVmFsdWUoJGV2ZW50KVwiXG4gICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ29uZmlndXJhdGlvbiAoRmlnbWE6IGNvbGxhcHNpYmxlLCBnZWFyIGljb24sIGxpZ2h0IGJhY2tncm91bmQgY29udGFpbmVyKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtWzEycHhdIGNxYS1yb3VuZGVkLWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0UyRThGMF0gY3FhLWJnLVsjRjhGOUZFXSBjcWEtcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS10ZXh0LWxlZnQgY3FhLXctZnVsbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxOS41cHhdXCI+e3sgY29uZmlnVGl0bGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTUgY3FhLXRleHQteHNcIj5cbiAgICAgIDwhLS0gRXhlY3V0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi00IGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0aW9uRXhwYW5kZWQgPSAhZXhlY3V0aW9uRXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+cGxheV9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPkV4ZWN1dGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBleGVjdXRpb25FeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJleGVjdXRpb25FeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGFzUHJlcmVxdWlzaXRlQ2FzZUNvbmZpZ1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj4gXG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgncHJlcmVxdWlzaXRlQ2FzZXMnLCBwcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3ByZXJlcXVpc2l0ZUNhc2VzJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW1cIj5UZXN0IERhdGEgUHJvZmlsZTwvbGFiZWw+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgndGVzdERhdGFQcm9maWxlJywgdGVzdERhdGFQcm9maWxlU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3Rlc3REYXRhUHJvZmlsZScpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2ODczODldIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bVwiPlRlc3QgRGF0YSBTZXQ8L2xhYmVsPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3Rlc3REYXRhU2V0JywgdGVzdERhdGFTZXRTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndGVzdERhdGFTZXQnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW1cIj5WaWRlbyBSZWNvcmRpbmc8L2xhYmVsPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3ZpZGVvUmVjb3JkaW5nJywgdmlkZW9SZWNvcmRpbmdTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndmlkZW9SZWNvcmRpbmcnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBBSSBDb25maWd1cmF0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi00IGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiYWlDb25maWdFeHBhbmRlZCA9ICFhaUNvbmZpZ0V4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnNtYXJ0X3RveTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxMTE4MjddXCI+QUkgQ29uZmlndXJhdGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBhaUNvbmZpZ0V4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImFpQ29uZmlnRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTMgY3FhLXB5LTAgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ2VuYWJsZUFpU21hcnRuZXNzJywgZW5hYmxlQWlTbWFydG5lc3NTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnZW5hYmxlQWlTbWFydG5lc3MnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnZGVmYXVsdEFpQWN0aW9uJywgZGVmYXVsdEFpQWN0aW9uU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2RlZmF1bHRBaUFjdGlvbicpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJywga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3VzZUFpTWV0YWRhdGEnLCBhaU1ldGFkYXRhQ29sbGVjdGlvblNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCd1c2VBaU1ldGFkYXRhJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBXYWl0cyAmIFJldHJpZXMtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItNCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIndhaXRzUmV0cmllc0V4cGFuZGVkID0gIXdhaXRzUmV0cmllc0V4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnRpbWVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzExMTgyN11cIj5XYWl0IGFuZCBSZXRyaWVzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtdGV4dC14bCBjcWEtdy01IGNxYS1oLTVcIj5cbiAgICAgICAgICAgIHt7IHdhaXRzUmV0cmllc0V4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIndhaXRzUmV0cmllc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cImF1dG9XYWl0RW5hYmxlZFwiIChjaGVja2VkQ2hhbmdlKT1cImF1dG9XYWl0RW5hYmxlZCA9ICRldmVudFwiIGFyaWFMYWJlbD1cIkVuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzXCI+PC9jcWEtY3VzdG9tLXRvZ2dsZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMTExODI3XVwiPkVuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiUmV0cnkgRmFpbGVkIFN0ZXBzXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInJldHJ5RmFpbGVkU3RlcHNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicmV0cnlGYWlsZWRTdGVwcyA9IG9ubHlEaWdpdHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMFwiXG4gICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgIGxhYmVsSW5saW5lU3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxOS42cHhcIj5cbiAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIlRlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXN0Q2FzZVRpbWVvdXRcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidGVzdENhc2VUaW1lb3V0ID0gb25seURpZ2l0cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIzMFwiXG4gICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgIGxhYmVsSW5saW5lU3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxOS42cHhcIj5cbiAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIldhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlYylcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwid2FpdFRpbWVvdXRMb2NhdG9yc1wiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ3YWl0VGltZW91dExvY2F0b3JzID0gb25seURpZ2l0cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIxNVwiXG4gICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgIGxhYmVsSW5saW5lU3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxOS42cHhcIj5cbiAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJwbGF0Zm9ybSAhPT0gJ21vYmlsZSdcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi00IGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGV2aWNlRXhwYW5kZWQgPSAhZGV2aWNlRXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+ZGV2aWNlczwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxMTE4MjddXCI+RGV2aWNlIFNldHRpbmdzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtdGV4dC14bCBjcWEtdy01IGNxYS1oLTVcIj5cbiAgICAgICAgICAgIHt7IGRldmljZUV4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRldmljZUV4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zIGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICA8IS0tIFdlYiBvbmx5OiBtb2JpbGUgRGV2aWNlIFNldHRpbmdzIGhpZGRlbiB0ZW1wb3JhcmlseSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdkZWZhdWx0QnJvd3NlcicsIGRlZmF1bHRCcm93c2VyU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2RlZmF1bHRCcm93c2VyJylcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdkZWZhdWx0Vmlld3BvcnQnLCBkZWZhdWx0Vmlld3BvcnRTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnZGVmYXVsdFZpZXdwb3J0JylcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gS2V5IEZsYWdzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi0wIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwia2V5RmxhZ3NFeHBhbmRlZCA9ICFrZXlGbGFnc0V4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPmZsYWc8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPktleSBGbGFnczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBrZXlGbGFnc0V4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImtleUZsYWdzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cIm1vYmlsZVRlc3RpbmdFbmFibGVkXCIgKGNoZWNrZWRDaGFuZ2UpPVwibW9iaWxlVGVzdGluZ0VuYWJsZWQgPSAkZXZlbnRcIiBhcmlhTGFiZWw9XCJNb2JpbGUgVGVzdGluZ1wiPjwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzExMTgyN11cIj5Nb2JpbGUgVGVzdGluZzwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cImV4dGVuc2lvblVzZUVuYWJsZWRcIiAoY2hlY2tlZENoYW5nZSk9XCJleHRlbnNpb25Vc2VFbmFibGVkID0gJGV2ZW50XCIgYXJpYUxhYmVsPVwiRXh0ZW5zaW9uIFVzZVwiPjwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzExMTgyN11cIj5FeHRlbnNpb24gVXNlPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtMyBjcWEtcHktMi41IGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS10b2dnbGUgW2NoZWNrZWRdPVwiZGF0YURyaXZlbkVuYWJsZWRcIiAoY2hlY2tlZENoYW5nZSk9XCJkYXRhRHJpdmVuRW5hYmxlZCA9ICRldmVudFwiIGFyaWFMYWJlbD1cIkRhdGEgRHJpdmVuXCI+PC9jcWEtY3VzdG9tLXRvZ2dsZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMTExODI3XVwiPkRhdGEgRHJpdmVuPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0zIGNxYS1wdC0yIGNxYS13LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgW3RleHRdPVwiJ0NhbmNlbCdcIlxuICAgICAgICBidG5TaXplPVwibWRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiIWlzU2F2aW5nXCJcbiAgICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICAgIFt0ZXh0XT1cIidTYXZlIENoYW5nZXMnXCJcbiAgICAgICAgYnRuU2l6ZT1cIm1kXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNVbnNhdmVkQ2hhbmdlc1wiXG4gICAgICAgIChjbGlja2VkKT1cIm9uU2F2ZSgpXCI+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNTYXZpbmdcIiBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICAgICAgPGNxYS1iYWRnZVxuICAgICAgICAgIGxhYmVsPVwiU2F2aW5n4oCmXCJcbiAgICAgICAgICBpY29uPVwiYXV0b3JlbmV3XCJcbiAgICAgICAgICBbaXNMb2FkaW5nXT1cInRydWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgdmFyaWFudD1cImluZm9cIlxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIj5cbiAgICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
975
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUt4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBaUN4RCxvR0FBb0c7QUFDcEcsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtJQUNoQixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxXQUFXLEVBQUUsYUFBYTtJQUMxQixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGlCQUFpQixFQUFFLG1CQUFtQjtJQUN0QyxlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLDRCQUE0QixFQUFFLDhCQUE4QjtJQUM1RCxhQUFhLEVBQUUsZUFBZTtJQUM5QixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsUUFBUSxFQUFFLFVBQVU7Q0FDWixDQUFDO0FBY1gsTUFBTSxzQkFBc0IsR0FB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LGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDOzt5SEEzNkJVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLG91QkM5RnpDLG00dEJBa2FBOzJGRHBVYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsNEJBQTRCLG1CQUVyQix1QkFBdUIsQ0FBQyxNQUFNO3dHQUd0QyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBU0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24sXG4gIFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLWRldGFpbHMubW9kZWxzJztcbmltcG9ydCB7XG4gIER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyxcbiAgU2VsZWN0T3B0aW9uLFxufSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuXG4vKiogT3ZlcnJpZGUgY29uZmlnIGZvciBhIHNwZWNpZmljIHNlbGVjdC4gVXNlIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2gsIGxvYWQgbW9yZSwgY3VzdG9tIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdENvbmZpZ092ZXJyaWRlIHtcbiAgLyoqIFJlcGxhY2Ugb3B0aW9ucyAoZS5nLiBmcm9tIEFQSSkuIFVwZGF0ZSB3aGVuIEFQSSByZXR1cm5zLiAqL1xuICBvcHRpb25zPzogU2VsZWN0T3B0aW9uW107XG4gIC8qKiBFbmFibGUgc2VydmVyLXNpZGUgc2VhcmNoOyBjb21wb25lbnQgZW1pdHMgc2VsZWN0U2VhcmNoIGluc3RlYWQgb2YgbG9jYWwgZmlsdGVyaW5nLiAqL1xuICBzZXJ2ZXJTZWFyY2g/OiBib29sZWFuO1xuICAvKiogSW5kaWNhdGVzIG1vcmUgcmVzdWx0cyBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbC4gKi9cbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIC8qKiBMb2FkaW5nIHN0YXRlIChlLmcuIGR1cmluZyBBUEkgY2FsbCkuICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgc2VhcmNoIGlucHV0IGluIHRoZSBzZWxlY3QuICovXG4gIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0cmlnZ2VycyBpbml0aWFsIHNlYXJjaCBvbiBwYW5lbCBvcGVuIChzZXJ2ZXJTZWFyY2ggbW9kZSkuICovXG4gIGluaXRpYWxGZXRjaE9uT3Blbj86IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIHVzZXIgdHlwZXMgaW4gc2VhcmNoLiBDYWxsIEFQSSwgdGhlbiB1cGRhdGUgb3B0aW9ucyB2aWEgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzLiAqL1xuICBvblNlYXJjaD86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlLiBDYWxsIEFQSSwgYXBwZW5kIG9wdGlvbnMgdmlhIHNlbGVjdENvbmZpZ092ZXJyaWRlcy4gKi9cbiAgb25Mb2FkTW9yZT86IChxdWVyeT86IHN0cmluZykgPT4gdm9pZDtcbn1cblxuLyoqIE1hcCBvZiBzZWxlY3Qga2V5IC0+IGNvbmZpZyBvdmVycmlkZS4gRW5hYmxlcyBBUEktZHJpdmVuIG9wdGlvbnMsIGluZmluaXRlIHNlYXJjaCwgbG9hZCBtb3JlLiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0Q29uZmlnT3ZlcnJpZGVzID0gUGFydGlhbDxSZWNvcmQ8c3RyaW5nLCBTZWxlY3RDb25maWdPdmVycmlkZT4+O1xuXG4vKiogS2V5cyBmb3IgZWFjaCBkeW5hbWljIHNlbGVjdCBpbiB0ZXN0LWNhc2UtZGV0YWlscy1lZGl0LiBVc2UgdGhlc2Ugd2l0aCBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG5leHBvcnQgY29uc3QgVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMgPSB7XG4gIHN0YXR1czogJ3N0YXR1cycsXG4gIHByaW9yaXR5OiAncHJpb3JpdHknLFxuICB0eXBlOiAndHlwZScsXG4gIGxhYmVsczogJ2xhYmVscycsXG4gIHByZXJlcXVpc2l0ZUNhc2VzOiAncHJlcmVxdWlzaXRlQ2FzZXMnLFxuICB0ZXN0RGF0YVByb2ZpbGU6ICd0ZXN0RGF0YVByb2ZpbGUnLFxuICB0ZXN0RGF0YVNldDogJ3Rlc3REYXRhU2V0JyxcbiAgdmlkZW9SZWNvcmRpbmc6ICd2aWRlb1JlY29yZGluZycsXG4gIGVuYWJsZUFpU21hcnRuZXNzOiAnZW5hYmxlQWlTbWFydG5lc3MnLFxuICBkZWZhdWx0QWlBY3Rpb246ICdkZWZhdWx0QWlBY3Rpb24nLFxuICBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlOiAna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScsXG4gIHVzZUFpTWV0YWRhdGE6ICd1c2VBaU1ldGFkYXRhJyxcbiAgZGVmYXVsdEJyb3dzZXI6ICdkZWZhdWx0QnJvd3NlcicsXG4gIGRlZmF1bHRWaWV3cG9ydDogJ2RlZmF1bHRWaWV3cG9ydCcsXG4gIGRldmljZVR5cGU6ICdkZXZpY2VUeXBlJyxcbiAgZGV2aWNlT1M6ICdkZXZpY2VPUycsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDYXNlRGV0YWlsc0VkaXRGb3JtRGF0YSB7XG4gIGRlc2NyaXB0aW9uQ29udGVudDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgcHJpb3JpdHk6IHN0cmluZztcbiAgdHlwZT86IHN0cmluZyB8IG51bWJlcjtcbiAgbGFiZWxzOiBzdHJpbmdbXTtcbiAgdGVzdERhdGFQcm9maWxlSWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICB0ZXN0RGF0YVNldEluZGV4PzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXTtcbiAgY29uZmlnU2VjdGlvbnNSb3cyOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW107XG59XG5cbmNvbnN0IEZSRVFVRU5UTFlfVVNFRF9MQUJFTFMgPSBbXG4gICdDYXNlJyxcbiAgJ0NyaXRpY2FsJyxcbiAgJ1BPJyxcbiAgJ1VwbG9hZCcsXG4gICdWYWxpZGF0aW9uJyxcbiAgJ1JldmlldycsXG4gICdFZGdlLWNhc2VzJyxcbiAgJ1NlY3VyaXR5JyxcbiAgJ0ludGVncmF0aW9uJyxcbiAgJ1Ntb2tlJyxcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS10ZXN0LWNhc2UtZGV0YWlscy1lZGl0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGVzdENhc2VEZXRhaWxzRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZGVzY3JpcHRpb25UaXRsZSA9ICdEZXNjcmlwdGlvbic7XG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uQ29udGVudCA9ICcnO1xuICAvKiogV2hlbiB0cnVlLCBkZXNjcmlwdGlvbiB1c2VzIFRyaXggcmljaCB0ZXh0IGVkaXRvciAoQm9sZCwgSXRhbGljLCBldGMuKS4gSG9zdCBhcHAgbXVzdCBsb2FkIFRyaXguICovXG4gIEBJbnB1dCgpIGVuYWJsZU1hcmtkb3duID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1ldGFkYXRhSXRlbXM6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgY29uZmlnVGl0bGUgPSAnQ29uZmlndXJhdGlvbic7XG4gIEBJbnB1dCgpIGNvbmZpZ1NlY3Rpb25zOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgY29uZmlnU2VjdGlvbnNSb3cyOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgaXNTYXZpbmcgPSBmYWxzZTtcbiAgLyoqIE9wdGlvbmFsIGxpc3Qgb2YgcHJlcmVxdWlzaXRlIHRlc3QgY2FzZSBvcHRpb25zIGZvciB0aGUgbXVsdGktc2VsZWN0LiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgZGVmYXVsdCBzYW1wbGUgb3B0aW9ucy4gKi9cbiAgQElucHV0KCkgcHJlcmVxdWlzaXRlQ2FzZU9wdGlvbnM6IHsgdmFsdWU6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICAvKiogUGxhdGZvcm06ICd3ZWInIHNob3dzIERlZmF1bHQgQnJvd3NlciArIFZpZXdwb3J0OyAnbW9iaWxlJyBzaG93cyBEZXZpY2UgVHlwZSArIE9TLiBEZWZhdWx0cyB0byAnd2ViJy4gKi9cbiAgQElucHV0KCkgcGxhdGZvcm06ICd3ZWInIHwgJ21vYmlsZScgPSAnd2ViJztcblxuICAvKiogV2hlbiB0cnVlLCBoaWRlcyBQcmlvcml0eSwgVHlwZSwgYW5kIFRlc3QgRGF0YSBTZXQgZmllbGRzIChzdGVwIGdyb3VwcyBkb24ndCBoYXZlIHRoZXNlKS4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIEBJbnB1dCgpIGlzU3RlcEdyb3VwID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGNvbmZpZyBwZXIgc2VsZWN0IGtleS4gVXNlIGZvcjpcbiAgICogLSBBUEktZHJpdmVuIG9wdGlvbnM6IHBhc3Mgb3B0aW9ucyBhcnJheSAodXBkYXRlIHdoZW4gQVBJIHJldHVybnMpXG4gICAqIC0gU2VydmVyLXNpZGUgc2VhcmNoOiBzZXJ2ZXJTZWFyY2g6IHRydWUsIG9uU2VhcmNoIGluIG92ZXJyaWRlIG9yIGxpc3RlbiB0byBzZWxlY3RTZWFyY2hcbiAgICogLSBJbmZpbml0ZSBzY3JvbGw6IGhhc01vcmU6IHRydWUsIG9uTG9hZE1vcmUgaW4gb3ZlcnJpZGUgb3IgbGlzdGVuIHRvIHNlbGVjdExvYWRNb3JlXG4gICAqIC0gSW5pdGlhbCBmZXRjaCBvbiBvcGVuOiBpbml0aWFsRmV0Y2hPbk9wZW46IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdENvbmZpZ092ZXJyaWRlczogU2VsZWN0Q29uZmlnT3ZlcnJpZGVzID0ge307XG5cbiAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlRGV0YWlsc0VkaXRGb3JtRGF0YT4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2VhcmNoZXMgaW4gYSBzZWxlY3QgKHNlcnZlclNlYXJjaCBtb2RlKS4gQ2FsbCBBUEkgYW5kIHVwZGF0ZSBvcHRpb25zIHZpYSBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUuIENhbGwgQVBJLCBhcHBlbmQgdG8gb3B0aW9ucyB2aWEgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzLiAqL1xuICBAT3V0cHV0KCkgc2VsZWN0TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgc2VsZWN0IHBhbmVsIGlzIG9wZW5lZC4gVXNlIHRvIGNhbGwgQVBJIGZvciBpbml0aWFsIGxvYWQgKGUuZy4gd2hlbiBpbml0aWFsRmV0Y2hPbk9wZW4pLiAqL1xuICBAT3V0cHV0KCkgc2VsZWN0T3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nIH0+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBzZWxlY3Rpb24gY2hhbmdlcyBpbiBhbnkgc2VsZWN0LiAqL1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBhZGRzIGEgbmV3IGN1c3RvbSBsYWJlbCB2aWEgdGhlIFwiTmV3XCIgb3B0aW9uLiAqL1xuICBAT3V0cHV0KCkgbGFiZWxBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAvKiogRm9ybSBzdGF0ZSAqL1xuICBlZGl0RGVzY3JpcHRpb24gPSAnJztcbiAgZWRpdFN0YXR1cyA9ICcnO1xuICBlZGl0UHJpb3JpdHkgPSAnJztcbiAgZWRpdExhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgdGVzdENhc2VUaW1lb3V0ID0gJyc7XG4gIHdhaXRUaW1lb3V0TG9jYXRvcnMgPSAnJztcbiAgYXV0b1dhaXRFbmFibGVkID0gZmFsc2U7XG4gIHJldHJ5RmFpbGVkU3RlcHMgPSAnJztcbiAgY29uZmlnRXhwYW5kZWQgPSB0cnVlO1xuICBleGVjdXRpb25FeHBhbmRlZCA9IHRydWU7XG4gIGFpQ29uZmlnRXhwYW5kZWQgPSB0cnVlO1xuICB3YWl0c1JldHJpZXNFeHBhbmRlZCA9IHRydWU7XG4gIGRldmljZUV4cGFuZGVkID0gdHJ1ZTtcbiAga2V5RmxhZ3NFeHBhbmRlZCA9IHRydWU7XG4gIG1vYmlsZVRlc3RpbmdFbmFibGVkID0gZmFsc2U7XG4gIGV4dGVuc2lvblVzZUVuYWJsZWQgPSBmYWxzZTtcbiAgZGF0YURyaXZlbkVuYWJsZWQgPSBmYWxzZTtcblxuICByZWFkb25seSBmcmVxdWVudGx5VXNlZExhYmVscyA9IEZSRVFVRU5UTFlfVVNFRF9MQUJFTFM7XG4gIHByaXZhdGUgX2luaXRpYWxGb3JtU25hcHNob3Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBGb3JtR3JvdXAgZm9yIGNxYS1keW5hbWljLXNlbGVjdCBiaW5kaW5ncyAqL1xuICBlZGl0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXR1czogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBwcmlvcml0eTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICB0eXBlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGxhYmVsczogbmV3IEZvcm1Db250cm9sKFtdIGFzIHN0cmluZ1tdKSxcbiAgICBwcmVyZXF1aXNpdGVDYXNlczogbmV3IEZvcm1Db250cm9sKFtdIGFzIHN0cmluZ1tdKSxcbiAgICB0ZXN0RGF0YVByb2ZpbGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdGVzdERhdGFTZXQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdEJyb3dzZXI6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdmlkZW9SZWNvcmRpbmc6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdFZpZXdwb3J0OiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGRldmljZVR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGV2aWNlT1M6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZW5hYmxlQWlTbWFydG5lc3M6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdEFpQWN0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdXNlQWlNZXRhZGF0YTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgfSk7XG5cbiAgZ2V0IHN0YXR1c0l0ZW0oKTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbmQoKG0pID0+IG0ubGFiZWwgPT09ICdTdGF0dXMnKTtcbiAgfVxuXG4gIGdldCBwcmlvcml0eUl0ZW0oKTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbmQoKG0pID0+IG0ubGFiZWwgPT09ICdQcmlvcml0eScpO1xuICB9XG5cbiAgZ2V0IHR5cGVJdGVtKCk6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGFJdGVtcy5maW5kKChtKSA9PiBtLmxhYmVsID09PSAnVHlwZScpO1xuICB9XG5cbiAgZ2V0IHN0YXR1c09wdGlvbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ0RyYWZ0JywgJ0luIFJldmlldycsICdBcHByb3ZlZCcsICdBY3RpdmUnLCAnSW5hY3RpdmUnLCAnQmxvY2tlZCddO1xuICB9XG5cbiAgZ2V0IHByaW9yaXR5T3B0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnQ3JpdGljYWwnLCAnTWFqb3InLCAnSGlnaCcsICdNZWRpdW0nLCAnTG93JywgJ01pbm9yJywgJ05vdCBzZXQnXTtcbiAgfVxuXG4gIC8qKiBDYWNoZWQgY29uZmlncyB0byBhdm9pZCBuZXcgb2JqZWN0IHJlZnMgZWFjaCBjaGFuZ2UgZGV0ZWN0aW9uIChwcmV2ZW50cyBpbmZpbml0ZSBsb29wcykgKi9cbiAgcmVhZG9ubHkgc3RhdHVzU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdTdGF0dXMnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdEcmFmdCcsIG5hbWU6ICdEcmFmdCcgfSxcbiAgICAgIHsgdmFsdWU6ICdJbiBSZXZpZXcnLCBuYW1lOiAnSW4gUmV2aWV3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0FwcHJvdmVkJywgbmFtZTogJ0FwcHJvdmVkJyB9LFxuICAgICAgeyB2YWx1ZTogJ0FjdGl2ZScsIG5hbWU6ICdBY3RpdmUnIH0sXG4gICAgICB7IHZhbHVlOiAnSW5hY3RpdmUnLCBuYW1lOiAnSW5hY3RpdmUnIH0sXG4gICAgICB7IHZhbHVlOiAnQmxvY2tlZCcsIG5hbWU6ICdCbG9ja2VkJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgdHlwZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3R5cGUnLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1R5cGUnLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgb3B0aW9uczogW10sXG4gIH07XG5cbiAgcmVhZG9ubHkgdGVzdERhdGFQcm9maWxlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndGVzdERhdGFQcm9maWxlJyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXN0IERhdGEgUHJvZmlsZScsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICBvcHRpb25zOiBbXSxcbiAgfTtcblxuICByZWFkb25seSB0ZXN0RGF0YVNldFNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3Rlc3REYXRhU2V0JyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXN0IERhdGEgU2V0JyxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFByZXJlcXVpc2l0ZUNhc2VPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6ICdUQy0wMDEnLCBuYW1lOiAnVEMtMDAxOiBMb2dpbiBmbG93JyB9LFxuICAgIHsgdmFsdWU6ICdUQy0wMDInLCBuYW1lOiAnVEMtMDAyOiBVc2VyIHJlZ2lzdHJhdGlvbicgfSxcbiAgICB7IHZhbHVlOiAnVEMtMDAzJywgbmFtZTogJ1RDLTAwMzogUGFzc3dvcmQgcmVzZXQnIH0sXG4gICAgeyB2YWx1ZTogJ1RDLTAwNCcsIG5hbWU6ICdUQy0wMDQ6IERhc2hib2FyZCBsb2FkJyB9LFxuICAgIHsgdmFsdWU6ICdUQy0wMDUnLCBuYW1lOiAnVEMtMDA1OiBBUEkgaGVhbHRoIGNoZWNrJyB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IHZpZGVvUmVjb3JkaW5nU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndmlkZW9SZWNvcmRpbmcnLFxuICAgIGxhYmVsOiAnUmVjb3JkIHRlc3QgZXhlY3V0aW9uIHZpZGVvJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ3RydWUnLCBuYW1lOiAnVHJ1ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdmYWxzZScsIG5hbWU6ICdGYWxzZScgfSxcbiAgICAgIHsgdmFsdWU6ICdPcmcgbGV2ZWwnLCBuYW1lOiAnT3JnIGxldmVsJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgYWlNZXRhZGF0YUNvbGxlY3Rpb25TZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICd1c2VBaU1ldGFkYXRhJyxcbiAgICBsYWJlbDogJ0VuYWJsZSBBSSBtZXRhZGF0YSBjb2xsZWN0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ3RydWUnLCBuYW1lOiAnVHJ1ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdmYWxzZScsIG5hbWU6ICdGYWxzZScgfSxcbiAgICAgIHsgdmFsdWU6ICdPcmcgbGV2ZWwnLCBuYW1lOiAnT3JnIGxldmVsJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqIENhY2hlZCBsYWJlbHMgY29uZmlnIHRvIGF2b2lkIG5ldyBvYmplY3Qgb24gZXZlcnkgQ0QgKHByZXZlbnRzIGZyZWV6ZSkgKi9cbiAgcHJpdmF0ZSBfbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGU6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG5cbiAgLyoqIExhYmVscyBtdWx0aS1zZWxlY3Q6IG9wdGlvbnMgPSBmcmVxdWVudGx5IHVzZWQgKyBjdXJyZW50ICsgQVBJIG9wdGlvbnMgZnJvbSBzZWxlY3RDb25maWdPdmVycmlkZXMgKi9cbiAgZ2V0IGxhYmVsc1NlbGVjdENvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGlmICghdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgJiYgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGUpIHJldHVybiB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzW1RFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVsc107XG4gICAgY29uc3QgYXBpT3B0aW9ucyA9IG92ZXJyaWRlPy5vcHRpb25zID8/IFtdO1xuICAgIGNvbnN0IGFsbExhYmVscyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICAuLi50aGlzLmZyZXF1ZW50bHlVc2VkTGFiZWxzLFxuICAgICAgLi4udGhpcy5lZGl0TGFiZWxzLFxuICAgICAgLi4uYXBpT3B0aW9ucy5tYXAoKG8pID0+IFN0cmluZyhvLm5hbWUgPz8gby52YWx1ZSA/PyAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgXSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20oYWxsTGFiZWxzKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgIC5tYXAoKHYpID0+ICh7IHZhbHVlOiB2LCBuYW1lOiB2IH0pKTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ2xhYmVscycsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBsYWJlbHMgdG8gYWRkIC4uLi4uLicsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBvcHRpb25TdHlsZTogJ2NoZWNrYm94JyxcbiAgICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWUsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGU7XG4gIH1cblxuICBwcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAncHJlcmVxdWlzaXRlQ2FzZXMnLFxuICAgIGxhYmVsOiAnUHJlcmVxdWlzaXRlIENhc2UnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG9wdGlvblN0eWxlOiAnY2hlY2tib3gnLFxuICAgIHNob3dTZWxlY3RBbGw6IHRydWUsXG4gICAgc2VsZWN0QWxsTGFiZWw6ICdBbGwnLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdUQy0wMDEnLCBuYW1lOiAnVEMtMDAxOiBMb2dpbiBmbG93JyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwMicsIG5hbWU6ICdUQy0wMDI6IFVzZXIgcmVnaXN0cmF0aW9uJyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwMycsIG5hbWU6ICdUQy0wMDM6IFBhc3N3b3JkIHJlc2V0JyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwNCcsIG5hbWU6ICdUQy0wMDQ6IERhc2hib2FyZCBsb2FkJyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwNScsIG5hbWU6ICdUQy0wMDU6IEFQSSBoZWFsdGggY2hlY2snIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZWZhdWx0Vmlld3BvcnRTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICAgIGxhYmVsOiAnRGVmYXVsdCBWaWV3cG9ydCcsXG4gICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICcxMjgweDcyMCcsIG5hbWU6ICcxMjgweDcyMCcgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGRldmljZVR5cGVTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdkZXZpY2VUeXBlJyxcbiAgICBsYWJlbDogJ0RldmljZSBUeXBlJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ2lQaG9uZSAxNCcsIG5hbWU6ICdpUGhvbmUgMTQnIH0sXG4gICAgICB7IHZhbHVlOiAnaVBob25lIDE1JywgbmFtZTogJ2lQaG9uZSAxNScgfSxcbiAgICAgIHsgdmFsdWU6ICdpUGhvbmUgMTcnLCBuYW1lOiAnaVBob25lIDE3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0lwaG9uZSAxNycsIG5hbWU6ICdJcGhvbmUgMTcnIH0sXG4gICAgICB7IHZhbHVlOiAnU2Ftc3VuZyBHYWxheHknLCBuYW1lOiAnU2Ftc3VuZyBHYWxheHknIH0sXG4gICAgICB7IHZhbHVlOiAnUGl4ZWwnLCBuYW1lOiAnUGl4ZWwnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZXZpY2VPU1NlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RldmljZU9TJyxcbiAgICBsYWJlbDogJ09TJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ2lwYScsIG5hbWU6ICdpT1MgKGlwYSknIH0sXG4gICAgICB7IHZhbHVlOiAnYXBrJywgbmFtZTogJ0FuZHJvaWQgKGFwayknIH0sXG4gICAgICB7IHZhbHVlOiAnaU9TIDE2JywgbmFtZTogJ2lPUyAxNicgfSxcbiAgICAgIHsgdmFsdWU6ICdpT1MgMTcnLCBuYW1lOiAnaU9TIDE3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0FuZHJvaWQgMTMnLCBuYW1lOiAnQW5kcm9pZCAxMycgfSxcbiAgICAgIHsgdmFsdWU6ICdBbmRyb2lkIDE0JywgbmFtZTogJ0FuZHJvaWQgMTQnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZWZhdWx0QnJvd3NlclNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RlZmF1bHRCcm93c2VyJyxcbiAgICBsYWJlbDogJ0RlZmF1bHQgQnJvd3NlcicsXG4gICAgcGxhY2Vob2xkZXI6ICdDaHJvbWUnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdDaHJvbWUnLCBuYW1lOiAnQ2hyb21lJyB9LFxuICAgICAgeyB2YWx1ZTogJ0ZpcmVmb3gnLCBuYW1lOiAnRmlyZWZveCcgfSxcbiAgICAgIHsgdmFsdWU6ICdTYWZhcmknLCBuYW1lOiAnU2FmYXJpJyB9LFxuICAgICAgeyB2YWx1ZTogJ0VkZ2UnLCBuYW1lOiAnRWRnZScgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IHByaW9yaXR5U2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAncHJpb3JpdHknLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1ByaW9yaXR5JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnQ3JpdGljYWwnLCBuYW1lOiAnQ3JpdGljYWwnIH0sXG4gICAgICB7IHZhbHVlOiAnTWFqb3InLCBuYW1lOiAnTWFqb3InIH0sXG4gICAgICB7IHZhbHVlOiAnSGlnaCcsIG5hbWU6ICdIaWdoJyB9LFxuICAgICAgeyB2YWx1ZTogJ01lZGl1bScsIG5hbWU6ICdNZWRpdW0nIH0sXG4gICAgICB7IHZhbHVlOiAnTG93JywgbmFtZTogJ0xvdycgfSxcbiAgICAgIHsgdmFsdWU6ICdNaW5vcicsIG5hbWU6ICdNaW5vcicgfSxcbiAgICAgIHsgdmFsdWU6ICdOb3Qgc2V0JywgbmFtZTogJ05vdCBzZXQnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBlbmFibGVBaVNtYXJ0bmVzc1NlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgICBsYWJlbDogJ0VuYWJsZSBBSSBTbWFydG5lc3MnLFxuICAgIHBsYWNlaG9sZGVyOiAnQWR2YW5jZWQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdCYXNpYycsIG5hbWU6ICdCYXNpYycgfSxcbiAgICAgIHsgdmFsdWU6ICdBZHZhbmNlZCcsIG5hbWU6ICdBZHZhbmNlZCcgfSxcbiAgICAgIHsgdmFsdWU6ICdPZmYnLCBuYW1lOiAnT2ZmJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgZGVmYXVsdEFpQWN0aW9uU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZGVmYXVsdEFpQWN0aW9uJyxcbiAgICBsYWJlbDogJ0RlZmF1bHQgQUkgQWN0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NtYXJ0IHdhaXQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdTbWFydCB3YWl0JywgbmFtZTogJ1NtYXJ0IHdhaXQnIH0sXG4gICAgICB7IHZhbHVlOiAnU21hcnQgV2FpdCcsIG5hbWU6ICdTbWFydCBXYWl0JyB9LFxuICAgICAgeyB2YWx1ZTogJ1dhaXQgZm9yIGVsZW1lbnQnLCBuYW1lOiAnV2FpdCBmb3IgZWxlbWVudCcgfSxcbiAgICAgIHsgdmFsdWU6ICdSZXRyeScsIG5hbWU6ICdSZXRyeScgfSxcbiAgICAgIHsgdmFsdWU6ICdTa2lwJywgbmFtZTogJ1NraXAnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScsXG4gICAgbGFiZWw6ICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScsXG4gICAgcGxhY2Vob2xkZXI6ICdOb25lJyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnbm9uZScsIG5hbWU6ICdOb25lJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWVyZ2VkIGNvbmZpZyBmb3IgYSBzZWxlY3Q6IGJhc2UgY29uZmlnICsgb3ZlcnJpZGUuXG4gICAqIFdpcmVzIG9uU2VhcmNoLCBvbkxvYWRNb3JlIHRvIGJvdGggb3ZlcnJpZGUgY2FsbGJhY2tzIGFuZCBvdXRwdXQgZXZlbnRzLlxuICAgKi9cbiAgZ2V0Q29uZmlnRm9yU2VsZWN0KGtleTogc3RyaW5nLCBiYXNlQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LltrZXldO1xuICAgIGlmICghb3ZlcnJpZGUpIHJldHVybiBiYXNlQ29uZmlnO1xuXG4gICAgY29uc3QgbWVyZ2VkOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAgICAuLi5iYXNlQ29uZmlnLFxuICAgICAgLi4ub3ZlcnJpZGUsXG4gICAgICBvcHRpb25zOiBvdmVycmlkZS5vcHRpb25zID8/IGJhc2VDb25maWcub3B0aW9ucyxcbiAgICAgIGtleTogYmFzZUNvbmZpZy5rZXksXG4gICAgfTtcblxuICAgIGlmIChvdmVycmlkZS5zZXJ2ZXJTZWFyY2ggfHwgb3ZlcnJpZGUub25TZWFyY2gpIHtcbiAgICAgIG1lcmdlZC5vblNlYXJjaCA9IChxdWVyeSkgPT4ge1xuICAgICAgICBvdmVycmlkZS5vblNlYXJjaD8uKHF1ZXJ5KTtcbiAgICAgICAgdGhpcy5zZWxlY3RTZWFyY2guZW1pdCh7IGtleSwgcXVlcnkgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGUuaGFzTW9yZSB8fCBvdmVycmlkZS5vbkxvYWRNb3JlKSB7XG4gICAgICBtZXJnZWQub25Mb2FkTW9yZSA9IChxdWVyeT86IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBxID0gcXVlcnkgPz8gJyc7XG4gICAgICAgIG92ZXJyaWRlLm9uTG9hZE1vcmU/LihxKTtcbiAgICAgICAgdGhpcy5zZWxlY3RMb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIG9uU2VsZWN0T3BlbmVkKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RPcGVuZWQuZW1pdCh7IGtleSB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0U2VhcmNoKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdFNlYXJjaC5lbWl0KGV2ZW50KTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bZXZlbnQua2V5XTtcbiAgICBvdmVycmlkZT8ub25TZWFyY2g/LihldmVudC5xdWVyeSk7XG4gIH1cblxuICBvblNlbGVjdExvYWRNb3JlKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdExvYWRNb3JlLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LltldmVudC5rZXldO1xuICAgIG92ZXJyaWRlPy5vbkxvYWRNb3JlPy4oZXZlbnQucXVlcnkpO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpIHtcbiAgICAgIGNvbnN0IHZhbCA9IGV2ZW50LnZhbHVlO1xuICAgICAgdGhpcy5lZGl0TGFiZWxzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgodikgPT4gU3RyaW5nKHYpKS5maWx0ZXIoQm9vbGVhbikgOiB2YWwgIT0gbnVsbCA/IFtTdHJpbmcodmFsKV0gOiBbXTtcbiAgICAgIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvLyBNYXJrIFRlc3QgRGF0YSBzZWxlY3RzIGFzIGRpcnR5IHNvIGxhdGVyIGlucHV0IGNoYW5nZXMgKG9wdGlvbnMvY29uZmlnKSBkb24ndCBvdmVyd3JpdGUgdXNlciBjaG9pY2VcbiAgICBpZiAoZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy50ZXN0RGF0YVByb2ZpbGUgfHwgZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy50ZXN0RGF0YVNldCkge1xuICAgICAgY29uc3QgY3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KGV2ZW50LmtleSk7XG4gICAgICBjdHJsPy5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHsga2V5OiBldmVudC5rZXksIHZhbHVlOiBldmVudC52YWx1ZSB9KTtcbiAgfVxuXG4gIG9uTGFiZWxzQWRkQ3VzdG9tVmFsdWUoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IHYgPSAoZXZlbnQudmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXYgfHwgdGhpcy5lZGl0TGFiZWxzLmluY2x1ZGVzKHYpKSByZXR1cm47XG4gICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMuZWRpdExhYmVscywgdl07XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk/LnNldFZhbHVlKHRoaXMuZWRpdExhYmVscywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubGFiZWxBZGRlZC5lbWl0KHYpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb25maWdJdGVtVmFsdWUoc2VjdGlvblRpdGxlOiBzdHJpbmcsIGl0ZW1MYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWN0aW9uID0gWy4uLnRoaXMuY29uZmlnU2VjdGlvbnMsIC4uLnRoaXMuY29uZmlnU2VjdGlvbnNSb3cyXS5maW5kKFxuICAgICAgKHMpID0+XG4gICAgICAgIHMudGl0bGUgPT09IHNlY3Rpb25UaXRsZSB8fFxuICAgICAgICBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlY3Rpb25UaXRsZS50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgY29uc3QgaXRlbSA9IHNlY3Rpb24/Lml0ZW1zPy5maW5kKFxuICAgICAgKGkpID0+XG4gICAgICAgIGkubGFiZWwgPT09IGl0ZW1MYWJlbCB8fFxuICAgICAgICBpLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGl0ZW1MYWJlbC50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgcmV0dXJuIChpdGVtPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnO1xuICB9XG5cbiAgLyoqIEdldCB2YWx1ZSBmcm9tIERldmljZSBzZWN0aW9uIC0gc3VwcG9ydHMgYm90aCAnRGV2aWNlJyBhbmQgJ0RldmljZSBTZXR0aW5nJyB0aXRsZXMgKi9cbiAgcHJpdmF0ZSBnZXREZXZpY2VDb25maWdWYWx1ZShpdGVtTGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID1cbiAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UnLCBpdGVtTGFiZWwpIHx8XG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlIFNldHRpbmcnLCBpdGVtTGFiZWwpO1xuICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiB2YWwgIT09ICcnICYmIFN0cmluZyh2YWwpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcodmFsKSA6ICcnO1xuICB9XG5cbiAgLyoqIEdldCB2YWx1ZSBmcm9tIFdhaXRzIHNlY3Rpb24gLSBzdXBwb3J0cyBib3RoICdXYWl0IGFuZCByZXRyaWVzJyBhbmQgJ1dhaXRzICYgUmV0cmllcycgdGl0bGVzICovXG4gIHByaXZhdGUgZ2V0V2FpdHNSZXRyaWVzVmFsdWUoaXRlbUxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHYxID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXQgYW5kIHJldHJpZXMnLCBpdGVtTGFiZWwpO1xuICAgIGNvbnN0IHYyID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsIGl0ZW1MYWJlbCk7XG4gICAgbGV0IHZhbCA9ICh2MSAhPT0gJycgJiYgdjEgIT0gbnVsbCkgPyB2MSA6IHYyO1xuXG4gICAgLy8gV2hlbiB2YWx1ZXMgYXJlIGNvbWluZyBmcm9tIG9yZ2FuaXphdGlvbiBzZXR0aW5ncywgdGhlIHBvcnRhbCB3cmFwcyB0aGVtIGFzXG4gICAgLy8gXCJPcmcgTGV2ZWwgKEFDVFVBTCBWQUxVRSlcIi4gRm9yIGVkaXQgaW5wdXRzIChSZXRyeSBGYWlsZWQgU3RlcHMsIFRlc3QgQ2FzZSBUaW1lb3V0LFxuICAgIC8vIFdhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMpLCB3ZSBvbmx5IHdhbnQgdG8gc2hvdyB0aGUgaW5uZXIgdmFsdWUsIG5vdCB0aGUgd3JhcHBlci5cbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHJhdyA9IFN0cmluZyh2YWwpLnRyaW0oKTtcbiAgICAgIGNvbnN0IGxvd2VyID0gcmF3LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwcmVmaXggPSAnb3JnIGxldmVsICgnO1xuICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICBjb25zdCBvcGVuSWR4ID0gcmF3LmluZGV4T2YoJygnKTtcbiAgICAgICAgY29uc3QgY2xvc2VJZHggPSByYXcubGFzdEluZGV4T2YoJyknKTtcbiAgICAgICAgaWYgKG9wZW5JZHggPj0gMCAmJiBjbG9zZUlkeCA+IG9wZW5JZHgpIHtcbiAgICAgICAgICB2YWwgPSByYXcuc3Vic3RyaW5nKG9wZW5JZHggKyAxLCBjbG9zZUlkeCkudHJpbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9IHJhdy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycgJiYgU3RyaW5nKHZhbCkudHJpbSgpICE9PSAnJyA/IFN0cmluZyh2YWwpIDogJyc7XG4gIH1cblxuICAvKiogU3RyaXAgdHJhaWxpbmcgJ3MnIGZyb20gdmFsdWUgKGUuZy4gXCIxMHNcIiAtPiBcIjEwXCIpIGZvciBkaXNwbGF5IGluIHRpbWVvdXQgaW5wdXRzICovXG4gIHByaXZhdGUgc3RyaXBUcmFpbGluZ1VuaXRTKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSAnJykgcmV0dXJuIHZhbDtcbiAgICBjb25zdCBzID0gU3RyaW5nKHZhbCkudHJpbSgpO1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1xccypzJC9pLCAnJyk7XG4gIH1cblxuICAvKiogQWxsb3cgb25seSBkaWdpdHM7IHVzZWQgZm9yIFJldHJ5IEZhaWxlZCBTdGVwcywgVGVzdCBDYXNlIFRpbWVvdXQsIFdhaXQgVGltZW91dCBpbnB1dHMgKi9cbiAgb25seURpZ2l0cyh2YWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJycpIHJldHVybiAnJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbCkucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgfVxuXG4gIC8qKiBGb3IgdXBkYXRlOiB1c2UgXCIwXCIgd2hlbiB2YWx1ZSBpcyBlbXB0eSBzbyBBUEkgZ2V0cyBhIG51bWJlciAqL1xuICBwcml2YXRlIGVtcHR5TnVtVG9aZXJvKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgU3RyaW5nKHZhbCkudHJpbSgpID09PSAnJykgcmV0dXJuICcwJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbCkudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVyZXF1aXNpdGVDYXNlc0Zyb21Db25maWcoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnUHJlcmVxdWlzaXRlIENhc2UnKTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB2YWwuaW5jbHVkZXMoJywnKSA/IHZhbC5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFt2YWxdO1xuICB9XG5cbiAgLyoqIEVkaXQgbW9kZSBzaG91bGQgc2hvdyBwbGFjZWhvbGRlciB3aGVuIGRhdGFzZXQgaXMgbm90IHNlbGVjdGVkLiAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ25vdCBzZXQnID8gJycgOiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNQcmVyZXF1aXNpdGVDYXNlQ29uZmlnKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBbLi4udGhpcy5jb25maWdTZWN0aW9ucywgLi4udGhpcy5jb25maWdTZWN0aW9uc1JvdzJdLmZpbmQoXG4gICAgICAocykgPT4gcy50aXRsZSA9PT0gJ0V4ZWN1dGlvbidcbiAgICApO1xuICAgIHJldHVybiAhIXNlY3Rpb24/Lml0ZW1zPy5zb21lKChpKSA9PiBpLmxhYmVsID09PSAnUHJlcmVxdWlzaXRlIENhc2UnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbkNvbnRlbnQ7XG4gICAgdGhpcy5lZGl0U3RhdHVzID0gdGhpcy5zdGF0dXNJdGVtPy52YWx1ZSA/PyAnJztcbiAgICB0aGlzLmVkaXRQcmlvcml0eSA9IHRoaXMucHJpb3JpdHlJdGVtPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0eXBlUmF3ID0gKHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVHlwZScpIHx8ICh0aGlzLnR5cGVJdGVtPy52YWx1ZSBhcyBzdHJpbmcpKSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBQcm9maWxlJykgPz8gJyc7XG4gICAgY29uc3QgdGVzdERhdGFTZXRSYXcgPSB0aGlzLm5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUoXG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBTZXQnKSA/PyAnJ1xuICAgICk7XG4gICAgY29uc3QgdHlwZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodHlwZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndHlwZSddPy5vcHRpb25zKSA/PyB0eXBlUmF3O1xuICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFQcm9maWxlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVByb2ZpbGUnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFQcm9maWxlUmF3O1xuICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVNldFJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFTZXQnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFTZXRSYXc7XG4gICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMubGFiZWxzXTtcbiAgICBjb25zdCBhdXRvV2FpdFZhbCA9IHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgfHwgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsICdBdXRvIFdhaXQnKTtcbiAgICB0aGlzLmF1dG9XYWl0RW5hYmxlZCA9ICEhKGF1dG9XYWl0VmFsICYmIGF1dG9XYWl0VmFsLnRyaW0oKSAhPT0gJycgJiYgU3RyaW5nKGF1dG9XYWl0VmFsKSAhPT0gJ2ZhbHNlJyk7XG4gICAgdGhpcy5yZXRyeUZhaWxlZFN0ZXBzID0gdGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnUmV0cnkgRmFpbGVkIFN0ZXBzJyk7XG4gICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXQgPSB0aGlzLnN0cmlwVHJhaWxpbmdVbml0Uyh0aGlzLmdldFdhaXRzUmV0cmllc1ZhbHVlKCdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknKSk7XG4gICAgdGhpcy53YWl0VGltZW91dExvY2F0b3JzID0gdGhpcy5zdHJpcFRyYWlsaW5nVW5pdFModGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknKSk7XG4gICAgdGhpcy5tb2JpbGVUZXN0aW5nRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdNb2JpbGUgVGVzdGluZycpO1xuICAgIHRoaXMuZXh0ZW5zaW9uVXNlRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdFeHRlbnNpb24gVXNlJyk7XG4gICAgdGhpcy5kYXRhRHJpdmVuRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdEYXRhIERyaXZlbicpO1xuICAgIGNvbnN0IGVuYWJsZUFpU21hcnRuZXNzID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgIGNvbnN0IGRlZmF1bHRBaUFjdGlvbiA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0RlZmF1bHQgQUkgQWN0aW9uJyk7XG4gICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyk7XG4gICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/Llsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddPy5vcHRpb25zKSA/PyBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlUmF3O1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGFSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdFbmFibGUgQUkgbWV0YWRhdGEgY29sbGVjdGlvbicpO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGEgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh1c2VBaU1ldGFkYXRhUmF3KTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlcyA9IHRoaXMuZ2V0UHJlcmVxdWlzaXRlQ2FzZXNGcm9tQ29uZmlnKCk7XG4gICAgY29uc3QgZGVmYXVsdEJyb3dzZXIgPVxuICAgICAgdGhpcy5wbGF0Zm9ybSA9PT0gJ3dlYidcbiAgICAgICAgPyB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdEZWZhdWx0IEJyb3dzZXInKSB8fCB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ0RlZmF1bHQgQnJvd3NlcicpXG4gICAgICAgIDogdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdEZWZhdWx0IEJyb3dzZXInKTtcbiAgICBjb25zdCB2aWRlb1JlY29yZGluZ1JhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVmlkZW8gUmVjb3JkaW5nJyk7XG4gICAgY29uc3QgdmlkZW9SZWNvcmRpbmcgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh2aWRlb1JlY29yZGluZ1JhdyBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkZWZhdWx0Vmlld3BvcnQgPSB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdEZWZhdWx0IFZpZXdwb3J0JykgfHwgdGhpcy5nZXREZXZpY2VDb25maWdWYWx1ZSgnVmlld3BvcnQnKSB8fCAnJztcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0RldmljZScsICdUeXBlJyk7XG4gICAgY29uc3QgZGV2aWNlT1MgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlJywgJ09TJyk7XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBzdGF0dXM6IHRoaXMuZWRpdFN0YXR1cyxcbiAgICAgIHByaW9yaXR5OiB0aGlzLmVkaXRQcmlvcml0eSxcbiAgICAgIHR5cGU6IHR5cGVWYWwgfHwgJycsXG4gICAgICBsYWJlbHM6IHRoaXMuZWRpdExhYmVscyxcbiAgICAgIHRlc3REYXRhUHJvZmlsZTogdGVzdERhdGFQcm9maWxlVmFsIHx8ICcnLFxuICAgICAgdGVzdERhdGFTZXQ6IHRlc3REYXRhU2V0VmFsID8/ICcnLFxuICAgICAgcHJlcmVxdWlzaXRlQ2FzZXMsXG4gICAgICBkZWZhdWx0QnJvd3NlcjogZGVmYXVsdEJyb3dzZXIgfHwgJ0Nocm9tZScsXG4gICAgICB2aWRlb1JlY29yZGluZzogdmlkZW9SZWNvcmRpbmcgfHwgJycsXG4gICAgICBkZWZhdWx0Vmlld3BvcnQ6IGRlZmF1bHRWaWV3cG9ydCB8fCAnJyxcbiAgICAgIGRldmljZVR5cGU6IGRldmljZVR5cGUgfHwgJycsXG4gICAgICBkZXZpY2VPUzogZGV2aWNlT1MgfHwgJycsXG4gICAgICBlbmFibGVBaVNtYXJ0bmVzczogZW5hYmxlQWlTbWFydG5lc3MgfHwgJ0FkdmFuY2VkJyxcbiAgICAgIGRlZmF1bHRBaUFjdGlvbjogZGVmYXVsdEFpQWN0aW9uIHx8ICdTbWFydCB3YWl0JyxcbiAgICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UgfHwgJ25vbmUnLFxuICAgICAgdXNlQWlNZXRhZGF0YTogdXNlQWlNZXRhZGF0YSB8fCAnJyxcbiAgICB9KTtcbiAgICB0aGlzLl9pbml0aWFsRm9ybVNuYXBzaG90ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFNhdmVQYXlsb2FkKCkpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGhhc1Vuc2F2ZWRDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9pbml0aWFsRm9ybVNuYXBzaG90ID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRTYXZlUGF5bG9hZCgpKSAhPT0gdGhpcy5faW5pdGlhbEZvcm1TbmFwc2hvdDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTYXZlUGF5bG9hZCgpOiBUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGEge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdzdGF0dXMnKT8udmFsdWUgPz8gdGhpcy5lZGl0U3RhdHVzO1xuICAgIGNvbnN0IHByaW9yaXR5ID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3ByaW9yaXR5Jyk/LnZhbHVlID8/IHRoaXMuZWRpdFByaW9yaXR5O1xuICAgIGNvbnN0IHR5cGVWYWwgPSB0aGlzLmVkaXRGb3JtLmdldCgndHlwZScpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVWYWwgPSB0aGlzLmVkaXRGb3JtLmdldCgndGVzdERhdGFQcm9maWxlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGNvbmZpZ1NlY3Rpb25zTWVyZ2VkID0gdGhpcy5tZXJnZUNvbmZpZ1NlY3Rpb25zKCk7XG4gICAgY29uc3QgY29uZmlnU2VjdGlvbnNSb3cyTWVyZ2VkID0gdGhpcy5tZXJnZUNvbmZpZ1NlY3Rpb25zUm93MigpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbkNvbnRlbnQ6IHRoaXMuZWRpdERlc2NyaXB0aW9uLFxuICAgICAgc3RhdHVzLFxuICAgICAgcHJpb3JpdHksXG4gICAgICB0eXBlOiB0eXBlVmFsLFxuICAgICAgbGFiZWxzOiB0aGlzLmVkaXRMYWJlbHMsXG4gICAgICB0ZXN0RGF0YVByb2ZpbGVJZDogdGVzdERhdGFQcm9maWxlVmFsIHx8IG51bGwsXG4gICAgICB0ZXN0RGF0YVNldEluZGV4OiB0ZXN0RGF0YVNldFZhbCA/PyBudWxsLFxuICAgICAgY29uZmlnU2VjdGlvbnM6IGNvbmZpZ1NlY3Rpb25zTWVyZ2VkLFxuICAgICAgY29uZmlnU2VjdGlvbnNSb3cyOiBjb25maWdTZWN0aW9uc1JvdzJNZXJnZWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVRvT3B0aW9uVmFsdWUoXG4gICAgY29uZmlnVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHVuZGVmaW5lZFxuICApOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGlmIChjb25maWdWYWx1ZSA9PSBudWxsIHx8IGNvbmZpZ1ZhbHVlID09PSAnJykgcmV0dXJuIGNvbmZpZ1ZhbHVlO1xuICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zID8/IFtdO1xuICAgIGlmICghb3B0cy5sZW5ndGgpIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICBjb25zdCBudW0gPSB0eXBlb2YgY29uZmlnVmFsdWUgPT09ICdudW1iZXInID8gY29uZmlnVmFsdWUgOiBOdW1iZXIoY29uZmlnVmFsdWUpO1xuICAgIGNvbnN0IGlzTnVtZXJpYyA9ICFOdW1iZXIuaXNOYU4obnVtKSAmJiBTdHJpbmcoY29uZmlnVmFsdWUpLnRyaW0oKSA9PT0gU3RyaW5nKG51bSk7XG4gICAgaWYgKGlzTnVtZXJpYykge1xuICAgICAgLy8gSWYgb3B0aW9ucyB1c2UgbnVtZXJpYyB2YWx1ZXMgKGUuZy4gaW5kaWNlcyBmb3IgVGVzdCBEYXRhIFNldCksXG4gICAgICAvLyByZXR1cm4gdGhlIG51bWVyaWMgZm9ybSBzbyB0aGUgc2VsZWN0IGNhbiBtYXRjaCBieSBzdHJpY3QgZXF1YWxpdHkuXG4gICAgICBjb25zdCBoYXNOdW1lcmljT3B0aW9uID0gb3B0cy5zb21lKFxuICAgICAgICAobykgPT4gdHlwZW9mIG8udmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiAobyBhcyBhbnkpLmlkID09PSAnbnVtYmVyJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBoYXNOdW1lcmljT3B0aW9uID8gbnVtIDogY29uZmlnVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN0ciA9IFN0cmluZyhjb25maWdWYWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWF0Y2ggPSBvcHRzLmZpbmQoKG8pID0+IHtcbiAgICAgIGNvbnN0IG4gPSBTdHJpbmcoby5uYW1lID8/IG8ubGFiZWwgPz8gby52YWx1ZSA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gbiA9PT0gc3RyO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXRjaCAhPSBudWxsID8gKG1hdGNoLnZhbHVlID8/IChtYXRjaCBhcyBhbnkpLmlkID8/IG1hdGNoKSA6IGNvbmZpZ1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVCb29sZWFuU2VsZWN0VmFsdWUodmFsOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09PSB0cnVlIHx8IHZhbCA9PT0gJ3RydWUnKSByZXR1cm4gJ3RydWUnO1xuICAgIGlmICh2YWwgPT09IGZhbHNlIHx8IHZhbCA9PT0gJ2ZhbHNlJykgcmV0dXJuICdmYWxzZSc7XG4gICAgaWYgKFxuICAgICAgdmFsID09PSAnT3JnIGxldmVsJyB8fFxuICAgICAgdmFsID09PSAnT3JnIExldmVsJyB8fFxuICAgICAgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC50cmltKCkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdvcmcgbGV2ZWwgKCcpKVxuICAgICkge1xuICAgICAgcmV0dXJuICdPcmcgbGV2ZWwnO1xuICAgIH1cbiAgICBpZiAodmFsID09PSAnT24gV2FpdCcgfHwgdmFsID09PSAnb24gd2FpdCcpIHJldHVybiAndHJ1ZSc7XG4gICAgcmV0dXJuIHZhbCAmJiBTdHJpbmcodmFsKS50cmltKCkgPyBTdHJpbmcodmFsKSA6ICcnO1xuICB9XG5cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2xhYmVscyddIHx8IGNoYW5nZXNbJ3NlbGVjdENvbmZpZ092ZXJyaWRlcyddKSB7XG4gICAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgICBpZiAoY2hhbmdlc1snc2VsZWN0Q29uZmlnT3ZlcnJpZGVzJ10gJiYgdGhpcy5lZGl0Rm9ybT8uZ2V0KCd0eXBlJykpIHtcbiAgICAgICAgY29uc3QgdHlwZUN0cmwgPSB0aGlzLmVkaXRGb3JtLmdldCgndHlwZScpO1xuICAgICAgICBjb25zdCB0ZHBDdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhUHJvZmlsZScpO1xuICAgICAgICBjb25zdCB0ZHNDdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk7XG4gICAgICAgIGNvbnN0IGVuYWJsZUFpQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdlbmFibGVBaVNtYXJ0bmVzcycpO1xuICAgICAgICBjb25zdCBkZWZhdWx0QWlDdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RlZmF1bHRBaUFjdGlvbicpO1xuICAgICAgICBjb25zdCBwYXRjaDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPiA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG4gICAgICAgIGlmICh0eXBlQ3RybCAmJiAhdHlwZUN0cmwuZGlydHkpIHtcbiAgICAgICAgICBjb25zdCB0eXBlUmF3ID0gKHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVHlwZScpIHx8ICh0aGlzLnR5cGVJdGVtPy52YWx1ZSBhcyBzdHJpbmcpKSA/PyAnJztcbiAgICAgICAgICBwYXRjaFsndHlwZSddID0gKHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodHlwZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndHlwZSddPy5vcHRpb25zKSA/PyB0eXBlUmF3KSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgVGVzdCBEYXRhIFByb2ZpbGUgLyBTZXQsIGFsbG93IG9uZS10aW1lIHJlLXJlc29sdmUgZnJvbSBjb25maWcgd2hlbiBvcHRpb25zIGFycml2ZSxcbiAgICAgICAgLy8gYnV0IG5ldmVyIG92ZXJ3cml0ZSBhIHVzZXItZWRpdGVkIChkaXJ0eSkgdmFsdWUuXG4gICAgICAgIGlmICh0ZHBDdHJsICYmICF0ZHBDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3QgdGVzdERhdGFQcm9maWxlUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUZXN0IERhdGEgUHJvZmlsZScpID8/ICcnO1xuICAgICAgICAgIHBhdGNoWyd0ZXN0RGF0YVByb2ZpbGUnXSA9XG4gICAgICAgICAgICAodGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVByb2ZpbGVSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3Rlc3REYXRhUHJvZmlsZSddPy5vcHRpb25zKSA/P1xuICAgICAgICAgICAgICB0ZXN0RGF0YVByb2ZpbGVSYXcpIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZHNDdHJsICYmICF0ZHNDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3QgdGVzdERhdGFTZXRSYXcgPSB0aGlzLm5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUoXG4gICAgICAgICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBTZXQnKSA/PyAnJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgcGF0Y2hbJ3Rlc3REYXRhU2V0J10gPVxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVNldFJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFTZXQnXT8ub3B0aW9ucykgPz9cbiAgICAgICAgICAgIHRlc3REYXRhU2V0UmF3ID8/ICcnO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlLXJlc29sdmUgQUkgZmllbGRzIHdoZW4gdGhlaXIgb3B0aW9ucyBhcnJpdmUgKHRoZXkgdXNlIGRpc3BsYXkgbmFtZXMgYXMgdmFsdWVzKS5cbiAgICAgICAgaWYgKGVuYWJsZUFpQ3RybCAmJiAhZW5hYmxlQWlDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3QgYWlTbWFydG5lc3NSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdFbmFibGUgQUkgU21hcnRuZXNzJyk7XG4gICAgICAgICAgaWYgKGFpU21hcnRuZXNzUmF3KSBwYXRjaFsnZW5hYmxlQWlTbWFydG5lc3MnXSA9IGFpU21hcnRuZXNzUmF3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0QWlDdHJsICYmICFkZWZhdWx0QWlDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdEFpUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRGVmYXVsdCBBSSBBY3Rpb24nKTtcbiAgICAgICAgICBpZiAoZGVmYXVsdEFpUmF3KSBwYXRjaFsnZGVmYXVsdEFpQWN0aW9uJ10gPSBkZWZhdWx0QWlSYXc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2JDdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnKTtcbiAgICAgICAgaWYgKGtiQ3RybCAmJiAha2JDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3Qga2JSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScpO1xuICAgICAgICAgIGNvbnN0IGtiUmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKGtiUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWydrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJ10/Lm9wdGlvbnMpID8/IGtiUmF3O1xuICAgICAgICAgIGlmIChrYlJlc29sdmVkKSBwYXRjaFsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddID0ga2JSZXNvbHZlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuZWRpdEZvcm0ucGF0Y2hWYWx1ZShwYXRjaCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydkZXNjcmlwdGlvbkNvbnRlbnQnXSB8fCBjaGFuZ2VzWydsYWJlbHMnXSB8fCBjaGFuZ2VzWydtZXRhZGF0YUl0ZW1zJ10pIHtcbiAgICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbkNvbnRlbnQ7XG4gICAgICB0aGlzLmVkaXRMYWJlbHMgPSBbLi4udGhpcy5sYWJlbHNdO1xuICAgICAgdGhpcy5lZGl0U3RhdHVzID0gdGhpcy5zdGF0dXNJdGVtPy52YWx1ZSA/PyAnJztcbiAgICAgIHRoaXMuZWRpdFByaW9yaXR5ID0gdGhpcy5wcmlvcml0eUl0ZW0/LnZhbHVlID8/ICcnO1xuICAgICAgY29uc3QgdHlwZVZhbCA9ICh0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1R5cGUnKSB8fCAodGhpcy50eXBlSXRlbT8udmFsdWUgYXMgc3RyaW5nKSkgPz8gJyc7XG4gICAgICBjb25zdCBzdGF0dXNDb250cm9sID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3N0YXR1cycpO1xuICAgICAgY29uc3QgcHJpb3JpdHlDb250cm9sID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3ByaW9yaXR5Jyk7XG4gICAgICBjb25zdCB0eXBlQ29udHJvbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0eXBlJyk7XG4gICAgICBjb25zdCBsYWJlbHNDb250cm9sID0gdGhpcy5lZGl0Rm9ybS5nZXQoVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMubGFiZWxzKTtcbiAgICAgIGNvbnN0IHByZXNlcnZlU3RhdHVzID0gc3RhdHVzQ29udHJvbD8udG91Y2hlZCB8fCBzdGF0dXNDb250cm9sPy5kaXJ0eTtcbiAgICAgIGNvbnN0IHByZXNlcnZlUHJpb3JpdHkgPSBwcmlvcml0eUNvbnRyb2w/LnRvdWNoZWQgfHwgcHJpb3JpdHlDb250cm9sPy5kaXJ0eTtcbiAgICAgIGNvbnN0IHByZXNlcnZlVHlwZSA9IHR5cGVDb250cm9sPy50b3VjaGVkIHx8IHR5cGVDb250cm9sPy5kaXJ0eTtcbiAgICAgIGNvbnN0IHByZXNlcnZlTGFiZWxzID0gbGFiZWxzQ29udHJvbD8udG91Y2hlZCB8fCBsYWJlbHNDb250cm9sPy5kaXJ0eTtcbiAgICAgIHRoaXMuZWRpdEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIC4uLihwcmVzZXJ2ZVN0YXR1cyA/IHt9IDogeyBzdGF0dXM6IHRoaXMuZWRpdFN0YXR1cyB9KSxcbiAgICAgICAgLi4uKHByZXNlcnZlUHJpb3JpdHkgPyB7fSA6IHsgcHJpb3JpdHk6IHRoaXMuZWRpdFByaW9yaXR5IH0pLFxuICAgICAgICAuLi4ocHJlc2VydmVUeXBlID8ge30gOiB7IHR5cGU6IHR5cGVWYWwgfSksXG4gICAgICAgIC4uLihwcmVzZXJ2ZUxhYmVscyA/IHt9IDogeyBsYWJlbHM6IHRoaXMuZWRpdExhYmVscyB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sncHJlcmVxdWlzaXRlQ2FzZU9wdGlvbnMnXSAmJiB0aGlzLnByZXJlcXVpc2l0ZUNhc2VPcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5wcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLnByZXJlcXVpc2l0ZUNhc2VTZWxlY3RDb25maWcsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMucHJlcmVxdWlzaXRlQ2FzZU9wdGlvbnMsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29uZmlnU2VjdGlvbnMnXSB8fCBjaGFuZ2VzWydjb25maWdTZWN0aW9uc1JvdzInXSkge1xuICAgICAgY29uc3QgZW5hYmxlQWlTbWFydG5lc3MgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdFbmFibGUgQUkgU21hcnRuZXNzJyk7XG4gICAgICBjb25zdCBkZWZhdWx0QWlBY3Rpb24gPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdEZWZhdWx0IEFJIEFjdGlvbicpO1xuICAgICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyk7XG4gICAgICBjb25zdCBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZShrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWydrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJ10/Lm9wdGlvbnMpID8/IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2VSYXc7XG4gICAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlcyA9IHRoaXMuZ2V0UHJlcmVxdWlzaXRlQ2FzZXNGcm9tQ29uZmlnKCk7XG4gICAgICBjb25zdCB0eXBlUmF3ID0gKHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVHlwZScpIHx8ICh0aGlzLnR5cGVJdGVtPy52YWx1ZSBhcyBzdHJpbmcpKSA/PyAnJztcbiAgICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVGVzdCBEYXRhIFByb2ZpbGUnKSA/PyAnJztcbiAgICAgIGNvbnN0IHRlc3REYXRhU2V0UmF3ID0gdGhpcy5ub3JtYWxpemVUZXN0RGF0YVNldFJhd1ZhbHVlKFxuICAgICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBTZXQnKSA/PyAnJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHR5cGVWYWwgPSB0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHR5cGVSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3R5cGUnXT8ub3B0aW9ucykgPz8gdHlwZVJhdztcbiAgICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFQcm9maWxlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVByb2ZpbGUnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFQcm9maWxlUmF3O1xuICAgICAgY29uc3QgdGVzdERhdGFTZXRWYWwgPSB0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHRlc3REYXRhU2V0UmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVNldCddPy5vcHRpb25zKSA/PyB0ZXN0RGF0YVNldFJhdztcbiAgICAgIGNvbnN0IGRlZmF1bHRCcm93c2VyID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdEZWZhdWx0IEJyb3dzZXInKTtcbiAgICAgIGNvbnN0IHZpZGVvUmVjb3JkaW5nUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdWaWRlbyBSZWNvcmRpbmcnKTtcbiAgICAgIGNvbnN0IHZpZGVvUmVjb3JkaW5nID0gdGhpcy5ub3JtYWxpemVCb29sZWFuU2VsZWN0VmFsdWUodmlkZW9SZWNvcmRpbmdSYXcgYXMgc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCB1c2VBaU1ldGFkYXRhUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nKTtcbiAgICAgIGNvbnN0IHVzZUFpTWV0YWRhdGEgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh1c2VBaU1ldGFkYXRhUmF3IGFzIHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZGVmYXVsdFZpZXdwb3J0ID0gdGhpcy5nZXREZXZpY2VDb25maWdWYWx1ZSgnRGVmYXVsdCBWaWV3cG9ydCcpIHx8IHRoaXMuZ2V0RGV2aWNlQ29uZmlnVmFsdWUoJ1ZpZXdwb3J0JykgfHwgJyc7XG4gICAgICBjb25zdCBkZXZpY2VUeXBlID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0RldmljZScsICdUeXBlJyk7XG4gICAgICBjb25zdCBkZXZpY2VPUyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UnLCAnT1MnKTtcbiAgICAgIGNvbnN0IGF1dG9XYWl0VmFsID0gdGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnRW5hYmxlIEF2b2lkIEF1dG8gd2FpdCBmb3Igc3RlcHMnKSB8fCB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnV2FpdHMgJiBSZXRyaWVzJywgJ0F1dG8gV2FpdCcpO1xuICAgICAgdGhpcy5hdXRvV2FpdEVuYWJsZWQgPSAhIShhdXRvV2FpdFZhbCAmJiBhdXRvV2FpdFZhbC50cmltKCkgIT09ICcnICYmIFN0cmluZyhhdXRvV2FpdFZhbCkgIT09ICdmYWxzZScpO1xuICAgICAgdGhpcy5yZXRyeUZhaWxlZFN0ZXBzID0gdGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnUmV0cnkgRmFpbGVkIFN0ZXBzJyk7XG4gICAgICB0aGlzLnRlc3RDYXNlVGltZW91dCA9IHRoaXMuc3RyaXBUcmFpbGluZ1VuaXRTKHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpKTtcbiAgICAgIHRoaXMud2FpdFRpbWVvdXRMb2NhdG9ycyA9IHRoaXMuc3RyaXBUcmFpbGluZ1VuaXRTKHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1dhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlY3MpJykpO1xuICAgICAgdGhpcy5tb2JpbGVUZXN0aW5nRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdNb2JpbGUgVGVzdGluZycpO1xuICAgICAgdGhpcy5leHRlbnNpb25Vc2VFbmFibGVkID0gISF0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnS2V5IEZsYWdzJywgJ0V4dGVuc2lvbiBVc2UnKTtcbiAgICAgIHRoaXMuZGF0YURyaXZlbkVuYWJsZWQgPSAhIXRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdLZXkgRmxhZ3MnLCAnRGF0YSBEcml2ZW4nKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgY29uc3QgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICBpZiAoZW5hYmxlQWlTbWFydG5lc3MpIHBhdGNoWydlbmFibGVBaVNtYXJ0bmVzcyddID0gZW5hYmxlQWlTbWFydG5lc3M7XG4gICAgICBpZiAoZGVmYXVsdEFpQWN0aW9uKSBwYXRjaFsnZGVmYXVsdEFpQWN0aW9uJ10gPSBkZWZhdWx0QWlBY3Rpb247XG4gICAgICBpZiAoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSkgcGF0Y2hbJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnXSA9IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U7XG4gICAgICBpZiAodXNlQWlNZXRhZGF0YSkgcGF0Y2hbJ3VzZUFpTWV0YWRhdGEnXSA9IHVzZUFpTWV0YWRhdGE7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlQ2FzZXMubGVuZ3RoKSBwYXRjaFsncHJlcmVxdWlzaXRlQ2FzZXMnXSA9IHByZXJlcXVpc2l0ZUNhc2VzO1xuICAgICAgaWYgKHR5cGVWYWwpIHBhdGNoWyd0eXBlJ10gPSB0eXBlVmFsO1xuXG4gICAgICAvLyBSZS1zeW5jIFRlc3QgRGF0YSBQcm9maWxlIC8gU2V0IGZyb20gY29uZmlnIG9ubHkgd2hlbiBjb250cm9scyBhcmUgTk9UIGRpcnR5XG4gICAgICBjb25zdCB0ZHBDdHJsMiA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVByb2ZpbGUnKTtcbiAgICAgIGNvbnN0IHRkc0N0cmwyID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVRkcDIgPSB0ZHBDdHJsMj8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVRkczIgPSB0ZHNDdHJsMj8uZGlydHk7XG5cbiAgICAgIGlmICh0ZXN0RGF0YVByb2ZpbGVWYWwgJiYgIXByZXNlcnZlVGRwMikgcGF0Y2hbJ3Rlc3REYXRhUHJvZmlsZSddID0gdGVzdERhdGFQcm9maWxlVmFsO1xuICAgICAgaWYgKHRlc3REYXRhU2V0VmFsICE9IG51bGwgJiYgdGVzdERhdGFTZXRWYWwgIT09ICcnICYmICFwcmVzZXJ2ZVRkczIpIHBhdGNoWyd0ZXN0RGF0YVNldCddID0gdGVzdERhdGFTZXRWYWw7XG4gICAgICBpZiAoZGVmYXVsdEJyb3dzZXIpIHBhdGNoWydkZWZhdWx0QnJvd3NlciddID0gZGVmYXVsdEJyb3dzZXI7XG4gICAgICBpZiAodmlkZW9SZWNvcmRpbmcpIHBhdGNoWyd2aWRlb1JlY29yZGluZyddID0gdmlkZW9SZWNvcmRpbmc7XG4gICAgICBpZiAoZGVmYXVsdFZpZXdwb3J0KSBwYXRjaFsnZGVmYXVsdFZpZXdwb3J0J10gPSBkZWZhdWx0Vmlld3BvcnQ7XG4gICAgICBpZiAoZGV2aWNlVHlwZSkgcGF0Y2hbJ2RldmljZVR5cGUnXSA9IGRldmljZVR5cGU7XG4gICAgICBpZiAoZGV2aWNlT1MpIHBhdGNoWydkZXZpY2VPUyddID0gZGV2aWNlT1M7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkgdGhpcy5lZGl0Rm9ybS5wYXRjaFZhbHVlKHBhdGNoKTtcbiAgICB9XG4gIH1cblxuICBvblJlbW92ZUxhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSB0aGlzLmVkaXRMYWJlbHMuZmlsdGVyKChsKSA9PiBsICE9PSBsYWJlbCk7XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk/LnNldFZhbHVlKHRoaXMuZWRpdExhYmVscywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DbGVhckFsbExhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSBbXTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5lZGl0Rm9ybS5nZXQoVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMubGFiZWxzKT8uc2V0VmFsdWUoW10sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQWRkRnJlcXVlbnRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRMYWJlbHMuaW5jbHVkZXMobGFiZWwpKSB7XG4gICAgICB0aGlzLmVkaXRMYWJlbHMgPSBbLi4udGhpcy5lZGl0TGFiZWxzLCBsYWJlbF07XG4gICAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmVkaXRGb3JtLmdldChURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpPy5zZXRWYWx1ZSh0aGlzLmVkaXRMYWJlbHMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmUuZW1pdCh0aGlzLmJ1aWxkU2F2ZVBheWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ29uZmlnU2VjdGlvbnMoKTogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdIHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMucGxhdGZvcm07XG4gICAgY29uc3QgdmlkZW9SZWNvcmRpbmdWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd2aWRlb1JlY29yZGluZycpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB2aWRlb1JlY29yZGluZyA9IHZpZGVvUmVjb3JkaW5nVmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiB2aWRlb1JlY29yZGluZ1ZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiB2aWRlb1JlY29yZGluZ1ZhbHVlO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGFWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd1c2VBaU1ldGFkYXRhJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGEgPSB1c2VBaU1ldGFkYXRhVmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiB1c2VBaU1ldGFkYXRhVmFsdWUgPT09ICdmYWxzZScgPyBmYWxzZSA6IHVzZUFpTWV0YWRhdGFWYWx1ZTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlc1JhdyA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdwcmVyZXF1aXNpdGVDYXNlcycpPy52YWx1ZTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlcyA9IEFycmF5LmlzQXJyYXkocHJlcmVxdWlzaXRlQ2FzZXNSYXcpXG4gICAgICA/IHByZXJlcXVpc2l0ZUNhc2VzUmF3Lm1hcCgodikgPT4gU3RyaW5nKHYpKS5maWx0ZXIoQm9vbGVhbilcbiAgICAgIDogcHJlcmVxdWlzaXRlQ2FzZXNSYXcgIT0gbnVsbCAmJiBwcmVyZXF1aXNpdGVDYXNlc1JhdyAhPT0gJydcbiAgICAgICAgPyBbU3RyaW5nKHByZXJlcXVpc2l0ZUNhc2VzUmF3KV1cbiAgICAgICAgOiBbXTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlVmFsdWUgPSBwcmVyZXF1aXNpdGVDYXNlcy5sZW5ndGggPyBwcmVyZXF1aXNpdGVDYXNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgIGNvbnN0IHR5cGVWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0eXBlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhUHJvZmlsZScpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVNldFZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk/LnZhbHVlID8/ICcnO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdFeGVjdXRpb24nKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gc2VjdGlvbi5pdGVtc1xuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEocGxhdGZvcm0gPT09ICd3ZWInICYmIGl0ZW0ubGFiZWwgPT09ICdEZWZhdWx0IEJyb3dzZXInKSlcbiAgICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1ZpZGVvIFJlY29yZGluZycpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB2aWRlb1JlY29yZGluZyB9O1xuICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdQcmVyZXF1aXNpdGUgQ2FzZScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiBwcmVyZXF1aXNpdGVDYXNlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVHlwZScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0eXBlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVGVzdCBEYXRhIFByb2ZpbGUnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGVzdERhdGFQcm9maWxlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVGVzdCBEYXRhIFNldCcpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0ZXN0RGF0YVNldFZhbHVlIH07XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc2VjdGlvbiwgaXRlbXMgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uLnRpdGxlID09PSAnQUkgQ29uZmlndXJhdGlvbicpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdlbmFibGVBaVNtYXJ0bmVzcycpPy52YWx1ZTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFpQWN0aW9uVmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGVmYXVsdEFpQWN0aW9uJyk/LnZhbHVlO1xuICAgICAgICBjb25zdCBrbm93bGVkZ2VCYXNlVmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScpPy52YWx1ZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzZWN0aW9uLml0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdXNlQWlNZXRhZGF0YSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRW5hYmxlIEFJIFNtYXJ0bmVzcycgJiYgZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSAhPSBudWxsICYmIGVuYWJsZUFpU21hcnRuZXNzVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRGVmYXVsdCBBSSBBY3Rpb24nICYmIGRlZmF1bHRBaUFjdGlvblZhbHVlICE9IG51bGwgJiYgZGVmYXVsdEFpQWN0aW9uVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogZGVmYXVsdEFpQWN0aW9uVmFsdWUgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyAmJiBrbm93bGVkZ2VCYXNlVmFsdWUgIT0gbnVsbCAmJiBrbm93bGVkZ2VCYXNlVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZToga25vd2xlZGdlQmFzZVZhbHVlIH07XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ29uZmlnU2VjdGlvbnNSb3cyKCk6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgIGNvbnN0IGRlZmF1bHRCcm93c2VyID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RlZmF1bHRCcm93c2VyJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGRlZmF1bHRWaWV3cG9ydCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZWZhdWx0Vmlld3BvcnQnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgZGV2aWNlVHlwZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZXZpY2VUeXBlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGRldmljZU9TID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RldmljZU9TJyk/LnZhbHVlID8/ICcnO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY29uZmlnU2VjdGlvbnNSb3cyLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdXYWl0cyAmIFJldHJpZXMnIHx8IHNlY3Rpb24udGl0bGUgPT09ICdXYWl0IGFuZCByZXRyaWVzJykge1xuICAgICAgICBjb25zdCBhdXRvV2FpdFZhbHVlID0gdGhpcy5hdXRvV2FpdEVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJztcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzZWN0aW9uLml0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnQXV0byBXYWl0JykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IGF1dG9XYWl0VmFsdWUgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHRoaXMuYXV0b1dhaXRFbmFibGVkIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdSZXRyeSBGYWlsZWQgU3RlcHMnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGhpcy5lbXB0eU51bVRvWmVybyh0aGlzLnJldHJ5RmFpbGVkU3RlcHMpIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGhpcy5lbXB0eU51bVRvWmVybyh0aGlzLnRlc3RDYXNlVGltZW91dCkgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1dhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlY3MpJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHRoaXMuZW1wdHlOdW1Ub1plcm8odGhpcy53YWl0VGltZW91dExvY2F0b3JzKSB9O1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc2VjdGlvbiwgaXRlbXMgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uLnRpdGxlID09PSAnRGV2aWNlJyB8fCBzZWN0aW9uLnRpdGxlID09PSAnRGV2aWNlIFNldHRpbmcnKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW1xuICAgICAgICAgIC4uLihwbGF0Zm9ybSA9PT0gJ3dlYidcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IEJyb3dzZXInLCB2YWx1ZTogZGVmYXVsdEJyb3dzZXIgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWaWV3cG9ydCcsIHZhbHVlOiBkZWZhdWx0Vmlld3BvcnQgfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ1R5cGUnLCB2YWx1ZTogZGV2aWNlVHlwZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdPUycsIHZhbHVlOiBkZXZpY2VPUyB9LFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc2VjdGlvbiwgaXRlbXMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWN0aW9uO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXhpc3RpbmdEZXZpY2UgPSByZXN1bHQuZmluZCgocykgPT4gcy50aXRsZSA9PT0gJ0RldmljZScgfHwgcy50aXRsZSA9PT0gJ0RldmljZSBTZXR0aW5nJyk7XG4gICAgaWYgKCFleGlzdGluZ0RldmljZSkge1xuICAgICAgY29uc3QgZGV2aWNlU2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbiA9IHtcbiAgICAgICAgdGl0bGU6ICdEZXZpY2UnLFxuICAgICAgICBpY29uOiAnZGV2aWNlcycsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgLi4uKHBsYXRmb3JtID09PSAnd2ViJ1xuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgQnJvd3NlcicsIHZhbHVlOiBkZWZhdWx0QnJvd3NlciB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZpZXdwb3J0JywgdmFsdWU6IGRlZmF1bHRWaWV3cG9ydCB9LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnVHlwZScsIHZhbHVlOiBkZXZpY2VUeXBlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ09TJywgdmFsdWU6IGRldmljZU9TIH0sXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIGRldmljZVNlY3Rpb25dO1xuICAgIH1cblxuICAgIGNvbnN0IGtleUZsYWdzU2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbiA9IHtcbiAgICAgIHRpdGxlOiAnS2V5IEZsYWdzJyxcbiAgICAgIGljb246ICdmbGFnJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdNb2JpbGUgVGVzdGluZycsIHZhbHVlOiB0aGlzLm1vYmlsZVRlc3RpbmdFbmFibGVkID8gJ0VuYWJsZWQnIDogJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0V4dGVuc2lvbiBVc2UnLCB2YWx1ZTogdGhpcy5leHRlbnNpb25Vc2VFbmFibGVkID8gJ0VuYWJsZWQnIDogJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RhdGEgRHJpdmVuJywgdmFsdWU6IHRoaXMuZGF0YURyaXZlbkVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJyB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5RmxhZ3MgPSByZXN1bHQuZmluZCgocykgPT4gcy50aXRsZSA9PT0gJ0tleSBGbGFncycpO1xuICAgIGlmIChleGlzdGluZ0tleUZsYWdzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQubWFwKChzKSA9PlxuICAgICAgICBzLnRpdGxlID09PSAnS2V5IEZsYWdzJyA/IGtleUZsYWdzU2VjdGlvbiA6IHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIGtleUZsYWdzU2VjdGlvbl07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICB0cmFja0J5TGFiZWwoX2k6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgdHJhY2tCeUNvbmZpZ1RpdGxlKF9pOiBudW1iZXIsIHNlY3Rpb246IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBzZWN0aW9uLnRpdGxlO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgbGFiZWxzIHVzZSBjb25zaXN0ZW50IGluZGlnbyBzdHlsZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IExBQkVMX0NISVBfU1RZTEUgPSB7XG4gICAgYmc6ICcjNjM2NkYxJyxcbiAgICBib3JkZXI6ICcjNjM2NkYxJyxcbiAgICB0ZXh0OiAnI0ZGRkZGRicsXG4gICAgaWNvbjogJyNGRkZGRkYnLFxuICB9O1xuXG4gIGdldEN1cnJlbnRMYWJlbENoaXBTdHlsZShfbGFiZWw6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuTEFCRUxfQ0hJUF9TVFlMRTtcbiAgICByZXR1cm4ge1xuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBjb2xvcnMuYmcsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogY29sb3JzLmJvcmRlcixcbiAgICAgICdib3JkZXItd2lkdGgnOiAnMXB4JyxcbiAgICAgICdib3JkZXItc3R5bGUnOiAnc29saWQnLFxuICAgICAgY29sb3I6IGNvbG9ycy50ZXh0LFxuICAgIH07XG4gIH1cblxuICBnZXRMYWJlbENsb3NlSWNvbkNvbG9yKF9sYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5MQUJFTF9DSElQX1NUWUxFLmljb247XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtcHktNFwiPlxuICA8IS0tIEJhc2ljIGRldGFpbHM6IERlc2NyaXB0aW9uLCBTdGF0dXMvUHJpb3JpdHkvVHlwZSwgTGFiZWxzIChsaWdodCBiYWNrZ3JvdW5kIGNvbnRhaW5lcikgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtYmctWyNGOEY5RkVdIGNxYS1wLTRcIj5cbiAgPCEtLSBEZXNjcmlwdGlvbiAoRmlnbWE6IGRvY3VtZW50IGljb24sIHRleHRhcmVhIHdpdGggbGlnaHQgcHVycGxlIGJnKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+e3sgZGVzY3JpcHRpb25UaXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8Y3FhLWN1c3RvbS10ZXh0YXJlYVxuICAgICAgW3ZhbHVlXT1cImVkaXREZXNjcmlwdGlvblwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiZWRpdERlc2NyaXB0aW9uID0gJGV2ZW50XCJcbiAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbcm93c109XCI0XCJcbiAgICAgIFtlbmFibGVNYXJrZG93bl09XCJlbmFibGVNYXJrZG93blwiXG4gICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGRlc2NyaXB0aW9uLi4uXCJcbiAgICAgIHRleHRhcmVhSW5saW5lU3R5bGU9XCJwYWRkaW5nOiAxMnB4OyBmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxMDAlXCJcbiAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPlxuICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBTdGF0dXMsIFByaW9yaXR5ICYgVHlwZSAoRmlnbWE6IHNpZGUtYnktc2lkZSBkcm9wZG93bnMsIGNxYS1keW5hbWljLXNlbGVjdCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5TdGF0dXM8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnc3RhdHVzJywgc3RhdHVzU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3N0YXR1cycpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaXNTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5Qcmlvcml0eTwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdwcmlvcml0eScsIHByaW9yaXR5U2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3ByaW9yaXR5JylcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc1N0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPlR5cGU8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgndHlwZScsIHR5cGVTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndHlwZScpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIExhYmVscyAoRmlnbWE6IEN1cnJlbnQgTGFiZWxzIHdpdGggQ2xlYXIgQWxsLCBjcWEtYmFkZ2Ugd2l0aCB4LCBGcmVxdWVudGx5IHVzZWQsIFNlYXJjaCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1bMTVweF0gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbWVkaXVtXCI+Q3VycmVudCBMYWJlbHMgKHt7IGVkaXRMYWJlbHMubGVuZ3RoIH19KTwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiZWRpdExhYmVscy5sZW5ndGggPiAwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bI0RDMjYyNl0gaG92ZXI6Y3FhLXVuZGVybGluZSBjcWEtZm9udC1ub3JtYWxcIlxuICAgICAgICAoY2xpY2spPVwib25DbGVhckFsbExhYmVscygpXCI+XG4gICAgICAgIENsZWFyIEFsbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0yXCIgKm5nSWY9XCJlZGl0TGFiZWxzLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGVkaXRMYWJlbHM7IHRyYWNrQnk6IHRyYWNrQnlMYWJlbFwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLXB4LTIuNSBjcWEtcHktMSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXJvdW5kZWQtbWQgY3FhLWJvcmRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEN1cnJlbnRMYWJlbENoaXBTdHlsZShsYWJlbClcIj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTMuNSBjcWEtaC0zLjUgY3FhLXJvdW5kZWQgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZ2V0TGFiZWxDbG9zZUljb25Db2xvcihsYWJlbClcIlxuICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUxhYmVsKGxhYmVsKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlICcgKyBsYWJlbFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdy0zLjUgY3FhLWgtMy41XCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5GcmVxdWVudGx5IHVzZWQ8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYWJlbCBvZiBmcmVxdWVudGx5VXNlZExhYmVsczsgdHJhY2tCeTogdHJhY2tCeUxhYmVsXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWRkRnJlcXVlbnRMYWJlbChsYWJlbClcIj5cbiAgICAgICAgICA8Y3FhLWJhZGdlXG4gICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgdmFyaWFudD1cImRlZmF1bHRcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNFOEU5RkZcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwiIzNGNDNFRVwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNFOEU5RkZcIj5cbiAgICAgICAgICA8L2NxYS1iYWRnZT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbWVkaXVtXCI+QWRkIGxhYmVsczwvbGFiZWw+XG4gICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgW2NvbmZpZ109XCJsYWJlbHNTZWxlY3RDb25maWdcIlxuICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnbGFiZWxzJylcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChhZGRDdXN0b21WYWx1ZSk9XCJvbkxhYmVsc0FkZEN1c3RvbVZhbHVlKCRldmVudClcIlxuICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+XG4gICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENvbmZpZ3VyYXRpb24gKEZpZ21hOiBjb2xsYXBzaWJsZSwgZ2VhciBpY29uLCBsaWdodCBiYWNrZ3JvdW5kIGNvbnRhaW5lcikgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLVsxMnB4XSBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1iZy1bI0Y4RjlGRV0gY3FhLXAtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtdGV4dC1sZWZ0IGNxYS13LWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTkuNXB4XVwiPnt7IGNvbmZpZ1RpdGxlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImNvbmZpZ0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC01IGNxYS10ZXh0LXhzXCI+XG4gICAgICA8IS0tIEV4ZWN1dGlvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItNCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImV4ZWN1dGlvbkV4cGFuZGVkID0gIWV4ZWN1dGlvbkV4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnBsYXlfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzExMTgyN11cIj5FeGVjdXRpb248L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2NDc0OEJdIGNxYS10ZXh0LXhsIGNxYS13LTUgY3FhLWgtNVwiPlxuICAgICAgICAgICAge3sgZXhlY3V0aW9uRXhwYW5kZWQgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJyB9fVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZXhlY3V0aW9uRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTMgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImhhc1ByZXJlcXVpc2l0ZUNhc2VDb25maWdcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+IFxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3ByZXJlcXVpc2l0ZUNhc2VzJywgcHJlcmVxdWlzaXRlQ2FzZVNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdwcmVyZXF1aXNpdGVDYXNlcycpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtXCI+VGVzdCBEYXRhIFByb2ZpbGU8L2xhYmVsPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3Rlc3REYXRhUHJvZmlsZScsIHRlc3REYXRhUHJvZmlsZVNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCd0ZXN0RGF0YVByb2ZpbGUnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc1N0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNjg3Mzg5XSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW1cIj5UZXN0IERhdGEgU2V0PC9sYWJlbD5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCd0ZXN0RGF0YVNldCcsIHRlc3REYXRhU2V0U2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3Rlc3REYXRhU2V0JylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtXCI+VmlkZW8gUmVjb3JkaW5nPC9sYWJlbD5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCd2aWRlb1JlY29yZGluZycsIHZpZGVvUmVjb3JkaW5nU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3ZpZGVvUmVjb3JkaW5nJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gQUkgQ29uZmlndXJhdGlvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItNCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImFpQ29uZmlnRXhwYW5kZWQgPSAhYWlDb25maWdFeHBhbmRlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5zbWFydF90b3k8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPkFJIENvbmZpZ3VyYXRpb248L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2NDc0OEJdIGNxYS10ZXh0LXhsIGNxYS13LTUgY3FhLWgtNVwiPlxuICAgICAgICAgICAge3sgYWlDb25maWdFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhaUNvbmZpZ0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zIGNxYS1weS0wIGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdlbmFibGVBaVNtYXJ0bmVzcycsIGVuYWJsZUFpU21hcnRuZXNzU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2VuYWJsZUFpU21hcnRuZXNzJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ2RlZmF1bHRBaUFjdGlvbicsIGRlZmF1bHRBaUFjdGlvblNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdkZWZhdWx0QWlBY3Rpb24nKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScsIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2VTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCd1c2VBaU1ldGFkYXRhJywgYWlNZXRhZGF0YUNvbGxlY3Rpb25TZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndXNlQWlNZXRhZGF0YScpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gV2FpdHMgJiBSZXRyaWVzLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMi41IGNxYS1taW4tdy0wIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTQgY3FhLW1iLTQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFMkU4RjBdXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtdy1mdWxsIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXAtMCBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJ3YWl0c1JldHJpZXNFeHBhbmRlZCA9ICF3YWl0c1JldHJpZXNFeHBhbmRlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj50aW1lcjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxMTE4MjddXCI+V2FpdCBhbmQgUmV0cmllczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyB3YWl0c1JldHJpZXNFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ3YWl0c1JldHJpZXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weC0zIGNxYS1weS0yLjUgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZSBbY2hlY2tlZF09XCJhdXRvV2FpdEVuYWJsZWRcIiAoY2hlY2tlZENoYW5nZSk9XCJhdXRvV2FpdEVuYWJsZWQgPSAkZXZlbnRcIiBhcmlhTGFiZWw9XCJFbmFibGUgQXZvaWQgQXV0byB3YWl0IGZvciBzdGVwc1wiPjwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzExMTgyN11cIj5FbmFibGUgQXZvaWQgQXV0byB3YWl0IGZvciBzdGVwczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIlJldHJ5IEZhaWxlZCBTdGVwc1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJyZXRyeUZhaWxlZFN0ZXBzXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInJldHJ5RmFpbGVkU3RlcHMgPSBvbmx5RGlnaXRzKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjBcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBsYWJlbElubGluZVN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMTkuNnB4XCI+XG4gICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJUZXN0IENhc2UgVGltZW91dCAobWludXRlcylcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwidGVzdENhc2VUaW1lb3V0XCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInRlc3RDYXNlVGltZW91dCA9IG9ubHlEaWdpdHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMzBcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBsYWJlbElubGluZVN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMTkuNnB4XCI+XG4gICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJXYWl0IFRpbWVvdXQgZm9yIExvY2F0b3JzIChzZWMpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIndhaXRUaW1lb3V0TG9jYXRvcnNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwid2FpdFRpbWVvdXRMb2NhdG9ycyA9IG9ubHlEaWdpdHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTVcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBsYWJlbElubGluZVN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMTkuNnB4XCI+XG4gICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwicGxhdGZvcm0gIT09ICdtb2JpbGUnXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItNCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImRldmljZUV4cGFuZGVkID0gIWRldmljZUV4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPmRldmljZXM8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPkRldmljZSBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBkZXZpY2VFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkZXZpY2VFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgPCEtLSBXZWIgb25seTogbW9iaWxlIERldmljZSBTZXR0aW5ncyBoaWRkZW4gdGVtcG9yYXJpbHkgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnZGVmYXVsdEJyb3dzZXInLCBkZWZhdWx0QnJvd3NlclNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdkZWZhdWx0QnJvd3NlcicpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnZGVmYXVsdFZpZXdwb3J0JywgZGVmYXVsdFZpZXdwb3J0U2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2RlZmF1bHRWaWV3cG9ydCcpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEtleSBGbGFncyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItMCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImtleUZsYWdzRXhwYW5kZWQgPSAha2V5RmxhZ3NFeHBhbmRlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5mbGFnPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzExMTgyN11cIj5LZXkgRmxhZ3M8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2NDc0OEJdIGNxYS10ZXh0LXhsIGNxYS13LTUgY3FhLWgtNVwiPlxuICAgICAgICAgICAge3sga2V5RmxhZ3NFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJrZXlGbGFnc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weC0zIGNxYS1weS0yLjUgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZSBbY2hlY2tlZF09XCJtb2JpbGVUZXN0aW5nRW5hYmxlZFwiIChjaGVja2VkQ2hhbmdlKT1cIm1vYmlsZVRlc3RpbmdFbmFibGVkID0gJGV2ZW50XCIgYXJpYUxhYmVsPVwiTW9iaWxlIFRlc3RpbmdcIj48L2NxYS1jdXN0b20tdG9nZ2xlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMxMTE4MjddXCI+TW9iaWxlIFRlc3Rpbmc8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weC0zIGNxYS1weS0yLjUgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZSBbY2hlY2tlZF09XCJleHRlbnNpb25Vc2VFbmFibGVkXCIgKGNoZWNrZWRDaGFuZ2UpPVwiZXh0ZW5zaW9uVXNlRW5hYmxlZCA9ICRldmVudFwiIGFyaWFMYWJlbD1cIkV4dGVuc2lvbiBVc2VcIj48L2NxYS1jdXN0b20tdG9nZ2xlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMxMTE4MjddXCI+RXh0ZW5zaW9uIFVzZTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cImRhdGFEcml2ZW5FbmFibGVkXCIgKGNoZWNrZWRDaGFuZ2UpPVwiZGF0YURyaXZlbkVuYWJsZWQgPSAkZXZlbnRcIiBhcmlhTGFiZWw9XCJEYXRhIERyaXZlblwiPjwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzExMTgyN11cIj5EYXRhIERyaXZlbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMyBjcWEtcHQtMiBjcWEtdy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgIFt0ZXh0XT1cIidDYW5jZWwnXCJcbiAgICAgICAgYnRuU2l6ZT1cIm1kXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFpc1NhdmluZ1wiXG4gICAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgICBbdGV4dF09XCInU2F2ZSBDaGFuZ2VzJ1wiXG4gICAgICAgIGJ0blNpemU9XCJtZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaGFzVW5zYXZlZENoYW5nZXNcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvblNhdmUoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPGRpdiAqbmdJZj1cImlzU2F2aW5nXCIgY2xhc3M9XCJjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICBsYWJlbD1cIlNhdmluZ+KAplwiXG4gICAgICAgICAgaWNvbj1cImF1dG9yZW5ld1wiXG4gICAgICAgICAgW2lzTG9hZGluZ109XCJ0cnVlXCJcbiAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgIFtjZW50ZXJDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJpbmZvXCJcbiAgICAgICAgICBzaXplPVwibWVkaXVtXCI+XG4gICAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=