@churchillliving/se-ui-toolkit 6.53.588 → 6.53.589

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.
@@ -496,6 +496,7 @@ export class FormComponent {
496
496
  height: formField.hyperlink?.height ? formField.hyperlink.height : '80%',
497
497
  data: { value: formField.hyperlink?.link, iFrameId: formField.label },
498
498
  });
499
+ this.setDynamicDialogRef(ref);
499
500
  utilities.draggableDialog(formField?.field);
500
501
  ref.onClose.subscribe((res) => {
501
502
  if (res) {
@@ -533,6 +534,7 @@ export class FormComponent {
533
534
  height: formField.hyperlink.height ? formField.hyperlink.height : '80%',
534
535
  data: formField.hyperlink.params
535
536
  });
537
+ this.setDynamicDialogRef(dialog);
536
538
  const componentName = formField.hyperlink?.component?.name;
537
539
  if (componentName) {
538
540
  this.pageLoggerService.savePageLoggerInfo(this.router.url?.substring(1), componentName);
@@ -567,6 +569,7 @@ export class FormComponent {
567
569
  iFrameId: formField.label.name,
568
570
  },
569
571
  });
572
+ this.setDynamicDialogRef(ref);
570
573
  this.pageLoggerService.savePageLoggerInfo(this.router.url?.substring(1), 'IframeComponent');
571
574
  utilities.draggableDialog(formField?.field ? formField?.field : formField?.label);
572
575
  ref.onClose.subscribe((res) => {
@@ -872,6 +875,7 @@ export class FormComponent {
872
875
  }
873
876
  else {
874
877
  const ref = this.setDialogData(formField, formField.label.labelControl.lookupControl);
878
+ this.setDynamicDialogRef(ref);
875
879
  utilities.draggableDialog(formField?.field ? formField?.field : formField?.label);
876
880
  ref.onClose.subscribe((res) => {
877
881
  if (res) {
@@ -887,6 +891,15 @@ export class FormComponent {
887
891
  }
888
892
  this.onClickEvent(formField);
889
893
  }
894
+ /**
895
+ * set the dialog ref when popup open
896
+ */
897
+ setDynamicDialogRef(ref) {
898
+ const dialogRef = this.dialogService.dialogComponentRefMap.get(ref);
899
+ const dynamicComponent = dialogRef?.instance;
900
+ const ariaLabelledBy = dynamicComponent.getAriaLabelledBy();
901
+ dynamicComponent.getAriaLabelledBy = () => ariaLabelledBy;
902
+ }
890
903
  /**
891
904
  * open dialog on lookupControl field
892
905
  */
@@ -895,6 +908,7 @@ export class FormComponent {
895
908
  this.lookupFocusOut = true;
896
909
  let value = formField.value;
897
910
  const ref = this.setDialogData(formField, formField.lookupControl);
911
+ this.setDynamicDialogRef(ref);
898
912
  utilities.draggableDialog(formField?.field ? formField?.field : formField?.label);
899
913
  ref.onClose.subscribe((res) => {
900
914
  if (formField.field) {
@@ -975,7 +989,7 @@ export class FormComponent {
975
989
  * open dialog in Note_Field conrtrol
976
990
  */
977
991
  handleNoteFieldDialog(formfield) {
978
- const dialogRef = this.dialogService.open(NotesComponent, {
992
+ const ref = this.dialogService.open(NotesComponent, {
979
993
  header: formfield.label,
980
994
  width: '50%',
981
995
  data: {
@@ -983,8 +997,9 @@ export class FormComponent {
983
997
  disabledText: formfield.disabledText,
984
998
  },
985
999
  });
1000
+ this.setDynamicDialogRef(ref);
986
1001
  utilities.draggableDialog(formfield?.field ? formfield?.field : formfield?.label);
987
- dialogRef.onClose.subscribe((data) => {
1002
+ ref.onClose.subscribe((data) => {
988
1003
  if (data && formfield.onReturn) {
989
1004
  formfield.onReturn(data);
990
1005
  }
@@ -1153,4 +1168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
1153
1168
  type: HostListener,
1154
1169
  args: ['window:beforeunload', ['$event']]
1155
1170
  }] } });
1156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUErQyxZQUFZLEVBQStCLGdCQUFnQixFQUFjLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUlwTixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQTBDLFVBQVUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNySixPQUFPLEVBQUUsZUFBZSxFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFFL0UsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWU3RCxNQUFNLE9BQU8sYUFBYTtJQU94QixJQUFhLGNBQWMsQ0FBQyxHQUFRO1FBQ2xDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUNoQixRQUFRLENBQUM7U0FDVjtJQUNILENBQUM7SUE2QkQsWUFDVSxXQUFrQyxFQUNsQyxXQUF3QixFQUN4QixZQUEwQixFQUMxQixTQUF1QixFQUN4QixhQUE0QixFQUMzQix3QkFBa0QsRUFDbEQsZ0JBQW1DLEVBQ25DLEdBQXNCLEVBQ3RCLE1BQWMsRUFDZCxFQUFjLEVBQ2QsUUFBa0IsRUFDbEIsV0FBd0Is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SztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ08sY0FBYztzQkFBMUIsS0FBSztnQkFLSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHUCx5QkFBeUI7c0JBRHhCLFlBQVk7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBMkNyRSxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQ29tcG9uZW50RmFjdG9yeSwgVmlld0NvbnRhaW5lclJlZiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IE5vdGVzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL25vdGVzL25vdGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFRm9ybUNvbnRyb2wsIEVIeXBlcmxpbmssIElGb3JtRmllbGQsIElEeW5hbWljRm9ybSwgSUZvcm1TZWN0aW9uLCBFVmFsaWRhdG9yLCBJRHluYW1pY0NhcmQsIElGb3JtQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9oeXBlcmxpbmsuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN0aWNreUFjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmb3JtOiBJRHluYW1pY0Zvcm07XG4gIEBJbnB1dCgpIGhpZGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybUJ1dHRvbnM6IElGb3JtQnV0dG9uW10gPSBbXTtcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpIHNhdmVGb3JtOiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2FuY2VsRm9ybTogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyb3BEb3duQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VjdGlvbkNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgZHluYW1pY0Nhc2UgPSBFRm9ybUNvbnRyb2w7XG4gIHBlcm1pc3Npb25UeXBlID0gRVBlcm1pc3Npb25UeXBlO1xuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNGb3JtSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbXBvbmVudHNMaXN0OiBJRGljdGlvbmFyeVtdID0gW107XG4gIGZpbGVVcGxvYWRVcmxzOiBhbnk7XG4gIHNob3dmaWxlVXBsb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FyZExpc3Q6IElEeW5hbWljQ2FyZDtcbiAgY2FsZW5kZXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZGVmYXVsdERhdGU6IHN0cmluZyA9ICcnO1xuICBsb29rdXBGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3l5JztcbiAgc2V0Q2FyZERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLy8gYXBwbHkgY2hlY2tlZC91bkNoZWNrZWQgcHJvcCBmb3IgQ2hlY2tCb3ggb2YgdGhlIEZvcm1cbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2UgOiBIeXBlcmxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAvLyBicm93c2VyIHRhYiBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0IHx8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gc3RhcnQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGxldCBmb3JtVmFsdWVzID0geyAuLi50aGlzLmZvcm0gfTtcbiAgICAgIGZvcm1WYWx1ZXMuZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5pc1Bhc3N3b3JkKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byBkYXRlXG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmaWVsZD8ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgZmllbGRbJ3ByZXZpb3VzVmFsdWUnXSA9IGZpZWxkPy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZD8udGltZU9ubHkgJiZcbiAgICAgICAgICAgICAgKGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fFxuICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlICYmXG4gICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQ/LnZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAodmFsdWU6IGFueSkgPT4gdmFsdWVbZmllbGQ/LmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykgfHxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnLCcsICc7JylcbiAgICAgICAgICAgICAgICAgID8uc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgICAgPy5tYXAoKHZhbDogYW55KSA9PiAoeyBbZmllbGQ/LmRpc3BsYXlGaWVsZF06IHZhbCB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIG11bHRpU2VsZWN0IHN0cmluZyB2YWx1ZSBpbiBhcnJheVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBbZmllbGQudmFsdWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHt9O1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZD8uY2FyZD8uZGF0YT8uZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHguZHluYW1pY0Zvcm0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb25zOiBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm1WYWx1ZXM7XG4gICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFbmQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knIHx8XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpID09PSAnMSdcbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZm9ybVxuICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG4gICAgICB0aGlzLmFwcGx5VXNlclBlcm1pc3Npb25zKCk7XG4gICAgICB0aGlzLmFwcGx5UmVxdWlyZWRGaWVsZFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMucmVtb3ZlV2hpdGVTcGFjZXMoKTtcbiAgICAgIHRoaXMuc2V0SHlwZXJsaW5rQ29tcG9uZW50Um91dGUoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldENhbGFuZGVyV2lkdGgoKTtcbiAgICAgIH0sIDMwMDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRlciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kZXJJbnB1dFZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmb3JtRmllbGQuZmllbGQpWzBdXG4gICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICAgIGlmICh5ZWFyPy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBuZXcgRGF0ZSh2YWwudGFyZ2V0LnZhbHVlKS50b0xvY2FsZURhdGVTdHJpbmcoXG4gICAgICAgICAgICAnZW4tVVMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBwZXJjZW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuICBzZXRudW1lcmljdmFsdWVzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgKiAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgKiAxMDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJykge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgIGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZvcm0gaGFzIGFueSBmaWVsZCB3aXRoIGR5bmFtaWMgY29tcG9uZW50O1xuICAgKiBDcmVhdGVzIGNvbXBvbmVudCBpbnN0YW5jZSB1c2luZyBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICogSW5qZWN0cyBjb21wb25lbnQgdGhyb3VnaCB2aWV3UmVmLmNyZWF0ZUNvbXBvbmVudCgpXG4gICAqIFBhc3NlcyBkYXRhIHRvIGNvbXBvbmVudFxuICAgKiBTdWJzY3JpYmVzIHRvIHRoZSBldmVudHMgcGFzc2VkIHRvIHRoZSBjb21wb25lbnRzXG4gICAqIEZpbmFsbHkgZm9yY2VzIEFuZ3VsYXIgdG8gZGV0ZWNoIGNoYW5nZXNcbiAgICovXG4gIGxvYWREeW5hbWljQ29tcG9uZW50cygpIHtcbiAgICB0aGlzLmNvbXBvbmVudHNMaXN0ID0gW107XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSwgZmllbGRJbmRleCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCkge1xuICAgICAgICAgIGNvbnN0IHZpZXdSZWY6IGFueSA9IHRoaXMuZHluYW1pY0NvbXBvbmVudENvbnRhaW5lci5maW5kKFxuICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgIHguZWxlbWVudC5uYXRpdmVFbGVtZW50LmlkID09IGAke2Zvcm1TZWN0aW9uLm5hbWV9LSR7ZmllbGRJbmRleH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICB9ID0gZmllbGQuY29tcG9uZW50Q29udHJvbDtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4gPVxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQ29tcG9uZW50KTtcbiAgICAgICAgICAvLyBQYXNzaW5nIGRhdGEgdG8gY29tcG9uZW50XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld1JlZj8uY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICAgICAgIGlmIChjb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNMaXN0LnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5jb21wb25lbnRDb250cm9sPy5pZCxcbiAgICAgICAgICAgICAgdmFsdWU6IGNvbXBvbmVudFJlZixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIHBhc3NlZCB0byB0aGUgY29tcG9uZW50c1xuICAgICAgICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKS5mb3JFYWNoKChbZXZlbnQsIGhhbmRsZXJdOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlW2V2ZW50XSBhcyBFdmVudEVtaXR0ZXI8YW55Pik/LnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW52b2tlIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy9pbnZva2Ugd2hlbiBmaWxlIHVwbG9hZCBPUiBkZWxldGUgYSBmaWxlXG4gIGZpbGVPbmNoYW5nZUV2ZW50KCkge1xuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgICAvLyAgIGxldCBjYXJkQ29udHJvbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKT0+IHtcbiAgICAvLyAgICAgaWYoZm9ybVNlY3Rpb24/LmZpZWxkcz8uc29tZSgoZm9ybUZpZWxkOiBhbnkpPT4gZm9ybUZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkpe1xuICAgIC8vICAgICAgIGNhcmRDb250cm9sID0gdHJ1ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgaWYoY2FyZENvbnRyb2wpe1xuICAgIC8vICAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0sIDMwMDApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGxvYWQgZHluYW1pYyBjb21wb25lbnRzIGlmIGV4aXN0IGluIGZvcm1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0bnVtZXJpY3ZhbHVlcygpO1xuICAgICAgdGhpcy5vbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKTtcbiAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgICB0aGlzLnNldENhcmRSZXNwb25zZUlkKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHNldENhcmRSZXNwb25zZUlkKCkge1xuICAgIHV0aWxpdGllcy5vbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYocmVzLmRhdGE/LmlzU2F2ZSl7XG4gICAgICAgIHRoaXMuc2V0Q2FyZElkcyhyZXMuZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldERlbGV0ZUNhcmRJZChyZXMuZGF0YT8uY2FyZERhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGVsZXRlQ2FyZElkKHVwZGF0ZWRDYXJkRGF0YTphbnkpe1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOklGb3JtU2VjdGlvbik9PntcbiAgICAgIGNvbnN0IGNhcmRDb250cm9sID0gc2VjdGlvbi5maWVsZHMuZmluZCgoZmllbGQ6SUZvcm1GaWVsZCk9PiBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICBpZihjYXJkQ29udHJvbCl7XG4gICAgICAgIGNhcmRDb250cm9sLmNhcmQuZGF0YSA9IHVwZGF0ZWRDYXJkRGF0YTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgXG4gIH1cblxuICBzZXRDYXJkSWRzKHJlcykge1xuICAgIHJlcy5yZWNvcmRzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlcy5yZWNvcmRzKTtcbiAgICByZXMucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnksIHJlY29yZEluZGV4OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoQ2FyZCA9IHJlcy5jYXJkc0luZm8/LmZpbmQoXG4gICAgICAgIChpbmZvLCBjYXJkSW5kZXgpID0+XG4gICAgICAgICAgcmVjb3JkSW5kZXggPT09IGNhcmRJbmRleCAmJiByZWNvcmRbcmVzLmZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKV1cbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hDYXJkICYmIE9iamVjdC5rZXlzKG1hdGNoQ2FyZCk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWF0Y2hDYXJkW3Jlcy5maWVsZE5hbWVdID0gcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maW5kKFxuICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgIGlmIChyZXMuY2FyZHNJbmZvPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXMuY2FyZHNJbmZvPy5mb3JFYWNoKChjYXJkSWQpID0+IHtcbiAgICAgICAgICAgICAgY2FyZElkLmlkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gcmVzLmNhcmRzSW5mbztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVdoaXRlU3BhY2VzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbi5jbGFzcykgc2VjdGlvbi5jbGFzcyA9IHNlY3Rpb24uY2xhc3MucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEh5cGVybGlua0NvbXBvbmVudFJvdXRlKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LICYmXG4gICAgICAgICAgZmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIucmVzZXRDb25maWcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRoOiAnaHlwZXJsaW5rJyArIGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IGZpZWxkLmh5cGVybGluay5jb21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5yb3V0ZXIuY29uZmlnLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGJyb3dzZXJUYWJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGV2ZW50O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKXtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIGFueSBjaGFuZ2UgaW4gRHluYW1pYyBGb3JtIGNvbXBvbmVudCBTdGF0ZVxuICAgKi9cbiAgb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdXRpbGl0aWVzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5pZCAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZk9iaiA9IHRoaXMuY29tcG9uZW50c0xpc3QuZmluZChcbiAgICAgICAgICAoeCkgPT4geC5uYW1lID09PSByZXNwb25zZS5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmT2JqKSB7XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWZPYmoudmFsdWUuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbXBvbmVudFJlZk9iai52YWx1ZS5pbnN0YW5jZS5uZ09uSW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnNcbiAgYXBwbHlVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgZGlzYWJsZWRGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvbnM6IGFueSA9IGZvcm1GaWVsZC5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGxldCBzZWN0aW9uUGVybWlzc2lvbnM6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9ucykgc2VjdGlvblBlcm1pc3Npb25zID0gZm9ybVNlY3Rpb24ucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb25zKSBwZXJtaXNzaW9ucyA9IHRoaXMuZm9ybS5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzZWN0aW9uUGVybWlzc2lvbnMgJiYgc2VjdGlvblBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgc2VjdGlvblBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5hY2NvcmRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbi5yb2xlcyAmJiBwZXJtaXNzaW9uLnJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQucGVybWlzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b3RhbEZpZWxkcysrO1xuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkRmllbGRzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGhpZGRlbkZpZWxkcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gZGlzYWJsZWRGaWVsZHM7XG4gICAgICB0aGlzLmlzRm9ybUhpZGRlbiA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gaGlkZGVuRmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIElGcmFtZSBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICBpZiAoZm9ybVNlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbiwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmKGZvcm1TZWN0aW9uLmRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRTZWN0aW9uRmllbGRzKGZvcm1TZWN0aW9uLCBmYWxzZSk7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbjogSUZvcm1TZWN0aW9uLCBkaXNhYmxlZDogYm9vbGVhbil7XG4gICAgZm9ybVNlY3Rpb24uZmllbGRzLm1hcCgoZmllbGQ6IElGb3JtRmllbGQpID0+IHtcbiAgICAgIGZpZWxkLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICB9XG5cbiAgbG9hZElGcmFtZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogJ0h5cGVybGluaycsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluaz8ud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5oeXBlcmxpbms/LmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICBkYXRhOiB7IHZhbHVlOiBmb3JtRmllbGQuaHlwZXJsaW5rPy5saW5rLCBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsIH0sXG4gICAgfSk7XG4gICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhmb3JtRmllbGQ/LmZpZWxkKTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERpYWxvZyBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgaHlwZXJsaW5rRGlhbG9nKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuQkxBTkspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgd2luZG93Lm9wZW4oJ2h5cGVybGluaycgKyBmb3JtRmllbGQubGFiZWwpO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLlNFTEYpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnaHlwZXJsaW5rJyArIGZvcm1GaWVsZC5sYWJlbF0sIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuRElBTE9HKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkgJiYgZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5oeXBlcmxpbmtTZXJ2aWNlLm9wZW5EaWFsb2dJbk5ld1RhYihmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCwgZm9ybUZpZWxkLmh5cGVybGluaz8ucGFyYW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50LCB7XG4gICAgICAgICAgaGVhZGVyOiBmb3JtRmllbGQuaHlwZXJsaW5rLmRhdGE/LmhlYWRlclxuICAgICAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmRhdGE/LmhlYWRlclxuICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggOiAnJyxcbiAgICAgICAgICBzdHlsZTogZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA/IHt9IDogeyAnbWF4LXdpZHRoJzogJ2ZpdC1jb250ZW50JyB9LFxuICAgICAgICAgIGhlaWdodDogZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHQgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA6ICc4MCUnLFxuICAgICAgICAgIGRhdGE6IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gZm9ybUZpZWxkLmh5cGVybGluaz8uY29tcG9uZW50Py5uYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgICAgIGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbFxuICAgICAgICApO1xuICAgICAgICBkaWFsb2cub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBJZnJhbWUgb24gTGFiZWxcbiAgICovXG4gIGxvYWRMYWJlbENvbnRyb2xJRnJhbWUoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsud2lkdGhcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoXG4gICAgICAgIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5oZWlnaHRcbiAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodFxuICAgICAgICA6ICc4MCUnLFxuICAgICAgZGF0YToge1xuICAgICAgICB2YWx1ZTogZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/LmxpbmtcbiAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmtcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsLm5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAnSWZyYW1lQ29tcG9uZW50J1xuICAgICk7XG4gICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhcbiAgICAgIGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbFxuICAgICk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGZvcm1GaWVsZCAmJiBmb3JtRmllbGQub25DbGljaykge1xuICAgICAgZm9ybUZpZWxkLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZmluZCB0aGUgcmVxdWlyZWQgZmllbGQgaW4gZm9ybVxuICAgKi9cbiAgYXBwbHlSZXF1aXJlZEZpZWxkVmFsaWRhdGlvbigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLnZhbGlkYXRpb25zICYmIGZpZWxkLnZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb25zLmZvckVhY2goKHZhbGlkKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWxpZC50eXBlID09PSBFVmFsaWRhdG9yLlJFUVVJUkVEKSB7XG4gICAgICAgICAgICAgICAgZmllbGQucmVxdWlyZWRGaWVsZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRGaWxlVXJscyhmaWxlVXJsczogYW55KSB7XG4gICAgaWYgKGZpbGVVcmxzICYmIGZpbGVVcmxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFVybHMgPSBmaWxlVXJscztcbiAgICAgIHRoaXMuc2hvd2ZpbGVVcGxvYWRFcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZUZvcm0oKSB7XG4gICAgbGV0IHZhbGlkaXR5ID0gdHJ1ZTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlscyA9ICcnO1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KGZvcm1TZWN0aW9uLmZpZWxkcykpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlsc1xuICAgICAgICAgICAgICAgID8gZXJyb3JNZXNzYWdlRGV0YWlscyArICcgLCAnICsgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgZmllbGQgPSBmb3JtU2VjdGlvbi5maWVsZHMuc29tZShcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQucmVxdWlyZWRGaWVsZCAmJiBmaWVsZC5lcnJvck1lc3NhZ2UgJiYgIWZpZWxkLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsaWRpdHkgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgICAgICA1MDAwLFxuICAgICAgICAgICAgICAnUkVRVUlSRUQgRklFTEQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2VEZXRhaWxzLCA1MDAwLCAnSU5WQUxJRCBGSUVMRCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGl0eSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgdXBsb2FkRmlsZSBVUkwgaW4gRm9ybUZpZWxkIGluIGNhc2Ugb2YgRklMRV9VUExPQURcbiAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkZJTEVfVVBMT0FEKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZmlsZVVwbG9hZFVybHM7XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucyAmJiBmaWVsZC52YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb25zLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4LnR5cGUgPT09IEVWYWxpZGF0b3IuUkVRVUlSRUQgJiYgIWZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dmaWxlVXBsb2FkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkRGF0YSA9IGZpZWxkLmNhcmQuZGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHg6IGFueSkgPT4geC5zZWxlY3RlZENhcmQgJiYgeC5zZWxlY3RlZENhcmQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhICYmIHNlbGVjdGVkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuY2FyZC5kYXRhID0gc2VsZWN0ZWREYXRhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodmFsaWRpdHkpIHtcbiAgICAgIC8vIFNhdmUgZ3JpZCBvbiBmb3JtU2F2ZSBCdXR0b25cbiAgICAgIGNvbnN0IHNhdmVBbGxHcmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmVBbGxHcmlkVmFsdWVzJyk7XG4gICAgICBjb25zdCBnZXRCdG5zOiBhbnkgPVxuICAgICAgICB0aGlzLmVsPy5uYXRpdmVFbGVtZW50Py5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzYXZlUm93Jyk7XG4gICAgICBsZXQgY3VzdG9tQ29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgdGVtcFZhbHVlOiBhbnkgPSBbXTtcbiAgICAgIC8vIHNldCB2YWx1ZSBhcyAxIG9yIDAgaW4gY2FzZSBvZiBjaGVja2JveFxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcyAmJiB2YWxpZGl0eSkge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWUgPT09ICcnIHx8IGZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGFzIHN0cmluZ1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAgICAgICAgICAgZmllbGQudGltZU9ubHkgJiZcbiAgICAgICAgICAgICAgZmllbGQuc2F2ZUFzU3RyaW5nICYmXG4gICAgICAgICAgICAgICFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmllbGQudmFsdWUsICdoaDptbSBhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5OVU1FUklDKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZD8uZm9ybWF0Py50eXBlID09PSAncGVyY2VudCcpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgLyAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgLyAxMDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBvZiBhdXRvQ29tcGxldGUgYXMgc3RyaW5nc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgICFmaWVsZC5zaG93QWxsVmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQudmFsdWUubWFwKFxuICAgICAgICAgICAgICAgICh2YWx1ZTogYW55KSA9PiB2YWx1ZVtmaWVsZC5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICh2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnOycpIHx8XG4gICAgICAgICAgICAgICAgICB2YWx1ZS50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0ZW1wVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgbXVsdGlTZWxlY3QgYXJyYXkgaW50byBzdHJpbmdcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmXG4gICAgICAgICAgICAgIGZpZWxkLnNhdmVBc1N0cmluZyAhPT0gZmFsc2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlPy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID8gMSA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTYXZlIGdyaWQgb24gZm9ybVNhdmUgQnV0dG9uXG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCAmJiAhY3VzdG9tQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudCA9IHRydWU7XG4gICAgICAgICAgICAgIGlmIChzYXZlQWxsR3JpZCkge1xuICAgICAgICAgICAgICAgIHNhdmVBbGxHcmlkLmNsaWNrKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBidG4gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgICAgICAgYnRuPy5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2F2ZUZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZUFsbEdyaWQgPyA4MCA6IDBcbiAgICAgICk7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICAhZmllbGQuc2hvd0FsbFZhbHVlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB0ZW1wVmFsdWVcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKCcsJywgJzsnKVxuICAgICAgICAgICAgICAgID8uc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgID8ubWFwKCh2YWw6IGFueSkgPT4gKHsgW2ZpZWxkLmRpc3BsYXlGaWVsZF06IHZhbCB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT09IDEgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgKiAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgKiAxMDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbEZvcm0oKSB7XG4gICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0IHx8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2VcbiAgICAgICAgLmNvbmZpcm0oe1xuICAgICAgICAgIGtleTogJ2NhbmNlbEJ1dHRvbicsXG4gICAgICAgICAgbWVzc2FnZTogJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/JyxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXNbMF0uZGV0YWlsID09PSAnWWVzJykge1xuICAgICAgICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgICAgICAgdXRpbGl0aWVzLnJlbW92ZUFjdGl2ZUljb25DbGFzcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuY2VsRm9ybS5lbWl0KHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMpO1xuICAgICAgdXRpbGl0aWVzLnJlbW92ZUFjdGl2ZUljb25DbGFzcygpO1xuICAgIH1cbiAgfVxuXG4gIGxvb2t1cENsZWFyVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC52YWx1ZSkge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlID0gJyc7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgIH1cbiAgICBpZiAoZm9ybUZpZWxkLm9uQ2hhbmdlKSB7XG4gICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgY2FsZW5kZXIgd2lkdGhcbiAgICovXG4gIHNldENhbGFuZGVyV2lkdGgoKSB7XG4gICAgY29uc3QgY2FsYW5kZXJFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnAtY2FsZW5kYXInKTtcbiAgICBsZXQgZm9ybTogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybScpO1xuICAgIGxldCB3aWR0aCA9IGZvcm0/LmNsaWVudFdpZHRoO1xuICAgIGNhbGFuZGVyRWxlbWVudD8uZm9yRWFjaCgoY2FsYW5kZXI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2FsYW5kZXJPZnNldExlZnQgPSBjYWxhbmRlci5vZmZzZXRMZWZ0O1xuICAgICAgaWYgKGNhbGFuZGVyT2ZzZXRMZWZ0IDw9IHdpZHRoIC8gMikge1xuICAgICAgICBjYWxhbmRlci5jbGFzc0xpc3QuYWRkKCdvcGVuLXJpZ2h0LXNpZGUnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGR5bmFtaWMgZGlhbG9nIGRhdGFcbiAgICovXG4gIHNldERpYWxvZ0RhdGEoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCBkYXRhOiBhbnkpOiBhbnkge1xuICAgIGlmIChkYXRhICYmIGZvcm1GaWVsZCkge1xuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBkYXRhID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKGRhdGEpO1xuICAgICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgICBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0LnRvU3RyaW5nKCkudHJpbSgpXG4gICAgICAgICkge1xuICAgICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZS50ZXh0Py50b1N0cmluZygpPy50cmltKCk7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZC5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZm9ybUZpZWxkLnZhbHVlPy52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQudmFsdWUgJiYgZm9ybUZpZWxkLnZhbHVlLnRvU3RyaW5nKCkudHJpbSgpKSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IGZvcm1GaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGRhdGEuY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8oXG4gICAgICAgICAgdGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRhdGEuY29tcG9uZW50LCB7XG4gICAgICAgIC4uLmRhdGEuZGF0YSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxuICAgICAgICAgIGZpZWxkOiBmb3JtRmllbGQuZmllbGQsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHZhbHVlRmllbGQ6IGRhdGEuZGF0YT8udmFsdWVGaWVsZCxcbiAgICAgICAgICAuLi5kYXRhLmRhdGEuZGF0YSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRhYkZvY3VzRXZlbnQoZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuJyArIGZvcm1GaWVsZC5maWVsZFxuICAgICk7XG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGlja0V2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQub25DbGljayAmJiBmb3JtRmllbGQuZGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNsaWNrKGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgbGFiZWxcbiAgICovXG4gIHNlbGVjdExvb2t1cExhYmVsKGZvcm1GaWVsZDogYW55LCBldmVudD86IGFueSkge1xuICAgIGlmIChcbiAgICAgIGZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sXG4gICAgKSB7XG4gICAgICBpZihldmVudC5jdHJsS2V5ICYmIGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50KXtcbiAgICAgICAgdGhpcy5oeXBlcmxpbmtTZXJ2aWNlLm9wZW5EaWFsb2dJbk5ld1RhYihmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuY29tcG9uZW50LCBmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmRhdGEuZGF0YSk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgY29uc3QgcmVmOiBhbnkgPSB0aGlzLnNldERpYWxvZ0RhdGEoXG4gICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFxuICAgICAgICApO1xuICAgICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgICAgIGZvcm1GaWVsZD8uZmllbGQgPyBmb3JtRmllbGQ/LmZpZWxkIDogZm9ybUZpZWxkPy5sYWJlbFxuICAgICAgICApO1xuICAgICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkPy5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZCk7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmxhYmVsLm9uUmV0dXJuKVxuICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25SZXR1cm4oZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIH1cbiAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQubG9va3VwQ29udHJvbCkge1xuICAgICAgdGhpcy5sb29rdXBGb2N1c091dCA9IHRydWU7XG4gICAgICBsZXQgdmFsdWUgPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLnNldERpYWxvZ0RhdGEoZm9ybUZpZWxkLCBmb3JtRmllbGQubG9va3VwQ29udHJvbCk7XG4gICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgICBmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWxcbiAgICAgICk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZmllbGQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1GaWVsZC5maWVsZCk/LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5sb29rdXBGb2N1c091dCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikgZm9ybUZpZWxkLm9uUmV0dXJuKGZvcm1GaWVsZC52YWx1ZSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgICAgICBjb25zdCBmb3JtRmllbGRWYWx1ZSA9XG4gICAgICAgICAgICB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlLnRleHQgOiB2YWx1ZTtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb25DbGljayBldmVudCBpbnZva2VkICYmIG9wZW4gRGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGQvbGFiZWxcbiAgICovXG4gIGhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC5sb29rdXBDb250cm9sKSB7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cExhYmVsKGZvcm1GaWVsZCk7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldCBDYWxlbmRlciBEYXRlIEZvcm1hdCAmJiBzZXQgRGF0ZSBNaW51dGUgaW50ZXJ2YWxcbiAgICovXG4gIHNldENhbGVuZGVyRGF0ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUikge1xuICAgICAgLy8gY29udmVydCB0aW1lIGludG8gZGF0ZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLnRpbWVPbmx5ICYmXG4gICAgICAgIChmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKGZvcm1GaWVsZC5zaG93VGltZSB8fCBmb3JtRmllbGQudGltZU9ubHkpICYmXG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUoXG4gICAgICAgICAgdXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChmb3JtRmllbGQudmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoZm9ybUZpZWxkLnNob3dUaW1lIHx8IGZvcm1GaWVsZC50aW1lT25seSkgJiZcbiAgICAgICAgIWZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICB9XG4gIH1cbiAgY2FsZW5kYXJDaGFuZ2VWYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUgIT09IGZvcm1GaWVsZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICBmb3JtRmllbGQucHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgc2VjdGlvbiBDbGlja2VkIGV2ZW50XG4gICAqL1xuICBjbGlja2VkU2VjdGlvbihzZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICB0aGlzLnNlY3Rpb25DbGlja2VkRXZlbnQuZW1pdChzZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBpbiBOb3RlX0ZpZWxkIGNvbnJ0cm9sXG4gICAqL1xuICBoYW5kbGVOb3RlRmllbGREaWFsb2coZm9ybWZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oTm90ZXNDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybWZpZWxkLmxhYmVsIGFzIHN0cmluZyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1maWVsZC52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWRUZXh0OiBmb3JtZmllbGQuZGlzYWJsZWRUZXh0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgZm9ybWZpZWxkPy5maWVsZCA/IGZvcm1maWVsZD8uZmllbGQgOiBmb3JtZmllbGQ/LmxhYmVsXG4gICAgKTtcbiAgICBkaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGZvcm1maWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1maWVsZC5vblJldHVybihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRDbGFzc05hbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKTogc3RyaW5nIHtcbiAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikgcmV0dXJuICcgaGlkZGVuJztcbiAgICBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIGF1dG9TZWFyY2goZXZlbnQ6IGFueSwgZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGV2ZW50KSB7XG4gICAgICBmb3JtRmllbGQub25SZXR1cm4oZXZlbnQucXVlcnksIGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgb25Gb2N1c091dCBFdmVudFxuICAgKi9cbiAgb25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGxldCByZWNvcmQ6IGFueSA9IHt9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgcmVjb3JkW2Zvcm1GaWVsZC5maWVsZF0gPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHV0aWxpdGllcy5zZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZCwgdGhpcy5mb3JtKTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uRm9jdXNPdXQgJiYgdGhpcy5sb29rdXBGb2N1c091dCA9PT0gZmFsc2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkZvY3VzT3V0KGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrU3BhY2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAodHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0ID0gZm9ybUZpZWxkLnZhbHVlLnRleHQuc3Vic3RyaW5nKFxuICAgICAgICAwLFxuICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZS50ZXh0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmb3JtRmllbGQudmFsdWUgJiYgZm9ybUZpZWxkLnZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2xlYXIgdGhlIGRyb3Bkb3duIHZhbHVlIHdoZW4gY2xpY2sgb24geFxuICAgKi9cbiAgb25DbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGZvcm1GaWVsZCk7XG4gICAgdGhpcy5kcm9wRG93bkNoYW5nZUV2ZW50LmVtaXQoZm9ybUZpZWxkKTtcbiAgICBpZiAoIWV2ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRHJvcGRvd25WYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIG9uQ2hhbmdlIEV2ZW50IHdoZW4gVmFsdWUgQ2hhbmdlZFxuICAgKi9cbiAgb25DaGFuZ2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVuU2FmZSBsaW5rIGludG8gc2FmZSBsaW5rXG4gICAqL1xuICBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZykge1xuICAgIGxldCBsaW5rVXJsOiBhbnkgPSB1cmw7XG4gICAgaWYgKGxpbmtVcmwpIHtcbiAgICAgIGxpbmtVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGxpbmtVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlua1VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2Ugb24gZHluYW1pYyBidXR0b25zIGNsaWNrXG4gICAqL1xuICBvbk5ld0J1dHRvbkNsaWNrKGJ1dHRvbikge1xuICAgIGJ1dHRvbi5mdW5jKCk7XG4gIH1cblxuICBzZWxlY3RlZENhcmRDbGlja0V2ZW50KGRhdGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IGZpZWxkLmNhcmQuZGF0YVtkYXRhLmluZGV4XTtcbiAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouc2VsZWN0ZWRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgb2JqLnNlbGVjdGVkQ2FyZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb2JqWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGF0YS5zZWxlY3RlZENhcmQpIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJ2NhcmQtYWN0aXZlJztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC50ZXh0VHlwZSA9PSAndGV4dCcpIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICd0ZXh0JztcbiAgICB9XG4gIH1cbiAgb25MaW5rQ2xpY2sobGluaywgZm9ybVNlY3Rpb24pe1xuICAgIGlmKCFsaW5rLmRpc2FibGVkICYmICFmb3JtU2VjdGlvbi5kaXNhYmxlZCl7XG4gICAgICBsaW5rLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiBrZXk9XCJjYW5jZWxCdXR0b25cIj48L3AtY29uZmlybURpYWxvZz5cbjxmb3JtICpuZ0lmPVwiIWlzRm9ybUhpZGRlbiAmJiBmb3JtXCI+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIGNsYXNzPVwicHJvZ3Jlc3Mtc3Bpbm5lciBwLXByb2dyZXNzLXNwaW5uZXItY2lyY2xlIGN1c3RvbS1zcGlubmVyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBcIj5cbiAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdmaXhlZC1oZWlnaHQnOiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvcm1TZWN0aW9uIG9mIGZvcm0uZm9ybVNlY3Rpb25zXCIgW2NsYXNzXT1cIiFmb3JtU2VjdGlvbi5oaWRkZW4gPyAnY2FyZCB3LTEwMCcgOiAnJ1wiPlxuICAgICAgICA8c3BhbiAoY2xpY2spPVwiY2xpY2tlZFNlY3Rpb24oZm9ybVNlY3Rpb24pXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFmb3JtU2VjdGlvbiA/ICcnIDogc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaGlkZGVuID8gJ2hpZGRlbicgOiBmb3JtU2VjdGlvbi5jbGFzc1wiPlxuICAgICAgICAgICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgICAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtzZWxlY3RlZF09XCJmb3JtU2VjdGlvbi5leHBhbmRlZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uID8gJ2hpZGUtYWNjb3JkaWFuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8cC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJmb3JtU2VjdGlvbi5pY29uXCIgY2xhc3M9XCJtci0xIHBsLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Vic2VjdGlvbi1oZWFkZXJcIj57eyBmb3JtU2VjdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3AtaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC1jb2wgZm9ybS1jb21wb25lbnQgYWNjb3JkaW9uLWhlYWRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uXCIgZm9yPVwibmFtZVwiIGNsYXNzPVwiYWNjb3JkaW9uSGVhZGVyTmFtZSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJmb3JtU2VjdGlvbi5pY29uXCIgY2xhc3M9XCJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj4ge3sgZm9ybVNlY3Rpb24ubmFtZSB9fSA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsaW5rIG9mIGZvcm1TZWN0aW9uLmxpbmtzXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1yLTMgY3VzdG9tLWxpbmtcIiBbY2xhc3NdPVwibGluay5uYW1lICYmIWZvcm1TZWN0aW9uLmRpc2FibGVkJiYhbGluay5kaXNhYmxlZCAgPyAnY3VzdG9tLWxpbmsnIDogJ2Rpc2FibGVkLWxpbmsnXCIgKGNsaWNrKT1cIm9uTGlua0NsaWNrKGxpbmssIGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGZvcm0tY29tcG9uZW50IGZvcm0tYm9keS13cmFwcGVyXCI+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuY29udHJvbD09PSdhZGRfYnV0dG9uJz8gJyBmb3JtLWJ1dHRvbi1maWVsZC13cmFwcGVyICc6JycpK1xuICAgICAgICAgICAgICAgICAgICggZm9ybUZpZWxkLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICA/ICdjb2wtJyArIGZvcm1GaWVsZC5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm0uY29sdW1uXG4gICAgICAgICAgICAgICAgICAgID8gJ2NvbC0nICsgZm9ybS5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6ICdjb2wtMTIgbWQ6Y29sLTMgZmxleCBmbGV4LWNvbHVtbicgKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKSlcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybUZpZWxkLmNvbnRyb2wgPT09ICdicmVha19saW5lJyA/ICdicmVhay1saW5lJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmb3JtRmllbGQgb2YgZm9ybVNlY3Rpb24uZmllbGRzOyBsZXQgZm9ybUZpZWxkSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbGFiZWxDb250cm9sIEh5cGVybGluayBvbiBsb29rdXAgIENvbnRyb2wgRmllbGQtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWxhYmVsIGN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwiZm9ybUZpZWxkLm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKSA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZFRleHQgPyAnZGlzYWJsZS1sYWJlbC1jb250cm9sJyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluay1sYWJlbCBjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rICYmIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sLmh5cGVybGluay50YXJnZXQgPT09ICdfaWZyYW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJsb2FkTGFiZWxDb250cm9sSUZyYW1lKGZvcm1GaWVsZClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbGFiZWxDb250cm9sIG9uIGFkZFRleHRib3gsIGNhbGVuZGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5kaXNhYmxlZCA/ICdkaXNhYmxlLWxhYmVsLWNvbnRyb2wnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQsICRldmVudClcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJmb3JtRmllbGQuY29udHJvbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNwYWNlciBDb250cm9sIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TUEFDRVJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmNvbHVtbj8gJ2NvbC0nICtmb3JtRmllbGQuY29sdW1uIDogJydcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIElucHV0IFRleHRBcmVhIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlRFWFRBUkVBXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBwSW5wdXRUZXh0YXJlYSBbcm93c109XCJmb3JtRmllbGQucm93ID8gZm9ybUZpZWxkLnJvdyA6IDEgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie2hlaWdodDogZm9ybUZpZWxkLmhlaWdodCA/IGZvcm1GaWVsZC5oZWlnaHQgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5JTlBVVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZGlzYWJsZWQgJiYgIWZvcm1GaWVsZC5zaG93Qm90dG9tQm9yZGVyID8gJ2Rpc2FibGVkLWxhYmVsJyA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGFiZWwnIDogJycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsICYmIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiYgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLmlzUGFzc3dvcmRcIj4mbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImZvcm1GaWVsZC50ZXh0VHlwZT09J3Bhc3N3b3JkJztlbHNlIGhpZGVCdXR0b25cIiBjbGFzcz1cInBpIHBpLWV5ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGZvcm1GaWVsZClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoaWRlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1leWUtc2xhc2hcIiAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGZvcm1GaWVsZClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1wiIFtpZF09XCJmb3JtRmllbGQuc2hvd0JvdHRvbUJvcmRlciA/ICdyZW1vdmUtYm9kZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZm9ybUZpZWxkLnRleHRUeXBlID8gZm9ybUZpZWxkLnRleHRUeXBlIDogJ3RleHQnXCIgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZCA/IGZvcm1GaWVsZC5maWVsZCA6IGZvcm1GaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE51bWJlciBJbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTlVNRVJJQ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBDdXJyZW5jeSAmJiBudW1iZXIgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbbW9kZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RlY2ltYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtjdXJyZW5jeV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVVNEJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbG9jYWxlXT1cImZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2RlY2ltYWwnIHx8IGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbc3VmZml4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRcIj4gKiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBhc3N3b3JkIElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5QQVNTV09SRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdHlwZT1cInBhc3N3b3JkXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkXCI+ICogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DSEVDS0JPWFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBbYmluYXJ5XT1cInRydWVcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkNBTEVOREFSXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZCA/ICdkaXNhYmxlZC1jYWxlbmRhci1oZWFkZXItc3BhbicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FsZW5kYXIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSAnICsgZm9ybUZpZWxkLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sICcrIGZvcm1GaWVsZC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3Nob3dCdXR0b25CYXJdPVwiIWZvcm1GaWVsZC50aW1lT25seVwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIiBob3VyRm9ybWF0PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHREYXRlXT1cImRlZmF1bHREYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwTWludXRlXT1cImZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWwgPyBmb3JtRmllbGQubWludXRlc0ludGVydmFsIDogMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiZm9ybUZpZWxkLnNob3dUaW1lXCIgKG9uU2hvdyk9XCJzZXRDYWxlbmRlckRhdGUoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGltZU9ubHldPVwiZm9ybUZpZWxkLnRpbWVPbmx5XCIgW3ZpZXddPVwiZm9ybUZpZWxkLm1vbnRoT25seSA/ICdtb250aCcgOiAnZGF0ZScgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiZm9ybUZpZWxkPy5mb3JtYXQ/LnR5cGUgPyBmb3JtRmllbGQuZm9ybWF0Py50eXBlIDogY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2FsZW5kYXJDaGFuZ2VWYWx1ZShmb3JtRmllbGQpXCIgKG9uSW5wdXQpPVwiY2FsZW5kZXJJbnB1dFZhbHVlKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbdG9kYXlCdXR0b25TdHlsZUNsYXNzXT1cImNvbHVtbi50aW1lT25seSA/ICdoaWRlLXRvZGF5LWJ0bicgOiAnc2hvdy10b2RheS1idG4nXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5EUk9QRE9XTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkICYmICFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtzdHlsZUNsYXNzXT0nZm9ybUZpZWxkLmZpZWxkJyBbcGxhY2Vob2xkZXJdPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgW2ZpbHRlcl09XCJmb3JtRmllbGQuYWxsb3dTZWFyY2hcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiZm9ybUZpZWxkLm9wdGlvbkxhYmVsXCIgW29wdGlvblZhbHVlXT1cImZvcm1GaWVsZC5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiAoa2V5dXAuVGFiKT1cInRhYkZvY3VzRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEcm9wZG93blZhbHVlKGZvcm1GaWVsZClcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbc2hvd0NsZWFyXT1cImZvcm1GaWVsZC52YWx1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DbGVhclZhbHVlKGZvcm1GaWVsZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmb3JtRmllbGQudmFsdWUgPiAwID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkPy5pc1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmhpZGRlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBdXRvQ29tcGxldGUgU2VhcmNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5BVVRPQ09NUExFVEVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbHVpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3N1Z2dlc3Rpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJhdXRvU2VhcmNoKCRldmVudCwgZm9ybUZpZWxkKVwiIFtkcm9wZG93bl09XCJmb3JtRmllbGQuc2hvd09wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmb3JtRmllbGQuZGlzcGxheUZpZWxkXCIgW25hbWVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCIgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTVVMVElTRUxFQ1RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbb3B0aW9uc109XCJmb3JtRmllbGQuZGF0YVwiIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFthcHBlbmRUb109XCInYm9keSdcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybUZpZWxkLm9uQ2xpY2sgPyBmb3JtRmllbGQub25DbGljaygpIDogJydcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIeXBlcmxpbmstLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGlzYWJsZWQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbGluay1sYWJlbCBjdXN0b20tbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkhZUEVSTElOS1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cImh5cGVybGlua0RpYWxvZyhmb3JtRmllbGQsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2hyZWZdPVwiZm9ybUZpZWxkLmRpc2FibGVkPycnOnNhbml0aXplVXJsKGZvcm1GaWVsZC5oeXBlcmxpbms/LmxpbmspXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0XCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCA9PT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBsLTJcIiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cImxvYWRJRnJhbWUoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvb2t1cCBDb250cm9sIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5MT09LVVBfSU5QVVRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxvb2t1cC1oZWFkZXInIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cInR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZXZyb24tcmlnaHQgbG9va3VwLWlucHV0LWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb21wb25lbnQgbG9va3VwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWUgJiYgdHlwZU9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLlRhYik9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZm9ybUZpZWxkLnZhbHVlICYmICFmb3JtRmllbGQuZGlzYWJsZWRcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtY2xlYXItaWNvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShmb3JtRmllbGQpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWxlIFVwbG9hZCBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuRklMRV9VUExPQURcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1maWxlLXVwbG9hZCBbYWxsb3dNdWx0aXBsZV09XCJmb3JtRmllbGQuc2VsZWN0TXVsdGlwbGVGaWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RmlsZVR5cGVzXT1cImZvcm1GaWVsZC5TZXRmaWxlVHlwZXNcIiBbZmllbGRzXT1cImZvcm1GaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVVybCk9XCJzZXRGaWxlVXJscygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cGxvYWRGaWxlT25SZXR1cm4pPVwiZmlsZU9uY2hhbmdlRXZlbnQoKVwiPjwvc2UtZmlsZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93ZmlsZVVwbG9hZEVycm9yXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGlzcGxheSAgQ2FyZCBmaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0FSRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2UtY2FyZCBbY2FyZF09XCJmb3JtRmllbGQuY2FyZFwiIFtzZXRDYXJkRGF0YV09XCJzZXRDYXJkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDYXJkKT1cInNlbGVjdGVkQ2FyZENsaWNrRXZlbnQoJGV2ZW50KVwiPjwvc2UtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd2ZpbGVVcGxvYWRFcnJvclwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vdGUgRGV0YWlsIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5OT1RFX0ZJRUxEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkaXNhYmxlZC1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbGluay1sYWJlbCBjdXN0b20tbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBoYW5kbGVOb3RlRmllbGREaWFsb2coZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPnt7Zm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEeW5hbWljIENvbXBvbmVudCBDb250YWluZXItLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuaGlkZGVuID8gJ2hpZGRlbicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwie3tmb3JtU2VjdGlvbi5uYW1lfX0te3tmb3JtRmllbGRJbmRleH19XCIgI2R5bmFtaWNDb21wb25lbnRDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ09NUE9ORU5UXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSGVhZGVyIGNvbXBvbmVudC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TRUNUSU9OX0hFQURFUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj4ge3sgZm9ybUZpZWxkLmxhYmVsIH19IDwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgT25DbGljayBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkFERF9CVVRUT05cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIFtpY29uXT1cImZvcm1GaWVsZC5pY29uXCIgW2xhYmVsXT1cImZvcm1GaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntiYWNrZ3JvdW5kOiBmb3JtRmllbGQuY29sb3IgPyBmb3JtRmllbGQuY29sb3IgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3M/Zm9ybUZpZWxkLmNsYXNzOicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlJFUE9SVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJZF09XCJmb3JtRmllbGQucmVwb3J0SWRcIiBbbGFiZWxdPVwiZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwiZm9ybUZpZWxkLnBhcmFtc1wiIFtzaG93RGlhbG9nXT1cImZvcm1GaWVsZC5zaG93RGlhbG9nXCIgW2Zvcm1dPVwiZm9ybVwiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgSW5wdXQgU3dpdGNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TV0lUQ0hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0U3dpdGNoIFtuYW1lXT1cImZvcm1GaWVsZC5sYWJlbCA/IGZvcm1GaWVsZC5sYWJlbDogJ3N3aXRjaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiPjwvcC1pbnB1dFN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgICAgICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIHNhdmUgYW5kIGNsb3NlIGJ1dHRvbnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBhY3Rpb25zLWJ1dHRvbnMtbWFpbi13cmFwcGVyIGZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIFtuZ0NsYXNzXT1cInsgc3RpY2t5OiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zdGlja3kgZm9ybS1jb21wb25lbnQgYWN0aW9ucy1idXR0b25zLXdyYXBwZXItZGl2XCI+XG4gICAgICAgIDwhLS0gc2F2ZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZVNhdmVCdXR0b25cIiBbZGlzYWJsZWRdPVwiaXNGb3JtRGlzYWJsZWRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgIGxhYmVsPVwiU2F2ZVwiIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIChjbGljayk9XCJvblNhdmVGb3JtKClcIj48L2J1dHRvbj5cbiAgICAgICAgPCEtLSBjbG9zZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZUNhbmNlbEJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZFwiIChjbGljayk9XCJvbkNhbmNlbEZvcm0oKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCIgbGFiZWw9XCJDYW5jZWxcIiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBtbC0zXCI+PC9idXR0b24+ICAgICAgIFxuICAgICAgICAgPCEtLSBkeW5hbWljIGJ1dHRvbnMgLS0+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZm9ybUJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWJ1dHRvbi5oaWRkZW5cIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsXCIgW2ljb25dPVwiYnV0dG9uLmljb24gPyBidXR0b24uaWNvbiA6ICcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBtbC0zXCIgKGNsaWNrKT1cIm9uTmV3QnV0dG9uQ2xpY2soYnV0dG9uKVwiIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWQ/YnV0dG9uLmRpc2FibGVkOmZhbHNlXCI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPiJdfQ==
1171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUErQyxZQUFZLEVBQStCLGdCQUFnQixFQUFjLFlBQVksR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUlwTixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQTBDLFVBQVUsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNySixPQUFPLEVBQUUsZUFBZSxFQUFlLE1BQU0saUNBQWlDLENBQUM7QUFFL0UsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWU3RCxNQUFNLE9BQU8sYUFBYTtJQU94QixJQUFhLGNBQWMsQ0FBQyxHQUFRO1FBQ2xDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUNoQixRQUFRLENBQUM7U0FDVjtJQUNILENBQUM7SUE2QkQsWUFDVSxXQUFrQyxFQUNsQyxXQUF3QixFQUN4QixZQUEwQixFQUMxQixTQUF1QixFQUN4QixhQUE0QixFQUMzQix3QkFBa0QsRUFDbEQsZ0JBQW1DLEVBQ25DLEdBQXNCLEVBQ3RCLE1BQWMsRUFDZCxFQUFjLEVBQ2QsUUFBa0IsRUFDbEIsV0FBd0Is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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgQ29tcG9uZW50RmFjdG9yeSwgVmlld0NvbnRhaW5lclJlZiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IE5vdGVzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL25vdGVzL25vdGVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFRm9ybUNvbnRyb2wsIEVIeXBlcmxpbmssIElGb3JtRmllbGQsIElEeW5hbWljRm9ybSwgSUZvcm1TZWN0aW9uLCBFVmFsaWRhdG9yLCBJRHluYW1pY0NhcmQsIElGb3JtQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRVBlcm1pc3Npb25UeXBlLCBJUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29tbW9uLm1vZGVsJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9oeXBlcmxpbmsuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHN0aWNreUFjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmb3JtOiBJRHluYW1pY0Zvcm07XG4gIEBJbnB1dCgpIGhpZGVTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybUJ1dHRvbnM6IElGb3JtQnV0dG9uW10gPSBbXTtcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpIHNhdmVGb3JtOiBFdmVudEVtaXR0ZXI8SUZvcm1TZWN0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2FuY2VsRm9ybTogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyb3BEb3duQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VjdGlvbkNsaWNrZWRFdmVudDogRXZlbnRFbWl0dGVyPElGb3JtU2VjdGlvbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZHJlbignZHluYW1pY0NvbXBvbmVudENvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XG5cbiAgZHluYW1pY0Nhc2UgPSBFRm9ybUNvbnRyb2w7XG4gIHBlcm1pc3Npb25UeXBlID0gRVBlcm1pc3Npb25UeXBlO1xuICByb2xlczogc3RyaW5nW10gPSBbXTtcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNGb3JtSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbXBvbmVudHNMaXN0OiBJRGljdGlvbmFyeVtdID0gW107XG4gIGZpbGVVcGxvYWRVcmxzOiBhbnk7XG4gIHNob3dmaWxlVXBsb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FyZExpc3Q6IElEeW5hbWljQ2FyZDtcbiAgY2FsZW5kZXJQcmV2aW91c1ZhbHVlOiBzdHJpbmcgPSAnJztcbiAgZGVmYXVsdERhdGU6IHN0cmluZyA9ICcnO1xuICBsb29rdXBGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3l5JztcbiAgc2V0Q2FyZERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLy8gYXBwbHkgY2hlY2tlZC91bkNoZWNrZWQgcHJvcCBmb3IgQ2hlY2tCb3ggb2YgdGhlIEZvcm1cbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2UgOiBIeXBlcmxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICAvLyBicm93c2VyIHRhYiBjbG9zZSBldmVudFxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcbiAgYmVmb3JldW5sb2FkSGFuZGxlcihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybVNlcnZpY2UuZmllbGRGb2N1c2VkT3V0IHx8IHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMgJiZcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgLy8gc3RhcnQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGxldCBmb3JtVmFsdWVzID0geyAuLi50aGlzLmZvcm0gfTtcbiAgICAgIGZvcm1WYWx1ZXMuZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgICBpZiAoZm9ybVNlY3Rpb24uZmllbGRzKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5pc1Bhc3N3b3JkKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byBkYXRlXG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiBmaWVsZD8ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgZmllbGRbJ3ByZXZpb3VzVmFsdWUnXSA9IGZpZWxkPy52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJlxuICAgICAgICAgICAgICBmaWVsZD8udGltZU9ubHkgJiZcbiAgICAgICAgICAgICAgKGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSB8fFxuICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXRUaW1lSW5EYXRlKGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlICYmXG4gICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQ/LnZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAodmFsdWU6IGFueSkgPT4gdmFsdWVbZmllbGQ/LmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCc7JykgfHxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnLCcsICc7JylcbiAgICAgICAgICAgICAgICAgID8uc3BsaXQoJzsnKVxuICAgICAgICAgICAgICAgICAgPy5tYXAoKHZhbDogYW55KSA9PiAoeyBbZmllbGQ/LmRpc3BsYXlGaWVsZF06IHZhbCB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIG11bHRpU2VsZWN0IHN0cmluZyB2YWx1ZSBpbiBhcnJheVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk1VTFRJU0VMRUNUICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBbZmllbGQudmFsdWVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmllbGQ/LmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHt9O1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZD8uY2FyZD8uZGF0YT8uZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkPy5jYXJkPy5mb3JtU2VjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHguZHluYW1pY0Zvcm0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb25zOiBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZmllbGQ/LmNhcmQ/LmZvcm1TZWN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm1WYWx1ZXM7XG4gICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFbmQgY2FyZExpc3QgcmVmZXJlbmNlIGJyZWFrIGZ1bmN0aW9uYWxpdHlcbiAgICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNIRUNLQk9YKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID1cbiAgICAgICAgICAgICAgICBmaWVsZD8udmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgICAgICAgICAgIGZpZWxkPy52YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knIHx8XG4gICAgICAgICAgICAgICAgZmllbGQ/LnZhbHVlPy50b1N0cmluZygpID09PSAnMSdcbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZm9ybVxuICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlclJvbGVzKCk7XG4gICAgICB0aGlzLmFwcGx5VXNlclBlcm1pc3Npb25zKCk7XG4gICAgICB0aGlzLmFwcGx5UmVxdWlyZWRGaWVsZFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMucmVtb3ZlV2hpdGVTcGFjZXMoKTtcbiAgICAgIHRoaXMuc2V0SHlwZXJsaW5rQ29tcG9uZW50Um91dGUoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldENhbGFuZGVyV2lkdGgoKTtcbiAgICAgIH0sIDMwMDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBjYWxlbmRlciAyIE9yIDQgZGlnaXQgeWVhciBmb3JtYXRcbiAgY2FsZW5kZXJJbnB1dFZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmb3JtRmllbGQuZmllbGQpWzBdXG4gICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICAgIGlmICh5ZWFyPy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBuZXcgRGF0ZSh2YWwudGFyZ2V0LnZhbHVlKS50b0xvY2FsZURhdGVTdHJpbmcoXG4gICAgICAgICAgICAnZW4tVVMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBwZXJjZW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuICBzZXRudW1lcmljdmFsdWVzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZD8uY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBmaWVsZD8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICAoZmllbGQudmFsdWUgKiAxMDApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgKiAxMDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoZmllbGQudmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJykge1xuICAgICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gcGFyc2VGbG9hdChmaWVsZC52YWx1ZSkudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgIGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZvcm0gaGFzIGFueSBmaWVsZCB3aXRoIGR5bmFtaWMgY29tcG9uZW50O1xuICAgKiBDcmVhdGVzIGNvbXBvbmVudCBpbnN0YW5jZSB1c2luZyBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICogSW5qZWN0cyBjb21wb25lbnQgdGhyb3VnaCB2aWV3UmVmLmNyZWF0ZUNvbXBvbmVudCgpXG4gICAqIFBhc3NlcyBkYXRhIHRvIGNvbXBvbmVudFxuICAgKiBTdWJzY3JpYmVzIHRvIHRoZSBldmVudHMgcGFzc2VkIHRvIHRoZSBjb21wb25lbnRzXG4gICAqIEZpbmFsbHkgZm9yY2VzIEFuZ3VsYXIgdG8gZGV0ZWNoIGNoYW5nZXNcbiAgICovXG4gIGxvYWREeW5hbWljQ29tcG9uZW50cygpIHtcbiAgICB0aGlzLmNvbXBvbmVudHNMaXN0ID0gW107XG4gICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSwgZmllbGRJbmRleCkgPT4ge1xuICAgICAgICBpZiAoZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNPTVBPTkVOVCkge1xuICAgICAgICAgIGNvbnN0IHZpZXdSZWY6IGFueSA9IHRoaXMuZHluYW1pY0NvbXBvbmVudENvbnRhaW5lci5maW5kKFxuICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgIHguZWxlbWVudC5uYXRpdmVFbGVtZW50LmlkID09IGAke2Zvcm1TZWN0aW9uLm5hbWV9LSR7ZmllbGRJbmRleH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IENvbXBvbmVudCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBoYW5kbGVycyxcbiAgICAgICAgICB9ID0gZmllbGQuY29tcG9uZW50Q29udHJvbDtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4gPVxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQ29tcG9uZW50KTtcbiAgICAgICAgICAvLyBQYXNzaW5nIGRhdGEgdG8gY29tcG9uZW50XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld1JlZj8uY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICAgICAgIGlmIChjb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGRhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNMaXN0LnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5jb21wb25lbnRDb250cm9sPy5pZCxcbiAgICAgICAgICAgICAgdmFsdWU6IGNvbXBvbmVudFJlZixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gU3Vic2NyaWJlcyB0byB0aGUgZXZlbnRzIHBhc3NlZCB0byB0aGUgY29tcG9uZW50c1xuICAgICAgICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKS5mb3JFYWNoKChbZXZlbnQsIGhhbmRsZXJdOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlW2V2ZW50XSBhcyBFdmVudEVtaXR0ZXI8YW55Pik/LnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW52b2tlIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy9pbnZva2Ugd2hlbiBmaWxlIHVwbG9hZCBPUiBkZWxldGUgYSBmaWxlXG4gIGZpbGVPbmNoYW5nZUV2ZW50KCkge1xuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgICAvLyAgIGxldCBjYXJkQ29udHJvbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKT0+IHtcbiAgICAvLyAgICAgaWYoZm9ybVNlY3Rpb24/LmZpZWxkcz8uc29tZSgoZm9ybUZpZWxkOiBhbnkpPT4gZm9ybUZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkpe1xuICAgIC8vICAgICAgIGNhcmRDb250cm9sID0gdHJ1ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgaWYoY2FyZENvbnRyb2wpe1xuICAgIC8vICAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0sIDMwMDApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIGxvYWQgZHluYW1pYyBjb21wb25lbnRzIGlmIGV4aXN0IGluIGZvcm1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0bnVtZXJpY3ZhbHVlcygpO1xuICAgICAgdGhpcy5vbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKTtcbiAgICAgIHRoaXMubG9hZER5bmFtaWNDb21wb25lbnRzKCk7XG4gICAgICB0aGlzLnNldENhcmRSZXNwb25zZUlkKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHNldENhcmRSZXNwb25zZUlkKCkge1xuICAgIHV0aWxpdGllcy5vbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYocmVzLmRhdGE/LmlzU2F2ZSl7XG4gICAgICAgIHRoaXMuc2V0Q2FyZElkcyhyZXMuZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldERlbGV0ZUNhcmRJZChyZXMuZGF0YT8uY2FyZERhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGVsZXRlQ2FyZElkKHVwZGF0ZWRDYXJkRGF0YTphbnkpe1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uOklGb3JtU2VjdGlvbik9PntcbiAgICAgIGNvbnN0IGNhcmRDb250cm9sID0gc2VjdGlvbi5maWVsZHMuZmluZCgoZmllbGQ6SUZvcm1GaWVsZCk9PiBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCk7XG4gICAgICBpZihjYXJkQ29udHJvbCl7XG4gICAgICAgIGNhcmRDb250cm9sLmNhcmQuZGF0YSA9IHVwZGF0ZWRDYXJkRGF0YTtcbiAgICAgIH07XG4gICAgfSk7XG4gICAgXG4gIH1cblxuICBzZXRDYXJkSWRzKHJlcykge1xuICAgIHJlcy5yZWNvcmRzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlcy5yZWNvcmRzKTtcbiAgICByZXMucmVjb3Jkcz8uZm9yRWFjaCgocmVjb3JkOiBhbnksIHJlY29yZEluZGV4OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoQ2FyZCA9IHJlcy5jYXJkc0luZm8/LmZpbmQoXG4gICAgICAgIChpbmZvLCBjYXJkSW5kZXgpID0+XG4gICAgICAgICAgcmVjb3JkSW5kZXggPT09IGNhcmRJbmRleCAmJiByZWNvcmRbcmVzLmZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKV1cbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hDYXJkICYmIE9iamVjdC5rZXlzKG1hdGNoQ2FyZCk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWF0Y2hDYXJkW3Jlcy5maWVsZE5hbWVdID0gcmVjb3JkW3Jlcy5maWVsZE5hbWU/LnRvTG93ZXJDYXNlKCldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmZvcm0/LmZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb3JtPy5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gZm9ybVNlY3Rpb24uZmllbGRzPy5maW5kKFxuICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBUkRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgIGlmIChyZXMuY2FyZHNJbmZvPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXMuY2FyZHNJbmZvPy5mb3JFYWNoKChjYXJkSWQpID0+IHtcbiAgICAgICAgICAgICAgY2FyZElkLmlkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gcmVzLmNhcmRzSW5mbztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0Q2FyZERhdGEgPSAhdGhpcy5zZXRDYXJkRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVdoaXRlU3BhY2VzKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbi5jbGFzcykgc2VjdGlvbi5jbGFzcyA9IHNlY3Rpb24uY2xhc3MucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldEh5cGVybGlua0NvbXBvbmVudFJvdXRlKCkge1xuICAgIHRoaXMuZm9ybT8uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgZm9ybVNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LICYmXG4gICAgICAgICAgZmllbGQuaHlwZXJsaW5rPy5jb21wb25lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIucmVzZXRDb25maWcoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRoOiAnaHlwZXJsaW5rJyArIGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IGZpZWxkLmh5cGVybGluay5jb21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5yb3V0ZXIuY29uZmlnLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGJyb3dzZXJUYWJDbG9zZUV2ZW50KGV2ZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGV2ZW50O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKXtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW5zIGFueSBjaGFuZ2UgaW4gRHluYW1pYyBGb3JtIGNvbXBvbmVudCBTdGF0ZVxuICAgKi9cbiAgb25EeW5hbWljRm9ybVN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdXRpbGl0aWVzLm9uRHluYW1pY0Zvcm1TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5pZCAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZk9iaiA9IHRoaXMuY29tcG9uZW50c0xpc3QuZmluZChcbiAgICAgICAgICAoeCkgPT4geC5uYW1lID09PSByZXNwb25zZS5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmT2JqKSB7XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWZPYmoudmFsdWUuaW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbXBvbmVudFJlZk9iai52YWx1ZS5pbnN0YW5jZS5uZ09uSW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnNcbiAgYXBwbHlVc2VyUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICBsZXQgdG90YWxGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgZGlzYWJsZWRGaWVsZHM6IG51bWJlciA9IDA7XG4gICAgICBsZXQgaGlkZGVuRmllbGRzOiBudW1iZXIgPSAwO1xuXG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvbnM6IGFueSA9IGZvcm1GaWVsZC5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGxldCBzZWN0aW9uUGVybWlzc2lvbnM6IGFueSA9IFtdO1xuICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9ucykgc2VjdGlvblBlcm1pc3Npb25zID0gZm9ybVNlY3Rpb24ucGVybWlzc2lvbnM7XG4gICAgICAgICAgICBpZiAoIXBlcm1pc3Npb25zKSBwZXJtaXNzaW9ucyA9IHRoaXMuZm9ybS5wZXJtaXNzaW9ucztcbiAgICAgICAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzZWN0aW9uUGVybWlzc2lvbnMgJiYgc2VjdGlvblBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgc2VjdGlvblBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5hY2NvcmRpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbi5yb2xlcyAmJiBwZXJtaXNzaW9uLnJvbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24ucm9sZXMuZm9yRWFjaCgocm9sZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiB0aGlzLnJvbGVzICYmIHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQucGVybWlzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5wZXJtaXNzaW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtU2VjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVNlY3Rpb24uYWNjb3JkaW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b3RhbEZpZWxkcysrO1xuXG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkRmllbGRzKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGhpZGRlbkZpZWxkcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gZGlzYWJsZWRGaWVsZHM7XG4gICAgICB0aGlzLmlzRm9ybUhpZGRlbiA9IHRvdGFsRmllbGRzID4gMCAmJiB0b3RhbEZpZWxkcyA9PT0gaGlkZGVuRmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIElGcmFtZSBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICBpZiAoZm9ybVNlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbiwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmKGZvcm1TZWN0aW9uLmRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRTZWN0aW9uRmllbGRzKGZvcm1TZWN0aW9uLCBmYWxzZSk7XG4gICAgfWVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVkU2VjdGlvbkZpZWxkcyhmb3JtU2VjdGlvbjogSUZvcm1TZWN0aW9uLCBkaXNhYmxlZDogYm9vbGVhbil7XG4gICAgZm9ybVNlY3Rpb24uZmllbGRzLm1hcCgoZmllbGQ6IElGb3JtRmllbGQpID0+IHtcbiAgICAgIGZpZWxkLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1TZWN0aW9uO1xuICB9XG5cbiAgbG9hZElGcmFtZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihJZnJhbWVDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogJ0h5cGVybGluaycsXG4gICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluaz8ud2lkdGggPyBmb3JtRmllbGQuaHlwZXJsaW5rLndpZHRoIDogJzkwJScsXG4gICAgICBoZWlnaHQ6IGZvcm1GaWVsZC5oeXBlcmxpbms/LmhlaWdodCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsuaGVpZ2h0IDogJzgwJScsXG4gICAgICBkYXRhOiB7IHZhbHVlOiBmb3JtRmllbGQuaHlwZXJsaW5rPy5saW5rLCBpRnJhbWVJZDogZm9ybUZpZWxkLmxhYmVsIH0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhmb3JtRmllbGQ/LmZpZWxkKTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERpYWxvZyBpbiBoeXBlcmxpbmsgQ29udHJvbFxuICAgKi9cbiAgaHlwZXJsaW5rRGlhbG9nKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZXZlbnQ6IGFueSkge1xuICAgIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuQkxBTkspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zO1xuICAgICAgd2luZG93Lm9wZW4oJ2h5cGVybGluaycgKyBmb3JtRmllbGQubGFiZWwpO1xuICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0ID09PSBFSHlwZXJsaW5rLlNFTEYpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnaHlwZXJsaW5rJyArIGZvcm1GaWVsZC5sYWJlbF0sIHtcbiAgICAgICAgcXVlcnlQYXJhbXM6IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuRElBTE9HKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tFdmVudChmb3JtRmllbGQpO1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkgJiYgZm9ybUZpZWxkLmh5cGVybGluay5jb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5oeXBlcmxpbmtTZXJ2aWNlLm9wZW5EaWFsb2dJbk5ld1RhYihmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudCwgZm9ybUZpZWxkLmh5cGVybGluaz8ucGFyYW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGZvcm1GaWVsZC5oeXBlcmxpbmsuY29tcG9uZW50LCB7XG4gICAgICAgICAgaGVhZGVyOiBmb3JtRmllbGQuaHlwZXJsaW5rLmRhdGE/LmhlYWRlclxuICAgICAgICAgICAgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmRhdGE/LmhlYWRlclxuICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICB3aWR0aDogZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA/IGZvcm1GaWVsZC5oeXBlcmxpbmsud2lkdGggOiAnJyxcbiAgICAgICAgICBzdHlsZTogZm9ybUZpZWxkLmh5cGVybGluay53aWR0aCA/IHt9IDogeyAnbWF4LXdpZHRoJzogJ2ZpdC1jb250ZW50JyB9LFxuICAgICAgICAgIGhlaWdodDogZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHQgPyBmb3JtRmllbGQuaHlwZXJsaW5rLmhlaWdodCA6ICc4MCUnLFxuICAgICAgICAgIGRhdGE6IGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYoZGlhbG9nKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGZvcm1GaWVsZC5oeXBlcmxpbms/LmNvbXBvbmVudD8ubmFtZTtcbiAgICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdXRpbGl0aWVzLmRyYWdnYWJsZURpYWxvZyhcbiAgICAgICAgICBmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWxcbiAgICAgICAgKTtcbiAgICAgICAgZGlhbG9nLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5vblJldHVybihyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gSWZyYW1lIG9uIExhYmVsXG4gICAqL1xuICBsb2FkTGFiZWxDb250cm9sSUZyYW1lKGZvcm1GaWVsZDogYW55KSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGZvcm1GaWVsZC5sYWJlbC5uYW1lLFxuICAgICAgd2lkdGg6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLndpZHRoXG4gICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay53aWR0aFxuICAgICAgICA6ICc5MCUnLFxuICAgICAgaGVpZ2h0OiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluaz8uaGVpZ2h0XG4gICAgICAgID8gZm9ybUZpZWxkLmh5cGVybGluay5oZWlnaHRcbiAgICAgICAgOiAnODAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rPy5saW5rXG4gICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgaUZyYW1lSWQ6IGZvcm1GaWVsZC5sYWJlbC5uYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyhcbiAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgJ0lmcmFtZUNvbXBvbmVudCdcbiAgICApO1xuICAgIHV0aWxpdGllcy5kcmFnZ2FibGVEaWFsb2coXG4gICAgICBmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWxcbiAgICApO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGlmIChmb3JtRmllbGQub25SZXR1cm4pIHtcbiAgICAgICAgICBmb3JtRmllbGQub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uQ2xpY2spIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGZpbmQgdGhlIHJlcXVpcmVkIGZpZWxkIGluIGZvcm1cbiAgICovXG4gIGFwcGx5UmVxdWlyZWRGaWVsZFZhbGlkYXRpb24oKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mb3JtICYmXG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zICYmXG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnMuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9ucyAmJiBmaWVsZC52YWxpZGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9ucy5mb3JFYWNoKCh2YWxpZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsaWQudHlwZSA9PT0gRVZhbGlkYXRvci5SRVFVSVJFRCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLnJlcXVpcmVkRmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RmlsZVVybHMoZmlsZVVybHM6IGFueSkge1xuICAgIGlmIChmaWxlVXJscyAmJiBmaWxlVXJscy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmZpbGVVcGxvYWRVcmxzID0gZmlsZVVybHM7XG4gICAgICB0aGlzLnNob3dmaWxlVXBsb2FkRXJyb3IgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvblNhdmVGb3JtKCkge1xuICAgIGxldCB2YWxpZGl0eSA9IHRydWU7XG4gICAgbGV0IGVycm9yTWVzc2FnZURldGFpbHMgPSAnJztcbiAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChmb3JtU2VjdGlvbikgPT4ge1xuICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShmb3JtU2VjdGlvbi5maWVsZHMpKSB7XG4gICAgICAgICAgZm9ybVNlY3Rpb24uZmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyA9IGVycm9yTWVzc2FnZURldGFpbHNcbiAgICAgICAgICAgICAgICA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IGZpZWxkID0gZm9ybVNlY3Rpb24uZmllbGRzLnNvbWUoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLnJlcXVpcmVkRmllbGQgJiYgZmllbGQuZXJyb3JNZXNzYWdlICYmICFmaWVsZC52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHZhbGlkaXR5ICYmIGZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICAgICAgNTAwMCxcbiAgICAgICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlRGV0YWlscywgNTAwMCwgJ0lOVkFMSUQgRklFTEQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsaWRpdHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gc2V0IHVwbG9hZEZpbGUgVVJMIGluIEZvcm1GaWVsZCBpbiBjYXNlIG9mIEZJTEVfVVBMT0FEXG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5GSUxFX1VQTE9BRCkge1xuICAgICAgICAgICAgZmllbGQudmFsdWUgPSB0aGlzLmZpbGVVcGxvYWRVcmxzO1xuXG4gICAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvbnMgJiYgZmllbGQudmFsaWRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9ucy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeC50eXBlID09PSBFVmFsaWRhdG9yLlJFUVVJUkVEICYmICFmaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93ZmlsZVVwbG9hZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmNhcmQgJiYgZmllbGQuY2FyZC5kYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxldCBzZWxlY3RlZERhdGEgPSBmaWVsZC5jYXJkLmRhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh4OiBhbnkpID0+IHguc2VsZWN0ZWRDYXJkICYmIHguc2VsZWN0ZWRDYXJkLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0YSAmJiBzZWxlY3RlZERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmNhcmQuZGF0YSA9IHNlbGVjdGVkRGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHZhbGlkaXR5KSB7XG4gICAgICAvLyBTYXZlIGdyaWQgb24gZm9ybVNhdmUgQnV0dG9uXG4gICAgICBjb25zdCBzYXZlQWxsR3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlQWxsR3JpZFZhbHVlcycpO1xuICAgICAgY29uc3QgZ2V0QnRuczogYW55ID1cbiAgICAgICAgdGhpcy5lbD8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2F2ZVJvdycpO1xuICAgICAgbGV0IGN1c3RvbUNvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgbGV0IHRlbXBWYWx1ZTogYW55ID0gW107XG4gICAgICAvLyBzZXQgdmFsdWUgYXMgMSBvciAwIGluIGNhc2Ugb2YgY2hlY2tib3hcbiAgICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMgJiYgdmFsaWRpdHkpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlID09PSAnJyB8fCBmaWVsZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBhcyBzdHJpbmdcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkNBTEVOREFSICYmXG4gICAgICAgICAgICAgIGZpZWxkLnRpbWVPbmx5ICYmXG4gICAgICAgICAgICAgIGZpZWxkLnNhdmVBc1N0cmluZyAmJlxuICAgICAgICAgICAgICAhZmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpICYmXG4gICAgICAgICAgICAgICFmaWVsZC52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ1BNJylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkLnZhbHVlLCAnaGg6bW0gYScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTlVNRVJJQykge1xuICAgICAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gZmllbGQ/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQ/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkLnZhbHVlIC8gMTAwKT8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlIC8gMTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZXQgdmFsdWUgb2YgYXV0b0NvbXBsZXRlIGFzIHN0cmluZ3NcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgICAhZmllbGQuc2hvd0FsbFZhbHVlICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLnZhbHVlLm1hcChcbiAgICAgICAgICAgICAgICAodmFsdWU6IGFueSkgPT4gdmFsdWVbZmllbGQuZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAodmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJzsnKSB8fFxuICAgICAgICAgICAgICAgICAgdmFsdWUudG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGVtcFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2VBbGwoJywnLCAnOycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb252ZXJ0IG11bHRpU2VsZWN0IGFycmF5IGludG8gc3RyaW5nXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVCAmJlxuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGZpZWxkLnZhbHVlKSAmJlxuICAgICAgICAgICAgICBmaWVsZC5zYXZlQXNTdHJpbmcgIT09IGZhbHNlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZSA/IDEgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2F2ZSBncmlkIG9uIGZvcm1TYXZlIEJ1dHRvblxuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiYgIWN1c3RvbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAoc2F2ZUFsbEdyaWQpIHtcbiAgICAgICAgICAgICAgICBzYXZlQWxsR3JpZC5jbGljaygpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGdldEJ0bnMgJiYgZ2V0QnRucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYnRuIG9mIGdldEJ0bnMpIHtcbiAgICAgICAgICAgICAgICAgIGJ0bj8uY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KGZhbHNlKTtcbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNhdmVGb3JtLmVtaXQodGhpcy5mb3JtLmZvcm1TZWN0aW9ucyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNhdmVBbGxHcmlkID8gODAgOiAwXG4gICAgICApO1xuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGZvcm1TZWN0aW9uLmZpZWxkcykge1xuICAgICAgICAgIGZvcm1TZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICAgICAgIWZpZWxkLnNob3dBbGxWYWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnZhbHVlID0gdGVtcFZhbHVlXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnLCcsICc7JylcbiAgICAgICAgICAgICAgICA/LnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICA/Lm1hcCgodmFsOiBhbnkpID0+ICh7IFtmaWVsZC5kaXNwbGF5RmllbGRdOiB2YWwgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DSEVDS0JPWCkge1xuICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID09PSAxID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gZmllbGQ/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgICAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgKGZpZWxkLnZhbHVlICogMTAwKT8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlICogMTAwO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBwYXJzZUZsb2F0KGZpZWxkLnZhbHVlKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWxGb3JtKCkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCB8fCB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlXG4gICAgICAgIC5jb25maXJtKHtcbiAgICAgICAgICBrZXk6ICdjYW5jZWxCdXR0b24nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlPycsXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzWzBdLmRldGFpbCA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgIHRoaXMuYnJvd3NlclRhYkNsb3NlRXZlbnQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbEZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgICAgICAgIHV0aWxpdGllcy5yZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbmNlbEZvcm0uZW1pdCh0aGlzLmZvcm0uZm9ybVNlY3Rpb25zKTtcbiAgICAgIHV0aWxpdGllcy5yZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICB9XG4gIH1cblxuICBsb29rdXBDbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZSA9ICcnO1xuICAgICAgdGhpcy5icm93c2VyVGFiQ2xvc2VFdmVudCh0cnVlKTtcbiAgICB9XG4gICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgfVxuICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGNhbGVuZGVyIHdpZHRoXG4gICAqL1xuICBzZXRDYWxhbmRlcldpZHRoKCkge1xuICAgIGNvbnN0IGNhbGFuZGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wLWNhbGVuZGFyJyk7XG4gICAgbGV0IGZvcm06IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0nKTtcbiAgICBsZXQgd2lkdGggPSBmb3JtPy5jbGllbnRXaWR0aDtcbiAgICBjYWxhbmRlckVsZW1lbnQ/LmZvckVhY2goKGNhbGFuZGVyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGNhbGFuZGVyT2ZzZXRMZWZ0ID0gY2FsYW5kZXIub2Zmc2V0TGVmdDtcbiAgICAgIGlmIChjYWxhbmRlck9mc2V0TGVmdCA8PSB3aWR0aCAvIDIpIHtcbiAgICAgICAgY2FsYW5kZXIuY2xhc3NMaXN0LmFkZCgnb3Blbi1yaWdodC1zaWRlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkeW5hbWljIGRpYWxvZyBkYXRhXG4gICAqL1xuICBzZXREaWFsb2dEYXRhKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZGF0YTogYW55KTogYW55IHtcbiAgICBpZiAoZGF0YSAmJiBmb3JtRmllbGQpIHtcbiAgICAgIGxldCB2YWx1ZTogYW55O1xuICAgICAgZGF0YSA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihkYXRhKTtcbiAgICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlICYmXG4gICAgICAgICAgZm9ybUZpZWxkLnZhbHVlLnRleHQgJiZcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC50b1N0cmluZygpLnRyaW0oKVxuICAgICAgICApIHtcbiAgICAgICAgICBzZWxlY3Rpb24gPSBmb3JtRmllbGQudmFsdWUudGV4dD8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGZvcm1GaWVsZC52YWx1ZT8udmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZm9ybUZpZWxkLnZhbHVlICYmIGZvcm1GaWVsZC52YWx1ZS50b1N0cmluZygpLnRyaW0oKSkge1xuICAgICAgICBzZWxlY3Rpb24gPSBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBkYXRhLmNvbXBvbmVudD8ubmFtZTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIHRoaXMucGFnZUxvZ2dlclNlcnZpY2Uuc2F2ZVBhZ2VMb2dnZXJJbmZvKFxuICAgICAgICAgIHRoaXMucm91dGVyLnVybD8uc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkYXRhLmNvbXBvbmVudCwge1xuICAgICAgICAuLi5kYXRhLmRhdGEsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgICAgICBmaWVsZDogZm9ybUZpZWxkLmZpZWxkLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICB2YWx1ZUZpZWxkOiBkYXRhLmRhdGE/LnZhbHVlRmllbGQsXG4gICAgICAgICAgLi4uZGF0YS5kYXRhLmRhdGEsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0YWJGb2N1c0V2ZW50KGZvcm1GaWVsZDogYW55KSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLicgKyBmb3JtRmllbGQuZmllbGRcbiAgICApO1xuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICBmb3JtRmllbGQub25DbGljayhmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGxhYmVsXG4gICAqL1xuICBzZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQ6IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFxuICAgICkge1xuICAgICAgaWYoZXZlbnQuY3RybEtleSAmJiBmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCl7XG4gICAgICAgIHRoaXMuaHlwZXJsaW5rU2VydmljZS5vcGVuRGlhbG9nSW5OZXdUYWIoZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmNvbXBvbmVudCwgZm9ybUZpZWxkPy5sYWJlbD8ubGFiZWxDb250cm9sPy5sb29rdXBDb250cm9sPy5kYXRhLmRhdGEpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGNvbnN0IHJlZjogYW55ID0gdGhpcy5zZXREaWFsb2dEYXRhKFxuICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgICAgIHV0aWxpdGllcy5kcmFnZ2FibGVEaWFsb2coXG4gICAgICAgICAgZm9ybUZpZWxkPy5maWVsZCA/IGZvcm1GaWVsZD8uZmllbGQgOiBmb3JtRmllbGQ/LmxhYmVsXG4gICAgICAgICk7XG4gICAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZCxcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQ/LmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIGlmIChmb3JtRmllbGQubGFiZWwub25SZXR1cm4pXG4gICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vblJldHVybihmb3JtRmllbGQudmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgfVxuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSBkaWFsb2cgcmVmIHdoZW4gcG9wdXAgb3BlblxuICAgKi9cbiAgc2V0RHluYW1pY0RpYWxvZ1JlZihyZWY6IGFueSl7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICBzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHRoaXMubG9va3VwRm9jdXNPdXQgPSB0cnVlO1xuICAgICAgbGV0IHZhbHVlID0gZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5zZXREaWFsb2dEYXRhKGZvcm1GaWVsZCwgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wpO1xuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHJlZik7XG4gICAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgICBmb3JtRmllbGQ/LmZpZWxkID8gZm9ybUZpZWxkPy5maWVsZCA6IGZvcm1GaWVsZD8ubGFiZWxcbiAgICAgICk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQuZmllbGQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1GaWVsZC5maWVsZCk/LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgZm9ybUZpZWxkLFxuICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5sb29rdXBGb2N1c091dCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5vblJldHVybikgZm9ybUZpZWxkLm9uUmV0dXJuKGZvcm1GaWVsZC52YWx1ZSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKTtcbiAgICAgICAgICBjb25zdCBmb3JtRmllbGRWYWx1ZSA9XG4gICAgICAgICAgICB0eXBlb2YgZm9ybUZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgIDogZm9ybUZpZWxkLnZhbHVlO1xuICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlLnRleHQgOiB2YWx1ZTtcbiAgICAgICAgICBpZiAoZm9ybUZpZWxkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICBmb3JtRmllbGQub25DaGFuZ2UoZm9ybUZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb25DbGljayBldmVudCBpbnZva2VkICYmIG9wZW4gRGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGQvbGFiZWxcbiAgICovXG4gIGhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoZm9ybUZpZWxkKTtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGZvcm1GaWVsZC5sb29rdXBDb250cm9sKSB7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cExhYmVsKGZvcm1GaWVsZCk7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cEZpZWxkKGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHNldCBDYWxlbmRlciBEYXRlIEZvcm1hdCAmJiBzZXQgRGF0ZSBNaW51dGUgaW50ZXJ2YWxcbiAgICovXG4gIHNldENhbGVuZGVyRGF0ZShmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUikge1xuICAgICAgLy8gY29udmVydCB0aW1lIGludG8gZGF0ZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgZm9ybUZpZWxkLnRpbWVPbmx5ICYmXG4gICAgICAgIChmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHxcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUoZm9ybUZpZWxkLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKGZvcm1GaWVsZC5zaG93VGltZSB8fCBmb3JtRmllbGQudGltZU9ubHkpICYmXG4gICAgICAgIGZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUoXG4gICAgICAgICAgdXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChmb3JtRmllbGQudmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoZm9ybUZpZWxkLnNob3dUaW1lIHx8IGZvcm1GaWVsZC50aW1lT25seSkgJiZcbiAgICAgICAgIWZvcm1GaWVsZC52YWx1ZSAmJlxuICAgICAgICBmb3JtRmllbGQubWludXRlc0ludGVydmFsXG4gICAgICApIHtcbiAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICB9XG4gIH1cbiAgY2FsZW5kYXJDaGFuZ2VWYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIGlmIChmb3JtRmllbGQudmFsdWUgIT09IGZvcm1GaWVsZC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgaWYgKGZvcm1GaWVsZC5vbkNoYW5nZSkge1xuICAgICAgICBmb3JtRmllbGQucHJldmlvdXNWYWx1ZSA9IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgZm9ybUZpZWxkLm9uQ2hhbmdlKGZvcm1GaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgc2VjdGlvbiBDbGlja2VkIGV2ZW50XG4gICAqL1xuICBjbGlja2VkU2VjdGlvbihzZWN0aW9uOiBJRm9ybVNlY3Rpb24pIHtcbiAgICB0aGlzLnNlY3Rpb25DbGlja2VkRXZlbnQuZW1pdChzZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBpbiBOb3RlX0ZpZWxkIGNvbnJ0cm9sXG4gICAqL1xuICBoYW5kbGVOb3RlRmllbGREaWFsb2coZm9ybWZpZWxkOiBJRm9ybUZpZWxkKSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oTm90ZXNDb21wb25lbnQsIHtcbiAgICAgIGhlYWRlcjogZm9ybWZpZWxkLmxhYmVsIGFzIHN0cmluZyxcbiAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdmFsdWU6IGZvcm1maWVsZC52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWRUZXh0OiBmb3JtZmllbGQuZGlzYWJsZWRUZXh0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICB1dGlsaXRpZXMuZHJhZ2dhYmxlRGlhbG9nKFxuICAgICAgZm9ybWZpZWxkPy5maWVsZCA/IGZvcm1maWVsZD8uZmllbGQgOiBmb3JtZmllbGQ/LmxhYmVsXG4gICAgKTtcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGZvcm1maWVsZC5vblJldHVybikge1xuICAgICAgICAgIGZvcm1maWVsZC5vblJldHVybihkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRDbGFzc05hbWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkKTogc3RyaW5nIHtcbiAgICBpZiAoZm9ybUZpZWxkLmhpZGRlbikgcmV0dXJuICcgaGlkZGVuJztcbiAgICBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIGF1dG9TZWFyY2goZXZlbnQ6IGFueSwgZm9ybUZpZWxkOiBhbnkpIHtcbiAgICBpZiAoZm9ybUZpZWxkICYmIGV2ZW50KSB7XG4gICAgICBmb3JtRmllbGQub25SZXR1cm4oZXZlbnQucXVlcnksIGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGludm9rZWQgb25Gb2N1c091dCBFdmVudFxuICAgKi9cbiAgb25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZDogSUZvcm1GaWVsZCkge1xuICAgIGxldCByZWNvcmQ6IGFueSA9IHt9O1xuICAgIHRoaXMuZm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkKSB7XG4gICAgICAgICAgcmVjb3JkW2Zvcm1GaWVsZC5maWVsZF0gPSBmb3JtRmllbGQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHV0aWxpdGllcy5zZXRIeXBlcmxpbmtQYXJhbVZhbHVlKHJlY29yZCwgdGhpcy5mb3JtKTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2Zvcm1GaWVsZF0pO1xuICAgIGlmIChmb3JtRmllbGQgJiYgZm9ybUZpZWxkLm9uRm9jdXNPdXQgJiYgdGhpcy5sb29rdXBGb2N1c091dCA9PT0gZmFsc2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkZvY3VzT3V0KGZvcm1GaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgb25CYWNrU3BhY2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICBpZiAodHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGZvcm1GaWVsZC52YWx1ZS50ZXh0ID0gZm9ybUZpZWxkLnZhbHVlLnRleHQuc3Vic3RyaW5nKFxuICAgICAgICAwLFxuICAgICAgICBmb3JtRmllbGQudmFsdWUudGV4dC5sZW5ndGggLSAxXG4gICAgICApO1xuICAgICAgaWYgKGZvcm1GaWVsZC52YWx1ZS50ZXh0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmb3JtRmllbGQudmFsdWUgJiYgZm9ybUZpZWxkLnZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5mb3JtU2VydmljZS5jaGVja1ZhbGlkaXR5KFtmb3JtRmllbGRdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2xlYXIgdGhlIGRyb3Bkb3duIHZhbHVlIHdoZW4gY2xpY2sgb24geFxuICAgKi9cbiAgb25DbGVhclZhbHVlKGZvcm1GaWVsZDogSUZvcm1GaWVsZCwgZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2UuY2hlY2tWYWxpZGl0eShbZm9ybUZpZWxkXSk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGZvcm1GaWVsZCk7XG4gICAgdGhpcy5kcm9wRG93bkNoYW5nZUV2ZW50LmVtaXQoZm9ybUZpZWxkKTtcbiAgICBpZiAoIWV2ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRHJvcGRvd25WYWx1ZShmb3JtRmllbGQ6IGFueSkge1xuICAgIHRoaXMub25DbGlja0V2ZW50KGZvcm1GaWVsZCk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIG9uQ2hhbmdlIEV2ZW50IHdoZW4gVmFsdWUgQ2hhbmdlZFxuICAgKi9cbiAgb25DaGFuZ2VFdmVudChmb3JtRmllbGQ6IElGb3JtRmllbGQpIHtcbiAgICB0aGlzLmJyb3dzZXJUYWJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChmb3JtRmllbGQub25DaGFuZ2UpIHtcbiAgICAgIGZvcm1GaWVsZC5vbkNoYW5nZShmb3JtRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVuU2FmZSBsaW5rIGludG8gc2FmZSBsaW5rXG4gICAqL1xuICBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZykge1xuICAgIGxldCBsaW5rVXJsOiBhbnkgPSB1cmw7XG4gICAgaWYgKGxpbmtVcmwpIHtcbiAgICAgIGxpbmtVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGxpbmtVcmwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlua1VybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbnZva2Ugb24gZHluYW1pYyBidXR0b25zIGNsaWNrXG4gICAqL1xuICBvbk5ld0J1dHRvbkNsaWNrKGJ1dHRvbikge1xuICAgIGJ1dHRvbi5mdW5jKCk7XG4gIH1cblxuICBzZWxlY3RlZENhcmRDbGlja0V2ZW50KGRhdGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucyAmJlxuICAgICAgdGhpcy5mb3JtLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm0uZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DQVJEKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQuY2FyZCAmJiBmaWVsZC5jYXJkLmRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IGZpZWxkLmNhcmQuZGF0YVtkYXRhLmluZGV4XTtcbiAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouc2VsZWN0ZWRDYXJkKSB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgb2JqLnNlbGVjdGVkQ2FyZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb2JqWydzZWxlY3RlZENhcmQnXSA9ICdjYXJkLWFjdGl2ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZGF0YS5zZWxlY3RlZENhcmQpIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFbJ3NlbGVjdGVkQ2FyZCddID0gJ2NhcmQtYWN0aXZlJztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VQYXNzd29yZFR5cGUoZm9ybUZpZWxkKSB7XG4gICAgaWYgKGZvcm1GaWVsZC50ZXh0VHlwZSA9PSAndGV4dCcpIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICdwYXNzd29yZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1GaWVsZC50ZXh0VHlwZSA9ICd0ZXh0JztcbiAgICB9XG4gIH1cbiAgb25MaW5rQ2xpY2sobGluaywgZm9ybVNlY3Rpb24pe1xuICAgIGlmKCFsaW5rLmRpc2FibGVkICYmICFmb3JtU2VjdGlvbi5kaXNhYmxlZCl7XG4gICAgICBsaW5rLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cbn1cblxuIiwiPHAtY29uZmlybURpYWxvZyBbc3R5bGVdPVwieyB3aWR0aDogJzUwdncnIH1cIiBrZXk9XCJjYW5jZWxCdXR0b25cIj48L3AtY29uZmlybURpYWxvZz5cbjxmb3JtICpuZ0lmPVwiIWlzRm9ybUhpZGRlbiAmJiBmb3JtXCI+XG4gIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyIGNsYXNzPVwicHJvZ3Jlc3Mtc3Bpbm5lciBwLXByb2dyZXNzLXNwaW5uZXItY2lyY2xlIGN1c3RvbS1zcGlubmVyXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBcIj5cbiAgICA8c3BhbiBbbmdDbGFzc109XCJ7ICdmaXhlZC1oZWlnaHQnOiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvcm1TZWN0aW9uIG9mIGZvcm0uZm9ybVNlY3Rpb25zXCIgW2NsYXNzXT1cIiFmb3JtU2VjdGlvbi5oaWRkZW4gPyAnY2FyZCB3LTEwMCcgOiAnJ1wiPlxuICAgICAgICA8c3BhbiAoY2xpY2spPVwiY2xpY2tlZFNlY3Rpb24oZm9ybVNlY3Rpb24pXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFmb3JtU2VjdGlvbiA/ICcnIDogc2VjdGlvbkRpc2FibGVkKGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZm9ybVNlY3Rpb24uaGlkZGVuID8gJ2hpZGRlbicgOiBmb3JtU2VjdGlvbi5jbGFzc1wiPlxuICAgICAgICAgICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgICAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtzZWxlY3RlZF09XCJmb3JtU2VjdGlvbi5leHBhbmRlZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1TZWN0aW9uLmFjY29yZGlvbkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uID8gJ2hpZGUtYWNjb3JkaWFuJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICA8cC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJmb3JtU2VjdGlvbi5pY29uXCIgY2xhc3M9XCJtci0xIHBsLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Vic2VjdGlvbi1oZWFkZXJcIj57eyBmb3JtU2VjdGlvbi5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3AtaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC1jb2wgZm9ybS1jb21wb25lbnQgYWNjb3JkaW9uLWhlYWRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtU2VjdGlvbi5zaG93QWNjb3JkaW9uXCIgZm9yPVwibmFtZVwiIGNsYXNzPVwiYWNjb3JkaW9uSGVhZGVyTmFtZSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJmb3JtU2VjdGlvbi5pY29uXCIgY2xhc3M9XCJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj4ge3sgZm9ybVNlY3Rpb24ubmFtZSB9fSA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBsaW5rIG9mIGZvcm1TZWN0aW9uLmxpbmtzXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1yLTMgY3VzdG9tLWxpbmtcIiBbY2xhc3NdPVwibGluay5uYW1lICYmIWZvcm1TZWN0aW9uLmRpc2FibGVkJiYhbGluay5kaXNhYmxlZCAgPyAnY3VzdG9tLWxpbmsnIDogJ2Rpc2FibGVkLWxpbmsnXCIgKGNsaWNrKT1cIm9uTGlua0NsaWNrKGxpbmssIGZvcm1TZWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGluay5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGZvcm0tY29tcG9uZW50IGZvcm0tYm9keS13cmFwcGVyXCI+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuY29udHJvbD09PSdhZGRfYnV0dG9uJz8gJyBmb3JtLWJ1dHRvbi1maWVsZC13cmFwcGVyICc6JycpK1xuICAgICAgICAgICAgICAgICAgICggZm9ybUZpZWxkLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICA/ICdjb2wtJyArIGZvcm1GaWVsZC5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm0uY29sdW1uXG4gICAgICAgICAgICAgICAgICAgID8gJ2NvbC0nICsgZm9ybS5jb2x1bW4gKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICA6ICdjb2wtMTIgbWQ6Y29sLTMgZmxleCBmbGV4LWNvbHVtbicgKyBzZXRDbGFzc05hbWUoZm9ybUZpZWxkKSlcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybUZpZWxkLmNvbnRyb2wgPT09ICdicmVha19saW5lJyA/ICdicmVhay1saW5lJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmb3JtRmllbGQgb2YgZm9ybVNlY3Rpb24uZmllbGRzOyBsZXQgZm9ybUZpZWxkSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbGFiZWxDb250cm9sIEh5cGVybGluayBvbiBsb29rdXAgIENvbnRyb2wgRmllbGQtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWxhYmVsIGN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiYgZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwiZm9ybUZpZWxkLm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKSA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sPy5oeXBlcmxpbms/LnRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZFRleHQgPyAnZGlzYWJsZS1sYWJlbC1jb250cm9sJyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbD8uaHlwZXJsaW5rPy5saW5rXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluay1sYWJlbCBjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUZpZWxkLmxhYmVsPy5sYWJlbENvbnRyb2wuaHlwZXJsaW5rICYmIGZvcm1GaWVsZC5sYWJlbD8ubGFiZWxDb250cm9sLmh5cGVybGluay50YXJnZXQgPT09ICdfaWZyYW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJsb2FkTGFiZWxDb250cm9sSUZyYW1lKGZvcm1GaWVsZClcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbGFiZWxDb250cm9sIG9uIGFkZFRleHRib3gsIGNhbGVuZGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstbGFiZWwgY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1GaWVsZC5sYWJlbCAmJiBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5kaXNhYmxlZCA/ICdkaXNhYmxlLWxhYmVsLWNvbnRyb2wnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBMYWJlbChmb3JtRmllbGQsICRldmVudClcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJmb3JtRmllbGQuY29udHJvbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNwYWNlciBDb250cm9sIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TUEFDRVJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmNvbHVtbj8gJ2NvbC0nICtmb3JtRmllbGQuY29sdW1uIDogJydcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIElucHV0IFRleHRBcmVhIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlRFWFRBUkVBXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBwSW5wdXRUZXh0YXJlYSBbcm93c109XCJmb3JtRmllbGQucm93ID8gZm9ybUZpZWxkLnJvdyA6IDEgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie2hlaWdodDogZm9ybUZpZWxkLmhlaWdodCA/IGZvcm1GaWVsZC5oZWlnaHQgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5JTlBVVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQuZGlzYWJsZWQgJiYgIWZvcm1GaWVsZC5zaG93Qm90dG9tQm9yZGVyID8gJ2Rpc2FibGVkLWxhYmVsJyA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGFiZWwnIDogJycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsICYmIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiYgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLmlzUGFzc3dvcmRcIj4mbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImZvcm1GaWVsZC50ZXh0VHlwZT09J3Bhc3N3b3JkJztlbHNlIGhpZGVCdXR0b25cIiBjbGFzcz1cInBpIHBpLWV5ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGZvcm1GaWVsZClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoaWRlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1leWUtc2xhc2hcIiAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGZvcm1GaWVsZClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1wiIFtpZF09XCJmb3JtRmllbGQuc2hvd0JvdHRvbUJvcmRlciA/ICdyZW1vdmUtYm9kZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZm9ybUZpZWxkLnRleHRUeXBlID8gZm9ybUZpZWxkLnRleHRUeXBlIDogJ3RleHQnXCIgcElucHV0VGV4dCBbKG5nTW9kZWwpXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlT2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZCA/IGZvcm1GaWVsZC5maWVsZCA6IGZvcm1GaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tFdmVudChmb3JtRmllbGQpXCIgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE51bWJlciBJbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTlVNRVJJQ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGljayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBDdXJyZW5jeSAmJiBudW1iZXIgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1GaWVsZC5kaXNhYmxlZFwiIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbbW9kZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RlY2ltYWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFtjdXJyZW5jeV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVVNEJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbG9jYWxlXT1cImZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXRQYXJhbXMuZGlnaXRzSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQuZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2RlY2ltYWwnIHx8IGZvcm1GaWVsZC5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbc3VmZml4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRcIj4gKiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBhc3N3b3JkIElucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5QQVNTV09SRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdHlwZT1cInBhc3N3b3JkXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwiZm9ybUZpZWxkLmZpZWxkXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkXCI+ICogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3NcIiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5DSEVDS0JPWFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgJiYgZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU9mKGZvcm1GaWVsZC5sYWJlbCkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBbYmluYXJ5XT1cInRydWVcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQ/LmlzVmFsaWRcIiBjbGFzcz1cImVycm9yXCI+e3sgZm9ybUZpZWxkLmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkNBTEVOREFSXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImZvcm1GaWVsZC5kaXNhYmxlZCA/ICdkaXNhYmxlZC1jYWxlbmRhci1oZWFkZXItc3BhbicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2sgPyAnY3VzdG9tLWxpbmsnIDogJydcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FsZW5kYXIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSAnICsgZm9ybUZpZWxkLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sICcrIGZvcm1GaWVsZC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3Nob3dCdXR0b25CYXJdPVwiIWZvcm1GaWVsZC50aW1lT25seVwiIFsobmdNb2RlbCldPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIiBob3VyRm9ybWF0PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHREYXRlXT1cImRlZmF1bHREYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwTWludXRlXT1cImZvcm1GaWVsZC5taW51dGVzSW50ZXJ2YWwgPyBmb3JtRmllbGQubWludXRlc0ludGVydmFsIDogMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwiZm9ybUZpZWxkLnNob3dUaW1lXCIgKG9uU2hvdyk9XCJzZXRDYWxlbmRlckRhdGUoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGltZU9ubHldPVwiZm9ybUZpZWxkLnRpbWVPbmx5XCIgW3ZpZXddPVwiZm9ybUZpZWxkLm1vbnRoT25seSA/ICdtb250aCcgOiAnZGF0ZScgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGlja0V2ZW50KGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiZm9ybUZpZWxkPy5mb3JtYXQ/LnR5cGUgPyBmb3JtRmllbGQuZm9ybWF0Py50eXBlIDogY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2FsZW5kYXJDaGFuZ2VWYWx1ZShmb3JtRmllbGQpXCIgKG9uSW5wdXQpPVwiY2FsZW5kZXJJbnB1dFZhbHVlKGZvcm1GaWVsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbdG9kYXlCdXR0b25TdHlsZUNsYXNzXT1cImNvbHVtbi50aW1lT25seSA/ICdoaWRlLXRvZGF5LWJ0bicgOiAnc2hvdy10b2RheS1idG4nXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkPy5pc1ZhbGlkXCIgY2xhc3M9XCJlcnJvclwiPnt7IGZvcm1GaWVsZC5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5EUk9QRE9XTlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQubGFiZWwub25DbGljayA/ICdjdXN0b20tbGluaycgOiAnJ1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkICYmICFmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtzdHlsZUNsYXNzXT0nZm9ybUZpZWxkLmZpZWxkJyBbcGxhY2Vob2xkZXJdPVwiZm9ybUZpZWxkLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgW2ZpbHRlcl09XCJmb3JtRmllbGQuYWxsb3dTZWFyY2hcIiBbKG5nTW9kZWwpXT1cImZvcm1GaWVsZC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiZm9ybUZpZWxkLm9wdGlvbkxhYmVsXCIgW29wdGlvblZhbHVlXT1cImZvcm1GaWVsZC5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIiAoa2V5dXAuVGFiKT1cInRhYkZvY3VzRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEcm9wZG93blZhbHVlKGZvcm1GaWVsZClcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGZvcm1GaWVsZClcIiBbc2hvd0NsZWFyXT1cImZvcm1GaWVsZC52YWx1ZSA/IHRydWUgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DbGVhclZhbHVlKGZvcm1GaWVsZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmb3JtRmllbGQudmFsdWUgPiAwID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkPy5pc1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZm9ybUZpZWxkLmhpZGRlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBdXRvQ29tcGxldGUgU2VhcmNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5BVVRPQ09NUExFVEVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtRmllbGQubGFiZWwub25DbGljayAmJiBmb3JtRmllbGQubGFiZWwub25DbGljaygpXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbHVpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3N1Z2dlc3Rpb25zXT1cImZvcm1GaWVsZC5kYXRhXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2VFdmVudChmb3JtRmllbGQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJhdXRvU2VhcmNoKCRldmVudCwgZm9ybUZpZWxkKVwiIFtkcm9wZG93bl09XCJmb3JtRmllbGQuc2hvd09wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmb3JtRmllbGQuZGlzcGxheUZpZWxkXCIgW25hbWVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCIgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuTVVMVElTRUxFQ1RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25nLWludmFsaWQgbmctZGlydHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbb3B0aW9uc109XCJmb3JtRmllbGQuZGF0YVwiIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFthcHBlbmRUb109XCInYm9keSdcIiBbbmFtZV09XCJmb3JtRmllbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybUZpZWxkLm9uQ2xpY2sgPyBmb3JtRmllbGQub25DbGljaygpIDogJydcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChmb3JtRmllbGQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIeXBlcmxpbmstLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGlzYWJsZWQtbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbGluay1sYWJlbCBjdXN0b20tbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCIgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkhZUEVSTElOS1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cImh5cGVybGlua0RpYWxvZyhmb3JtRmllbGQsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Rpc2FibGVkLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2xpbmstbGFiZWwgY3VzdG9tLWxpbmsnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCAhPT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YWJpbmRleD1cIi0xXCIgW2hyZWZdPVwiZm9ybUZpZWxkLmRpc2FibGVkPycnOnNhbml0aXplVXJsKGZvcm1GaWVsZC5oeXBlcmxpbms/LmxpbmspXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZm9ybUZpZWxkLmh5cGVybGluaz8udGFyZ2V0XCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluayAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rLnRhcmdldCA9PT0gJ19pZnJhbWUnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuaHlwZXJsaW5rLmNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBsLTJcIiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cImxvYWRJRnJhbWUoZm9ybUZpZWxkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtRmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtRmllbGQucmVxdWlyZWRGaWVsZFwiIGNsYXNzPVwicmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvb2t1cCBDb250cm9sIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtblwiICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5MT09LVVBfSU5QVVRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxvb2t1cC1oZWFkZXInIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrID8gJ2N1c3RvbS1saW5rJyA6ICcnXCIgKGNsaWNrKT1cImZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrICYmIGZvcm1GaWVsZC5sYWJlbC5vbkNsaWNrKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cInR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVPZihmb3JtRmllbGQubGFiZWwpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC5sYWJlbC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZXZyb24tcmlnaHQgbG9va3VwLWlucHV0LWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdmb3JtLWNvbnRyb2wnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb21wb25lbnQgbG9va3VwLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHQgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWUgJiYgdHlwZU9mKGZvcm1GaWVsZC52YWx1ZSkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvcm1GaWVsZC52YWx1ZS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImZvcm1GaWVsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtRmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLlRhYik9XCJzZWxlY3RMb29rdXBGaWVsZChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZm9ybUZpZWxkLnZhbHVlICYmICFmb3JtRmllbGQuZGlzYWJsZWRcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtY2xlYXItaWNvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShmb3JtRmllbGQpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZD8uaXNWYWxpZFwiIGNsYXNzPVwiZXJyb3JcIj57eyBmb3JtRmllbGQuZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWxlIFVwbG9hZCBGaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuRklMRV9VUExPQURcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNhYmxlZCA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiZm9ybUZpZWxkLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1GaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1GaWVsZC5yZXF1aXJlZEZpZWxkXCIgY2xhc3M9XCJyZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1maWxlLXVwbG9hZCBbYWxsb3dNdWx0aXBsZV09XCJmb3JtRmllbGQuc2VsZWN0TXVsdGlwbGVGaWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0RmlsZVR5cGVzXT1cImZvcm1GaWVsZC5TZXRmaWxlVHlwZXNcIiBbZmllbGRzXT1cImZvcm1GaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVVybCk9XCJzZXRGaWxlVXJscygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cGxvYWRGaWxlT25SZXR1cm4pPVwiZmlsZU9uY2hhbmdlRXZlbnQoKVwiPjwvc2UtZmlsZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93ZmlsZVVwbG9hZEVycm9yXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGlzcGxheSAgQ2FyZCBmaWVsZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1GaWVsZC5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW5cIiAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ0FSRFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmRpc2FibGVkID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2UtY2FyZCBbY2FyZF09XCJmb3JtRmllbGQuY2FyZFwiIFtzZXRDYXJkRGF0YV09XCJzZXRDYXJkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDYXJkKT1cInNlbGVjdGVkQ2FyZENsaWNrRXZlbnQoJGV2ZW50KVwiPjwvc2UtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd2ZpbGVVcGxvYWRFcnJvclwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vdGUgRGV0YWlsIEZpZWxkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5OT1RFX0ZJRUxEXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiZm9ybUZpZWxkLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkaXNhYmxlZC1saW5rJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbGluay1sYWJlbCBjdXN0b20tbGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmb3JtRmllbGQuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBoYW5kbGVOb3RlRmllbGREaWFsb2coZm9ybUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW3RpdGxlXT1cImZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmb3JtRmllbGQubGFiZWwub25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUZpZWxkLmxhYmVsLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbFwiPnt7Zm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUZpZWxkLmxhYmVsLm9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtRmllbGQubGFiZWwubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1GaWVsZC5sYWJlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZm9ybUZpZWxkLnJlcXVpcmVkRmllbGRcIiBjbGFzcz1cInJlcXVpcmVkLXN0YXJcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEeW5hbWljIENvbXBvbmVudCBDb250YWluZXItLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJmb3JtRmllbGQuaGlkZGVuID8gJ2hpZGRlbicgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwie3tmb3JtU2VjdGlvbi5uYW1lfX0te3tmb3JtRmllbGRJbmRleH19XCIgI2R5bmFtaWNDb21wb25lbnRDb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZHluYW1pY0Nhc2UuQ09NUE9ORU5UXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSGVhZGVyIGNvbXBvbmVudC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TRUNUSU9OX0hFQURFUlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbY2xhc3NdPVwiZm9ybUZpZWxkLmNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj4ge3sgZm9ybUZpZWxkLmxhYmVsIH19IDwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgT25DbGljayBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLkFERF9CVVRUT05cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIFtpY29uXT1cImZvcm1GaWVsZC5pY29uXCIgW2xhYmVsXT1cImZvcm1GaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntiYWNrZ3JvdW5kOiBmb3JtRmllbGQuY29sb3IgPyBmb3JtRmllbGQuY29sb3IgOiAnJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChmb3JtRmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJmb3JtRmllbGQuY2xhc3M/Zm9ybUZpZWxkLmNsYXNzOicnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFmb3JtRmllbGQuaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImR5bmFtaWNDYXNlLlJFUE9SVFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuIFtyZXBJZF09XCJmb3JtRmllbGQucmVwb3J0SWRcIiBbbGFiZWxdPVwiZm9ybUZpZWxkLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhbXNdPVwiZm9ybUZpZWxkLnBhcmFtc1wiIFtzaG93RGlhbG9nXT1cImZvcm1GaWVsZC5zaG93RGlhbG9nXCIgW2Zvcm1dPVwiZm9ybVwiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgSW5wdXQgU3dpdGNoIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUZpZWxkLmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJkeW5hbWljQ2FzZS5TV0lUQ0hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJmb3JtRmllbGQubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0U3dpdGNoIFtuYW1lXT1cImZvcm1GaWVsZC5sYWJlbCA/IGZvcm1GaWVsZC5sYWJlbDogJ3N3aXRjaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRmllbGQudmFsdWVcIiBbZGlzYWJsZWRdPVwiZm9ybUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoZm9ybUZpZWxkKVwiPjwvcC1pbnB1dFN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cbiAgICAgICAgICAgICAgPC9wLWFjY29yZGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIHNhdmUgYW5kIGNsb3NlIGJ1dHRvbnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBhY3Rpb25zLWJ1dHRvbnMtbWFpbi13cmFwcGVyIGZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIFtuZ0NsYXNzXT1cInsgc3RpY2t5OiBzdGlja3lBY3Rpb25zIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbm5lci1zdGlja3kgZm9ybS1jb21wb25lbnQgYWN0aW9ucy1idXR0b25zLXdyYXBwZXItZGl2XCI+XG4gICAgICAgIDwhLS0gc2F2ZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZVNhdmVCdXR0b25cIiBbZGlzYWJsZWRdPVwiaXNGb3JtRGlzYWJsZWRcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgIGxhYmVsPVwiU2F2ZVwiIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIChjbGljayk9XCJvblNhdmVGb3JtKClcIj48L2J1dHRvbj5cbiAgICAgICAgPCEtLSBjbG9zZSBidXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaGlkZUNhbmNlbEJ1dHRvblwiIFtkaXNhYmxlZF09XCJpc0Zvcm1EaXNhYmxlZFwiIChjbGljayk9XCJvbkNhbmNlbEZvcm0oKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCIgbGFiZWw9XCJDYW5jZWxcIiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBtbC0zXCI+PC9idXR0b24+ICAgICAgIFxuICAgICAgICAgPCEtLSBkeW5hbWljIGJ1dHRvbnMgLS0+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZm9ybUJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWJ1dHRvbi5oaWRkZW5cIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiYnV0dG9uLmxhYmVsXCIgW2ljb25dPVwiYnV0dG9uLmljb24gPyBidXR0b24uaWNvbiA6ICcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBtbC0zXCIgKGNsaWNrKT1cIm9uTmV3QnV0dG9uQ2xpY2soYnV0dG9uKVwiIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWQ/YnV0dG9uLmRpc2FibGVkOmZhbHNlXCI+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPiJdfQ==