@tsi-developpement/tsi-shared-ui 1.11.1 → 1.11.2

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.
@@ -155,6 +155,14 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
155
155
  styleClass: 'p-button-text p-button-danger',
156
156
  toolTipText: 'shared_reporting_delete_report',
157
157
  },
158
+ {
159
+ header: '',
160
+ field: 'duplicate',
161
+ isButton: true,
162
+ buttonIcon: 'pi pi-clone',
163
+ styleClass: 'p-button-text',
164
+ toolTipText: 'shared_actions_duplicate',
165
+ },
158
166
  {
159
167
  header: '',
160
168
  field: 'Add_To_BuiltIn_Templates',
@@ -348,6 +356,10 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
348
356
  this._importToReport(event.key);
349
357
  break;
350
358
  }
359
+ case 'duplicate': {
360
+ this._duplicateReport(event.key);
361
+ break;
362
+ }
351
363
  case 'Add_From_BuiltIn_Templates': {
352
364
  console.log('Add_From_BuiltIn_Templates');
353
365
  this._addFromBuiltInTemplates(event.key);
@@ -539,6 +551,7 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
539
551
  this.reports = items.map((r) => {
540
552
  return {
541
553
  ...r,
554
+ color: r.isReadOnly ? '#fff3cd' : undefined,
542
555
  reportTypeName: ManageReportingComponent.reportTypeLabels[r.reportType] ||
543
556
  'Unknown',
544
557
  };
@@ -673,7 +686,7 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
673
686
  width: ModalSizeEnum.Large.width,
674
687
  height: ModalSizeEnum.Large.height,
675
688
  data: {
676
- value: value,
689
+ value: { ...value, isReadOnly: report?.isReadOnly },
677
690
  mode: Modes.edit,
678
691
  isEditionPersonnalise: this.isEditionPersonnalise,
679
692
  fromEndpoint: this.otherFormEndpoint
@@ -705,7 +718,7 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
705
718
  let reportToTemplateId = value.uid;
706
719
  let urlDesigner;
707
720
  let tenantUid = this.identityManagerService.parseMyAuthToken()?.tenantUid;
708
- let canredirect = localStorage.getItem('canRedirect');
721
+ let canredirect = !report?.isReadOnly && localStorage.getItem('canRedirect');
709
722
  if (value.reportType === TsiReportType.List) {
710
723
  urlDesigner = `${Segment.reportingServiceBase}/report-designer-edit/${reportToTemplateId}?${queryParamNamesConst.tenantUid}=${tenantUid}`;
711
724
  }
@@ -746,6 +759,45 @@ export class ManageReportingComponent extends TsiFormComponentBaseComponent {
746
759
  }
747
760
  });
748
761
  }
762
+ _duplicateReport(uid) {
763
+ let report = this.reports.find((r) => r.uid === uid);
764
+ if (report === undefined || report === null) {
765
+ this.notificationService.error(this.errorMessageKey);
766
+ return;
767
+ }
768
+ report.name = `${report.name} - Dupliquer`;
769
+ let config = {
770
+ maximizable: true,
771
+ width: ModalSizeEnum.Large.width,
772
+ height: ModalSizeEnum.Large.height,
773
+ data: {
774
+ mode: Modes.duplicate,
775
+ value: report,
776
+ title: `Dupliquer "${report.name}"`,
777
+ isEditionPersonnalise: this.isEditionPersonnalise,
778
+ fromEndpoint: this.otherFormEndpoint ?? report?.restEndpoint,
779
+ reportBusinessClass: this.businessClass,
780
+ },
781
+ };
782
+ this._dialogRef = this._tsiModalService.open(AddReportPopupComponent, config);
783
+ this._dialogRef.onClose.subscribe((val) => {
784
+ if (val === null || val === undefined)
785
+ return;
786
+ this.isloading = true;
787
+ this.reportingService.duplicateReport(uid, val.reportName).subscribe({
788
+ next: async () => {
789
+ await this._refreshReports();
790
+ this.notificationService.success('shared_reporting_report_duplicated_successfully');
791
+ this.isloading = false;
792
+ },
793
+ error: () => {
794
+ this.isloading = false;
795
+ this.notificationService.error(this.errorMessageKey);
796
+ },
797
+ });
798
+ this._closeModal(val);
799
+ });
800
+ }
749
801
  _setDefaultReport(id) {
750
802
  this.confirmationService.confirm('shared_reporting_confirm_set_default_report_file', undefined, (result) => {
751
803
  if (result && id != null && id != undefined) {
@@ -1089,4 +1141,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1089
1141
  }], customReportingMode: [{
1090
1142
  type: Input
1091
1143
  }] } });
