simpo-component-library 2.0.30 → 2.0.32

Sign up to get free protection for your applications and to get access to all the features.
@@ -303,7 +303,7 @@ export class AppointmentFormComponent extends BaseSection {
303
303
  for (let apppointment of slots) {
304
304
  let currentStartTime = new Date(apppointment.appointmentStartTime);
305
305
  let currentEndTime = new Date(apppointment.appointmentEndTime);
306
- if (currentStartTime.getTime() <= endTime.getTime()) {
306
+ if (currentStartTime.getTime() < endTime.getTime()) {
307
307
  startTime = currentStartTime.getTime() > startTime.getTime() ? currentStartTime : startTime;
308
308
  endTime = currentEndTime.getTime() < endTime.getTime() ? currentEndTime : endTime;
309
309
  }
@@ -484,9 +484,10 @@ export class AppointmentFormComponent extends BaseSection {
484
484
  this.appointmentService.createAppointment(this.CreateData).subscribe((res) => {
485
485
  if (res) {
486
486
  this.closeDialog();
487
+ this.reFilterData();
487
488
  this.createLoader = false;
488
- this.snackbar.open(`Appointment is Created`, 'Close', {
489
- duration: 1500
489
+ this.snackbar.open(`Congratulations your Appointment has Booked`, 'Close', {
490
+ duration: 3000
490
491
  });
491
492
  }
492
493
  }, (error) => {
@@ -497,6 +498,39 @@ export class AppointmentFormComponent extends BaseSection {
497
498
  console.error("Error fetching Creation:", error); // Handle errors gracefully
498
499
  });
499
500
  }
501
+ reFilterData() {
502
+ this.CreateData = {
503
+ //appointmentId: "",
504
+ business: {
505
+ id: "",
506
+ name: ""
507
+ },
508
+ clientName: "",
509
+ mobile: "",
510
+ scheduledDate: new Date(),
511
+ services: [
512
+ {
513
+ id: "",
514
+ name: ""
515
+ }
516
+ ],
517
+ staff: [
518
+ {
519
+ id: "",
520
+ name: ""
521
+ }
522
+ ],
523
+ location: {
524
+ id: "",
525
+ name: ""
526
+ },
527
+ scheduledTime: "",
528
+ message: ""
529
+ };
530
+ this.selectedLocation = '';
531
+ this.selectedServices = '';
532
+ this.selectedStaff = '';
533
+ }
500
534
  isFormValid() {
501
535
  return this.CreateData.clientName !== '' &&
502
536
  this.CreateData.mobile !== '' &&
@@ -564,4 +598,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImpor
564
598
  }], customClass: [{
565
599
  type: Input
566
600
  }] } });
567
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBaUQsTUFBTSxlQUFlLENBQUM7QUFFNUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0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LG1HQUN2QixnQkFBZ0IscUZBQ2hCLGdDQUFnQyxxSEFFaEMsdUJBQXVCLDhGQUd2QixnQkFBZ0I7OzJGQUtQLHdCQUF3QjtrQkFoRHBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIseUJBQXlCO3dCQUN6QixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixpQkFBaUI7d0JBRWpCLFdBQVc7d0JBQ1gsd0JBQXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIsOEJBQThCO3dCQUM5QixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsMEJBQTBCO3dCQUMxQixjQUFjO3dCQUNkLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixnQ0FBZ0M7d0JBQ2hDLGdDQUFnQzt3QkFDaEMsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3FCQUNqQjs4SkFNUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYW5uZXJTdHlsZXNNb2RlbCwgTGF5T3V0TW9kZWwsIFBvc2l0aW9uTGF5b3V0TW9kYWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTaW1wb0VsZW1lbnRzTW9kdWxlIH0gZnJvbSAnLi8uLi8uLi9lbGVtZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IE1hdEdyaWRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZ3JpZC1saXN0JztcclxuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWZpci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1hbGlnbm1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9mb290ZXItbGF5b3V0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLXBvc2l0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IFNpbXBvQ29udGFpbmVyQWxpZ21lbnQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWFsaWdubWVudC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2xvckRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlL2NvbG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRTaXplRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtc2l6ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0JvcmRlcmxlc3NEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYm9yZGVybGVzc0ltYWdlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvSG92ZXJCb3JkZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlL2hvdmVyYm9yZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBTYW5pdGl6ZUh0bWxQaXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FuaXRpemVIdG1sJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudE1vZGVsLCBCYW5uZXJTZWN0aW9uTW9kZWwgfSBmcm9tICcuL2FwcG9pbnRtZW50LWZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbnRlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hcHBvaW50bWVudC1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNpbXBvRWxlbWVudHNNb2R1bGUsXHJcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcclxuICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxyXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXHJcbiAgICBTaW1wb0hvdmVyQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRTbmFja0Jhck1vZHVsZSxcclxuXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgU2ltcG9Cb3JkZXJsZXNzRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9Db250YWluZXJBbGlnbWVudCxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29udGFpbmVyRml0RGlyZWN0aXZlLFxyXG4gICAgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXHJcbiAgICBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIFRleHRTaXplRGlyZWN0aXZlLFxyXG4gICAgU2FuaXRpemVIdG1sUGlwZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcG9pbnRtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hcHBvaW50bWVudC1mb3JtLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBvaW50bWVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE/OiBCYW5uZXJTZWN0aW9uTW9kZWw7XHJcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XHJcbiAgY29udGVudD86IEJhbm5lckNvbnRlbnRNb2RlbDtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIHN0eWxlcz86IEJhbm5lclN0eWxlc01vZGVsO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBhcHBvaW50bWVudFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja2JhcjogTWF0U25hY2tCYXJcclxuXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgYnVzaW5lc3NJZDogYW55O1xyXG4gIGJ1c2luZXNzTmFtZTogYW55O1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcclxuICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWQgPSB0aGlzLmRlbGV0ZVxyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuICAgIGlmICghdGhpcy5zdHlsZXMgfHwgIXRoaXMuY29udGVudCkgcmV0dXJuO1xyXG4gICAgdGhpcy5idXNpbmVzc0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICB0aGlzLmJ1c2luZXNzTmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYk5hbWVcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc05hbWVcIilcclxuXHJcblxyXG4gICAgLy8gdGhpcy5nZXRBbGxTZXJ2aWNlcygpO1xyXG4gICAgLy8gdGhpcy5zdHlsZXMubGF5b3V0LmJhbm5lckltYWdlRGlzcGxheSA9IHRoaXMuY29udGVudC5pbWFnZS5zaG93SW1hZ2U7XHJcbiAgICB0aGlzLmdldEFsbExvY2F0aW9ucygpO1xyXG5cclxuICB9XHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5sYXlvdXQgfSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcbiAgZ2V0IGdldEp1c3RpZnlDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIFwianVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcIjtcclxuICB9XHJcbiAgZ2V0IGNhbk1lcmdlTmF2YmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGVzPy5tZXJnZTtcclxuICB9XHJcbiAgZ2V0IGlzQm9yZGVybGVzc0ltYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGVzPy5ib3JkZXJMZXNzSW1hZ2UgJiYgKHRoaXMuc3R5bGVzPy5wb3NpdGlvbkxheW91dC52YWx1ZSA9PSBcImxlZnRcIiB8fCB0aGlzLnN0eWxlcz8ucG9zaXRpb25MYXlvdXQudmFsdWUgPT0gXCJyaWdodFwiKTtcclxuICB9XHJcbiAgZ2V0IGdldFBvc2l0aW9uTGF5b3V0KCkge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZXM/LnBvc2l0aW9uTGF5b3V0IH0gYXMgUG9zaXRpb25MYXlvdXRNb2RhbDtcclxuICB9XHJcblxyXG4gIGVkaXRTZWN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG4gIHN0b3BQcm9wYWdhdGlvbihldmVudDogYW55KSB7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuZGFpbG9nYm94KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRGl2RWxlbWVudD4pOiB2b2lkIHtcclxuICAgIHRoaXMubWF0RGlhbG9nLm9wZW4odGVtcGxhdGUsXHJcbiAgICAgIC8vICB7d2lkdGg6JzUwMHB4J31cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLm1hdERpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgaXNNb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVzdHJpY3ROb25OdW1lcmljKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LmNoYXJDb2RlO1xyXG4gICAgaWYgKGNoYXJDb2RlICE9IDApIHtcclxuICAgICAgLy8gQWxsb3cgb25seSBudW1iZXJzXHJcbiAgICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Vc2VyTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eW2EtekEtWlxcc10qJC87XHJcbiAgICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdmFsdWUucmVwbGFjZSgvW15hLXpBLVpcXHNdL2csICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdGhpcy50b1RpdGxlQ2FzZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcd1xcUyovZywgZnVuY3Rpb24gKHR4dCkge1xyXG4gICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXJ2aWNlRGF0YTogYW55O1xyXG4gIHN0YWZmRGF0YTogYW55O1xyXG5cclxuICBjaGFuZ2VMb2NhdGlvbigpIHtcclxuICAgIHRoaXMuZ2V0QWxsU2VydmljZXMoKTtcclxuICAgIHRoaXMuZ2V0QWxsU3RhZmYoKVxyXG4gICAgdGhpcy51cGRhdGVMb2NhdGlvblRpbWluZygpO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5sb2NhdGlvblRpbWluZylcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvY2F0aW9uVGltaW5nKCkge1xyXG4gICAgdGhpcy5sb2NhdGlvblRpbWluZyA9IFtdO1xyXG4gICAgY29uc3QgZGF5ID0gdGhpcy5nZXREYXkoKTtcclxuICAgIGZvciAobGV0IGxvY2F0aW9uIG9mIHRoaXMubG9jYXRpb25EYXRhKSB7XHJcbiAgICAgIGlmIChsb2NhdGlvbi5pZCA9PT0gdGhpcy5zZWxlY3RlZExvY2F0aW9uKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBsb2NhdGlvbi5zdG9yZVRpbWluZ3NbZGF5LnRvVXBwZXJDYXNlKCldO1xyXG4gICAgICAgIGlmICghZGF0YS5kYXlUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oJ09wcHMgc2hvcCBpcyBjbG9zZWQgb24gc2VsZWN0ZWQgZGF0ZScsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvY2F0aW9uVGltaW5nID0gdGhpcy5nZW5lcmF0ZVRpbWVTbG90cyhkYXRhLnN0YXJ0VGltZSwgZGF0YS5lbmRUaW1lKSB8fCBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGdldERheSgpIHtcclxuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXTtcclxuICAgIHJldHVybiBkYXlzT2ZXZWVrW3RoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlLmdldERheSgpXTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlcnZpY2VzKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VzID0gJydcclxuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmdldEFsbFNlcnZpY2UodGhpcy5idXNpbmVzc0lkLCAxMDAwLCAwLCB0aGlzLnNlbGVjdGVkTG9jYXRpb24pLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gRmlsdGVyIHNlcnZpY2VzIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0YXR1cyAnQUNUSVZFJ1xyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlRGF0YSA9IHJlcy5kYXRhLmRhdGEuZmlsdGVyKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2Uuc3RhdHVzID09PSAnQUNUSVZFJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmljZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNlcnZpY2VEYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgICBgTm8gYWN0aXZlIHNlcnZpY2VzIGF2YWlsYWJsZSBmb3IgdGhpcyBidXNpbmVzcy5gLFxyXG4gICAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgYFNlcnZpY2UgaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXHJcbiAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlcnZpY2VzOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU3RhZmYoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RhZmYgPSAnJ1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWUgPSAnJ1xyXG4gICAgdGhpcy5nZXRBdmFpbGFibGVTbG90cygpO1xyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsU3RhZmZCeUxvY2F0aW9uKHRoaXMuYnVzaW5lc3NJZCwgMTAwMCwgMCwgdGhpcy5zZWxlY3RlZExvY2F0aW9uLCB0aGlzLnNlbGVjdGVkU2VydmljZXMpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gRmlsdGVyIHNlcnZpY2VzIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0YXR1cyAnQUNUSVZFJ1xyXG4gICAgICAgICAgdGhpcy5zdGFmZkRhdGEgPSByZXMuZGF0YS5kYXRhLmZpbHRlcigoc3RhZmY6IGFueSkgPT4gc3RhZmYuc3RhdHVzID09PSAnQUNUSVZFJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc3RhZmZEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5zdGFmZkRhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgICAgIGBObyBhY3RpdmUgc3RhZmYgYXZhaWxhYmxlIGZvciB0aGlzIGJ1c2luZXNzLmAsXHJcbiAgICAgICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgICBgU3RhZmYgaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXHJcbiAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0YWZmOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWluRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgYm9va2VkU2xvdHMgPSBuZXcgU2V0KCk7XHJcbiAgbG9jYXRpb25UaW1pbmc6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNoYW5nZURhdGUoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUxvY2F0aW9uVGltaW5nKCk7XHJcbiAgICB0aGlzLmdldEF2YWlsYWJsZVNsb3RzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBdmFpbGFibGVTbG90cygpIHtcclxuICAgIHRoaXMuYm9va2VkU2xvdHMgPSBuZXcgU2V0KClcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBcImxvY2F0aW9uSWRcIjogdGhpcy5zZWxlY3RlZExvY2F0aW9uLFxyXG4gICAgICBcInNlcnZpY2VJZFwiOiB0aGlzLnNlbGVjdGVkU2VydmljZXMsXHJcbiAgICAgIFwic3RhZmZJZFwiOiB0aGlzLnNlbGVjdGVkU3RhZmYsXHJcbiAgICAgIFwiYnVzaW5lc3NJZFwiOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgIFwiYXBwb2ludG1lbnREYXRlXCI6IHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QXZhaWxhYmxlU2xvdHMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAvLyBsZXQgc2VsZWN0ZWREYXRlID0gbW9tZW50KHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKTs7XHJcbiAgICAgIC8vIGZvciAobGV0IHN0YWZmIG9mIHJlcy5kYXRhKSB7XHJcbiAgICAgIC8vICAgaWYoIXN0YWZmLmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSl7XHJcbiAgICAgIC8vICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xyXG4gICAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGlmIChzdGFmZj8uYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBhcHBwb2ludG1lbnQgb2Ygc3RhZmY/LmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSkge1xyXG4gICAgICAvLyAgICAgICBjb25zdCB0aW1lU2xvdHMgPSB0aGlzLmdldFRpbWUoYXBwcG9pbnRtZW50LmFwcG9pbnRtZW50U3RhcnRUaW1lLCBhcHBwb2ludG1lbnQuYXBwb2ludG1lbnRFbmRUaW1lLCAxNSk7XHJcbiAgICAgIC8vICAgICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgICAvLyAgICAgICB0aW1lU2xvdHM/LmZvckVhY2goc2xvdCA9PiB0aGlzLmJvb2tlZFNsb3RzLmFkZChzbG90KSk7XHJcbiAgICAgIC8vICAgICAgIC8vIHRoaXMuYm9va2VkU2xvdHMgPSBuZXcgU2V0KHRpbWVTbG90cyk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYm9va2VkU2xvdHMpXHJcbiAgICAgIC8vIHRoaXMuZ2V0Qm9va2VkU2xvdHMocmVzKTtcclxuICAgICAgdGhpcy5nZXRCb29rZWRTbG90cyhyZXMpO1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBnZXRCb29rZWRTbG90cyhyZXM6IGFueSkge1xyXG4gICAgbGV0IHNlbGVjdGVkRGF0ZSA9IG1vbWVudCh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XHJcblxyXG4gICAgbGV0IHNsb3RzOiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgc3RhZmYgb2YgcmVzLmRhdGEpIHtcclxuICAgICAgaWYgKCFzdGFmZi5ib29rZWRTbG90cz8uW3NlbGVjdGVkRGF0ZV0pIHtcclxuICAgICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2xvdHMucHVzaCguLi5zdGFmZj8uYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKTtcclxuICAgIH1cclxuXHJcbiAgICBzbG90cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5hcHBvaW50bWVudFN0YXJ0VGltZSkuZ2V0VGltZSgpO1xyXG4gICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuYXBwb2ludG1lbnRTdGFydFRpbWUpLmdldFRpbWUoKTtcclxuICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7IC8vIEFzY2VuZGluZyBvcmRlclxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coc2xvdHMpO1xyXG5cclxuICAgIGxldCBzdGFydFRpbWU6IERhdGUgPSBuZXcgRGF0ZShzbG90c1swXS5hcHBvaW50bWVudFN0YXJ0VGltZSk7XHJcbiAgICBsZXQgZW5kVGltZTogRGF0ZSA9IG5ldyBEYXRlKHNsb3RzWzBdLmFwcG9pbnRtZW50RW5kVGltZSk7XHJcblxyXG4gICAgZm9yIChsZXQgYXBwcG9pbnRtZW50IG9mIHNsb3RzKSB7XHJcblxyXG4gICAgICBsZXQgY3VycmVudFN0YXJ0VGltZTogRGF0ZSA9IG5ldyBEYXRlKGFwcHBvaW50bWVudC5hcHBvaW50bWVudFN0YXJ0VGltZSk7XHJcbiAgICAgIGxldCBjdXJyZW50RW5kVGltZTogRGF0ZSA9IG5ldyBEYXRlKGFwcHBvaW50bWVudC5hcHBvaW50bWVudEVuZFRpbWUpO1xyXG5cclxuICAgICAgaWYgKGN1cnJlbnRTdGFydFRpbWUuZ2V0VGltZSgpIDw9IGVuZFRpbWUuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFN0YXJ0VGltZS5nZXRUaW1lKCkgPiBzdGFydFRpbWUuZ2V0VGltZSgpID8gY3VycmVudFN0YXJ0VGltZSA6IHN0YXJ0VGltZTtcclxuICAgICAgICBlbmRUaW1lID0gY3VycmVudEVuZFRpbWUuZ2V0VGltZSgpIDwgZW5kVGltZS5nZXRUaW1lKCkgPyBjdXJyZW50RW5kVGltZSA6IGVuZFRpbWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdGltZVNsb3RzID0gdGhpcy5nZXRUaW1lKHN0YXJ0VGltZS50b1N0cmluZygpLCBlbmRUaW1lLnRvU3RyaW5nKCksIDE1KTtcclxuICAgICAgICB0aW1lU2xvdHMuc3BsaWNlKHRpbWVTbG90cy5sZW5ndGggLSAxLCAxKTtcclxuICAgICAgICB0aW1lU2xvdHM/LmZvckVhY2goc2xvdCA9PiB0aGlzLmJvb2tlZFNsb3RzLmFkZChzbG90KSk7XHJcblxyXG4gICAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRTdGFydFRpbWU7XHJcbiAgICAgICAgZW5kVGltZSA9IGN1cnJlbnRFbmRUaW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGltZVNsb3RzID0gdGhpcy5nZXRUaW1lKHN0YXJ0VGltZS50b1N0cmluZygpLCBlbmRUaW1lLnRvU3RyaW5nKCksIDE1KTtcclxuICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgdGltZVNsb3RzPy5mb3JFYWNoKHNsb3QgPT4gdGhpcy5ib29rZWRTbG90cy5hZGQoc2xvdCkpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKHRoaXMuYm9va2VkU2xvdHMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGltZShzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZywgaW50ZXJ2YWxNaW51dGVzOiBudW1iZXIpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShzdGFydCk7XHJcbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoZW5kKTtcclxuICAgIGNvbnN0IHNsb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChzdGFydERhdGUgPD0gZW5kRGF0ZSkge1xyXG4gICAgICAvLyBGb3JtYXQgdGhlIHRpbWUgYXMgbmVlZGVkIChlLmcuLCBcIjA1OjE1IFBNXCIpXHJcbiAgICAgIGxldCBob3VycyA9IHN0YXJ0RGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICBjb25zdCBtaW51dGVzID0gc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgY29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJztcclxuXHJcbiAgICAgIC8vIENvbnZlcnQgaG91cnMgdG8gMTItaG91ciBmb3JtYXQgYW5kIHBhZCB3aXRoICcwJyBpZiBuZWVkZWRcclxuICAgICAgaG91cnMgPSAoKGhvdXJzICsgMTEpICUgMTIpICsgMTtcclxuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBgJHtmb3JtYXR0ZWRIb3Vyc306JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YDtcclxuXHJcbiAgICAgIHNsb3RzLnB1c2goZm9ybWF0dGVkVGltZSk7XHJcblxyXG4gICAgICAvLyBJbmNyZW1lbnQgdGltZSBieSB0aGUgaW50ZXJ2YWxcclxuICAgICAgc3RhcnREYXRlLnNldE1pbnV0ZXMoc3RhcnREYXRlLmdldE1pbnV0ZXMoKSArIGludGVydmFsTWludXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNsb3RzO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lU2xvdHMoc3RhcnRUaW1lOiBzdHJpbmcsIGVuZFRpbWU6IHN0cmluZykge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKHN0YXJ0VGltZSwgZW5kVGltZSlcclxuICAgIHRoaXMuYXZhaWxhYmxlVGltZXMgPSBbXTsgLy8gQ2xlYXIgcHJldmlvdXMgdGltZXNcclxuXHJcbiAgICBpZiAoIXN0YXJ0VGltZSB8fCAhZW5kVGltZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiU3RhcnRUaW1lIG9yIEVuZFRpbWUgaXMgdW5kZWZpbmVkOlwiLCBzdGFydFRpbWUsIGVuZFRpbWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IFtzdGFydEhvdXIsIHN0YXJ0TWludXRlLCBzdGFydFBlcmlvZF0gPSB0aGlzLnBhcnNlVGltZShzdGFydFRpbWUpO1xyXG4gICAgY29uc3QgW2VuZEhvdXIsIGVuZE1pbnV0ZSwgZW5kUGVyaW9kXSA9IHRoaXMucGFyc2VUaW1lKGVuZFRpbWUpO1xyXG5cclxuICAgIGxldCBjdXJyZW50SG91cjogbnVtYmVyID0gc3RhcnRIb3VyO1xyXG4gICAgbGV0IGN1cnJlbnRNaW51dGU6IG51bWJlciA9IHN0YXJ0TWludXRlO1xyXG4gICAgbGV0IGN1cnJlbnRQZXJpb2QgPSBzdGFydFBlcmlvZDtcclxuXHJcblxyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgY29uc3QgZm9ybWF0dGVkSG91ciA9IHRoaXMucGFkWmVybyhjdXJyZW50SG91ciA9PT0gMCA/IDEyIDogY3VycmVudEhvdXIpO1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRNaW51dGUgPSB0aGlzLnBhZFplcm8oY3VycmVudE1pbnV0ZSk7XHJcbiAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtmb3JtYXR0ZWRIb3VyfToke2Zvcm1hdHRlZE1pbnV0ZX0gJHtjdXJyZW50UGVyaW9kfWA7XHJcblxyXG4gICAgICB0aGlzLmF2YWlsYWJsZVRpbWVzLnB1c2godGltZVN0cmluZyk7XHJcblxyXG4gICAgICAvLyBJbmNyZW1lbnQgdGltZSBieSAxNSBtaW51dGVzXHJcbiAgICAgIGN1cnJlbnRNaW51dGUgKz0gMTU7XHJcbiAgICAgIGlmIChjdXJyZW50TWludXRlID09PSA2MCkge1xyXG4gICAgICAgIGN1cnJlbnRNaW51dGUgPSAwO1xyXG4gICAgICAgIGN1cnJlbnRIb3VyID0gKGN1cnJlbnRIb3VyICUgMTIpICsgMTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xyXG4gICAgICAgICAgY3VycmVudFBlcmlvZCA9IGN1cnJlbnRQZXJpb2QgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFN0b3AgdGhlIGxvb3Agd2hlbiByZWFjaGluZyB0aGUgZW5kIHRpbWVcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGN1cnJlbnRIb3VyID09PSBlbmRIb3VyICYmXHJcbiAgICAgICAgY3VycmVudE1pbnV0ZSA9PT0gZW5kTWludXRlICYmXHJcbiAgICAgICAgY3VycmVudFBlcmlvZCA9PT0gZW5kUGVyaW9kXHJcbiAgICAgICkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVUaW1lcztcclxuICB9XHJcblxyXG4gIHBhcnNlVGltZSh0aW1lOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIHN0cmluZ10ge1xyXG4gICAgaWYgKCF0aW1lKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaW1lIGlzIHVuZGVmaW5lZCBvciBudWxsOlwiLCB0aW1lKTtcclxuICAgICAgcmV0dXJuIFswLCAwLCAnQU0nXTsgLy8gRGVmYXVsdCBvciBmYWxsYmFjayB2YWx1ZXNcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBbdGltZVN0cmluZywgcGVyaW9kXSA9IHRpbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgW2hvdXIsIG1pbnV0ZV0gPSB0aW1lU3RyaW5nLnNwbGl0KFwiOlwiKS5tYXAobnVtID0+IHBhcnNlSW50KG51bSwgMTApKTsgLy8gRW5zdXJlcyBwYXJzZWQgYXMgbnVtYmVyc1xyXG4gICAgcmV0dXJuIFtob3VyICUgMTIsIG1pbnV0ZSwgcGVyaW9kXTtcclxuICB9XHJcblxyXG5cclxuICBsb2NhdGlvbkRhdGE6IGFueTtcclxuICBzZWxlY3RlZExvY2F0aW9uOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGdldEFsbExvY2F0aW9ucygpIHtcclxuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmdldEFsbExvY2F0aW9uKHRoaXMuYnVzaW5lc3NJZCwgMTAwMCwgMCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLmRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uRGF0YSA9IHJlcy5kYXRhLmRhdGEuZmlsdGVyKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2Uuc3RhdHVzID09PSAnQUNUSVZFJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgICBgTG9jYXRpb24gaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXHJcbiAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc2VydmljZXM6XCIsIGVycm9yKTsgLy8gSGFuZGxlIGVycm9ycyBncmFjZWZ1bGx5XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICB9XHJcblxyXG4gIC8vIFZhcmlhYmxlc1xyXG4gIGZvcm1hdHRlZERhdGU6IGFueTtcclxuICB0aW1lU2xvdHNEYXRhOiBhbnk7XHJcbiAgZm9ybWF0dGVkVGltZUludGVydmFsczogeyBzdGFydFRpbWU6IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRpbWUgc2xvdHNcclxuICBnZXRUaW1lU2xvdHMoKSB7XHJcbiAgICB0aGlzLmZvcm1hdHRlZERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpKTtcclxuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmdldEFsbFRpbWVTbG90cyh0aGlzLnNlbGVjdGVkTG9jYXRpb24sIHRoaXMuZm9ybWF0dGVkRGF0ZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLnRpbWVTbG90c0RhdGEgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMgPSB0aGlzLnRpbWVTbG90c0RhdGEubWFwKChpbnRlcnZhbDogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICBzdGFydFRpbWU6IGludGVydmFsLnN0YXJ0VGltZS5zbGljZSgwLCA1KSwgLy8gR2V0IEhIOk1NXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclRpbWVTbG90cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXHJcbiAgICAgICAgICAgIGBMb2NhdGlvbiBpcyBub3QgY3JlYXRlZCB5ZXQgd2l0aCB0aGlzIGJ1c2luZXNzYCxcclxuICAgICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgICAgeyBkdXJhdGlvbjogMTUwMCB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlcnZpY2VzOlwiLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBGdW5jdGlvbiB0byBmaWx0ZXIgdGltZSBzbG90c1xyXG4gIGZpbHRlclRpbWVTbG90cygpIHtcclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgdG9kYXlcclxuICAgIGlmIChzZWxlY3RlZERhdGUudG9EYXRlU3RyaW5nKCkgPT09IG5vdy50b0RhdGVTdHJpbmcoKSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5vdy5nZXRIb3VycygpICogNjAgKyBub3cuZ2V0TWludXRlcygpO1xyXG5cclxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdGltZSBzbG90cyB0aGF0IGFyZSBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMgPSB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMuZmlsdGVyKHRpbWVTbG90ID0+IHtcclxuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZVNsb3Quc3RhcnRUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XHJcbiAgICAgICAgY29uc3Qgc2xvdFRpbWUgPSBob3VycyAqIDYwICsgbWludXRlczsgLy8gQ29udmVydCBzbG90IHRpbWUgdG8gdG90YWwgbWludXRlc1xyXG4gICAgICAgIHJldHVybiBzbG90VGltZSA+IGN1cnJlbnRUaW1lOyAvLyBPbmx5IHNob3cgc2xvdHMgYWZ0ZXIgdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGVGaWx0ZXIgPSAoZGF0ZTogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGRheSA9IGRhdGU/LmdldERheSgpO1xyXG4gICAgLy8gRGlzYWJsZSBTdW5kYXlzXHJcbiAgICByZXR1cm4gZGF5ICE9PSAwO1xyXG4gIH07XHJcblxyXG4gIHNlbGVjdGVkU2VydmljZXM6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkU3RhZmY6IHN0cmluZyA9ICcnO1xyXG5cclxuICBDcmVhdGVEYXRhOiBhbnkgPSB7XHJcbiAgICAvL2FwcG9pbnRtZW50SWQ6IFwiXCIsXHJcbiAgICBidXNpbmVzczoge1xyXG4gICAgICBpZDogXCJcIixcclxuICAgICAgbmFtZTogXCJcIlxyXG4gICAgfSxcclxuICAgIGNsaWVudE5hbWU6IFwiXCIsXHJcbiAgICBtb2JpbGU6IFwiXCIsXHJcbiAgICBzY2hlZHVsZWREYXRlOiBuZXcgRGF0ZSgpLFxyXG4gICAgc2VydmljZXM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgIG5hbWU6IFwiXCJcclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIHN0YWZmOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH1cclxuICAgIF0sXHJcbiAgICBsb2NhdGlvbjpcclxuICAgIHtcclxuICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgIG5hbWU6IFwiXCJcclxuICAgIH1cclxuICAgICxcclxuICAgIHNjaGVkdWxlZFRpbWU6IFwiXCIsXHJcbiAgICBtZXNzYWdlOiBcIlwiXHJcbiAgfVxyXG5cclxuICBwcmVwYXJlQ3JlYXRlRGF0YSgpIHtcclxuICAgIHRoaXMuQ3JlYXRlRGF0YS5zZXJ2aWNlcyA9IFtdO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnN0YWZmID0gW107XHJcbiAgICB0aGlzLnNlcnZpY2VEYXRhLmZvckVhY2goKHNlcnZpY2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2VzLmluY2x1ZGVzKHNlcnZpY2UuaWQpKSB7XHJcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLnNlcnZpY2VzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IHNlcnZpY2UuaWQsXHJcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWVcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3RhZmZEYXRhLmZvckVhY2goKHN0YWZmOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGFmZi5pbmNsdWRlcyhzdGFmZi5pZCkpIHtcclxuICAgICAgICB0aGlzLkNyZWF0ZURhdGEuc3RhZmYucHVzaCh7XHJcbiAgICAgICAgICBpZDogc3RhZmYuaWQsXHJcbiAgICAgICAgICBuYW1lOiBzdGFmZi5uYW1lXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlTG9jYXRpb25EYXRhKCkge1xyXG5cclxuICAgIHRoaXMubG9jYXRpb25EYXRhLmZvckVhY2goKGxvY2F0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiA9PSBsb2NhdGlvbi5pZCkge1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlRGF0YS5sb2NhdGlvbi5pZCA9IGxvY2F0aW9uLmlkXHJcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLmxvY2F0aW9uLm5hbWUgPSBsb2NhdGlvbi5uYW1lXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjcmVhdGVMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhdmFpbGFibGVUaW1lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcGFkWmVybyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA8IDEwID8gYDAke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xyXG4gIH1cclxuICBpc1RpbWVHcmVhdGVyVGhhbkN1cnJlbnQodGltZTogc3RyaW5nLCBjdXJyZW50SG91cjogbnVtYmVyLCBjdXJyZW50TWludXRlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IFtob3VyLCBtaW51dGVdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xyXG4gICAgcmV0dXJuIChob3VyID4gY3VycmVudEhvdXIpIHx8IChob3VyID09PSBjdXJyZW50SG91ciAmJiBtaW51dGUgPj0gY3VycmVudE1pbnV0ZSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVBcHBvaW50bWVudCgpIHtcclxuICAgIHRoaXMucHJlcGFyZUNyZWF0ZURhdGEoKTtcclxuICAgIHRoaXMucHJlcGFyZUxvY2F0aW9uRGF0YSgpO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLmJ1c2luZXNzLmlkID0gdGhpcy5idXNpbmVzc0lkO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLmJ1c2luZXNzLm5hbWUgPSB0aGlzLmJ1c2luZXNzTmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpIHtcclxuICAgICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUgPSBtb21lbnQodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWUgPSB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkVGltZS50b0xvd2VyQ2FzZSgpXHJcbiAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmFwcG9pbnRtZW50U2VydmljZS5jcmVhdGVBcHBvaW50bWVudCh0aGlzLkNyZWF0ZURhdGEpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2coKVxyXG4gICAgICAgIHRoaXMuY3JlYXRlTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgYEFwcG9pbnRtZW50IGlzIENyZWF0ZWRgLFxyXG4gICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgIGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JgLFxyXG4gICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIENyZWF0aW9uOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEubW9iaWxlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gIT09ICcnICYmXHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkVGltZSAhPT0gJydcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gIFtuZ0NsYXNzXT1cInsnbWVyZ2VOYXZiYXInOiBjYW5NZXJnZU5hdmJhciAmJiBpbmRleCA9PSAxLCAnanVzdGlmeS1jb250ZW50LWJldHdlZW4gZC1mbGV4JzogaXNCb3JkZXJsZXNzSW1hZ2V9XCJcclxuICBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgc3R5bGU9XCJvdmVyZmxvdy14OiBoaWRkZW47XCIgc2ltcG9Ib3ZlclxyXG4gIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkltYWdlU2VjdGlvblwiPjwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgY2xhc3M9XCJweC00IHB5LTVcIiBbbmdDbGFzc109XCJ7J2NvbC1sZy02IGNvbC14eGwtNic6IGlzQm9yZGVybGVzc0ltYWdlLCAndy0xMDAgY29sLXh4bC04JzogIWlzQm9yZGVybGVzc0ltYWdlfVwiXHJcbiAgICBbaWRdPVwiZGF0YT8uaWRcIiAjbWFpbkNvbnRhaW5lciBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTUganVzdGlmeS1jb250ZW50LXN0YXJ0XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQW5pbWF0aW9uXT1cInN0eWxlcz8uYW5pbWF0aW9uXCJcclxuICAgICAgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCIgW3NpbXBvUG9zaXRpb25MYXlvdXREaXJlY3RpdmVdPVwic3R5bGVzPy5wb3NpdGlvbkxheW91dFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2FsaWduLWl0ZW1zLXN0cmV0Y2gnOiBzdHlsZXM/LnBvc2l0aW9uTGF5b3V0Py52YWx1ZSA9PT0gJ2xlZnQnIHx8IHN0eWxlcz8ucG9zaXRpb25MYXlvdXQ/LnZhbHVlID09PSAncmlnaHQnLCAnZmxleC1sZy1yb3cnOiB0cnVlIH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBjb2wtc20tOCBjb2wtbGctNlwiICpuZ0lmPVwiY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZSAmJiAhaXNCb3JkZXJsZXNzSW1hZ2VcIlxyXG4gICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIj5cclxuICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJjb250ZW50Py5pbWFnZT8udXJsXCIgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGVzPy5pbWFnZVwiIFtpZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICBbc2ltcG9PYmplY3RQb3NpdGlvbl09XCJjb250ZW50Py5pbWFnZT8ucG9zaXRpb25cIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCJcclxuICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCsoY29udGVudD8uaW1hZ2U/LmlkIHx8ICcnKVwiIGNsYXNzPVwiZC1ibG9jayB3LTEwMCBpbnNpZGVJbWdcIiBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyO1wiXHJcbiAgICAgICAgICBbYWx0XT1cImNvbnRlbnQ/LmltYWdlPy5hbHRUZXh0XCIgd2lkdGg9XCI3MDBcIiBoZWlnaHQ9XCI1MDBcIiBsb2FkaW5nPVwibGF6eVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtMTVcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnY29sLWxnLTEyJzogaXNCb3JkZXJsZXNzSW1hZ2UsICdjb2wtbGctNic6ICFpc0JvcmRlcmxlc3NJbWFnZX1cIlxyXG4gICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9Db250ZW50QWxpZ25tZW50XT1cInN0eWxlcz8uY29udGVudEFsaWdubWVudFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8uaW5wdXRUZXh0XCI+XHJcbiAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaXRlbS52YWx1ZSB8IHNhbml0aXplSHRtbFwiIGNsYXNzPVwidGV4dC1lbGVtZW50XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5sYWJlbCA9PT0gJ0hlYWRpbmcnID8gJ2hlYWRpbmctbGFyZ2UgbGgtMiBtYi0zJyA6ICdib2R5LWxhcmdlJ1wiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8ubGlzdEl0ZW0/LmRhdGFcIiBjbGFzcz1cImNhcmRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRfd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyX2NhcmQgdmlzaWJsZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWNvbmQtcGFydC1jYXJkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlyc3QtcGFydC1jYXJkXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pbnB1dFRleHRbMF0ubGFiZWw9PT0gJ0hlYWRpbmcnID8gJ2hlYWRpbmctbGFyZ2UgbGgtMiBtYi0zJyA6ICdib2R5LWxhcmdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgY2xhc3M9XCJ0aWNrLWltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy85MzM5OTdjMTcxODc5MDMwMzEyNzkwNzU5OGMxNjk2MDYzMDYxOTAwZ3JlZW5fdmVyaWZpZWRfaW1hZ2UucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJzb21ldGhpbmdcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5pbnB1dFRleHRbMF0udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhPy5hY3Rpb24gJiYgZGF0YT8uYWN0aW9uPy5kaXNwbGF5XCIgY2xhc3M9XCJidXR0b24tZGlzcGxheVwiXHJcbiAgICAgICAgICBbc2ltcG9Db250YWluZXJBbGlnbm1lbnRdPVwic3R5bGVzTGF5b3V0XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGF0YT8uYWN0aW9uPy5idXR0b25zXCI+XHJcbiAgICAgICAgICAgIDxhcHAtYnV0dG9uLWVsZW1lbnQgW2J1dHRvbkNvbnRlbnRdPVwiYnV0dG9uLmNvbnRlbnRcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uLnN0eWxlc1wiIFtidXR0b25JZF09XCJidXR0b24uaWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuZGFpbG9nYm94KGRpYWxvZ0JveClcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPjwvYXBwLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGRpdiBzdHlsZT1cIiB3aWR0aDogMTAwJTsgaGVpZ2h0OiA1MDBweDtcIj5cclxuICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiAgc3JjPVwiLi4vLi4vYXNzZXRzL2RpdmlkZXIuc3ZnXCIgc3R5bGU9XCJjbGlwLXBhdGg6IHBvbHlnb24oMCA1NSUsIDEwMCUgMCwgMTAwJSAxMDAlLCAwJSAxMDAlKTsgYmFja2dyb3VuZC1jb2xvcjogcmVkO1wiPlxyXG4gIDwvZGl2PiAtLT5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdCAmJiBmYWxzZSB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiXHJcbiAgICAgIFtpc01lcmdlZF09XCJzdHlsZXM/Lm1lcmdlID8/IGZhbHNlXCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNJbWFnZVNlY3Rpb24+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMCBjb2wtc20tOCBjb2wtbGctNlwiXHJcbiAgICBbbmdTdHlsZV09XCJ7J3dpZHRoJzogc3R5bGVzPy5wb3NpdGlvbkxheW91dD8udmFsdWUgPT09ICdyaWdodCcgPyAnZml0LWNvbnRlbnQnIDogJyd9XCJcclxuICAgIHN0eWxlPVwicGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7XCIgKm5nSWY9XCJjb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlICYmIGlzQm9yZGVybGVzc0ltYWdlO1wiXHJcbiAgICBbc2ltcG9Cb3JkZXJsZXNzXT1cImdldFBvc2l0aW9uTGF5b3V0XCI+XHJcbiAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJjb250ZW50Py5pbWFnZT8udXJsXCIgY2xhc3M9XCJkLWJsb2NrIGltZy1mbHVpZCBoLTEwMCB3LTEwMFwiXHJcbiAgICAgIFthbHRdPVwiY29udGVudD8uaW1hZ2U/LmFsdFRleHRcIiB3aWR0aD1cIjcwMFwiIGhlaWdodD1cIjUwMFwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tIERpYWxvZyB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dCb3ggY2xhc3M9XCJkaWFsb2dib3hcIj5cclxuICA8ZGl2IGNsYXNzPVwiYXBwb2ludG1lbnQtZm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1zZWN0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItbGVmdC1zaWRlXCI+XHJcbiAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDtcIj5Cb29rIGFuIEFwcG9pbnRtZW50PC9oMj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcmlnaHQtc2lkZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtbW9iaWxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPk5hbWU8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE5hbWVcIiBwYXR0ZXJuPVwiW2EtekEtWiBdKlwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLmNsaWVudE5hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJvblVzZXJOYW1lQ2hhbmdlKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TW9iaWxlIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXRTdHlsZVwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgWW91ciBNb2JpbGUgTnVtYmVyXCJcclxuICAgICAgICAgICAgICBwYXR0ZXJuPVwiXlswLTldezEwLDE1fSRcIiBtYXhsZW5ndGg9XCIxNVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoa2V5cHJlc3MpPVwicmVzdHJpY3ROb25OdW1lcmljKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiQ3JlYXRlRGF0YS5tb2JpbGVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLW1vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5Mb2NhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExvY2F0aW9uXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZExvY2F0aW9uXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9jYXRpb24oKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsb2NhdGlvbiBvZiBsb2NhdGlvbkRhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJsb2NhdGlvbi5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBsb2NhdGlvbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPlNlcnZpY2U8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTZXJ2aWNlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlcnZpY2VzXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZ2V0QWxsU3RhZmYoKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZXJ2aWNlIG9mIHNlcnZpY2VEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwic2VydmljZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBzZXJ2aWNlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+U3RhZmY8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTdGFmZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTdGFmZlwiICAobmdNb2RlbENoYW5nZSk9XCJnZXRBdmFpbGFibGVTbG90cygpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YWZmIG9mIHN0YWZmRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInN0YWZmLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHN0YWZmLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+RGF0ZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEYXRlXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZURhdGUoKVwiIFttaW5dPVwibWluRGF0ZVwiXHJcbiAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+VGltZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExvY2F0aW9uXCIgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRpbWUgb2YgbG9jYXRpb25UaW1pbmdcIiBbdmFsdWVdPVwidGltZVwiIFtkaXNhYmxlZF09XCJib29rZWRTbG90cy5oYXModGltZSlcIj5cclxuICAgICAgICAgICAgICAgIHt7IHRpbWUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdWxsLW1lc3NhZ2Utc2VjdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXNpbmVzcy1maWVsZC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPk1lc3NhZ2U8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE5hbWVcIiBwYXR0ZXJuPVwiW2EtekEtWiBdKlwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLm1lc3NhZ2VcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tc2VjdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tc2VjdGlvblwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJvb2tpbmctYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCIgKGNsaWNrKT1cImNyZWF0ZUFwcG9pbnRtZW50KClcIj5cclxuICAgICAgICAgICAgQm9vayBBcHBvaW50bWVudFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
601
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBaUQsTUFBTSxlQUFlLENBQUM7QUFFNUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0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YTt3QkFDYixpQkFBaUI7d0JBRWpCLFdBQVc7d0JBQ1gsd0JBQXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQix5QkFBeUI7d0JBQ3pCLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIsOEJBQThCO3dCQUM5QixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsMEJBQTBCO3dCQUMxQixjQUFjO3dCQUNkLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixnQ0FBZ0M7d0JBQ2hDLGdDQUFnQzt3QkFDaEMsdUJBQXVCO3dCQUN2QixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3FCQUNqQjs4SkFNUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYW5uZXJTdHlsZXNNb2RlbCwgTGF5T3V0TW9kZWwsIFBvc2l0aW9uTGF5b3V0TW9kYWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTaW1wb0VsZW1lbnRzTW9kdWxlIH0gZnJvbSAnLi8uLi8uLi9lbGVtZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IE1hdEdyaWRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZ3JpZC1saXN0JztcclxuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWZpci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1hbGlnbm1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9mb290ZXItbGF5b3V0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLXBvc2l0aW9uLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IFNpbXBvQ29udGFpbmVyQWxpZ21lbnQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGFpbmVyLWFsaWdubWVudC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2xvckRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlL2NvbG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRleHRTaXplRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtc2l6ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0JvcmRlcmxlc3NEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYm9yZGVybGVzc0ltYWdlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvSG92ZXJCb3JkZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlL2hvdmVyYm9yZGVyLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBTYW5pdGl6ZUh0bWxQaXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FuaXRpemVIdG1sJztcclxuaW1wb3J0IHsgQmFubmVyQ29udGVudE1vZGVsLCBCYW5uZXJTZWN0aW9uTW9kZWwgfSBmcm9tICcuL2FwcG9pbnRtZW50LWZvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbnRlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1hcHBvaW50bWVudC1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFNpbXBvRWxlbWVudHNNb2R1bGUsXHJcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcclxuICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxyXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXHJcbiAgICBTaW1wb0hvdmVyQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuICAgIE1hdE5hdGl2ZURhdGVNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRTbmFja0Jhck1vZHVsZSxcclxuXHJcbiAgICAvL2RpcmVjdGl2ZVxyXG4gICAgU2ltcG9Cb3JkZXJsZXNzRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9Db250YWluZXJBbGlnbWVudCxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29sdW1uRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgQ29udGFpbmVyRml0RGlyZWN0aXZlLFxyXG4gICAgc2ltcG9Db25ldGVuQWxpZ25tZW50RGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcclxuICAgIENvcm5lckRpcmVjdGl2ZSxcclxuICAgIFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXHJcbiAgICBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXHJcbiAgICBDb2xvckRpcmVjdGl2ZSxcclxuICAgIFRleHRTaXplRGlyZWN0aXZlLFxyXG4gICAgU2FuaXRpemVIdG1sUGlwZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcG9pbnRtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hcHBvaW50bWVudC1mb3JtLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBvaW50bWVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE/OiBCYW5uZXJTZWN0aW9uTW9kZWw7XHJcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XHJcbiAgY29udGVudD86IEJhbm5lckNvbnRlbnRNb2RlbDtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIHN0eWxlcz86IEJhbm5lclN0eWxlc01vZGVsO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBhcHBvaW50bWVudFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja2JhcjogTWF0U25hY2tCYXJcclxuXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgYnVzaW5lc3NJZDogYW55O1xyXG4gIGJ1c2luZXNzTmFtZTogYW55O1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5kYXRhKTtcclxuICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWQgPSB0aGlzLmRlbGV0ZVxyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuICAgIGlmICghdGhpcy5zdHlsZXMgfHwgIXRoaXMuY29udGVudCkgcmV0dXJuO1xyXG4gICAgdGhpcy5idXNpbmVzc0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICB0aGlzLmJ1c2luZXNzTmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYk5hbWVcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc05hbWVcIilcclxuXHJcblxyXG4gICAgLy8gdGhpcy5nZXRBbGxTZXJ2aWNlcygpO1xyXG4gICAgLy8gdGhpcy5zdHlsZXMubGF5b3V0LmJhbm5lckltYWdlRGlzcGxheSA9IHRoaXMuY29udGVudC5pbWFnZS5zaG93SW1hZ2U7XHJcbiAgICB0aGlzLmdldEFsbExvY2F0aW9ucygpO1xyXG5cclxuICB9XHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5sYXlvdXQgfSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcbiAgZ2V0IGdldEp1c3RpZnlDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIFwianVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcIjtcclxuICB9XHJcbiAgZ2V0IGNhbk1lcmdlTmF2YmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGVzPy5tZXJnZTtcclxuICB9XHJcbiAgZ2V0IGlzQm9yZGVybGVzc0ltYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGVzPy5ib3JkZXJMZXNzSW1hZ2UgJiYgKHRoaXMuc3R5bGVzPy5wb3NpdGlvbkxheW91dC52YWx1ZSA9PSBcImxlZnRcIiB8fCB0aGlzLnN0eWxlcz8ucG9zaXRpb25MYXlvdXQudmFsdWUgPT0gXCJyaWdodFwiKTtcclxuICB9XHJcbiAgZ2V0IGdldFBvc2l0aW9uTGF5b3V0KCkge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZXM/LnBvc2l0aW9uTGF5b3V0IH0gYXMgUG9zaXRpb25MYXlvdXRNb2RhbDtcclxuICB9XHJcblxyXG4gIGVkaXRTZWN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG4gIHN0b3BQcm9wYWdhdGlvbihldmVudDogYW55KSB7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuZGFpbG9nYm94KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRGl2RWxlbWVudD4pOiB2b2lkIHtcclxuICAgIHRoaXMubWF0RGlhbG9nLm9wZW4odGVtcGxhdGUsXHJcbiAgICAgIC8vICB7d2lkdGg6JzUwMHB4J31cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLm1hdERpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgaXNNb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVzdHJpY3ROb25OdW1lcmljKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LmNoYXJDb2RlO1xyXG4gICAgaWYgKGNoYXJDb2RlICE9IDApIHtcclxuICAgICAgLy8gQWxsb3cgb25seSBudW1iZXJzXHJcbiAgICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Vc2VyTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eW2EtekEtWlxcc10qJC87XHJcbiAgICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdmFsdWUucmVwbGFjZSgvW15hLXpBLVpcXHNdL2csICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdGhpcy50b1RpdGxlQ2FzZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcd1xcUyovZywgZnVuY3Rpb24gKHR4dCkge1xyXG4gICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXJ2aWNlRGF0YTogYW55O1xyXG4gIHN0YWZmRGF0YTogYW55O1xyXG5cclxuICBjaGFuZ2VMb2NhdGlvbigpIHtcclxuICAgIHRoaXMuZ2V0QWxsU2VydmljZXMoKTtcclxuICAgIHRoaXMuZ2V0QWxsU3RhZmYoKVxyXG4gICAgdGhpcy51cGRhdGVMb2NhdGlvblRpbWluZygpO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5sb2NhdGlvblRpbWluZylcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxvY2F0aW9uVGltaW5nKCkge1xyXG4gICAgdGhpcy5sb2NhdGlvblRpbWluZyA9IFtdO1xyXG4gICAgY29uc3QgZGF5ID0gdGhpcy5nZXREYXkoKTtcclxuICAgIGZvciAobGV0IGxvY2F0aW9uIG9mIHRoaXMubG9jYXRpb25EYXRhKSB7XHJcbiAgICAgIGlmIChsb2NhdGlvbi5pZCA9PT0gdGhpcy5zZWxlY3RlZExvY2F0aW9uKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBsb2NhdGlvbi5zdG9yZVRpbWluZ3NbZGF5LnRvVXBwZXJDYXNlKCldO1xyXG4gICAgICAgIGlmICghZGF0YS5kYXlUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oJ09wcHMgc2hvcCBpcyBjbG9zZWQgb24gc2VsZWN0ZWQgZGF0ZScsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvY2F0aW9uVGltaW5nID0gdGhpcy5nZW5lcmF0ZVRpbWVTbG90cyhkYXRhLnN0YXJ0VGltZSwgZGF0YS5lbmRUaW1lKSB8fCBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGdldERheSgpIHtcclxuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXTtcclxuICAgIHJldHVybiBkYXlzT2ZXZWVrW3RoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlLmdldERheSgpXTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlcnZpY2VzKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VzID0gJydcclxuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmdldEFsbFNlcnZpY2UodGhpcy5idXNpbmVzc0lkLCAxMDAwLCAwLCB0aGlzLnNlbGVjdGVkTG9jYXRpb24pLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gRmlsdGVyIHNlcnZpY2VzIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0YXR1cyAnQUNUSVZFJ1xyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlRGF0YSA9IHJlcy5kYXRhLmRhdGEuZmlsdGVyKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2Uuc3RhdHVzID09PSAnQUNUSVZFJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmljZURhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNlcnZpY2VEYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgICBgTm8gYWN0aXZlIHNlcnZpY2VzIGF2YWlsYWJsZSBmb3IgdGhpcyBidXNpbmVzcy5gLFxyXG4gICAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgYFNlcnZpY2UgaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXHJcbiAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHNlcnZpY2VzOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU3RhZmYoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RhZmYgPSAnJ1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWUgPSAnJ1xyXG4gICAgdGhpcy5nZXRBdmFpbGFibGVTbG90cygpO1xyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsU3RhZmZCeUxvY2F0aW9uKHRoaXMuYnVzaW5lc3NJZCwgMTAwMCwgMCwgdGhpcy5zZWxlY3RlZExvY2F0aW9uLCB0aGlzLnNlbGVjdGVkU2VydmljZXMpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gRmlsdGVyIHNlcnZpY2VzIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0YXR1cyAnQUNUSVZFJ1xyXG4gICAgICAgICAgdGhpcy5zdGFmZkRhdGEgPSByZXMuZGF0YS5kYXRhLmZpbHRlcigoc3RhZmY6IGFueSkgPT4gc3RhZmYuc3RhdHVzID09PSAnQUNUSVZFJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc3RhZmZEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5zdGFmZkRhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgICAgIGBObyBhY3RpdmUgc3RhZmYgYXZhaWxhYmxlIGZvciB0aGlzIGJ1c2luZXNzLmAsXHJcbiAgICAgICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgICBgU3RhZmYgaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXHJcbiAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIHN0YWZmOlwiLCBlcnJvcik7IC8vIEhhbmRsZSBlcnJvcnMgZ3JhY2VmdWxseVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWluRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgYm9va2VkU2xvdHMgPSBuZXcgU2V0KCk7XHJcbiAgbG9jYXRpb25UaW1pbmc6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNoYW5nZURhdGUoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUxvY2F0aW9uVGltaW5nKCk7XHJcbiAgICB0aGlzLmdldEF2YWlsYWJsZVNsb3RzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBdmFpbGFibGVTbG90cygpIHtcclxuICAgIHRoaXMuYm9va2VkU2xvdHMgPSBuZXcgU2V0KClcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBcImxvY2F0aW9uSWRcIjogdGhpcy5zZWxlY3RlZExvY2F0aW9uLFxyXG4gICAgICBcInNlcnZpY2VJZFwiOiB0aGlzLnNlbGVjdGVkU2VydmljZXMsXHJcbiAgICAgIFwic3RhZmZJZFwiOiB0aGlzLnNlbGVjdGVkU3RhZmYsXHJcbiAgICAgIFwiYnVzaW5lc3NJZFwiOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgIFwiYXBwb2ludG1lbnREYXRlXCI6IHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QXZhaWxhYmxlU2xvdHMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAvLyBsZXQgc2VsZWN0ZWREYXRlID0gbW9tZW50KHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKTs7XHJcbiAgICAgIC8vIGZvciAobGV0IHN0YWZmIG9mIHJlcy5kYXRhKSB7XHJcbiAgICAgIC8vICAgaWYoIXN0YWZmLmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSl7XHJcbiAgICAgIC8vICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xyXG4gICAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGlmIChzdGFmZj8uYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBhcHBwb2ludG1lbnQgb2Ygc3RhZmY/LmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSkge1xyXG4gICAgICAvLyAgICAgICBjb25zdCB0aW1lU2xvdHMgPSB0aGlzLmdldFRpbWUoYXBwcG9pbnRtZW50LmFwcG9pbnRtZW50U3RhcnRUaW1lLCBhcHBwb2ludG1lbnQuYXBwb2ludG1lbnRFbmRUaW1lLCAxNSk7XHJcbiAgICAgIC8vICAgICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgICAvLyAgICAgICB0aW1lU2xvdHM/LmZvckVhY2goc2xvdCA9PiB0aGlzLmJvb2tlZFNsb3RzLmFkZChzbG90KSk7XHJcbiAgICAgIC8vICAgICAgIC8vIHRoaXMuYm9va2VkU2xvdHMgPSBuZXcgU2V0KHRpbWVTbG90cyk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYm9va2VkU2xvdHMpXHJcbiAgICAgIC8vIHRoaXMuZ2V0Qm9va2VkU2xvdHMocmVzKTtcclxuICAgICAgdGhpcy5nZXRCb29rZWRTbG90cyhyZXMpO1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBnZXRCb29rZWRTbG90cyhyZXM6IGFueSkge1xyXG4gICAgbGV0IHNlbGVjdGVkRGF0ZSA9IG1vbWVudCh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XHJcblxyXG4gICAgbGV0IHNsb3RzOiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgc3RhZmYgb2YgcmVzLmRhdGEpIHtcclxuICAgICAgaWYgKCFzdGFmZi5ib29rZWRTbG90cz8uW3NlbGVjdGVkRGF0ZV0pIHtcclxuICAgICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2xvdHMucHVzaCguLi5zdGFmZj8uYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKTtcclxuICAgIH1cclxuXHJcbiAgICBzbG90cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5hcHBvaW50bWVudFN0YXJ0VGltZSkuZ2V0VGltZSgpO1xyXG4gICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuYXBwb2ludG1lbnRTdGFydFRpbWUpLmdldFRpbWUoKTtcclxuICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7IC8vIEFzY2VuZGluZyBvcmRlclxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coc2xvdHMpO1xyXG5cclxuICAgIGxldCBzdGFydFRpbWU6IERhdGUgPSBuZXcgRGF0ZShzbG90c1swXS5hcHBvaW50bWVudFN0YXJ0VGltZSk7XHJcbiAgICBsZXQgZW5kVGltZTogRGF0ZSA9IG5ldyBEYXRlKHNsb3RzWzBdLmFwcG9pbnRtZW50RW5kVGltZSk7XHJcblxyXG4gICAgZm9yIChsZXQgYXBwcG9pbnRtZW50IG9mIHNsb3RzKSB7XHJcblxyXG4gICAgICBsZXQgY3VycmVudFN0YXJ0VGltZTogRGF0ZSA9IG5ldyBEYXRlKGFwcHBvaW50bWVudC5hcHBvaW50bWVudFN0YXJ0VGltZSk7XHJcbiAgICAgIGxldCBjdXJyZW50RW5kVGltZTogRGF0ZSA9IG5ldyBEYXRlKGFwcHBvaW50bWVudC5hcHBvaW50bWVudEVuZFRpbWUpO1xyXG5cclxuICAgICAgaWYgKGN1cnJlbnRTdGFydFRpbWUuZ2V0VGltZSgpIDwgZW5kVGltZS5nZXRUaW1lKCkpIHtcclxuICAgICAgICBzdGFydFRpbWUgPSBjdXJyZW50U3RhcnRUaW1lLmdldFRpbWUoKSA+IHN0YXJ0VGltZS5nZXRUaW1lKCkgPyBjdXJyZW50U3RhcnRUaW1lIDogc3RhcnRUaW1lO1xyXG4gICAgICAgIGVuZFRpbWUgPSBjdXJyZW50RW5kVGltZS5nZXRUaW1lKCkgPCBlbmRUaW1lLmdldFRpbWUoKSA/IGN1cnJlbnRFbmRUaW1lIDogZW5kVGltZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB0aW1lU2xvdHMgPSB0aGlzLmdldFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCksIGVuZFRpbWUudG9TdHJpbmcoKSwgMTUpO1xyXG4gICAgICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgICAgIHRpbWVTbG90cz8uZm9yRWFjaChzbG90ID0+IHRoaXMuYm9va2VkU2xvdHMuYWRkKHNsb3QpKTtcclxuXHJcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFN0YXJ0VGltZTtcclxuICAgICAgICBlbmRUaW1lID0gY3VycmVudEVuZFRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aW1lU2xvdHMgPSB0aGlzLmdldFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCksIGVuZFRpbWUudG9TdHJpbmcoKSwgMTUpO1xyXG4gICAgdGltZVNsb3RzLnNwbGljZSh0aW1lU2xvdHMubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICB0aW1lU2xvdHM/LmZvckVhY2goc2xvdCA9PiB0aGlzLmJvb2tlZFNsb3RzLmFkZChzbG90KSk7XHJcblxyXG4gICAgY29uc29sZS5sb2codGhpcy5ib29rZWRTbG90cyk7XHJcbiAgfVxyXG5cclxuICBnZXRUaW1lKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nLCBpbnRlcnZhbE1pbnV0ZXM6IG51bWJlcik6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KTtcclxuICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShlbmQpO1xyXG4gICAgY29uc3Qgc2xvdHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgd2hpbGUgKHN0YXJ0RGF0ZSA8PSBlbmREYXRlKSB7XHJcbiAgICAgIC8vIEZvcm1hdCB0aGUgdGltZSBhcyBuZWVkZWQgKGUuZy4sIFwiMDU6MTUgUE1cIilcclxuICAgICAgbGV0IGhvdXJzID0gc3RhcnREYXRlLmdldEhvdXJzKCk7XHJcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBzdGFydERhdGUuZ2V0TWludXRlcygpO1xyXG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xyXG5cclxuICAgICAgLy8gQ29udmVydCBob3VycyB0byAxMi1ob3VyIGZvcm1hdCBhbmQgcGFkIHdpdGggJzAnIGlmIG5lZWRlZFxyXG4gICAgICBob3VycyA9ICgoaG91cnMgKyAxMSkgJSAxMikgKyAxO1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRIb3VycyA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgY29uc3QgZm9ybWF0dGVkVGltZSA9IGAke2Zvcm1hdHRlZEhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xyXG5cclxuICAgICAgc2xvdHMucHVzaChmb3JtYXR0ZWRUaW1lKTtcclxuXHJcbiAgICAgIC8vIEluY3JlbWVudCB0aW1lIGJ5IHRoZSBpbnRlcnZhbFxyXG4gICAgICBzdGFydERhdGUuc2V0TWludXRlcyhzdGFydERhdGUuZ2V0TWludXRlcygpICsgaW50ZXJ2YWxNaW51dGVzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2xvdHM7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVRpbWVTbG90cyhzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nKSB7XHJcblxyXG4gICAgY29uc29sZS5sb2coc3RhcnRUaW1lLCBlbmRUaW1lKVxyXG4gICAgdGhpcy5hdmFpbGFibGVUaW1lcyA9IFtdOyAvLyBDbGVhciBwcmV2aW91cyB0aW1lc1xyXG5cclxuICAgIGlmICghc3RhcnRUaW1lIHx8ICFlbmRUaW1lKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJTdGFydFRpbWUgb3IgRW5kVGltZSBpcyB1bmRlZmluZWQ6XCIsIHN0YXJ0VGltZSwgZW5kVGltZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3QgW3N0YXJ0SG91ciwgc3RhcnRNaW51dGUsIHN0YXJ0UGVyaW9kXSA9IHRoaXMucGFyc2VUaW1lKHN0YXJ0VGltZSk7XHJcbiAgICBjb25zdCBbZW5kSG91ciwgZW5kTWludXRlLCBlbmRQZXJpb2RdID0gdGhpcy5wYXJzZVRpbWUoZW5kVGltZSk7XHJcblxyXG4gICAgbGV0IGN1cnJlbnRIb3VyOiBudW1iZXIgPSBzdGFydEhvdXI7XHJcbiAgICBsZXQgY3VycmVudE1pbnV0ZTogbnVtYmVyID0gc3RhcnRNaW51dGU7XHJcbiAgICBsZXQgY3VycmVudFBlcmlvZCA9IHN0YXJ0UGVyaW9kO1xyXG5cclxuXHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRIb3VyID0gdGhpcy5wYWRaZXJvKGN1cnJlbnRIb3VyID09PSAwID8gMTIgOiBjdXJyZW50SG91cik7XHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZE1pbnV0ZSA9IHRoaXMucGFkWmVybyhjdXJyZW50TWludXRlKTtcclxuICAgICAgY29uc3QgdGltZVN0cmluZyA9IGAke2Zvcm1hdHRlZEhvdXJ9OiR7Zm9ybWF0dGVkTWludXRlfSAke2N1cnJlbnRQZXJpb2R9YDtcclxuXHJcbiAgICAgIHRoaXMuYXZhaWxhYmxlVGltZXMucHVzaCh0aW1lU3RyaW5nKTtcclxuXHJcbiAgICAgIC8vIEluY3JlbWVudCB0aW1lIGJ5IDE1IG1pbnV0ZXNcclxuICAgICAgY3VycmVudE1pbnV0ZSArPSAxNTtcclxuICAgICAgaWYgKGN1cnJlbnRNaW51dGUgPT09IDYwKSB7XHJcbiAgICAgICAgY3VycmVudE1pbnV0ZSA9IDA7XHJcbiAgICAgICAgY3VycmVudEhvdXIgPSAoY3VycmVudEhvdXIgJSAxMikgKyAxO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XHJcbiAgICAgICAgICBjdXJyZW50UGVyaW9kID0gY3VycmVudFBlcmlvZCA9PT0gJ0FNJyA/ICdQTScgOiAnQU0nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU3RvcCB0aGUgbG9vcCB3aGVuIHJlYWNoaW5nIHRoZSBlbmQgdGltZVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY3VycmVudEhvdXIgPT09IGVuZEhvdXIgJiZcclxuICAgICAgICBjdXJyZW50TWludXRlID09PSBlbmRNaW51dGUgJiZcclxuICAgICAgICBjdXJyZW50UGVyaW9kID09PSBlbmRQZXJpb2RcclxuICAgICAgKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZVRpbWVzO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VUaW1lKHRpbWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgc3RyaW5nXSB7XHJcbiAgICBpZiAoIXRpbWUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlRpbWUgaXMgdW5kZWZpbmVkIG9yIG51bGw6XCIsIHRpbWUpO1xyXG4gICAgICByZXR1cm4gWzAsIDAsICdBTSddOyAvLyBEZWZhdWx0IG9yIGZhbGxiYWNrIHZhbHVlc1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFt0aW1lU3RyaW5nLCBwZXJpb2RdID0gdGltZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBbaG91ciwgbWludXRlXSA9IHRpbWVTdHJpbmcuc3BsaXQoXCI6XCIpLm1hcChudW0gPT4gcGFyc2VJbnQobnVtLCAxMCkpOyAvLyBFbnN1cmVzIHBhcnNlZCBhcyBudW1iZXJzXHJcbiAgICByZXR1cm4gW2hvdXIgJSAxMiwgbWludXRlLCBwZXJpb2RdO1xyXG4gIH1cclxuXHJcblxyXG4gIGxvY2F0aW9uRGF0YTogYW55O1xyXG4gIHNlbGVjdGVkTG9jYXRpb246IHN0cmluZyA9IFwiXCI7XHJcbiAgZ2V0QWxsTG9jYXRpb25zKCkge1xyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsTG9jYXRpb24odGhpcy5idXNpbmVzc0lkLCAxMDAwLCAwKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuZGF0YS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMubG9jYXRpb25EYXRhID0gcmVzLmRhdGEuZGF0YS5maWx0ZXIoKHNlcnZpY2U6IGFueSkgPT4gc2VydmljZS5zdGF0dXMgPT09ICdBQ1RJVkUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXHJcbiAgICAgICAgICAgIGBMb2NhdGlvbiBpcyBub3QgY3JlYXRlZCB5ZXQgd2l0aCB0aGlzIGJ1c2luZXNzYCxcclxuICAgICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBzZXJ2aWNlczpcIiwgZXJyb3IpOyAvLyBIYW5kbGUgZXJyb3JzIGdyYWNlZnVsbHlcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xyXG4gIH1cclxuXHJcbiAgLy8gVmFyaWFibGVzXHJcbiAgZm9ybWF0dGVkRGF0ZTogYW55O1xyXG4gIHRpbWVTbG90c0RhdGE6IGFueTtcclxuICBmb3JtYXR0ZWRUaW1lSW50ZXJ2YWxzOiB7IHN0YXJ0VGltZTogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAvLyBGdW5jdGlvbiB0byBnZXQgdGltZSBzbG90c1xyXG4gIGdldFRpbWVTbG90cygpIHtcclxuICAgIHRoaXMuZm9ybWF0dGVkRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkpO1xyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsVGltZVNsb3RzKHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiwgdGhpcy5mb3JtYXR0ZWREYXRlKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMudGltZVNsb3RzRGF0YSA9IHJlcztcclxuICAgICAgICAgIHRoaXMuZm9ybWF0dGVkVGltZUludGVydmFscyA9IHRoaXMudGltZVNsb3RzRGF0YS5tYXAoKGludGVydmFsOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHN0YXJ0VGltZTogaW50ZXJ2YWwuc3RhcnRUaW1lLnNsaWNlKDAsIDUpLCAvLyBHZXQgSEg6TU1cclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyVGltZVNsb3RzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgYExvY2F0aW9uIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxyXG4gICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICB7IGR1cmF0aW9uOiAxNTAwIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgc2VydmljZXM6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGZpbHRlciB0aW1lIHNsb3RzXHJcbiAgZmlsdGVyVGltZVNsb3RzKCkge1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlKTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgZGF0ZSBpcyB0b2RheVxyXG4gICAgaWYgKHNlbGVjdGVkRGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gbm93LnRvRGF0ZVN0cmluZygpKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93LmdldEhvdXJzKCkgKiA2MCArIG5vdy5nZXRNaW51dGVzKCk7XHJcblxyXG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSB0aW1lIHNsb3RzIHRoYXQgYXJlIGJlZm9yZSB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIHRoaXMuZm9ybWF0dGVkVGltZUludGVydmFscyA9IHRoaXMuZm9ybWF0dGVkVGltZUludGVydmFscy5maWx0ZXIodGltZVNsb3QgPT4ge1xyXG4gICAgICAgIGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lU2xvdC5zdGFydFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcclxuICAgICAgICBjb25zdCBzbG90VGltZSA9IGhvdXJzICogNjAgKyBtaW51dGVzOyAvLyBDb252ZXJ0IHNsb3QgdGltZSB0byB0b3RhbCBtaW51dGVzXHJcbiAgICAgICAgcmV0dXJuIHNsb3RUaW1lID4gY3VycmVudFRpbWU7IC8vIE9ubHkgc2hvdyBzbG90cyBhZnRlciB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGF0ZUZpbHRlciA9IChkYXRlOiBEYXRlIHwgbnVsbCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgZGF5ID0gZGF0ZT8uZ2V0RGF5KCk7XHJcbiAgICAvLyBEaXNhYmxlIFN1bmRheXNcclxuICAgIHJldHVybiBkYXkgIT09IDA7XHJcbiAgfTtcclxuXHJcbiAgc2VsZWN0ZWRTZXJ2aWNlczogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0ZWRTdGFmZjogc3RyaW5nID0gJyc7XHJcblxyXG4gIENyZWF0ZURhdGE6IGFueSA9IHtcclxuICAgIC8vYXBwb2ludG1lbnRJZDogXCJcIixcclxuICAgIGJ1c2luZXNzOiB7XHJcbiAgICAgIGlkOiBcIlwiLFxyXG4gICAgICBuYW1lOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgY2xpZW50TmFtZTogXCJcIixcclxuICAgIG1vYmlsZTogXCJcIixcclxuICAgIHNjaGVkdWxlZERhdGU6IG5ldyBEYXRlKCksXHJcbiAgICBzZXJ2aWNlczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgc3RhZmY6IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgIG5hbWU6IFwiXCJcclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIGxvY2F0aW9uOlxyXG4gICAge1xyXG4gICAgICBpZDogXCJcIixcclxuICAgICAgbmFtZTogXCJcIlxyXG4gICAgfVxyXG4gICAgLFxyXG4gICAgc2NoZWR1bGVkVGltZTogXCJcIixcclxuICAgIG1lc3NhZ2U6IFwiXCJcclxuICB9XHJcblxyXG4gIHByZXBhcmVDcmVhdGVEYXRhKCkge1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnNlcnZpY2VzID0gW107XHJcbiAgICB0aGlzLkNyZWF0ZURhdGEuc3RhZmYgPSBbXTtcclxuICAgIHRoaXMuc2VydmljZURhdGEuZm9yRWFjaCgoc2VydmljZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkpIHtcclxuICAgICAgICB0aGlzLkNyZWF0ZURhdGEuc2VydmljZXMucHVzaCh7XHJcbiAgICAgICAgICBpZDogc2VydmljZS5pZCxcclxuICAgICAgICAgIG5hbWU6IHNlcnZpY2UubmFtZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdGFmZkRhdGEuZm9yRWFjaCgoc3RhZmY6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFN0YWZmLmluY2x1ZGVzKHN0YWZmLmlkKSkge1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zdGFmZi5wdXNoKHtcclxuICAgICAgICAgIGlkOiBzdGFmZi5pZCxcclxuICAgICAgICAgIG5hbWU6IHN0YWZmLm5hbWVcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByZXBhcmVMb2NhdGlvbkRhdGEoKSB7XHJcblxyXG4gICAgdGhpcy5sb2NhdGlvbkRhdGEuZm9yRWFjaCgobG9jYXRpb246IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZExvY2F0aW9uID09IGxvY2F0aW9uLmlkKSB7XHJcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLmxvY2F0aW9uLmlkID0gbG9jYXRpb24uaWRcclxuICAgICAgICB0aGlzLkNyZWF0ZURhdGEubG9jYXRpb24ubmFtZSA9IGxvY2F0aW9uLm5hbWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNyZWF0ZUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGF2YWlsYWJsZVRpbWVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBwYWRaZXJvKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHZhbHVlIDwgMTAgPyBgMCR7dmFsdWV9YCA6IGAke3ZhbHVlfWA7XHJcbiAgfVxyXG4gIGlzVGltZUdyZWF0ZXJUaGFuQ3VycmVudCh0aW1lOiBzdHJpbmcsIGN1cnJlbnRIb3VyOiBudW1iZXIsIGN1cnJlbnRNaW51dGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgW2hvdXIsIG1pbnV0ZV0gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XHJcbiAgICByZXR1cm4gKGhvdXIgPiBjdXJyZW50SG91cikgfHwgKGhvdXIgPT09IGN1cnJlbnRIb3VyICYmIG1pbnV0ZSA+PSBjdXJyZW50TWludXRlKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFwcG9pbnRtZW50KCkge1xyXG4gICAgdGhpcy5wcmVwYXJlQ3JlYXRlRGF0YSgpO1xyXG4gICAgdGhpcy5wcmVwYXJlTG9jYXRpb25EYXRhKCk7XHJcbiAgICB0aGlzLkNyZWF0ZURhdGEuYnVzaW5lc3MuaWQgPSB0aGlzLmJ1c2luZXNzSWQ7XHJcbiAgICB0aGlzLkNyZWF0ZURhdGEuYnVzaW5lc3MubmFtZSA9IHRoaXMuYnVzaW5lc3NOYW1lO1xyXG5cclxuICAgIGlmICh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkge1xyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSA9IG1vbWVudCh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkVGltZSA9IHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWRUaW1lLnRvTG93ZXJDYXNlKClcclxuICAgIHRoaXMuY3JlYXRlTG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmNyZWF0ZUFwcG9pbnRtZW50KHRoaXMuQ3JlYXRlRGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gICAgICAgIHRoaXMucmVGaWx0ZXJEYXRhKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXHJcbiAgICAgICAgICBgQ29uZ3JhdHVsYXRpb25zIHlvdXIgQXBwb2ludG1lbnQgaGFzIEJvb2tlZGAsXHJcbiAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgYEludGVybmFsIFNlcnZlciBFcnJvcmAsXHJcbiAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgQ3JlYXRpb246XCIsIGVycm9yKTsgLy8gSGFuZGxlIGVycm9ycyBncmFjZWZ1bGx5XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmVGaWx0ZXJEYXRhKCkge1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhID0ge1xyXG4gICAgICAvL2FwcG9pbnRtZW50SWQ6IFwiXCIsXHJcbiAgICAgIGJ1c2luZXNzOiB7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICB9LFxyXG4gICAgICBjbGllbnROYW1lOiBcIlwiLFxyXG4gICAgICBtb2JpbGU6IFwiXCIsXHJcbiAgICAgIHNjaGVkdWxlZERhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgIHNlcnZpY2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgICBzdGFmZjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgbG9jYXRpb246XHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH1cclxuICAgICAgLFxyXG4gICAgICBzY2hlZHVsZWRUaW1lOiBcIlwiLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gPSAnJztcclxuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcyA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0YWZmID0gJydcclxuICB9XHJcblxyXG4gIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEubW9iaWxlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gIT09ICcnICYmXHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkVGltZSAhPT0gJydcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gIFtuZ0NsYXNzXT1cInsnbWVyZ2VOYXZiYXInOiBjYW5NZXJnZU5hdmJhciAmJiBpbmRleCA9PSAxLCAnanVzdGlmeS1jb250ZW50LWJldHdlZW4gZC1mbGV4JzogaXNCb3JkZXJsZXNzSW1hZ2V9XCJcclxuICBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgc3R5bGU9XCJvdmVyZmxvdy14OiBoaWRkZW47XCIgc2ltcG9Ib3ZlclxyXG4gIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkltYWdlU2VjdGlvblwiPjwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgY2xhc3M9XCJweC00IHB5LTVcIiBbbmdDbGFzc109XCJ7J2NvbC1sZy02IGNvbC14eGwtNic6IGlzQm9yZGVybGVzc0ltYWdlLCAndy0xMDAgY29sLXh4bC04JzogIWlzQm9yZGVybGVzc0ltYWdlfVwiXHJcbiAgICBbaWRdPVwiZGF0YT8uaWRcIiAjbWFpbkNvbnRhaW5lciBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTUganVzdGlmeS1jb250ZW50LXN0YXJ0XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQW5pbWF0aW9uXT1cInN0eWxlcz8uYW5pbWF0aW9uXCJcclxuICAgICAgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCIgW3NpbXBvUG9zaXRpb25MYXlvdXREaXJlY3RpdmVdPVwic3R5bGVzPy5wb3NpdGlvbkxheW91dFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2FsaWduLWl0ZW1zLXN0cmV0Y2gnOiBzdHlsZXM/LnBvc2l0aW9uTGF5b3V0Py52YWx1ZSA9PT0gJ2xlZnQnIHx8IHN0eWxlcz8ucG9zaXRpb25MYXlvdXQ/LnZhbHVlID09PSAncmlnaHQnLCAnZmxleC1sZy1yb3cnOiB0cnVlIH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBjb2wtc20tOCBjb2wtbGctNlwiICpuZ0lmPVwiY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZSAmJiAhaXNCb3JkZXJsZXNzSW1hZ2VcIlxyXG4gICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIj5cclxuICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJjb250ZW50Py5pbWFnZT8udXJsXCIgW3NpbXBvSW1hZ2VEaXJlY3RpdmVdPVwic3R5bGVzPy5pbWFnZVwiIFtpZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICBbc2ltcG9PYmplY3RQb3NpdGlvbl09XCJjb250ZW50Py5pbWFnZT8ucG9zaXRpb25cIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCJcclxuICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCsoY29udGVudD8uaW1hZ2U/LmlkIHx8ICcnKVwiIGNsYXNzPVwiZC1ibG9jayB3LTEwMCBpbnNpZGVJbWdcIiBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyO1wiXHJcbiAgICAgICAgICBbYWx0XT1cImNvbnRlbnQ/LmltYWdlPy5hbHRUZXh0XCIgd2lkdGg9XCI3MDBcIiBoZWlnaHQ9XCI1MDBcIiBsb2FkaW5nPVwibGF6eVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtMTVcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnY29sLWxnLTEyJzogaXNCb3JkZXJsZXNzSW1hZ2UsICdjb2wtbGctNic6ICFpc0JvcmRlcmxlc3NJbWFnZX1cIlxyXG4gICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9Db250ZW50QWxpZ25tZW50XT1cInN0eWxlcz8uY29udGVudEFsaWdubWVudFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8uaW5wdXRUZXh0XCI+XHJcbiAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiaXRlbS52YWx1ZSB8IHNhbml0aXplSHRtbFwiIGNsYXNzPVwidGV4dC1lbGVtZW50XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5sYWJlbCA9PT0gJ0hlYWRpbmcnID8gJ2hlYWRpbmctbGFyZ2UgbGgtMiBtYi0zJyA6ICdib2R5LWxhcmdlJ1wiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8ubGlzdEl0ZW0/LmRhdGFcIiBjbGFzcz1cImNhcmRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRfd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyX2NhcmQgdmlzaWJsZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWNvbmQtcGFydC1jYXJkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlyc3QtcGFydC1jYXJkXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pbnB1dFRleHRbMF0ubGFiZWw9PT0gJ0hlYWRpbmcnID8gJ2hlYWRpbmctbGFyZ2UgbGgtMiBtYi0zJyA6ICdib2R5LWxhcmdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgY2xhc3M9XCJ0aWNrLWltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy85MzM5OTdjMTcxODc5MDMwMzEyNzkwNzU5OGMxNjk2MDYzMDYxOTAwZ3JlZW5fdmVyaWZpZWRfaW1hZ2UucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJzb21ldGhpbmdcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5pbnB1dFRleHRbMF0udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhPy5hY3Rpb24gJiYgZGF0YT8uYWN0aW9uPy5kaXNwbGF5XCIgY2xhc3M9XCJidXR0b24tZGlzcGxheVwiXHJcbiAgICAgICAgICBbc2ltcG9Db250YWluZXJBbGlnbm1lbnRdPVwic3R5bGVzTGF5b3V0XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGF0YT8uYWN0aW9uPy5idXR0b25zXCI+XHJcbiAgICAgICAgICAgIDxhcHAtYnV0dG9uLWVsZW1lbnQgW2J1dHRvbkNvbnRlbnRdPVwiYnV0dG9uLmNvbnRlbnRcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uLnN0eWxlc1wiIFtidXR0b25JZF09XCJidXR0b24uaWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuZGFpbG9nYm94KGRpYWxvZ0JveClcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPjwvYXBwLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGRpdiBzdHlsZT1cIiB3aWR0aDogMTAwJTsgaGVpZ2h0OiA1MDBweDtcIj5cclxuICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiAgc3JjPVwiLi4vLi4vYXNzZXRzL2RpdmlkZXIuc3ZnXCIgc3R5bGU9XCJjbGlwLXBhdGg6IHBvbHlnb24oMCA1NSUsIDEwMCUgMCwgMTAwJSAxMDAlLCAwJSAxMDAlKTsgYmFja2dyb3VuZC1jb2xvcjogcmVkO1wiPlxyXG4gIDwvZGl2PiAtLT5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdCAmJiBmYWxzZSB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiXHJcbiAgICAgIFtpc01lcmdlZF09XCJzdHlsZXM/Lm1lcmdlID8/IGZhbHNlXCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZGVsZXRlfVwiPlxyXG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNJbWFnZVNlY3Rpb24+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMCBjb2wtc20tOCBjb2wtbGctNlwiXHJcbiAgICBbbmdTdHlsZV09XCJ7J3dpZHRoJzogc3R5bGVzPy5wb3NpdGlvbkxheW91dD8udmFsdWUgPT09ICdyaWdodCcgPyAnZml0LWNvbnRlbnQnIDogJyd9XCJcclxuICAgIHN0eWxlPVwicGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7XCIgKm5nSWY9XCJjb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlICYmIGlzQm9yZGVybGVzc0ltYWdlO1wiXHJcbiAgICBbc2ltcG9Cb3JkZXJsZXNzXT1cImdldFBvc2l0aW9uTGF5b3V0XCI+XHJcbiAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJjb250ZW50Py5pbWFnZT8udXJsXCIgY2xhc3M9XCJkLWJsb2NrIGltZy1mbHVpZCBoLTEwMCB3LTEwMFwiXHJcbiAgICAgIFthbHRdPVwiY29udGVudD8uaW1hZ2U/LmFsdFRleHRcIiB3aWR0aD1cIjcwMFwiIGhlaWdodD1cIjUwMFwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tIERpYWxvZyB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dCb3ggY2xhc3M9XCJkaWFsb2dib3hcIj5cclxuICA8ZGl2IGNsYXNzPVwiYXBwb2ludG1lbnQtZm9ybVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci1zZWN0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItbGVmdC1zaWRlXCI+XHJcbiAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDtcIj5Cb29rIGFuIEFwcG9pbnRtZW50PC9oMj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItcmlnaHQtc2lkZVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtbW9iaWxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPk5hbWU8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE5hbWVcIiBwYXR0ZXJuPVwiW2EtekEtWiBdKlwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLmNsaWVudE5hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJvblVzZXJOYW1lQ2hhbmdlKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TW9iaWxlIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXRTdHlsZVwiIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgWW91ciBNb2JpbGUgTnVtYmVyXCJcclxuICAgICAgICAgICAgICBwYXR0ZXJuPVwiXlswLTldezEwLDE1fSRcIiBtYXhsZW5ndGg9XCIxNVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoa2V5cHJlc3MpPVwicmVzdHJpY3ROb25OdW1lcmljKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiQ3JlYXRlRGF0YS5tb2JpbGVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLW1vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5Mb2NhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExvY2F0aW9uXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZExvY2F0aW9uXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9jYXRpb24oKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsb2NhdGlvbiBvZiBsb2NhdGlvbkRhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJsb2NhdGlvbi5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBsb2NhdGlvbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPlNlcnZpY2U8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTZXJ2aWNlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlcnZpY2VzXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZ2V0QWxsU3RhZmYoKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZXJ2aWNlIG9mIHNlcnZpY2VEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwic2VydmljZS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBzZXJ2aWNlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+U3RhZmY8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTdGFmZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTdGFmZlwiICAobmdNb2RlbENoYW5nZSk9XCJnZXRBdmFpbGFibGVTbG90cygpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YWZmIG9mIHN0YWZmRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInN0YWZmLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHN0YWZmLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+RGF0ZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEYXRlXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZURhdGUoKVwiIFttaW5dPVwibWluRGF0ZVwiXHJcbiAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+VGltZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExvY2F0aW9uXCIgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRpbWUgb2YgbG9jYXRpb25UaW1pbmdcIiBbdmFsdWVdPVwidGltZVwiIFtkaXNhYmxlZF09XCJib29rZWRTbG90cy5oYXModGltZSlcIj5cclxuICAgICAgICAgICAgICAgIHt7IHRpbWUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdWxsLW1lc3NhZ2Utc2VjdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXNpbmVzcy1maWVsZC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPk1lc3NhZ2U8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE5hbWVcIiBwYXR0ZXJuPVwiW2EtekEtWiBdKlwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLm1lc3NhZ2VcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tc2VjdGlvblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tc2VjdGlvblwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJvb2tpbmctYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCIgKGNsaWNrKT1cImNyZWF0ZUFwcG9pbnRtZW50KClcIj5cclxuICAgICAgICAgICAgQm9vayBBcHBvaW50bWVudFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -7182,7 +7182,7 @@ class AppointmentFormComponent extends BaseSection {
7182
7182
  for (let apppointment of slots) {
7183
7183
  let currentStartTime = new Date(apppointment.appointmentStartTime);
7184
7184
  let currentEndTime = new Date(apppointment.appointmentEndTime);
7185
- if (currentStartTime.getTime() <= endTime.getTime()) {
7185
+ if (currentStartTime.getTime() < endTime.getTime()) {
7186
7186
  startTime = currentStartTime.getTime() > startTime.getTime() ? currentStartTime : startTime;
7187
7187
  endTime = currentEndTime.getTime() < endTime.getTime() ? currentEndTime : endTime;
7188
7188
  }
@@ -7363,9 +7363,10 @@ class AppointmentFormComponent extends BaseSection {
7363
7363
  this.appointmentService.createAppointment(this.CreateData).subscribe((res) => {
7364
7364
  if (res) {
7365
7365
  this.closeDialog();
7366
+ this.reFilterData();
7366
7367
  this.createLoader = false;
7367
- this.snackbar.open(`Appointment is Created`, 'Close', {
7368
- duration: 1500
7368
+ this.snackbar.open(`Congratulations your Appointment has Booked`, 'Close', {
7369
+ duration: 3000
7369
7370
  });
7370
7371
  }
7371
7372
  }, (error) => {
@@ -7376,6 +7377,39 @@ class AppointmentFormComponent extends BaseSection {
7376
7377
  console.error("Error fetching Creation:", error); // Handle errors gracefully
7377
7378
  });
7378
7379
  }
7380
+ reFilterData() {
7381
+ this.CreateData = {
7382
+ //appointmentId: "",
7383
+ business: {
7384
+ id: "",
7385
+ name: ""
7386
+ },
7387
+ clientName: "",
7388
+ mobile: "",
7389
+ scheduledDate: new Date(),
7390
+ services: [
7391
+ {
7392
+ id: "",
7393
+ name: ""
7394
+ }
7395
+ ],
7396
+ staff: [
7397
+ {
7398
+ id: "",
7399
+ name: ""
7400
+ }
7401
+ ],
7402
+ location: {
7403
+ id: "",
7404
+ name: ""
7405
+ },
7406
+ scheduledTime: "",
7407
+ message: ""
7408
+ };
7409
+ this.selectedLocation = '';
7410
+ this.selectedServices = '';
7411
+ this.selectedStaff = '';
7412
+ }
7379
7413
  isFormValid() {
7380
7414
  return this.CreateData.clientName !== '' &&
7381
7415
  this.CreateData.mobile !== '' &&