1092
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFlBQVksRUFFWixhQUFhLEVBQ2IsS0FBSyxFQUNMLGFBQWEsR0FDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBZW5FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVB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Uzt1QkFBQyxZQUFZO2dCQUV2Qiw0QkFBNEI7c0JBRDNCLFNBQVM7dUJBQUMsOEJBQThCO2dCQVNoQyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBhcHBQcm92aWRlcnMgfSBmcm9tICcuLi8uLi9jb25zdHMvYXBwLXByb3ZpZGVycyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IHF1ZXJ5UGFyYW1OYW1lc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RzL3F1ZXJ5UGFyYW1OYW1lcy5jb25zdCc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vZW5kLXBvaW50cy9yZXBvcnRpbmctZW5kcG9pbnRzJztcclxuaW1wb3J0IHtcclxuICBEaXNwbGF5VHlwZXMsXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNvcnRNb2RlLFxyXG4gIEh0dHBNZXRob2RUeXBlLFxyXG4gIE1vZGFsU2l6ZUVudW0sXHJcbiAgTW9kZXMsXHJcbiAgVHNpUmVwb3J0VHlwZSxcclxufSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEJ1dHRvblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9idXR0b24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvdG9vbHRpcFBvc2l0aW9uLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkNsaWNrUmVzdWx0LFxyXG4gIEdyaWRDb2x1bW4sXHJcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgSnNvbkRhdGFDb25uZWN0aW9uLFxyXG4gIEtleVZhbHVlUGFpcixcclxuICBPcHRpb25hbEVuZHBvaW50cyxcclxuICBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlLFxyXG4gIFJlcG9ydFRvRWRpdFRlbXBsYXRlLFxyXG4gIFJlcG9ydFRvRWRpdFRlbXBsYXRlUGF5bG9hZCxcclxuICBSZXBvcnRUb1ByaW50LFxyXG4gIFJlcG9ydFRvVGVtcGxhdGUsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBwUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL2FwcC5yb3V0ZXMnO1xyXG5pbXBvcnQgeyBNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvbWFuYWdlLXJlcG9ydGluZy5yb3V0ZXMnO1xyXG5pbXBvcnQge1xyXG4gIEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSxcclxuICBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlLFxyXG4gIFJlcG9ydGluZ1NlcnZpY2UsXHJcbiAgVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWRkUmVwb3J0UG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2FkZC1yZXBvcnQtcG9wdXAvYWRkLXJlcG9ydC1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbWFpbEluZm9ybWF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uL2NvbmZpZ3VyYXRpb24vZW1haWwtaW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBNYWlsaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uL21haWxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaVNlbmRNYWlsQ29tcG9uZW50IH0gZnJvbSAnLi4vdHNpLXNlbmQtbWFpbC90c2ktc2VuZC1tYWlsLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1tYW5hZ2UtcmVwb3J0aW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogWy4uLmFwcFByb3ZpZGVyc10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VSZXBvcnRpbmdDb21wb25lbnRcclxuICBleHRlbmRzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuXHJcbiAgcmVhZG9ubHkgRURJVElPTl9QRVJTT05OQUxJU0UgPSAnYXBwLWVkaXRpb24tcGVyc29ubmFsaXNlJztcclxuICByZXBvcnRzOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlW10gPSBbXTtcclxuICBqc29uRGF0YUNvbm5lY3Rpb246IEpzb25EYXRhQ29ubmVjdGlvbiB8IHVuZGVmaW5lZDtcclxuICBqc29uRGF0YUNvbm5lY3Rpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIHJlcG9ydFRvUHJpbnRJZDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIHRvVXBsb2FkRmlsZURhdGE6IGFueSA9IHVuZGVmaW5lZDtcclxuICBjb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICBpc0Zyb21Gb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybU5hbWVzOiBLZXlWYWx1ZVBhaXI8c3RyaW5nLCBzdHJpbmc+W10gPSBbXTtcclxuICBzZWxlY3RlZFJlcG9ydHM6IG51bWJlcltdID0gW107XHJcbiAgc2VsZWN0aW9uTW9kZSA9IEdyaWRTZWxlY3Rpb25Nb2RlLk11bHRpcGxlO1xyXG4gIGdldEZvcm1OYW1lc0VuZHBvaW50OiBzdHJpbmcgPSBSZXBvcnRpbmdFbmRwb2ludHMuZ2V0QXZhaWxhYmxlRm9ybU5hbWVzKCk7XHJcbiAgZ2xvYmFsRmlsdGVyRmllbGRzID0gWyduYW1lJ107XHJcbiAgcmVmcmVzaEpvYlRpbWVPdXQ6IGFueTtcclxuICBwcmV2aW91c0Zvcm1OYW1lOiBzdHJpbmcgPSAnJztcclxuICBpc1VwZGF0ZVJlcG9ydEZyb21GaWxlRGlhbG9nVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkUmVwb3J0VG9VcGRhdGVGcm9tRmlsZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIGRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGE6IHN0cmluZ1tdID0gW107XHJcbiAgZGVmYXVsdFRlbXBsYXRlQ29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uO1xyXG4gIHByaXZhdGUgX2RpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XHJcbiAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW50aXR5SWQ/OiBzdHJpbmc7XHJcbiAgcmVwb3J0RGlzY3JpbWluYXRvcj86IGFueTtcclxuICBodHRwTWV0aG9kVHlwZT86IEh0dHBNZXRob2RUeXBlO1xyXG4gIHJlcXVlc3REYXRhPzogYW55O1xyXG4gIHNvcnRNb2RlUmVmID0gR3JpZFNvcnRNb2RlXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHJlcG9ydFR5cGVMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICBbVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmRdOiAnRGFzaGJvYXJkJyxcclxuICAgIFtUc2lSZXBvcnRUeXBlLkxpc3RdOiAnRW5kIHVzZXInLFxyXG4gICAgW1RzaVJlcG9ydFR5cGUuUlRGXTogJ1JURicsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNSZXBvcnRGb3JGaWNoZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgaXNSZXBvcnRGb3JGaWNoZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLm90aGVyRm9ybUVuZHBvaW50Py5pbmNsdWRlcygnZ2V0YWxscGFnZWQnKSAmJiAhdGhpcy5yZXF1ZXN0RGF0YVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWQnKSBmaWxlVXBsb2FkPzogRmlsZVVwbG9hZDtcclxuICBAVmlld0NoaWxkKCdpbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkJylcclxuICBpbXBvcnRGaWxlVG9SZXBvcnRGaWxlVXBsb2FkPzogRmlsZVVwbG9hZDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTWVzc2FnZUtleTogc3RyaW5nID0gJ3NoYXJlZF9yZXBvcnRpbmdfZXJyb3Jfb2NjdXJlZCc7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGFzaGJvYXJkTW9kdWxlUm91dGUgPSBgJHtBcHBSb3V0ZXMuYXBwfS8ke0FwcFJvdXRlcy5kYXNoYm9hcmR9YDtcclxuICAvLyNlbmRyZWdpb25cclxuICBidXR0b25UeXBlID0gQnV0dG9uVHlwZTtcclxuICAvLyBwYXJhbWV0cmU6IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUgPSBuZXcgUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSgpO1xyXG4gIC8vI3JlZ2lvbiBJbnB1dCBwcm9wZXJ0aWVzXHJcbiAgQElucHV0KCkgb3RoZXJGb3JtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyAvL2Zvcm1JZGVudGlmaWVyXHJcbiAgQElucHV0KCkgb3RoZXJGb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy89IGAke0dlc3Rpb25Db21tZXJjaWFsZVNlZ21lbnRzLmZhY3R1cmVWZW50ZX0vMTY1ZWM1ZmQtNGQzNC00NTQ2LWFlMTUtMDA0NGU3MDhiOWQ5YDtcclxuICBASW5wdXQoKSBmb3JtRW5kcG9pbnRCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBpc0Zvcm1FbmRwb2ludFBhZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG9wdGlvbmFsRW5kcG9pbnRzPzogT3B0aW9uYWxFbmRwb2ludHM7XHJcbiAgQElucHV0KCkgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW47XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIC8vQE91dHB1dCgpIGhpZGU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIHB1YmxpYyBfcGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZVNlcnZpY2U6IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXBvcnRpbmdTZXJ2aWNlOiBSZXBvcnRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZGVudGl0eU1hbmFnZXJTZXJ2aWNlOiBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgX21haWxpbmdTZXJ2aWNlOiBNYWlsaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZTogRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgc3VwZXIocmVmLCBjb25maWcpO1xyXG5cclxuICAgIC8vaW5pdCBjb2x1bW5zXHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X25hbWUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICdyZXBvcnRUeXBlTmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdHlwZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ2lzRGVmYXVsdCcsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfaXNkZWZhdWx0JyxcclxuICAgICAgICB0eXBlOiBEaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdzZW5kJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktc2VuZCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfc2VuZF9yZXBvcnRfYnlfZW1haWwnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2VkaXQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1maWxlLWVkaXQnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3MnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19lZGl0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICd2aWV3JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktZXllJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1pbmZvJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfdmlldycsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZXhwb3J0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktZmlsZS1leHBvcnQnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWhlbHAnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19leHBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2ltcG9ydCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24td2FybmluZycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2ttYXJrLWZpbGwnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0JyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfc2V0X2RlZmF1bHQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2RlbGV0ZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1hcnJvdy1jaXJjbGUtZG93bicsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taGVscCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2V4cG9ydF9kZXZfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdNYWtlX2RlZmF1bHRfcmVwb3J0X2xheW91dCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWJvb2ttYXJrLWZpbGwnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX21ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0JyxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X25hbWUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmllbGQ6ICdzZWVkT25TdGFydHVwJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3NlZWRfb25fc3RhcnR1cCcsXHJcbiAgICAgICAgdHlwZTogRGlzcGxheVR5cGVzLkNIRUNLQk9YX0RJU1BMQVksXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLXRyYXNoJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXInLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfZGVmYXVsdF9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Gcm9tX0J1aWx0SW5fVGVtcGxhdGVzJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYXJyb3ctY2lyY2xlLXVwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1wcmltYXJ5JyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3RvX215X2xpc3RfcmVwb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdUb2dnbGVfU2VlZF9Pbl9TdGFydHVwJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9sdCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24td2FybmluZycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX3RvZ2dsZV9zZWVkX29uX3N0YXJ0dXAnLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGNoZWNrSWZJc0Rldk1vZGUoKSB7XHJcbiAgICBpZiAoU2VnbWVudC5wcm9kdWN0aW9uKSB7XHJcbiAgICAgIGxldCBidXR0b25BZEJ1aWx0aW5UZW1wbGF0ZXNJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbC5maWVsZCA9PSAnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJztcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChidXR0b25BZEJ1aWx0aW5UZW1wbGF0ZXNJbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoYnV0dG9uQWRCdWlsdGluVGVtcGxhdGVzSW5kZXgsIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgYnV0dG9uRGVsZXRlRGVmYXVsdFJlcG9ydEZpbGVJbmRleCA9XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zLmZpbmRJbmRleCgoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY29sLmZpZWxkID09ICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZSc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoYnV0dG9uRGVsZXRlRGVmYXVsdFJlcG9ydEZpbGVJbmRleCAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucy5zcGxpY2UoXHJcbiAgICAgICAgICBidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4LFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBidXR0b25Ub2dnbGVTZWVkT25TdGFydHVwSW5kZXggPVxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucy5maW5kSW5kZXgoKGNvbDogR3JpZENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbC5maWVsZCA9PSAnVG9nZ2xlX1NlZWRfT25fU3RhcnR1cCc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoYnV0dG9uVG9nZ2xlU2VlZE9uU3RhcnR1cEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zLnNwbGljZShcclxuICAgICAgICAgIGJ1dHRvblRvZ2dsZVNlZWRPblN0YXJ0dXBJbmRleCxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL2hhbmRsZSBMaWZlY3ljbGUgSG9va3NcclxuICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlID0gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdhZG1pbmlzdHJhdGlvbicpO1xyXG4gICAgdGhpcy5jaGVja0lmSXNEZXZNb2RlKCk7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgLy8gaWYgKHRoaXMub3RoZXJGb3JtTmFtZSApIHtcclxuICAgIHRoaXMuaXNGcm9tRm9ybSA9IHRydWU7XHJcbiAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKDMsIDAsIHtcclxuICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgZmllbGQ6ICdwcmludCcsXHJcbiAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25JY29uOiAncGkgcGktcHJpbnQnLFxyXG4gICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zZWNvbmRhcnknLFxyXG4gICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3ByaW50JyxcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtTmFtZSAmJiB0aGlzLm90aGVyRm9ybU5hbWUgIT0gJ2FwcC1tYW5hZ2UtcmVwb3J0aW5nJykge1xyXG4gICAgICB0aGlzLmZvcm1OYW1lcyA9IFt7IGtleTogdGhpcy5vdGhlckZvcm1OYW1lLCB2YWx1ZTogdGhpcy5vdGhlckZvcm1OYW1lIH1dO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRpdHlJZCA9IHRoaXMuY29uZmlnLmRhdGE/LmlkO1xyXG4gICAgdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlID0gdGhpcy5jb25maWc/LmRhdGE/LmN1c3RvbVJlcG9ydGluZ01vZGU7XHJcbiAgICB0aGlzLmh0dHBNZXRob2RUeXBlID0gdGhpcy5jb25maWc/LmRhdGE/Lmh0dHBNZXRob2RUeXBlO1xyXG4gICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaEpvYlRpbWVPdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBhc3luYyBvblJlZnJlc2goKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG9uUHJpbnREZWZhdWx0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm90aGVyRm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnQodGhpcy5vdGhlckZvcm1OYW1lKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5fdmlld1JlcG9ydChkYXRhLnVpZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHsgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlID0gZXZlbnQuY3VycmVudEZpbGVzWzBdO1xyXG4gICAgdGhpcy50b1VwbG9hZEZpbGVEYXRhID0gZmlsZTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RmlsZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLnVwbG9hZFJlcG9ydEZpbGUodGhpcy50b1VwbG9hZEZpbGVEYXRhLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdXBsb2FkZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZD8uY2xlYXIoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25DbGVhcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvblJlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKGV2ZW50OiBCdXR0b25DbGlja1Jlc3VsdCk6IHZvaWQge1xyXG4gICAgc3dpdGNoIChldmVudC5maWVsZCkge1xyXG4gICAgICBjYXNlICdzZW5kJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdzZW5kJyk7XHJcbiAgICAgICAgdGhpcy5fc2VuZFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2VkaXQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2VkaXQnKTtcclxuICAgICAgICB0aGlzLl9lZGl0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmlldycpO1xyXG4gICAgICAgIHRoaXMuX3ZpZXdEYXNoYm9hcmR0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlJzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWxldGUnKTtcclxuICAgICAgICB0aGlzLl9kZWxldGVSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdwcmludCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJpbnQnKTtcclxuICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZXhwb3J0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdleHBvcnQnKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWZhdWx0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWZhdWx0Jyk7XHJcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2ltcG9ydCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnaW1wb3J0Jyk7XHJcbiAgICAgICAgdGhpcy5faW1wb3J0VG9SZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnKTtcclxuICAgICAgICB0aGlzLl9hZGRGcm9tQnVpbHRJblRlbXBsYXRlcyhldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJyk7XHJcbiAgICAgICAgdGhpcy5fYWRkVG9CdWlsdEluVGVtcGxhdGVzKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncHJldmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJldmlldycpO1xyXG4gICAgICAgIHRoaXMucHJldmlld0J1aWx0SW5SZXBvcnRUZW1wbGF0ZShldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0Jzoge1xyXG4gICAgICAgIHRoaXMubWFrZVJlcG9ydERlZmF1bHRMYXlvdXQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZSc6IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnVG9nZ2xlX1NlZWRfT25fU3RhcnR1cCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVG9nZ2xlX1NlZWRfT25fU3RhcnR1cCcpO1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZVNlZWRPblN0YXJ0dXAoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUoZmlsZU5hbWU6IGFueSkge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmRlbGV0ZURlZmF1bHRSZXBvcnRUZW1wbGF0ZUZpbGUoZm9ybU5hbWUsIGZpbGVOYW1lKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlU2VsZWN0ZWRSZXBvcnRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzdWx0ICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0cyAhPSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0cyAhPSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZGVsZXRlTXVsdGlwbGVSZXBvcnRzKHRoaXMuc2VsZWN0ZWRSZXBvcnRzKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uTmV3UmVwb3J0KCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUpIHx8XHJcbiAgICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlXHJcbiAgICApIHtcclxuICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZDogbnVtYmVyO1xyXG4gICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5MYXJnZTtcclxuICAgICAgbGV0IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBtb2RlOiBNb2Rlcy5jcmVhdGUsXHJcbiAgICAgICAgICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlLFxyXG4gICAgICAgICAgZnJvbUVuZHBvaW50OiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVwb3J0QnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgY3VzdG9tUmVwb3J0aW5nTW9kZTogdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCxcclxuICAgICAgICBjb25maWdcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2codmFsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSkge1xyXG4gICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUgPSB2YWw/LmVuZFBvaW50VmFsdWU/LnJlcGxhY2VBbGwoJ3tpZH0nLCB0aGlzLmVudGl0eUlkKTsgICAgICAgICAgXHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSA9IHZhbD8uZW5kUG9pbnRWYWx1ZT8ucmVwbGFjZUFsbCgne2J1c2luZXNzQ2xhc3N9JywgdGhpcy5idXNpbmVzc0NsYXNzKTtcclxuXHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRLZXkgPSB2YWw/LmVuZFBvaW50S2V5Py5yZXBsYWNlQWxsKCd7aWR9JywgdGhpcy5lbnRpdHlJZCk7XHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRLZXkgPSB2YWw/LmVuZFBvaW50S2V5Py5yZXBsYWNlQWxsKCd7YnVzaW5lc3NDbGFzc30nLCB0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuYWRkUmVwb3J0VG9Nb2RlbChcclxuICAgICAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9UZW1wbGF0ZShcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0TmFtZSxcclxuICAgICAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSxcclxuICAgICAgICAgICAgICB2YWwubW9kdWxlLFxyXG4gICAgICAgICAgICAgIHZhbC50cmlPcmRyZSxcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0TmFtZUFicmVnZSxcclxuICAgICAgICAgICAgICB2YWwuZGlzcGxheVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogYXN5bmMgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJlcG9ydFRvVGVtcGxhdGVJZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uUmVmcmVzaCgpXHJcblxyXG4gICAgICAgICAgICAgIGlmICh2YWwucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC1kZXNpZ25lci8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQpIHtcclxuICAgICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmREZXNpZ25lcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1RlbXBsYXRlfT0ke3JlcG9ydFRvVGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5SVEYpIHtcclxuICAgICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vbWFpbG1lcmdlLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybERlc2lnbmVyLCAnX2JsYW5rJyk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19uZXdfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKHZhbDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZGlhbG9nUmVmKSB7XHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkZvcm1DaGFuZ2UoKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbENhbmNlbENsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faGlkZUltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbFNhdmVDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICB9XHJcbiAgLy8jcmVnaW9uIGZpbGUgaW1wb3J0XHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC5jdXJyZW50RmlsZXNbMF07XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IGZpbGU7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9JbXBvcnRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUmVwb3J0VG9VcGRhdGVGcm9tRmlsZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAudXBkYXRlUmVwb3J0TGF5b3V0KFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGUsXHJcbiAgICAgICAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdXBsb2FkZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQ/LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0NsZWFyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfUmVtb3ZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIGFzeW5jIF9yZWZyZXNoUmVwb3J0cyhyZWZyZXNoUmVwb3J0TGlzdDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgZm9ybU5hbWUgPSB0aGlzLm90aGVyRm9ybU5hbWVcclxuICAgICAgPyB0aGlzLm90aGVyRm9ybU5hbWVcclxuICAgICAgOiB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBpdGVtcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnRzKGZvcm1OYW1lLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVwb3J0cyA9IGl0ZW1zLm1hcCgocikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5yLFxyXG4gICAgICAgICAgcmVwb3J0VHlwZU5hbWU6XHJcbiAgICAgICAgICAgIE1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudC5yZXBvcnRUeXBlTGFiZWxzW3IucmVwb3J0VHlwZV0gfHxcclxuICAgICAgICAgICAgJ1Vua25vd24nLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZWZyZXNoUmVwb3J0TGlzdCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vZ2V0IGRlZmF1bHQgcmVwb3J0IHRlbXBsYXRlcyBmb3IgdGhpcyBmb3JtXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldERlZmF1bHRSZXBvcnRUZW1wbGF0ZShmb3JtTmFtZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YSA9IHJlc3VsdD8uZGF0YTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX3ZpZXdSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIGlmICh0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHVpZCkge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcbiAgICBpZiAocmVwb3J0ID09PSB1bmRlZmluZWQgfHwgcmVwb3J0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLmFkZFJlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9QcmludCh1aWQsIHJlcG9ydC5yZXBvcnRUeXBlLCByZXBvcnQ/LnJlc3RFbmRwb2ludClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZUlkID0gZGF0YS51aWQ7XHJcbiAgICAgICAgICBsZXQgdXJsRGVzaWduZXI7XHJcbiAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKT8udGVuYW50VWlkO1xyXG4gICAgICAgICAgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LXZpZXdlci8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQpIHtcclxuICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZFZpZXdlcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1ByaW50fT0ke3JlcG9ydFRvVGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIF9zZW5kUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5YTWVkaXVtO1xyXG4gICAgbGV0IHNhdmVTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgIGRhdGE6IHsgc2F2ZVN1YmplY3QgfSxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodCxcclxuICAgIH07XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgVHNpU2VuZE1haWxDb21wb25lbnQsXHJcbiAgICAgIGNvbmZcclxuICAgICk7XHJcbiAgICBzYXZlU3ViamVjdC5zdWJzY3JpYmUoKHZhbDogRW1haWxJbmZvcm1hdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXZhbC50b0FkZHJlc3MpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXZhbC5zdWJqZWN0KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHJlcG9ydFRvUHJpbnQgPSB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgIHVpZCxcclxuICAgICAgICByZXBvcnQhLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgcmVwb3J0Py5yZXN0RW5kcG9pbnRcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5leHBvcnRSZXBvcnRGaWxlVG9QZGYocmVwb3J0VG9QcmludClcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sICdSZXBvcnQucGRmJywge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYmxvYi50eXBlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgYXR0YWNobWVudHM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzLnB1c2gobmV3RmlsZSlcclxuICAgICAgICAgICAgICB0aGlzLl9tYWlsaW5nU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnNlbmRNYWlsKFxyXG4gICAgICAgICAgICAgICAgICB2YWwudG9BZGRyZXNzISxcclxuICAgICAgICAgICAgICAgICAgdmFsLnN1YmplY3QhLFxyXG4gICAgICAgICAgICAgICAgICB2YWwubWVzc2FnZSA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcclxuICAgICAgICAgICAgICAgICAgdmFsLmNjQWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNlbnRTdWNjZXNzRnVsbHlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIF9lZGl0UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuXHJcbiAgICBpZiAocmVwb3J0ID09PSB1bmRlZmluZWQgfHwgcmVwb3J0ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAuYWRkUmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICAgICAgICB1aWQsXHJcbiAgICAgICAgICByZXBvcnQucmVwb3J0VHlwZSxcclxuICAgICAgICAgIHJlcG9ydD8ucmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgcmVwb3J0Py5tb2R1bGUsXHJcbiAgICAgICAgICByZXBvcnQ/Lm9yZGVyLFxyXG4gICAgICAgICAgcmVwb3J0Py5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgcmVwb3J0Py5zaG9ydE5hbWUsXHJcbiAgICAgICAgICByZXBvcnQ/LmRpc3BsYXlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc1JlcG9ydEZvckZpY2hlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWRSZWdleCA9IC9bMC05YS1mQS1GLV17MzZ9L2c7XHJcbiAgICAgICAgICAgIHZhbHVlLnJlc3RFbmRwb2ludCA9IHZhbHVlPy5yZXN0RW5kcG9pbnQ/LnJlcGxhY2VBbGwoXHJcbiAgICAgICAgICAgICAgZ3VpZFJlZ2V4LFxyXG4gICAgICAgICAgICAgICd7aWR9J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5MYXJnZS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLkxhcmdlLmhlaWdodCxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBtb2RlOiBNb2Rlcy5lZGl0LFxyXG4gICAgICAgICAgICAgIGlzRWRpdGlvblBlcnNvbm5hbGlzZTogdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UsXHJcbiAgICAgICAgICAgICAgZnJvbUVuZHBvaW50OiB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgIDogcmVwb3J0Py5yZXN0RW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgcmVwb3J0QnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgICBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCxcclxuICAgICAgICAgICAgY29uZmlnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgbW9kZWw6IFJlcG9ydFRvRWRpdFRlbXBsYXRlUGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgICAgIHJlcG9ydE5hbWU6IHZhbC5yZXBvcnROYW1lLFxyXG4gICAgICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICAgICAgdmFsPy5lbmRQb2ludFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlkXHJcbiAgICAgICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgICAgICBtb2R1bGU6IHZhbC5tb2R1bGUsXHJcbiAgICAgICAgICAgICAgb3JkZXI6IHZhbC50cmlPcmRyZSxcclxuICAgICAgICAgICAgICBzaG9ydE5hbWU6IHZhbC5yZXBvcnROYW1lQWJyZWdlLFxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHZhbC5kaXNwbGF5LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmVkaXRSZXBvcnRUb0VkaXRUZW1wbGF0ZShtb2RlbCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5leHQgOiBhc3luYyAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJlZnJlc2goKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVwb3J0VG9UZW1wbGF0ZUlkID0gdmFsdWUudWlkO1xyXG4gICAgICAgICAgICBsZXQgdXJsRGVzaWduZXI7XHJcbiAgICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPVxyXG4gICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICAgICAgICAgIGxldCBjYW5yZWRpcmVjdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYW5SZWRpcmVjdCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LWRlc2lnbmVyLWVkaXQvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZERlc2lnbmVyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvRWRpdH09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UtZWRpdC8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYW5yZWRpcmVjdCAmJiBKU09OLnBhcnNlKGNhbnJlZGlyZWN0KSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19lZGl0X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVsZXRlUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHVpZCAhPSBudWxsICYmIHVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5kZWxldGVSZXBvcnQodWlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0RGVmYXVsdFJlcG9ydChpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY29uZmlybV9zZXRfZGVmYXVsdF9yZXBvcnRfZmlsZScsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgaWQgIT0gbnVsbCAmJiBpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuc2V0RGVmYXVsdFJlcG9ydChpZCwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHBvcnRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh1aWQpIHtcclxuICAgICAgbGV0IHJlcG9ydE5hbWU6IHN0cmluZyA9ICdmaWxlLW5hbWUuanNvbic7XHJcbiAgICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT0gdWlkKTtcclxuICAgICAgaWYgKHJlcG9ydCkge1xyXG4gICAgICAgIHJlcG9ydE5hbWUgPSByZXBvcnQubmFtZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5leHBvcnRSZXBvcnRGaWxlKHVpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICAgICAgICB2YXIgZmlsZVVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICAgICAgICBsZXQgcmVwb3J0Um91dGUgPSBmaWxlVVJMO1xyXG4gICAgICAgICAgdmFyIGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5kb3dubG9hZCA9IHJlcG9ydE5hbWU7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHJlcG9ydFJvdXRlO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X2V4cG9ydGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW1wb3J0VG9SZXBvcnQoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlID0gaWQ7XHJcbiAgICAgIHRoaXMuX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld0pzb25EYXRhQ29ubmVjdGlvbigpOiBKc29uRGF0YUNvbm5lY3Rpb24ge1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgIT0gbnVsbCAmJiB0aGlzLm90aGVyRm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbmV3SnNvbkRhdGFDb25uZWN0aW9uOiBKc29uRGF0YUNvbm5lY3Rpb24gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7dGhpcy5vdGhlckZvcm1OYW1lfS1Kc29uRFNgLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdXJpOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgIGh0dHBSZXF1ZXN0Q29udGVudDogdW5kZWZpbmVkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIG5ld0pzb25EYXRhQ29ubmVjdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXJpIGhhdmUgbm90IGJlZW4gc2V0ICEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IG51bWJlcixcclxuICAgIHJlc3RFbmRwb2ludD86IHN0cmluZyxcclxuICAgIG1vZHVsZT86IHN0cmluZyxcclxuICAgIG9yZGVyPzogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzcGxheT86IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb1ByaW50IHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmICh1aWQgJiYgLyp0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiovIHRva2VuKSB7XHJcbiAgICAgICAgbGV0IG5ld1JlcG9ydFRvUHJpbnQ6IFJlcG9ydFRvUHJpbnQgPSB7XHJcbiAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgcmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5XHJcbiAgICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIGZvcm1OYW1lOiB0aGlzLm90aGVyRm9ybU5hbWUsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3UmVwb3J0VG9QcmludDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUsIGZvcm1FbmRwb2ludCBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb1RlbXBsYXRlKFxyXG4gICAgcmVwb3J0VHlwZTogVHNpUmVwb3J0VHlwZSxcclxuICAgIHJlcG9ydE5hbWU6IHN0cmluZyxcclxuICAgIHJlc3RFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgbW9kdWxlOiBzdHJpbmcsXHJcbiAgICBvcmRlcjogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lOiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9UZW1wbGF0ZSB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmIHRva2VuKSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDogcmVzdEVuZHBvaW50LFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keVxyXG4gICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGZvcm1FbnRpdHk6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy90aGlzLmdldEZvcm1OYW1lKHRoaXMub3RoZXJGb3JtTmFtZSksIC8vdGhpcy5vdGhlckZvcm1OYW1lLFxyXG4gICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgZGVzY3JpbWluYXRvclZhbHVlOiB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IsXHJcbiAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcG9ydFRvVGVtcGxhdGUpO1xyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDpcclxuICAgICAgICAgIHRoaXMuaXNSZXBvcnRGb3JGaWNoZSB8fCB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyByZXN0RW5kcG9pbnQhXHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCEsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBzb3J0aW5nOiBbeyBwcm9wZXJ0eTogJ1VJRCcsIG9yZGVyOiAnQVNDJyB9XSxcclxuICAgICAgICAgICAgZ2V0QWxsRGF0YTogdHJ1ZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgZm9ybUVudGl0eTogJycsXHJcbiAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4hLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgICAgLy8gdGhyb3cgRXJyb3IoJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSBvciBmb3JtRW5kcG9pbnQgaGF2ZSBub3QgYmVlbiBzZXQgIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IFRzaVJlcG9ydFR5cGUsXHJcbiAgICByZXN0RW5kUG9pbnQ/OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU/OiBzdHJpbmcsXHJcbiAgICBvcmRlcj86IG51bWJlcixcclxuICAgIHJlcG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvRWRpdFRlbXBsYXRlIHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG5cclxuICAgIGlmICh1c2VybmFtZSkge1xyXG4gICAgICBpZiAodWlkICYmIC8qdGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYqLyB0b2tlbikge1xyXG4gICAgICAgIGxldCByZXBvcnRUb0VkaXRUZW1wbGF0ZTogUmVwb3J0VG9FZGl0VGVtcGxhdGUgPSB7XHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICByZXN0RW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHlcclxuICAgICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgZm9ybU5hbWU6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy8gdGhpcy5nZXRGb3JtTmFtZSh0aGlzLm90aGVyRm9ybU5hbWUhKSxcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICByZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVwb3J0VG9FZGl0VGVtcGxhdGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAnc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4gb3Igc2VsZWN0ZWRSZXBvcnQgaGF2ZSBub3QgYmVlbiBzZXQgISdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aHJvdyBFcnJvcihcInByb3BlcnR5ICdVc2VyTmFtZSAnIG9mIGN1cnJlbnQgdXNlciBoYXZlIG5vdCBiZWVuIHNldCAhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaFJlcG9ydHNKb2IoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLndhcm4oJ1JlZnJlc2ggUmVwb3J0cyBKb2IgYXQgOiAnLCBuZXcgRGF0ZSgpKTtcclxuICAgIC8vXHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lICE9IG51bGwgJiYgdGhpcy5vdGhlckZvcm1OYW1lICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZ2V0UmVwb3J0cyh0aGlzLm90aGVyRm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydHMgPSBpdGVtcztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzRm9ybU5hbWUgIT0gdGhpcy5vdGhlckZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnJldHJpZXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgIH0sIDEwMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIGdldERlZmF1bHRSZXBvcnRUZW1wbGF0ZSgpe1xyXG4gIHByZXZpZXdCdWlsdEluUmVwb3J0VGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZyA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHt0aGlzLm90aGVyRm9ybU5hbWV9LyR7dGVtcGxhdGVOYW1lfWA7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8vYWRkIGEgcmVwb3J0IGZyb20gdGhlIGJ1aWx0LWluIG1vZGVsIHRvIHRoZSB1c2VyIGxpc3RcclxuICBfYWRkRnJvbUJ1aWx0SW5UZW1wbGF0ZXModGVtcGxhdGVOYW1lOiBhbnkpIHtcclxuICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRGcm9tQnVpbHRJblRlbXBsYXRlKGZvcm1OYW1lLCB0ZW1wbGF0ZU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuaXNTdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHJlcy5tc2cpO1xyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2Nhbm5vdF9hZGRfZnJvbV9idWlsdF9pbl90ZW1wbGF0ZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY2Fubm90X2FkZF9mcm9tX2J1aWx0X2luX3RlbXBsYXRlJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vdG9nZ2xlIHdoZXRoZXIgYSBidWlsdGluIHJlcG9ydCB0ZW1wbGF0ZSBzaG91bGQgYmUgYXV0by1zZWVkZWQgb24gQVBJIHN0YXJ0dXBcclxuICBfdG9nZ2xlU2VlZE9uU3RhcnR1cCh0ZW1wbGF0ZU5hbWU6IGFueSkge1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLnRvZ2dsZVNlZWRPblN0YXJ0dXAoZm9ybU5hbWUsIHRlbXBsYXRlTmFtZSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfdG9nZ2xlX3NlZWRfb25fc3RhcnR1cF9zdWNjZXNzJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9hZGQgYSByZXBvcnQgZnJvbSB0aGUgdXNlciBsaXN0IHRvIGJ1aWx0LWluIG1vZGVsIHRlbXBsYXRlXHJcbiAgX2FkZFRvQnVpbHRJblRlbXBsYXRlcyhyZXBvcnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuYWRkVG9CdWlsdEluVGVtcGxhdGUocmVwb3J0SWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2FkZF90b19idWlsdGluX3RlbXBsYXRlX3JlcG9ydF9mYWlsZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG1ha2UgcmVwb3J0IGxheW91dCBhcyBkZWZhdWx0IGZvciBhbGwgcmVwb3J0c1xyXG4gIG1ha2VSZXBvcnREZWZhdWx0TGF5b3V0KHJlcG9ydFVpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVxdWVzdCA9IHtcclxuICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHJlcG9ydFVpZCxcclxuICAgIH07XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UubWFrZVJlcG9ydExheW91dEFzRGVmYXVsdExheW91dChyZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKCdzaGFyZWRfcmVwb3J0aW5nX3N1Y2Nlc3NfdXBkYXRlZCcpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKCdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmQgcmVnaW9uXHJcblxyXG4gIF92aWV3RGFzaGJvYXJkdCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcbiAgICBpZiAoIXJlcG9ydCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcG9ydFRlbXBsYXRlSWQgPSByZXBvcnQudWlkO1xyXG4gICAgbGV0IHRlbmFudFVpZCA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICBsZXQgdXJsVmlld2VyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmRWaWV3ZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VGVtcGxhdGV9PSR7cmVwb3J0VGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcblxyXG4gICAgY29uc29sZS5sb2coJz4+PiBfdmlld0Rhc2hib2FyZHQgfiB1cmxWaWV3ZXI6JywgdXJsVmlld2VyKTtcclxuXHJcbiAgICB3aW5kb3cub3Blbih1cmxWaWV3ZXIsICdfYmxhbmsnKTtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICApO1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgPGRpdiAqYnVzeT1cImlzbG9hZGluZ1wiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBjb2wtMTBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzRnJvbUZvcm07IGVsc2Ugbm90RnJvbUZvcm1cIj5cclxuICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiY29sLTEwIHRzaS1jb21wb25lbnRcIiBjbGFzcz1cInRzaS1jb21wb25lbnRcIiBzdHlsZUNsYXNzPVwidHNpLWNvbXBvbmVudFwiIGFwcGVuZFRwPVwiYm9keVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJmb3JtTmFtZXNcIiBbbmdNb2RlbF09XCJvdGhlckZvcm1OYW1lXCIgb3B0aW9uTGFiZWw9XCJ2YWx1ZVwiIG9wdGlvblZhbHVlPVwia2V5XCIgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgIGZpbHRlckJ5PVwidmFsdWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBwbGFjZWhvbGRlcj1cInt7J3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2Zvcm0nIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vdEZyb21Gb3JtPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC0xMFwiIFsoYmluZCldPVwib3RoZXJGb3JtTmFtZVwiIChiaW5kQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiZ2V0Rm9ybU5hbWVzRW5kcG9pbnRcIiBbZWxlbWVudFNvdXJjZVVybF09XCJnZXRGb3JtTmFtZXNFbmRwb2ludCBcIiBbaXNGaWx0ZXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibWItNCBnYXAtMlwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPFRzaS1CdXR0b24gW3RleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3JlcG9ydCcgfCBsb2NhbGl6ZVwiIGljb249XCJwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdCBwaSBwaS1wbHVzXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXN1Y2Nlc3MgbWwtMiBtci0yIHAtYnV0dG9uIHAtY29tcG9uZW50IG5nLXN0YXItaW5zZXJ0ZWQgcC1idXR0b24tbGFiZWxcIiAoY2xpY2spPVwib25OZXdSZXBvcnQoKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgPFRzaS1CdXR0b24gW2J1dHRvblR5cGVdPVwiYnV0dG9uVHlwZS5TdWJtaXRcIiBbdGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfcmVwb3J0JyB8IGxvY2FsaXplXCIgaWNvbj1cInAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0IHBpIHBpLXRyYXNoXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbiBwLWNvbXBvbmVudCBuZy1zdGFyLWluc2VydGVkIHAtYnV0dG9uLWxhYmVsXCIgKGNsaWNrKT1cIm9uRGVsZXRlU2VsZWN0ZWRSZXBvcnRzKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRSZXBvcnRzIHx8ICFzZWxlY3RlZFJlcG9ydHMubGVuZ3RoXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPHAtZmlsZVVwbG9hZCAjZmlsZVVwbG9hZCBuYW1lPVwiZGVtb1tdXCIgKG9uQmVmb3JlVXBsb2FkKT1cIm9uSW1wb3J0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiIChvblJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi9qc29uXCIgW21heEZpbGVTaXplXT1cIjEwMDAwMDAwXCIgXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjaG9vc2VJY29uXT1cIidwaSBwaS1wYXBlcmNsaXAnXCIgY2FuY2VsU3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiIHVwbG9hZFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1oZWxwXCJcclxuICAgICAgICByZW1vdmVTdHlsZUNsYXNzPVwicC1idXR0b24tZGFuZ2VyXCIgW2Nob29zZUxhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW3VwbG9hZExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydF9yZXBvcnQnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjYW5jZWxMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jYW5jZWxfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidG9VcGxvYWRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbc2hvd0ZpbHRlcnNdPVwiZmFsc2VcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCI+XHJcbiAgPC9Uc2ktRGlzcGxheS1HcmlkPiAtLT5cclxuXHJcblxyXG4gIDwhLS08ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+IDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiICBbcFRvb2x0aXBdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfcmVmcmVzaCcgfCBsb2NhbGl6ZVwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiICBsYWJlbD1cIlJlbG9hZFwiIHNldmVyaXR5PVwiaGVscFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiIC8+IDwvZGl2PlxyXG4gIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZFwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgLz5cclxuLS0+XHJcbiAgXHJcbiAgPFRzaS1CdXR0b24gc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi1yb3VuZGVkIG1iLTMgbWwtM1wiICBcclxuICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19yZWZyZXNoJ1wiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiPjwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgPHRzaS12aWV3LWdyaWQgXHJcbiAgICBbc29ydE1vZGVdPVwic29ydE1vZGVSZWYuU2luZ2xlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICAgW2Zvcm1OYW1lXT1cIidteS1yZXBvcnQtdGVtcGxhdGVzJ1wiXHJcbiAgICA+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG4gIDxici8+XHJcbiAgIDwhLS0gRGVmYXVsdCBUZW1wbGF0ZSAtLT5cclxuICAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBcclxuICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW3Nob3dTdW1tYXJ5Rm9vdGVyXT1cImZhbHNlXCIgXHJcbiAgIFtwYWdpbmF0b3JdPVwiZmFsc2VcIiBcclxuICAgW3Nob3dGaWx0ZXJzXT1cImZhbHNlXCIgXHJcbiAgIFtjb2x1bW5zXT1cImRlZmF1bHRUZW1wbGF0ZUNvbHVtbnNcIiBcclxuICAgW2dyaWREYXRhXT1cImRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGFcIiBcclxuICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAga2V5PVwibmFtZVwiPlxyXG4gIDwvVHNpLURpc3BsYXktR3JpZD4gLS0+XHJcblxyXG4gIFxyXG4gIDx0c2ktdmlldy1ncmlkXHJcbiAgIFtzb3J0TW9kZV09XCJzb3J0TW9kZVJlZi5TaW5nbGVcIlxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW2NvbHVtbnNdPVwiZGVmYXVsdFRlbXBsYXRlQ29sdW1uc1wiIFxyXG4gICBbZ3JpZERhdGFdPVwiZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YVwiIFxyXG4gICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICBbZm9ybU5hbWVdPVwiJ2RlZmF1bHQtbXktcmVwb3J0LXRlbXBsYXRlcydcIlxyXG4gICBrZXk9XCJuYW1lXCI+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG5cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgPCEtLSBkaWFsb2cgdG8gaW1wb3J0IGZpbGUgdG8gcmVwb3J0IC0tPlxyXG4gIDxwLWRpYWxvZyBoZWFkZXI9XCJ7eydzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCcgfCBsb2NhbGl6ZX19XCIgWyh2aXNpYmxlKV09XCJpc1VwZGF0ZVJlcG9ydEZyb21GaWxlRGlhbG9nVmlzaWJsZVwiIFtzdHlsZV09XCJ7d2lkdGg6ICc1MHZ3J31cIj5cclxuICAgIDwhLS0gPFRzaS1Nb2RhbC1IZWFkZXIgKG9uQ2xvc2VDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKVwiIFtpbnB1dFRpdGxlXT1cIidzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCdcIj48L1RzaS1Nb2RhbC1IZWFkZXI+IC0tPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCI+XHJcbiAgICAgIDxwLWZpbGVVcGxvYWQgI2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQgbmFtZT1cImltcG9ydEZpbGVUb1JlcG9ydFwiIChvbkJlZm9yZVVwbG9hZCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9JbXBvcnRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0NsZWFyKCRldmVudClcIiAob25SZW1vdmUpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfUmVtb3ZlKCRldmVudClcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL2pzb25cIiBbbWF4RmlsZVNpemVdPVwiMTAwMDAwMDBcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2hvb3NlSWNvbl09XCIncGkgcGktcGFwZXJjbGlwJ1wiIGNhbmNlbFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIiB1cGxvYWRTdHlsZUNsYXNzPVwicC1idXR0b24taGVscFwiXHJcbiAgICAgICAgcmVtb3ZlU3R5bGVDbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiIFtjaG9vc2VMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFt1cGxvYWRMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19pbXBvcnRfcmVwb3J0JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2FuY2VsTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2FuY2VsX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tIDxUc2ktTW9kYWwtRm9vdGVyIChvbkNhbmNlbENsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpXCJcclxuICAgIChvblNhdmVDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsU2F2ZUNsaWNrKClcIlxyXG4gICAgW3NhdmVEaXNhYmxlZF09XCIhdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXCI+PC9Uc2ktTW9kYWwtRm9vdGVyPiAtLT5cclxuXHJcbjwvcC1kaWFsb2c+XHJcbjwvZGl2PlxyXG4iXX0=
1144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXJlcG9ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9tYW5hZ2UtcmVwb3J0aW5nL21hbmFnZS1yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLFlBQVksRUFFWixhQUFhLEVBQ2IsS0FBSyxFQUNMLGFBQWEsR0FDZCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBZW5FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVB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SCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBRXZCLDRCQUE0QjtzQkFEM0IsU0FBUzt1QkFBQyw4QkFBOEI7Z0JBU2hDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGFwcFByb3ZpZGVycyB9IGZyb20gJy4uLy4uL2NvbnN0cy9hcHAtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgcXVlcnlQYXJhbU5hbWVzQ29uc3QgfSBmcm9tICcuLi8uLi9jb25zdHMvcXVlcnlQYXJhbU5hbWVzLmNvbnN0JztcclxuaW1wb3J0IHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdFbmRwb2ludHMgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzL3JlcG9ydGluZy1lbmRwb2ludHMnO1xyXG5pbXBvcnQge1xyXG4gIERpc3BsYXlUeXBlcyxcclxuICBHcmlkU2VsZWN0aW9uTW9kZSxcclxuICBHcmlkU29ydE1vZGUsXHJcbiAgSHR0cE1ldGhvZFR5cGUsXHJcbiAgTW9kYWxTaXplRW51bSxcclxuICBNb2RlcyxcclxuICBUc2lSZXBvcnRUeXBlLFxyXG59IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2J1dHRvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy90b29sdGlwUG9zaXRpb24uZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uQ2xpY2tSZXN1bHQsXHJcbiAgR3JpZENvbHVtbixcclxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBKc29uRGF0YUNvbm5lY3Rpb24sXHJcbiAgS2V5VmFsdWVQYWlyLFxyXG4gIE9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGUsXHJcbiAgUmVwb3J0VG9FZGl0VGVtcGxhdGVQYXlsb2FkLFxyXG4gIFJlcG9ydFRvUHJpbnQsXHJcbiAgUmVwb3J0VG9UZW1wbGF0ZSxcclxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcHBSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvYXBwLnJvdXRlcyc7XHJcbmltcG9ydCB7IE1hbmFnZVJlcG9ydGluZ1JvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9tYW5hZ2UtcmVwb3J0aW5nLnJvdXRlcyc7XHJcbmltcG9ydCB7XHJcbiAgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gIElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgUmVwb3J0aW5nU2VydmljZSxcclxuICBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gIFRzaU1vZGFsU2VydmljZSxcclxuICBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi90c2ktYmFzZS9jb21wb25lbnRzL3RzaS1mb3JtLWJhc2UvdHNpLWZvcm0tYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXJlcG9ydC1wb3B1cC9hZGQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVtYWlsSW5mb3JtYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbWFpbC1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IE1haWxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb24vbWFpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpU2VuZE1haWxDb21wb25lbnQgfSBmcm9tICcuLi90c2ktc2VuZC1tYWlsL3RzaS1zZW5kLW1haWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLW1hbmFnZS1yZXBvcnRpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tYW5hZ2UtcmVwb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbLi4uYXBwUHJvdmlkZXJzXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudFxyXG4gIGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyNyZWdpb24gcHJvcGVydGllc1xyXG5cclxuICByZWFkb25seSBFRElUSU9OX1BFUlNPTk5BTElTRSA9ICdhcHAtZWRpdGlvbi1wZXJzb25uYWxpc2UnO1xyXG4gIHJlcG9ydHM6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VbXSA9IFtdO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbjogSnNvbkRhdGFDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIGpzb25EYXRhQ29ubmVjdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgcmVwb3J0VG9QcmludElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgdG9VcGxvYWRGaWxlRGF0YTogYW55ID0gdW5kZWZpbmVkO1xyXG4gIGNvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIGlzRnJvbUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb3JtTmFtZXM6IEtleVZhbHVlUGFpcjxzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkUmVwb3J0czogbnVtYmVyW10gPSBbXTtcclxuICBzZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTXVsdGlwbGU7XHJcbiAgZ2V0Rm9ybU5hbWVzRW5kcG9pbnQ6IHN0cmluZyA9IFJlcG9ydGluZ0VuZHBvaW50cy5nZXRBdmFpbGFibGVGb3JtTmFtZXMoKTtcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHMgPSBbJ25hbWUnXTtcclxuICByZWZyZXNoSm9iVGltZU91dDogYW55O1xyXG4gIHByZXZpb3VzRm9ybU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIGlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XHJcbiAgc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YTogc3RyaW5nW10gPSBbXTtcclxuICBkZWZhdWx0VGVtcGxhdGVDb2x1bW5zOiBHcmlkQ29sdW1uW10gPSBbXTtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbnRpdHlJZD86IHN0cmluZztcclxuICByZXBvcnREaXNjcmltaW5hdG9yPzogYW55O1xyXG4gIGh0dHBNZXRob2RUeXBlPzogSHR0cE1ldGhvZFR5cGU7XHJcbiAgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgc29ydE1vZGVSZWYgPSBHcmlkU29ydE1vZGVcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgcmVwb3J0VHlwZUxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIFtUc2lSZXBvcnRUeXBlLkRhc2hib2FyZF06ICdEYXNoYm9hcmQnLFxyXG4gICAgW1RzaVJlcG9ydFR5cGUuTGlzdF06ICdFbmQgdXNlcicsXHJcbiAgICBbVHNpUmVwb3J0VHlwZS5SVEZdOiAnUlRGJyxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9pc1JlcG9ydEZvckZpY2hlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc1JlcG9ydEZvckZpY2hlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgIXRoaXMub3RoZXJGb3JtRW5kcG9pbnQ/LmluY2x1ZGVzKCdnZXRhbGxwYWdlZCcpICYmICF0aGlzLnJlcXVlc3REYXRhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZCcpIGZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIEBWaWV3Q2hpbGQoJ2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQnKVxyXG4gIGltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQ/OiBGaWxlVXBsb2FkO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JNZXNzYWdlS2V5OiBzdHJpbmcgPSAnc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYXNoYm9hcmRNb2R1bGVSb3V0ZSA9IGAke0FwcFJvdXRlcy5hcHB9LyR7QXBwUm91dGVzLmRhc2hib2FyZH1gO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGJ1dHRvblR5cGUgPSBCdXR0b25UeXBlO1xyXG4gIC8vIHBhcmFtZXRyZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSA9IG5ldyBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllKCk7XHJcbiAgLy8jcmVnaW9uIElucHV0IHByb3BlcnRpZXNcclxuICBASW5wdXQoKSBvdGhlckZvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBvdGhlckZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBjdXN0b21SZXBvcnRpbmdNb2RlPzogYm9vbGVhbjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgLy9AT3V0cHV0KCkgaGlkZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gcHVibGljIF9wYXJhbWV0cmVzQXBwbGljYXRpb25QYWllU2VydmljZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlcG9ydGluZ1NlcnZpY2U6IFJlcG9ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlkZW50aXR5TWFuYWdlclNlcnZpY2U6IElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IFRzaUNvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHByaXZhdGUgX3RzaU1vZGFsU2VydmljZTogVHNpTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWFpbGluZ1NlcnZpY2U6IE1haWxpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcblxyXG4gICAgLy9pbml0IGNvbHVtbnNcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3JlcG9ydFR5cGVOYW1lJyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF90eXBlJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnaXNEZWZhdWx0JyxcclxuICAgICAgICBoZWFkZXI6ICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9pc2RlZmF1bHQnLFxyXG4gICAgICAgIHR5cGU6IERpc3BsYXlUeXBlcy5DSEVDS0JPWF9ESVNQTEFZLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3NlbmQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1zZW5kJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9zZW5kX3JlcG9ydF9ieV9lbWFpbCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZWRpdCcsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWZpbGUtZWRpdCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcycsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2VkaXQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ3ZpZXcnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWluZm8nLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ192aWV3JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdleHBvcnQnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1maWxlLWV4cG9ydCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24taGVscCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2V4cG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnaW1wb3J0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktcGFwZXJjbGlwJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi13YXJuaW5nJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfaW1wb3J0JyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcjogJycsXHJcbiAgICAgICAgZmllbGQ6ICdkZWZhdWx0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQnLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19zZXRfZGVmYXVsdCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnZGVsZXRlJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktdHJhc2gnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2RlbGV0ZV9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2R1cGxpY2F0ZScsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWNsb25lJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCcsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfYWN0aW9uc19kdXBsaWNhdGUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcycsXHJcbiAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgYnV0dG9uSWNvbjogJ3BpIHBpLWFycm93LWNpcmNsZS1kb3duJyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi1oZWxwJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfZXhwb3J0X2Rldl9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0JyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktYm9va21hcmstZmlsbCcsXHJcbiAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfbWFrZV9kZWZhdWx0X3JlcG9ydF9sYXlvdXQnLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlQ29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgaGVhZGVyOiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWVsZDogJ3NlZWRPblN0YXJ0dXAnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfc2VlZF9vbl9zdGFydHVwJyxcclxuICAgICAgICB0eXBlOiBEaXNwbGF5VHlwZXMuQ0hFQ0tCT1hfRElTUExBWSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiAncmVwb3J0VHlwZU5hbWUnLFxyXG4gICAgICAgIGhlYWRlcjogJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3R5cGUnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ2RlbGV0ZURlZmF1bHRSZXBvcnRGaWxlJyxcclxuICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICBidXR0b25JY29uOiAncGkgcGktdHJhc2gnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlcicsXHJcbiAgICAgICAgdG9vbFRpcFRleHQ6ICdzaGFyZWRfcmVwb3J0aW5nX2RlbGV0ZV9kZWZhdWx0X3JlcG9ydCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIGZpZWxkOiAnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1hcnJvdy1jaXJjbGUtdXAnLFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXByaW1hcnknLFxyXG4gICAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19hZGRfdG9fbXlfbGlzdF9yZXBvcnQnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICBmaWVsZDogJ1RvZ2dsZV9TZWVkX09uX1N0YXJ0dXAnLFxyXG4gICAgICAgIGlzQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1ib2x0JyxcclxuICAgICAgICBzdHlsZUNsYXNzOiAncC1idXR0b24tdGV4dCBwLWJ1dHRvbi13YXJuaW5nJyxcclxuICAgICAgICB0b29sVGlwVGV4dDogJ3NoYXJlZF9yZXBvcnRpbmdfdG9nZ2xlX3NlZWRfb25fc3RhcnR1cCcsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgY2hlY2tJZklzRGV2TW9kZSgpIHtcclxuICAgIGlmIChTZWdtZW50LnByb2R1Y3Rpb24pIHtcclxuICAgICAgbGV0IGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChcclxuICAgICAgICAoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY29sLmZpZWxkID09ICdBZGRfVG9fQnVpbHRJbl9UZW1wbGF0ZXMnO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGJ1dHRvbkFkQnVpbHRpblRlbXBsYXRlc0luZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShidXR0b25BZEJ1aWx0aW5UZW1wbGF0ZXNJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4ID1cclxuICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMuZmluZEluZGV4KChjb2w6IEdyaWRDb2x1bW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjb2wuZmllbGQgPT0gJ2RlbGV0ZURlZmF1bHRSZXBvcnRGaWxlJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChidXR0b25EZWxldGVEZWZhdWx0UmVwb3J0RmlsZUluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zLnNwbGljZShcclxuICAgICAgICAgIGJ1dHRvbkRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlSW5kZXgsXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGJ1dHRvblRvZ2dsZVNlZWRPblN0YXJ0dXBJbmRleCA9XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVDb2x1bW5zLmZpbmRJbmRleCgoY29sOiBHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY29sLmZpZWxkID09ICdUb2dnbGVfU2VlZF9Pbl9TdGFydHVwJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChidXR0b25Ub2dnbGVTZWVkT25TdGFydHVwSW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZUNvbHVtbnMuc3BsaWNlKFxyXG4gICAgICAgICAgYnV0dG9uVG9nZ2xlU2VlZE9uU3RhcnR1cEluZGV4LFxyXG4gICAgICAgICAgMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vaGFuZGxlIExpZmVjeWNsZSBIb29rc1xyXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UgPSB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ2FkbWluaXN0cmF0aW9uJyk7XHJcbiAgICB0aGlzLmNoZWNrSWZJc0Rldk1vZGUoKTtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAvLyBpZiAodGhpcy5vdGhlckZvcm1OYW1lICkge1xyXG4gICAgdGhpcy5pc0Zyb21Gb3JtID0gdHJ1ZTtcclxuICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoMywgMCwge1xyXG4gICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICBmaWVsZDogJ3ByaW50JyxcclxuICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1wcmludCcsXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNlY29uZGFyeScsXHJcbiAgICAgIHRvb2xUaXBUZXh0OiAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfcHJpbnQnLFxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lICYmIHRoaXMub3RoZXJGb3JtTmFtZSAhPSAnYXBwLW1hbmFnZS1yZXBvcnRpbmcnKSB7XHJcbiAgICAgIHRoaXMuZm9ybU5hbWVzID0gW3sga2V5OiB0aGlzLm90aGVyRm9ybU5hbWUsIHZhbHVlOiB0aGlzLm90aGVyRm9ybU5hbWUgfV07XHJcbiAgICB9XHJcbiAgICB0aGlzLmVudGl0eUlkID0gdGhpcy5jb25maWcuZGF0YT8uaWQ7XHJcbiAgICB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUgPSB0aGlzLmNvbmZpZz8uZGF0YT8uY3VzdG9tUmVwb3J0aW5nTW9kZTtcclxuICAgIHRoaXMuaHR0cE1ldGhvZFR5cGUgPSB0aGlzLmNvbmZpZz8uZGF0YT8uaHR0cE1ldGhvZFR5cGU7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZWZyZXNoSm9iVGltZU91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoSm9iVGltZU91dCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gaGFuZGxlIGV2ZW50c1xyXG4gIGFzeW5jIG9uUmVmcmVzaCgpIHtcclxuICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgb25QcmludERlZmF1bHQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtTmFtZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlcG9ydCh0aGlzLm90aGVyRm9ybU5hbWUpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLl92aWV3UmVwb3J0KGRhdGEudWlkKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4geyB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC5jdXJyZW50RmlsZXNbMF07XHJcbiAgICB0aGlzLnRvVXBsb2FkRmlsZURhdGEgPSBmaWxlO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAudXBsb2FkUmVwb3J0RmlsZSh0aGlzLnRvVXBsb2FkRmlsZURhdGEsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF91cGxvYWRlZF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5maWxlVXBsb2FkPy5jbGVhcigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL2NhbmNlbCBidXR0b24gY2xpY2tcclxuICBvbkNsZWFyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uUmVtb3ZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoZXZlbnQ6IEJ1dHRvbkNsaWNrUmVzdWx0KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmZpZWxkKSB7XHJcbiAgICAgIGNhc2UgJ3NlbmQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NlbmQnKTtcclxuICAgICAgICB0aGlzLl9zZW5kUmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZWRpdCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZWRpdCcpO1xyXG4gICAgICAgIHRoaXMuX2VkaXRSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICd2aWV3Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd2aWV3Jyk7XHJcbiAgICAgICAgdGhpcy5fdmlld0Rhc2hib2FyZHQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWxldGUnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RlbGV0ZScpO1xyXG4gICAgICAgIHRoaXMuX2RlbGV0ZVJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3ByaW50Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdwcmludCcpO1xyXG4gICAgICAgIHRoaXMuX3ZpZXdSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdleHBvcnQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2V4cG9ydCcpO1xyXG4gICAgICAgIHRoaXMuX2V4cG9ydFJlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RlZmF1bHQnKTtcclxuICAgICAgICB0aGlzLl9zZXREZWZhdWx0UmVwb3J0KGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnaW1wb3J0Jzoge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdpbXBvcnQnKTtcclxuICAgICAgICB0aGlzLl9pbXBvcnRUb1JlcG9ydChldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2R1cGxpY2F0ZSc6IHtcclxuICAgICAgICB0aGlzLl9kdXBsaWNhdGVSZXBvcnQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdBZGRfRnJvbV9CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX0Zyb21fQnVpbHRJbl9UZW1wbGF0ZXMnKTtcclxuICAgICAgICB0aGlzLl9hZGRGcm9tQnVpbHRJblRlbXBsYXRlcyhldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ0FkZF9Ub19CdWlsdEluX1RlbXBsYXRlcyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWRkX1RvX0J1aWx0SW5fVGVtcGxhdGVzJyk7XHJcbiAgICAgICAgdGhpcy5fYWRkVG9CdWlsdEluVGVtcGxhdGVzKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAncHJldmlldyc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJldmlldycpO1xyXG4gICAgICAgIHRoaXMucHJldmlld0J1aWx0SW5SZXBvcnRUZW1wbGF0ZShldmVudC5rZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ01ha2VfZGVmYXVsdF9yZXBvcnRfbGF5b3V0Jzoge1xyXG4gICAgICAgIHRoaXMubWFrZVJlcG9ydERlZmF1bHRMYXlvdXQoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdkZWxldGVEZWZhdWx0UmVwb3J0RmlsZSc6IHtcclxuICAgICAgICB0aGlzLmRlbGV0ZURlZmF1bHRSZXBvcnRGaWxlKGV2ZW50LmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnVG9nZ2xlX1NlZWRfT25fU3RhcnR1cCc6IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVG9nZ2xlX1NlZWRfT25fU3RhcnR1cCcpO1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZVNlZWRPblN0YXJ0dXAoZXZlbnQua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlRGVmYXVsdFJlcG9ydEZpbGUoZmlsZU5hbWU6IGFueSkge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmRlbGV0ZURlZmF1bHRSZXBvcnRUZW1wbGF0ZUZpbGUoZm9ybU5hbWUsIGZpbGVOYW1lKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlU2VsZWN0ZWRSZXBvcnRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oXHJcbiAgICAgIExvY2FsaXphdGlvbktleXMuY29uZmlybURlbGV0ZSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAocmVzdWx0OiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcmVzdWx0ICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0cyAhPSBudWxsICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0cyAhPSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuZGVsZXRlTXVsdGlwbGVSZXBvcnRzKHRoaXMuc2VsZWN0ZWRSZXBvcnRzKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvbktleXMuZGVsZXRlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uTmV3UmVwb3J0KCk6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUpIHx8XHJcbiAgICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlXHJcbiAgICApIHtcclxuICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZDogbnVtYmVyO1xyXG4gICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5MYXJnZTtcclxuICAgICAgbGV0IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBtb2RlOiBNb2Rlcy5jcmVhdGUsXHJcbiAgICAgICAgICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlLFxyXG4gICAgICAgICAgZnJvbUVuZHBvaW50OiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVwb3J0QnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgICAgY3VzdG9tUmVwb3J0aW5nTW9kZTogdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICBBZGRSZXBvcnRQb3B1cENvbXBvbmVudCxcclxuICAgICAgICBjb25maWdcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgY29uc29sZS5sb2codmFsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSkge1xyXG4gICAgICAgICAgdmFsLmVuZFBvaW50VmFsdWUgPSB2YWw/LmVuZFBvaW50VmFsdWU/LnJlcGxhY2VBbGwoJ3tpZH0nLCB0aGlzLmVudGl0eUlkKTsgICAgICAgICAgXHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSA9IHZhbD8uZW5kUG9pbnRWYWx1ZT8ucmVwbGFjZUFsbCgne2J1c2luZXNzQ2xhc3N9JywgdGhpcy5idXNpbmVzc0NsYXNzKTtcclxuXHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRLZXkgPSB2YWw/LmVuZFBvaW50S2V5Py5yZXBsYWNlQWxsKCd7aWR9JywgdGhpcy5lbnRpdHlJZCk7XHJcbiAgICAgICAgICB2YWwuZW5kUG9pbnRLZXkgPSB2YWw/LmVuZFBvaW50S2V5Py5yZXBsYWNlQWxsKCd7YnVzaW5lc3NDbGFzc30nLCB0aGlzLmJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuYWRkUmVwb3J0VG9Nb2RlbChcclxuICAgICAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9UZW1wbGF0ZShcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0TmFtZSxcclxuICAgICAgICAgICAgICB2YWwuZW5kUG9pbnRWYWx1ZSxcclxuICAgICAgICAgICAgICB2YWwubW9kdWxlLFxyXG4gICAgICAgICAgICAgIHZhbC50cmlPcmRyZSxcclxuICAgICAgICAgICAgICB2YWwucmVwb3J0TmFtZUFicmVnZSxcclxuICAgICAgICAgICAgICB2YWwuZGlzcGxheVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogYXN5bmMgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJlcG9ydFRvVGVtcGxhdGVJZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIGxldCB1cmxEZXNpZ25lcjtcclxuICAgICAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uUmVmcmVzaCgpXHJcblxyXG4gICAgICAgICAgICAgIGlmICh2YWwucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC1kZXNpZ25lci8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQpIHtcclxuICAgICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmREZXNpZ25lcn0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC5yZXBvcnRUb1RlbXBsYXRlfT0ke3JlcG9ydFRvVGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5SVEYpIHtcclxuICAgICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vbWFpbG1lcmdlLyR7cmVwb3J0VG9UZW1wbGF0ZUlkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybERlc2lnbmVyLCAnX2JsYW5rJyk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19uZXdfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKHZhbDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZGlhbG9nUmVmKSB7XHJcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkZvcm1DaGFuZ2UoKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbENhbmNlbENsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faGlkZUltcG9ydEZpbGVUb1JlcG9ydERpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRNb2RhbFNhdmVDbGljaygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICB9XHJcbiAgLy8jcmVnaW9uIGZpbGUgaW1wb3J0XHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfRmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC5jdXJyZW50RmlsZXNbMF07XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IGZpbGU7XHJcbiAgfVxyXG5cclxuICBvbkltcG9ydEZpbGVUb1JlcG9ydF9JbXBvcnRGaWxlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUmVwb3J0VG9VcGRhdGVGcm9tRmlsZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAudXBkYXRlUmVwb3J0TGF5b3V0KFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJlcG9ydFRvVXBkYXRlRnJvbUZpbGUsXHJcbiAgICAgICAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cygpO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfdXBsb2FkZWRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQ/LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vY2FuY2VsIGJ1dHRvbiBjbGlja1xyXG4gIG9uSW1wb3J0RmlsZVRvUmVwb3J0X0NsZWFyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy9jYW5jZWwgYnV0dG9uIGNsaWNrXHJcbiAgb25JbXBvcnRGaWxlVG9SZXBvcnRfUmVtb3ZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIGFzeW5jIF9yZWZyZXNoUmVwb3J0cyhyZWZyZXNoUmVwb3J0TGlzdDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgZm9ybU5hbWUgPSB0aGlzLm90aGVyRm9ybU5hbWVcclxuICAgICAgPyB0aGlzLm90aGVyRm9ybU5hbWVcclxuICAgICAgOiB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBpdGVtcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnRzKGZvcm1OYW1lLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVwb3J0cyA9IGl0ZW1zLm1hcCgocikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5yLFxyXG4gICAgICAgICAgY29sb3I6IHIuaXNSZWFkT25seSA/ICcjZmZmM2NkJyA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHJlcG9ydFR5cGVOYW1lOlxyXG4gICAgICAgICAgICBNYW5hZ2VSZXBvcnRpbmdDb21wb25lbnQucmVwb3J0VHlwZUxhYmVsc1tyLnJlcG9ydFR5cGVdIHx8XHJcbiAgICAgICAgICAgICdVbmtub3duJyxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVmcmVzaFJlcG9ydExpc3QpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvL2dldCBkZWZhdWx0IHJlcG9ydCB0ZW1wbGF0ZXMgZm9yIHRoaXMgZm9ybVxyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXREZWZhdWx0UmVwb3J0VGVtcGxhdGUoZm9ybU5hbWUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGEgPSByZXN1bHQ/LmRhdGE7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF92aWV3UmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBpZiAodGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB1aWQpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgIHRoaXMuX25ld1JlcG9ydFRvUHJpbnQodWlkLCByZXBvcnQucmVwb3J0VHlwZSwgcmVwb3J0Py5yZXN0RW5kcG9pbnQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZCA9IGRhdGEudWlkO1xyXG4gICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgbGV0IHRlbmFudFVpZCA9XHJcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuICAgICAgICAgIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICB1cmxEZXNpZ25lciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmRWaWV3ZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9QcmludH09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHdpbmRvdy5vcGVuKHVybERlc2lnbmVyLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBfc2VuZFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IHJlcG9ydCA9IHRoaXMucmVwb3J0cy5maW5kKChyKSA9PiByLnVpZCA9PT0gdWlkKTtcclxuICAgIGlmIChyZXBvcnQgPT09IHVuZGVmaW5lZCB8fCByZXBvcnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uWE1lZGl1bTtcclxuICAgIGxldCBzYXZlU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICBkYXRhOiB7IHNhdmVTdWJqZWN0IH0sXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogbW9kYWxTaXplLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdGhpcy5fdHNpTW9kYWxTZXJ2aWNlLm9wZW4oXHJcbiAgICAgIFRzaVNlbmRNYWlsQ29tcG9uZW50LFxyXG4gICAgICBjb25mXHJcbiAgICApO1xyXG4gICAgc2F2ZVN1YmplY3Quc3Vic2NyaWJlKCh2YWw6IEVtYWlsSW5mb3JtYXRpb24pID0+IHtcclxuICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2YWwudG9BZGRyZXNzKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF2YWwuc3ViamVjdCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCByZXBvcnRUb1ByaW50ID0gdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICB1aWQsXHJcbiAgICAgICAgcmVwb3J0IS5yZXBvcnRUeXBlLFxyXG4gICAgICAgIHJlcG9ydD8ucmVzdEVuZHBvaW50XHJcbiAgICAgIClcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmV4dDogYXN5bmMgKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCAnUmVwb3J0LnBkZicsIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGJsb2IudHlwZSxcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnRzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKG5ld0ZpbGUpXHJcbiAgICAgICAgICAgICAgdGhpcy5fbWFpbGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5zZW5kTWFpbChcclxuICAgICAgICAgICAgICAgICAgdmFsLnRvQWRkcmVzcyEsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5zdWJqZWN0ISxcclxuICAgICAgICAgICAgICAgICAgdmFsLm1lc3NhZ2UgPz8gXCJcIixcclxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgIHZhbC5jY0FkZHJlc3NcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zZW50U3VjY2Vzc0Z1bGx5XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBfZWRpdFJlcG9ydCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcblxyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLmFkZFJlcG9ydFRvRWRpdFRlbXBsYXRlKFxyXG4gICAgICAgIHRoaXMuX25ld1JlcG9ydFRvRWRpdFRlbXBsYXRlKFxyXG4gICAgICAgICAgdWlkLFxyXG4gICAgICAgICAgcmVwb3J0LnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICByZXBvcnQ/LnJlc3RFbmRwb2ludCxcclxuICAgICAgICAgIHJlcG9ydD8ubW9kdWxlLFxyXG4gICAgICAgICAgcmVwb3J0Py5vcmRlcixcclxuICAgICAgICAgIHJlcG9ydD8ucmVwb3J0TmFtZSxcclxuICAgICAgICAgIHJlcG9ydD8uc2hvcnROYW1lLFxyXG4gICAgICAgICAgcmVwb3J0Py5kaXNwbGF5XHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBndWlkUmVnZXggPSAvWzAtOWEtZkEtRi1dezM2fS9nO1xyXG4gICAgICAgICAgICB2YWx1ZS5yZXN0RW5kcG9pbnQgPSB2YWx1ZT8ucmVzdEVuZHBvaW50Py5yZXBsYWNlQWxsKFxyXG4gICAgICAgICAgICAgIGd1aWRSZWdleCxcclxuICAgICAgICAgICAgICAne2lkfSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGg6IE1vZGFsU2l6ZUVudW0uTGFyZ2Uud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5MYXJnZS5oZWlnaHQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICB2YWx1ZTogeyAuLi52YWx1ZSwgaXNSZWFkT25seTogcmVwb3J0Py5pc1JlYWRPbmx5IH0sXHJcbiAgICAgICAgICAgICAgbW9kZTogTW9kZXMuZWRpdCxcclxuICAgICAgICAgICAgICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlLFxyXG4gICAgICAgICAgICAgIGZyb21FbmRwb2ludDogdGhpcy5vdGhlckZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA6IHJlcG9ydD8ucmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIHJlcG9ydEJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgICAgQWRkUmVwb3J0UG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGNvbmZpZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgbGV0IG1vZGVsOiBSZXBvcnRUb0VkaXRUZW1wbGF0ZVBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgICAgICByZXBvcnROYW1lOiB2YWwucmVwb3J0TmFtZSxcclxuICAgICAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgICAgIHZhbD8uZW5kUG9pbnRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgICAgICA6IHRoaXMub3RoZXJGb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgICAgICAgbW9kdWxlOiB2YWwubW9kdWxlLFxyXG4gICAgICAgICAgICAgIG9yZGVyOiB2YWwudHJpT3JkcmUsXHJcbiAgICAgICAgICAgICAgc2hvcnROYW1lOiB2YWwucmVwb3J0TmFtZUFicmVnZSxcclxuICAgICAgICAgICAgICBkaXNwbGF5OiB2YWwuZGlzcGxheSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5lZGl0UmVwb3J0VG9FZGl0VGVtcGxhdGUobW9kZWwpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXh0IDogYXN5bmMgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25SZWZyZXNoKClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcG9ydFRvVGVtcGxhdGVJZCA9IHZhbHVlLnVpZDtcclxuICAgICAgICAgICAgbGV0IHVybERlc2lnbmVyO1xyXG4gICAgICAgICAgICBsZXQgdGVuYW50VWlkID1cclxuICAgICAgICAgICAgICB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcblxyXG4gICAgICAgICAgICBsZXQgY2FucmVkaXJlY3QgPSAhcmVwb3J0Py5pc1JlYWRPbmx5ICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYW5SZWRpcmVjdCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgIHVybERlc2lnbmVyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LWRlc2lnbmVyLWVkaXQvJHtyZXBvcnRUb1RlbXBsYXRlSWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke3RoaXMuZGFzaGJvYXJkTW9kdWxlUm91dGV9LyR7TWFuYWdlUmVwb3J0aW5nUm91dGVzLmRhc2hib2FyZERlc2lnbmVyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvRWRpdH09JHtyZXBvcnRUb1RlbXBsYXRlSWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgdXJsRGVzaWduZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UtZWRpdC8ke3JlcG9ydFRvVGVtcGxhdGVJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYW5yZWRpcmVjdCAmJiBKU09OLnBhcnNlKGNhbnJlZGlyZWN0KSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsRGVzaWduZXIsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19lZGl0X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVsZXRlUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgTG9jYWxpemF0aW9uS2V5cy5jb25maXJtRGVsZXRlLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHVpZCAhPSBudWxsICYmIHVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5kZWxldGVSZXBvcnQodWlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmRlbGV0ZWRTdWNjZXNzZnVsbHlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZHVwbGljYXRlUmVwb3J0KHVpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgcmVwb3J0ID0gdGhpcy5yZXBvcnRzLmZpbmQoKHIpID0+IHIudWlkID09PSB1aWQpO1xyXG4gICAgaWYgKHJlcG9ydCA9PT0gdW5kZWZpbmVkIHx8IHJlcG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVwb3J0Lm5hbWUgPSBgJHtyZXBvcnQubmFtZX0gLSBEdXBsaXF1ZXJgXHJcblxyXG4gICAgbGV0IGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLkxhcmdlLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTGFyZ2UuaGVpZ2h0LFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbW9kZTogTW9kZXMuZHVwbGljYXRlLFxyXG4gICAgICAgIHZhbHVlOiByZXBvcnQsXHJcbiAgICAgICAgdGl0bGU6IGBEdXBsaXF1ZXIgXCIke3JlcG9ydC5uYW1lfVwiYCxcclxuICAgICAgICBpc0VkaXRpb25QZXJzb25uYWxpc2U6IHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlLFxyXG4gICAgICAgIGZyb21FbmRwb2ludDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCA/PyByZXBvcnQ/LnJlc3RFbmRwb2ludCxcclxuICAgICAgICByZXBvcnRCdXNpbmVzc0NsYXNzOiB0aGlzLmJ1c2luZXNzQ2xhc3MsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50LCBjb25maWcpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZHVwbGljYXRlUmVwb3J0KHVpZCwgdmFsLnJlcG9ydE5hbWUpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHMoKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKCdzaGFyZWRfcmVwb3J0aW5nX3JlcG9ydF9kdXBsaWNhdGVkX3N1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0RGVmYXVsdFJlcG9ydChpZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY29uZmlybV9zZXRfZGVmYXVsdF9yZXBvcnRfZmlsZScsXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgaWQgIT0gbnVsbCAmJiBpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgICAgICAuc2V0RGVmYXVsdFJlcG9ydChpZCwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHBvcnRSZXBvcnQodWlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh1aWQpIHtcclxuICAgICAgbGV0IHJlcG9ydE5hbWU6IHN0cmluZyA9ICdmaWxlLW5hbWUuanNvbic7XHJcbiAgICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT0gdWlkKTtcclxuICAgICAgaWYgKHJlcG9ydCkge1xyXG4gICAgICAgIHJlcG9ydE5hbWUgPSByZXBvcnQubmFtZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5leHBvcnRSZXBvcnRGaWxlKHVpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxldCBmaWxlID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbicgfSk7XHJcbiAgICAgICAgICB2YXIgZmlsZVVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICAgICAgICBsZXQgcmVwb3J0Um91dGUgPSBmaWxlVVJMO1xyXG4gICAgICAgICAgdmFyIGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5kb3dubG9hZCA9IHJlcG9ydE5hbWU7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHJlcG9ydFJvdXRlO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X2V4cG9ydGVkX3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW1wb3J0VG9SZXBvcnQoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSZXBvcnRUb1VwZGF0ZUZyb21GaWxlID0gaWQ7XHJcbiAgICAgIHRoaXMuX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld0pzb25EYXRhQ29ubmVjdGlvbigpOiBKc29uRGF0YUNvbm5lY3Rpb24ge1xyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgIT0gbnVsbCAmJiB0aGlzLm90aGVyRm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBsZXQgbmV3SnNvbkRhdGFDb25uZWN0aW9uOiBKc29uRGF0YUNvbm5lY3Rpb24gPSB7XHJcbiAgICAgICAgbmFtZTogYCR7dGhpcy5vdGhlckZvcm1OYW1lfS1Kc29uRFNgLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdXJpOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgIGh0dHBSZXF1ZXN0Q29udGVudDogdW5kZWZpbmVkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmV0dXJuIG5ld0pzb25EYXRhQ29ubmVjdGlvbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXJpIGhhdmUgbm90IGJlZW4gc2V0ICEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IG51bWJlcixcclxuICAgIHJlc3RFbmRwb2ludD86IHN0cmluZyxcclxuICAgIG1vZHVsZT86IHN0cmluZyxcclxuICAgIG9yZGVyPzogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzcGxheT86IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb1ByaW50IHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmICh1aWQgJiYgLyp0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiovIHRva2VuKSB7XHJcbiAgICAgICAgbGV0IG5ld1JlcG9ydFRvUHJpbnQ6IFJlcG9ydFRvUHJpbnQgPSB7XHJcbiAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQoXHJcbiAgICAgICAgICAgICAgcmVzdEVuZHBvaW50LFxyXG4gICAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICAgKSA/PyB0aGlzLm90aGVyRm9ybUVuZHBvaW50XHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5XHJcbiAgICAgICAgICAgIDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIGZvcm1OYW1lOiB0aGlzLm90aGVyRm9ybU5hbWUsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5odHRwTWV0aG9kVHlwZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3UmVwb3J0VG9QcmludDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAgICdzb21lIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIDogdXNlciB0b2tlbiwgZm9ybU5hbWUsIGZvcm1FbmRwb2ludCBvciBzZWxlY3RlZFJlcG9ydCBoYXZlIG5vdCBiZWVuIHNldCAhJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFwicHJvcGVydHkgJ1VzZXJOYW1lICcgb2YgY3VycmVudCB1c2VyIGhhdmUgbm90IGJlZW4gc2V0ICFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb1RlbXBsYXRlKFxyXG4gICAgcmVwb3J0VHlwZTogVHNpUmVwb3J0VHlwZSxcclxuICAgIHJlcG9ydE5hbWU6IHN0cmluZyxcclxuICAgIHJlc3RFbmRwb2ludDogc3RyaW5nLFxyXG4gICAgbW9kdWxlOiBzdHJpbmcsXHJcbiAgICBvcmRlcjogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lOiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9UZW1wbGF0ZSB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMub3RoZXJGb3JtRW5kcG9pbnQgJiYgdGhpcy5vdGhlckZvcm1OYW1lICYmIHRva2VuKSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDogcmVzdEVuZHBvaW50LFxyXG4gICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybUVuZHBvaW50Qm9keVxyXG4gICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgIGZvcm1FbnRpdHk6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy90aGlzLmdldEZvcm1OYW1lKHRoaXMub3RoZXJGb3JtTmFtZSksIC8vdGhpcy5vdGhlckZvcm1OYW1lLFxyXG4gICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgZGVzY3JpbWluYXRvclZhbHVlOiB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IsXHJcbiAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcG9ydFRvVGVtcGxhdGUpO1xyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCByZXBvcnRUb1RlbXBsYXRlOiBSZXBvcnRUb1RlbXBsYXRlID0ge1xyXG4gICAgICAgIHJlc3RFbmRwb2ludDpcclxuICAgICAgICAgIHRoaXMuaXNSZXBvcnRGb3JGaWNoZSB8fCB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyByZXN0RW5kcG9pbnQhXHJcbiAgICAgICAgICAgIDogdGhpcy5vdGhlckZvcm1FbmRwb2ludCEsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBzb3J0aW5nOiBbeyBwcm9wZXJ0eTogJ1VJRCcsIG9yZGVyOiAnQVNDJyB9XSxcclxuICAgICAgICAgICAgZ2V0QWxsRGF0YTogdHJ1ZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICA6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgZm9ybUVudGl0eTogJycsXHJcbiAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4hLFxyXG4gICAgICAgIHJlcG9ydE5hbWU6IHJlcG9ydE5hbWUsXHJcbiAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSwgLy90aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IFRzaVJlcG9ydFR5cGUuTGlzdCA6IFRzaVJlcG9ydFR5cGUuRm9ybSxcclxuICAgICAgICBvcHRpb25hbEVuZHBvaW50c0pzb246IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgaHRtbEZpbHRlcnNUZXh0OiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgIHNob3J0TmFtZTogc2hvcnROYW1lLFxyXG4gICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXR1cm4gcmVwb3J0VG9UZW1wbGF0ZTtcclxuICAgICAgLy8gdGhyb3cgRXJyb3IoJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSBvciBmb3JtRW5kcG9pbnQgaGF2ZSBub3QgYmVlbiBzZXQgIScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV3UmVwb3J0VG9FZGl0VGVtcGxhdGUoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IFRzaVJlcG9ydFR5cGUsXHJcbiAgICByZXN0RW5kUG9pbnQ/OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU/OiBzdHJpbmcsXHJcbiAgICBvcmRlcj86IG51bWJlcixcclxuICAgIHJlcG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBzaG9ydE5hbWU/OiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5PzogYm9vbGVhblxyXG4gICk6IFJlcG9ydFRvRWRpdFRlbXBsYXRlIHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG5cclxuICAgIGlmICh1c2VybmFtZSkge1xyXG4gICAgICBpZiAodWlkICYmIC8qdGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYqLyB0b2tlbikge1xyXG4gICAgICAgIGxldCByZXBvcnRUb0VkaXRUZW1wbGF0ZTogUmVwb3J0VG9FZGl0VGVtcGxhdGUgPSB7XHJcbiAgICAgICAgICByZXN0RW5kcG9pbnQ6IHRoaXMuaXNSZXBvcnRGb3JGaWNoZVxyXG4gICAgICAgICAgICA/IHRoaXMucmVwb3J0aW5nU2VydmljZS5pbnNlcnROZXdVaWRJblJlc3RFbmRQb2ludChcclxuICAgICAgICAgICAgICByZXN0RW5kUG9pbnQsXHJcbiAgICAgICAgICAgICAgdGhpcy5pZFxyXG4gICAgICAgICAgICApID8/IHRoaXMub3RoZXJGb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLm90aGVyRm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHlcclxuICAgICAgICAgICAgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgZm9ybU5hbWU6IHRoaXMub3RoZXJGb3JtTmFtZSwgLy8gdGhpcy5nZXRGb3JtTmFtZSh0aGlzLm90aGVyRm9ybU5hbWUhKSxcclxuICAgICAgICAgIHJlcG9ydFRlbXBsYXRlVWlkOiB1aWQsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICByZXBvcnROYW1lOiByZXBvcnROYW1lLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuaHR0cE1ldGhvZFR5cGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVwb3J0VG9FZGl0VGVtcGxhdGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAnc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4gb3Igc2VsZWN0ZWRSZXBvcnQgaGF2ZSBub3QgYmVlbiBzZXQgISdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aHJvdyBFcnJvcihcInByb3BlcnR5ICdVc2VyTmFtZSAnIG9mIGN1cnJlbnQgdXNlciBoYXZlIG5vdCBiZWVuIHNldCAhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVmcmVzaFJlcG9ydHNKb2IoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLndhcm4oJ1JlZnJlc2ggUmVwb3J0cyBKb2IgYXQgOiAnLCBuZXcgRGF0ZSgpKTtcclxuICAgIC8vXHJcbiAgICBpZiAodGhpcy5vdGhlckZvcm1OYW1lICE9IG51bGwgJiYgdGhpcy5vdGhlckZvcm1OYW1lICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZ2V0UmVwb3J0cyh0aGlzLm90aGVyRm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydHMgPSBpdGVtcztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzRm9ybU5hbWUgIT0gdGhpcy5vdGhlckZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnJldHJpZXZlZFN1Y2Nlc3NmdWxseVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hKb2JUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFJlcG9ydHNKb2IoKTtcclxuICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWZyZXNoSm9iVGltZU91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3JlZnJlc2hSZXBvcnRzSm9iKCk7XHJcbiAgICAgIH0sIDEwMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVJbXBvcnRGaWxlVG9SZXBvcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzVXBkYXRlUmVwb3J0RnJvbUZpbGVEaWFsb2dWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIGdldERlZmF1bHRSZXBvcnRUZW1wbGF0ZSgpe1xyXG4gIHByZXZpZXdCdWlsdEluUmVwb3J0VGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZyA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHt0aGlzLm90aGVyRm9ybU5hbWV9LyR7dGVtcGxhdGVOYW1lfWA7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIC8vYWRkIGEgcmVwb3J0IGZyb20gdGhlIGJ1aWx0LWluIG1vZGVsIHRvIHRoZSB1c2VyIGxpc3RcclxuICBfYWRkRnJvbUJ1aWx0SW5UZW1wbGF0ZXModGVtcGxhdGVOYW1lOiBhbnkpIHtcclxuICAgIGxldCBmb3JtTmFtZSA9IHRoaXMub3RoZXJGb3JtTmFtZSA/PyB0aGlzLkVESVRJT05fUEVSU09OTkFMSVNFO1xyXG4gICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgIC5hZGRGcm9tQnVpbHRJblRlbXBsYXRlKGZvcm1OYW1lLCB0ZW1wbGF0ZU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuaXNTdWNjZXNzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlZnJlc2hSZXBvcnRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHJlcy5tc2cpO1xyXG4gICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2Nhbm5vdF9hZGRfZnJvbV9idWlsdF9pbl90ZW1wbGF0ZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfY2Fubm90X2FkZF9mcm9tX2J1aWx0X2luX3RlbXBsYXRlJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vdG9nZ2xlIHdoZXRoZXIgYSBidWlsdGluIHJlcG9ydCB0ZW1wbGF0ZSBzaG91bGQgYmUgYXV0by1zZWVkZWQgb24gQVBJIHN0YXJ0dXBcclxuICBfdG9nZ2xlU2VlZE9uU3RhcnR1cCh0ZW1wbGF0ZU5hbWU6IGFueSkge1xyXG4gICAgbGV0IGZvcm1OYW1lID0gdGhpcy5vdGhlckZvcm1OYW1lID8/IHRoaXMuRURJVElPTl9QRVJTT05OQUxJU0U7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgLnRvZ2dsZVNlZWRPblN0YXJ0dXAoZm9ybU5hbWUsIHRlbXBsYXRlTmFtZSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaFJlcG9ydHModHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfdG9nZ2xlX3NlZWRfb25fc3RhcnR1cF9zdWNjZXNzJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9hZGQgYSByZXBvcnQgZnJvbSB0aGUgdXNlciBsaXN0IHRvIGJ1aWx0LWluIG1vZGVsIHRlbXBsYXRlXHJcbiAgX2FkZFRvQnVpbHRJblRlbXBsYXRlcyhyZXBvcnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuYWRkVG9CdWlsdEluVGVtcGxhdGUocmVwb3J0SWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChyZXMpID0+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9yZWZyZXNoUmVwb3J0cyh0cnVlKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcclxuICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX2FkZF90b19idWlsdGluX3RlbXBsYXRlX3JlcG9ydF9mYWlsZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG1ha2UgcmVwb3J0IGxheW91dCBhcyBkZWZhdWx0IGZvciBhbGwgcmVwb3J0c1xyXG4gIG1ha2VSZXBvcnREZWZhdWx0TGF5b3V0KHJlcG9ydFVpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVxdWVzdCA9IHtcclxuICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHJlcG9ydFVpZCxcclxuICAgIH07XHJcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UubWFrZVJlcG9ydExheW91dEFzRGVmYXVsdExheW91dChyZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKCdzaGFyZWRfcmVwb3J0aW5nX3N1Y2Nlc3NfdXBkYXRlZCcpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKCdzaGFyZWRfcmVwb3J0aW5nX2Vycm9yX29jY3VyZWQnKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyNlbmQgcmVnaW9uXHJcblxyXG4gIF92aWV3RGFzaGJvYXJkdCh1aWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCByZXBvcnQgPSB0aGlzLnJlcG9ydHMuZmluZCgocikgPT4gci51aWQgPT09IHVpZCk7XHJcbiAgICBpZiAoIXJlcG9ydCkge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcG9ydFRlbXBsYXRlSWQgPSByZXBvcnQudWlkO1xyXG4gICAgbGV0IHRlbmFudFVpZCA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuXHJcbiAgICBsZXQgdXJsVmlld2VyID0gYCR7U2VnbWVudC5hcHBCYXNlSHJlZn0vJHt0aGlzLmRhc2hib2FyZE1vZHVsZVJvdXRlfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmRWaWV3ZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VGVtcGxhdGV9PSR7cmVwb3J0VGVtcGxhdGVJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcblxyXG4gICAgY29uc29sZS5sb2coJz4+PiBfdmlld0Rhc2hib2FyZHQgfiB1cmxWaWV3ZXI6JywgdXJsVmlld2VyKTtcclxuXHJcbiAgICB3aW5kb3cub3Blbih1cmxWaWV3ZXIsICdfYmxhbmsnKTtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICApO1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgPGRpdiAqYnVzeT1cImlzbG9hZGluZ1wiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBjb2wtMTBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzRnJvbUZvcm07IGVsc2Ugbm90RnJvbUZvcm1cIj5cclxuICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgIDxwLWRyb3Bkb3duIGNsYXNzPVwiY29sLTEwIHRzaS1jb21wb25lbnRcIiBjbGFzcz1cInRzaS1jb21wb25lbnRcIiBzdHlsZUNsYXNzPVwidHNpLWNvbXBvbmVudFwiIGFwcGVuZFRwPVwiYm9keVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJmb3JtTmFtZXNcIiBbbmdNb2RlbF09XCJvdGhlckZvcm1OYW1lXCIgb3B0aW9uTGFiZWw9XCJ2YWx1ZVwiIG9wdGlvblZhbHVlPVwia2V5XCIgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgIGZpbHRlckJ5PVwidmFsdWVcIiBbc2hvd0NsZWFyXT1cInRydWVcIiBwbGFjZWhvbGRlcj1cInt7J3NoYXJlZF9yZXBvcnRpbmdfc2VsZWN0X2Zvcm0nIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvcC1kcm9wZG93bj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vdEZyb21Gb3JtPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8VHNpLUxhYmVsIGNsYXNzPVwiY29sLTJcIiBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX3JlcG9ydGluZ19mb3JtJ1wiPlxyXG4gICAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC0xMFwiIFsoYmluZCldPVwib3RoZXJGb3JtTmFtZVwiIChiaW5kQ2hhbmdlKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiZ2V0Rm9ybU5hbWVzRW5kcG9pbnRcIiBbZWxlbWVudFNvdXJjZVVybF09XCJnZXRGb3JtTmFtZXNFbmRwb2ludCBcIiBbaXNGaWx0ZXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCI+XHJcbiAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibWItNCBnYXAtMlwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPFRzaS1CdXR0b24gW3RleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfYWRkX3JlcG9ydCcgfCBsb2NhbGl6ZVwiIGljb249XCJwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdCBwaSBwaS1wbHVzXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXN1Y2Nlc3MgbWwtMiBtci0yIHAtYnV0dG9uIHAtY29tcG9uZW50IG5nLXN0YXItaW5zZXJ0ZWQgcC1idXR0b24tbGFiZWxcIiAoY2xpY2spPVwib25OZXdSZXBvcnQoKVwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgPFRzaS1CdXR0b24gW2J1dHRvblR5cGVdPVwiYnV0dG9uVHlwZS5TdWJtaXRcIiBbdGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19kZWxldGVfcmVwb3J0JyB8IGxvY2FsaXplXCIgaWNvbj1cInAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0IHBpIHBpLXRyYXNoXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbiBwLWNvbXBvbmVudCBuZy1zdGFyLWluc2VydGVkIHAtYnV0dG9uLWxhYmVsXCIgKGNsaWNrKT1cIm9uRGVsZXRlU2VsZWN0ZWRSZXBvcnRzKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRSZXBvcnRzIHx8ICFzZWxlY3RlZFJlcG9ydHMubGVuZ3RoXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgPHAtZmlsZVVwbG9hZCAjZmlsZVVwbG9hZCBuYW1lPVwiZGVtb1tdXCIgKG9uQmVmb3JlVXBsb2FkKT1cIm9uSW1wb3J0RmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uQ2xlYXIoJGV2ZW50KVwiIChvblJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi9qc29uXCIgW21heEZpbGVTaXplXT1cIjEwMDAwMDAwXCIgXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3NpemVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfdHlwZV9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9saW1pdF9tZXNzYWdlX3N1bW1hcnknIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjaG9vc2VJY29uXT1cIidwaSBwaS1wYXBlcmNsaXAnXCIgY2FuY2VsU3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiIHVwbG9hZFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1oZWxwXCJcclxuICAgICAgICByZW1vdmVTdHlsZUNsYXNzPVwicC1idXR0b24tZGFuZ2VyXCIgW2Nob29zZUxhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW3VwbG9hZExhYmVsXT1cIidzaGFyZWRfcmVwb3J0aW5nX2ltcG9ydF9yZXBvcnQnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtjYW5jZWxMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jYW5jZWxfY2hvb3NlX3JlcG9ydF9maWxlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidG9VcGxvYWRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuXHJcbiAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbc2hvd0ZpbHRlcnNdPVwiZmFsc2VcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCI+XHJcbiAgPC9Uc2ktRGlzcGxheS1HcmlkPiAtLT5cclxuXHJcblxyXG4gIDwhLS08ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+IDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiICBbcFRvb2x0aXBdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfcmVmcmVzaCcgfCBsb2NhbGl6ZVwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiICBsYWJlbD1cIlJlbG9hZFwiIHNldmVyaXR5PVwiaGVscFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiIC8+IDwvZGl2PlxyXG4gIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktcmVmcmVzaFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZFwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgLz5cclxuLS0+XHJcbiAgXHJcbiAgPFRzaS1CdXR0b24gc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi1yb3VuZGVkIG1iLTMgbWwtM1wiICBcclxuICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19yZWZyZXNoJ1wiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiXHJcbiAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiIChjbGljayk9XCJvblJlZnJlc2goKVwiPjwvVHNpLUJ1dHRvbj5cclxuXHJcbiAgPHRzaS12aWV3LWdyaWQgXHJcbiAgICBbc29ydE1vZGVdPVwic29ydE1vZGVSZWYuU2luZ2xlXCJcclxuICAgIFtoZWFkZXJdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbXlfdGVtcGxhdGUnXCJcclxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZ3JpZERhdGFdPVwicmVwb3J0c1wiIGtleT1cInVpZFwiXHJcbiAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIiBbKHNlbGVjdGVkSXRlbXMpXT1cInNlbGVjdGVkUmVwb3J0c1wiXHJcbiAgICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICAgW2Zvcm1OYW1lXT1cIidteS1yZXBvcnQtdGVtcGxhdGVzJ1wiXHJcbiAgICA+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG4gIDxici8+XHJcbiAgIDwhLS0gRGVmYXVsdCBUZW1wbGF0ZSAtLT5cclxuICAgPCEtLSA8VHNpLURpc3BsYXktR3JpZCBcclxuICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW3Nob3dTdW1tYXJ5Rm9vdGVyXT1cImZhbHNlXCIgXHJcbiAgIFtwYWdpbmF0b3JdPVwiZmFsc2VcIiBcclxuICAgW3Nob3dGaWx0ZXJzXT1cImZhbHNlXCIgXHJcbiAgIFtjb2x1bW5zXT1cImRlZmF1bHRUZW1wbGF0ZUNvbHVtbnNcIiBcclxuICAgW2dyaWREYXRhXT1cImRlZmF1bHRSZXBvcnRUZW1wbGF0ZURhdGFcIiBcclxuICAgKGJ1dHRvbkNvbHVtbkNsaWNrZWQpPVwiaGFuZGxlQnV0dG9uQ29sdW1uQ2xpY2tlZCgkZXZlbnQpXCJcclxuICAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcclxuICAga2V5PVwibmFtZVwiPlxyXG4gIDwvVHNpLURpc3BsYXktR3JpZD4gLS0+XHJcblxyXG4gIFxyXG4gIDx0c2ktdmlldy1ncmlkXHJcbiAgIFtzb3J0TW9kZV09XCJzb3J0TW9kZVJlZi5TaW5nbGVcIlxyXG4gICBbaGVhZGVyXT1cIidzaGFyZWRfcmVwb3J0aW5nX0J1aWx0SW5fdGVtcGxhdGUnXCJcclxuICAgW2NvbHVtbnNdPVwiZGVmYXVsdFRlbXBsYXRlQ29sdW1uc1wiIFxyXG4gICBbZ3JpZERhdGFdPVwiZGVmYXVsdFJlcG9ydFRlbXBsYXRlRGF0YVwiIFxyXG4gICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICBbZ2V0RGF0YUZyb21BcGldPVwiZmFsc2VcIlxyXG4gICBbZm9ybU5hbWVdPVwiJ2RlZmF1bHQtbXktcmVwb3J0LXRlbXBsYXRlcydcIlxyXG4gICBrZXk9XCJuYW1lXCI+XHJcbiAgPC90c2ktdmlldy1ncmlkPlxyXG5cclxuXHJcblxyXG5cclxuICBcclxuXHJcbiAgPCEtLSBkaWFsb2cgdG8gaW1wb3J0IGZpbGUgdG8gcmVwb3J0IC0tPlxyXG4gIDxwLWRpYWxvZyBoZWFkZXI9XCJ7eydzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCcgfCBsb2NhbGl6ZX19XCIgWyh2aXNpYmxlKV09XCJpc1VwZGF0ZVJlcG9ydEZyb21GaWxlRGlhbG9nVmlzaWJsZVwiIFtzdHlsZV09XCJ7d2lkdGg6ICc1MHZ3J31cIj5cclxuICAgIDwhLS0gPFRzaS1Nb2RhbC1IZWFkZXIgKG9uQ2xvc2VDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsQ2FuY2VsQ2xpY2soKVwiIFtpbnB1dFRpdGxlXT1cIidzaGFyZWRfcmVwb3J0aW5nX3NlbGVjdF9maWxlX3RvX2ltcG9ydF9pbnRvX3JlcG9ydCdcIj48L1RzaS1Nb2RhbC1IZWFkZXI+IC0tPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCI+XHJcbiAgICAgIDxwLWZpbGVVcGxvYWQgI2ltcG9ydEZpbGVUb1JlcG9ydEZpbGVVcGxvYWQgbmFtZT1cImltcG9ydEZpbGVUb1JlcG9ydFwiIChvbkJlZm9yZVVwbG9hZCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9JbXBvcnRGaWxlKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdCk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydF9GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkNsZWFyKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0X0NsZWFyKCRldmVudClcIiAob25SZW1vdmUpPVwib25JbXBvcnRGaWxlVG9SZXBvcnRfUmVtb3ZlKCRldmVudClcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL2pzb25cIiBbbWF4RmlsZVNpemVdPVwiMTAwMDAwMDBcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV9zaXplX21lc3NhZ2Vfc3VtbWFyeScgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfc2l6ZV9tZXNzYWdlX2RldGFpbCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XT1cIidzaGFyZWRfZmlsZV91cGxvYWRfaW52YWxpZF9maWxlX3R5cGVfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9kZXRhaWwnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiJ3NoYXJlZF9maWxlX3VwbG9hZF9pbnZhbGlkX2ZpbGVfbGltaXRfbWVzc2FnZV9zdW1tYXJ5JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbF09XCInc2hhcmVkX2ZpbGVfdXBsb2FkX2ludmFsaWRfZmlsZV90eXBlX21lc3NhZ2VfZGV0YWlsJyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2hvb3NlSWNvbl09XCIncGkgcGktcGFwZXJjbGlwJ1wiIGNhbmNlbFN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIiB1cGxvYWRTdHlsZUNsYXNzPVwicC1idXR0b24taGVscFwiXHJcbiAgICAgICAgcmVtb3ZlU3R5bGVDbGFzcz1cInAtYnV0dG9uLWRhbmdlclwiIFtjaG9vc2VMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfcmVwb3J0X2ZpbGUnIHwgbG9jYWxpemVcIlxyXG4gICAgICAgIFt1cGxvYWRMYWJlbF09XCInc2hhcmVkX3JlcG9ydGluZ19pbXBvcnRfcmVwb3J0JyB8IGxvY2FsaXplXCJcclxuICAgICAgICBbY2FuY2VsTGFiZWxdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfY2FuY2VsX2Nob29zZV9yZXBvcnRfZmlsZScgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInRvVXBsb2FkVG9VcGRhdGVSZXBvcnRGaWxlRGF0YVwiIHBUZW1wbGF0ZT1cImZpbGV1cGxvYWQtY29udGVudFwiPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC1maWxlVXBsb2FkPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tIDxUc2ktTW9kYWwtRm9vdGVyIChvbkNhbmNlbENsaWNrKT1cIm9uSW1wb3J0RmlsZVRvUmVwb3J0TW9kYWxDYW5jZWxDbGljaygpXCJcclxuICAgIChvblNhdmVDbGljayk9XCJvbkltcG9ydEZpbGVUb1JlcG9ydE1vZGFsU2F2ZUNsaWNrKClcIlxyXG4gICAgW3NhdmVEaXNhYmxlZF09XCIhdG9VcGxvYWRUb1VwZGF0ZVJlcG9ydEZpbGVEYXRhXCI+PC9Uc2ktTW9kYWwtRm9vdGVyPiAtLT5cclxuXHJcbjwvcC1kaWFsb2c+XHJcbjwvZGl2PlxyXG4iXX0=