@prutech/compliance 1.0.224 → 1.0.226

Sign up to get free protection for your applications and to get access to all the features.
@@ -804,7 +804,7 @@ export class ParticipantTimesheetComponent extends AbstractComponent {
804
804
  return moment(completedDate).isSameOrAfter(moment(), 'day');
805
805
  }
806
806
  isVisible() {
807
- let res = false;
807
+ let res = true;
808
808
  forEach(this.assignments, (assignment) => {
809
809
  if (this.details.isDue || this.details.isCurrent) {
810
810
  res = !this.isAttestedCheckValue ? assignment.isSelfAttestedSchool : false;
@@ -880,11 +880,11 @@ export class ParticipantTimesheetComponent extends AbstractComponent {
880
880
  }
881
881
  }
882
882
  ParticipantTimesheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ParticipantTimesheetComponent, deps: [{ token: i1.TimeKeepingDetailsService }, { token: i2.ParticipantChangeStatusService }, { token: i0.ChangeDetectorRef }, { token: i3.TabService }, { token: i4.Router }, { token: i5.UserService }, { token: i6.MatDialog }, { token: i7.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
883
- ParticipantTimesheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ParticipantTimesheetComponent, selector: "prutech-participant-timesheet", inputs: { isAttestedCheckValue: "isAttestedCheckValue" }, usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-around start\">\r\n <div fxFlex=\"100%\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"time-sheet-details\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"5%\" fxLayoutAlign=\"end center\">\r\n <mat-icon class=\"material-icons-outlined primary-icon\" [ngClass]=\"{ 'primary-icon': !isBackDisable(), 'grey-icon': isBackDisable() }\"\r\n (click)=\"loadPastCycle()\">arrow_back_ios\r\n </mat-icon>\r\n </div>\r\n <div fxFlex=\"60%\" fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <mat-label class=\"label time-sheet-header\">\r\n Timesheet Cycle <span class=\"left-label\">{{ timeCycleDisplay }}</span>\r\n </mat-label>\r\n </div>\r\n <mat-icon fxFlex=\"5%\" class=\"material-icons-outlined\" [ngClass]=\"{ 'primary-icon': !isForwardDisable(), 'grey-icon': isForwardDisable() }\"\r\n (click)=\"loadForwardCycle()\">\r\n arrow_forward_ios\r\n </mat-icon>\r\n </div>\r\n <ng-container *ngFor=\"let assignment of assignments;let i=index\">\r\n <div fxFlex fxLayoutAlign=\"center center\" class=\"time-sheet-row border-bottom padding\">\r\n <div *ngIf=\"isHoursExceeded(assignment)\" class=\"warning-icon\">\r\n <mat-icon>error</mat-icon>\r\n <span> HOURS EXCEEDED </span>\r\n </div>\r\n\r\n <strong fxFlex=\"50%\" fxLayoutAlign=\"end center\">\r\n ASSIGNMENT {{ i+1 }} ATTRIBUTES\r\n </strong>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" [disabled] = \"!this.details.isDue\"\r\n (click)=\"onClickConciliate(assignment)\">\r\n <span>DO NOT CONCILIATE</span>\r\n <br>\r\n <sub>({{ assignment?.doNotConciliateCounter }} REMAINING)</sub>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" (click)=\"openPCS(assignment)\" \r\n [disabled]=\"isPcsDisabled(assignment)\">\r\n PARTICIPANT CHANGE OF STATUS\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"participant-details time-sheet-row border-bottom padding\">\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Site Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.siteName?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Type</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentType?.displayValue }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Status</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStatus?.displayValue\r\n }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Start Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStartDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment End Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentEndDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hour Group</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourGroup }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hours Assigned</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourAssigned }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Skill Code</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.skillCode?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Course Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.courseName?.displayValue}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"left-label\">\r\n <mat-icon fxFlex=\"10%\" class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"isVisible()\" (click)=\"addActivity(assignment)\">add_circle\r\n </mat-icon>\r\n <mat-form-field fxFlex=\"90%\" appearance=\"outline\" class=\"left-label-2 activity-form-field\" floatLabel=\"auto\">\r\n <mat-label>Select Activity</mat-label>\r\n <mat-select [formControl]=\"control\" [disabled]=\"!isVisible()\">\r\n <mat-option *ngFor=\"let activity of assignment.filteredActivities\" [value]=\"activity\">\r\n <span [title]=\"activity?.displayValue\">\r\n {{ activity?.displayValue }}\r\n </span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n\r\n <div fxFlex=\"12%\" *ngFor=\"let item of assignment.currentCycleDates\" class=\"time-label\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\">\r\n <div>{{ item?.dayOfWeek }}</div>\r\n <div>{{ item?.date | date: dateFormat }}</div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"12%\" class=\"time-label\"><span>Weekly</span></div>\r\n\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!!assignment.formGroup\">\r\n <form [formGroup]=\"assignment.formGroup\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"20px\"\r\n class=\"time-sheet-row\" *ngFor=\"let item of assignment.timesheetByActivity\">\r\n <div fxFlex=\"15%\" class=\"left-label\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"isVisible()\" (click)=\"removeActivity(item?.id, assignment)\">remove_circle\r\n </mat-icon>\r\n <span class=\"left-label-2\">{{ item?.name }}</span>\r\n </div>\r\n <div formGroupName=\"{{item?.id}}\" fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field fxFlex=\"12%\" appearance=\"outline\" *ngFor=\"let path of dayOfWeeks\" class=\"time-input\">\r\n <input matInput [formControlName]=\"path\" [readonly]=\"!isAttestedCheckValue?assignment.isSelfAttestedSchool:false\" (ngModelChange)=\"updateHours($event, item?.id, path, assignment)\" />\r\n <mat-error *ngIf=\"!!getErrorMessage(item?.id, path, assignment)\">{{ getErrorMessage(item?.id, path,\r\n assignment)\r\n }}</mat-error>\r\n </mat-form-field>\r\n <span fxFlex=\"12%\" class=\"time-label\">{{ getSum(item) }}</span>\r\n </div>\r\n </form>\r\n </ng-container>\r\n\r\n <!--Total-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" class=\"left-label\" [ngClass]=\"{ 'total': isVisible() }\"><span class=\"left-label-2\">Daily\r\n Total</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <div fxFlex=\"12%\" *ngFor=\"let path of dayOfWeeks\" class=\"time-label\">{{ assignment?.dailyTotal[path] }}</div>\r\n <div fxFlex=\"12%\" class=\"time-label\">{{ getTotalSum( assignment ) }}</div>\r\n </div>\r\n </div>\r\n <!--Carfare-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\"><span>Carfare</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.carfareFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.carfareModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"item?.isDisable\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option [value]=\"defaultCarfareOption\">N/A</mat-option>\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n <!--Assignment Mode-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\">\r\n <span>Assignment Mode\r\n <span class=\"prutech-dynamic-button-mandatory\">*</span>\r\n </span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.assignmentModeFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.assignmentModeModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"!isVisible()\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"time-sheet-comment\">\r\n <div *ngIf=\"showDcMessage()\" class=\"warning-text\">\r\n <span>{{ this.getDcMessage() }}</span>\r\n </div>\r\n <div *ngIf=\"isParticipantChangeOfStatus()\" class=\"warning-text\">\r\n <span>{{ this.details?.programAlert?.pcsType?.displayValue }} PCS</span><br>\r\n <span>Performed on {{ this.details?.programAlert?.submittedOn | date: 'MM/dd/yyyy'}}</span><br>\r\n <span>Reason: {{ this.details?.programAlert?.reason?.displayValue }}</span><br>\r\n <span class=\"comment\">{{ this.details?.programAlert?.comments }}</span>\r\n </div>\r\n <span>- All hours entered into SEAMS are subject to audit and require back up documentation, either thru separate\r\n manual or electronic tracking which matches the hours submitted for each client. </span><br>\r\n <span *ngIf=\"!!timeFrameMessage\">- Data Entry must be completed by {{ timeFrameMessage }}.</span>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"30px\">\r\n <button mat-flat-button (click)=\"exit()\">EXIT</button>\r\n <button mat-raised-button color=\"primary\" *ngIf=\"isVisible()\" (click)=\"validateAndSave()\" [disabled]=\"isFormInValid()\">SAVE\r\n </button>\r\n </div>\r\n <div *ngIf=\"showDeficitHoursMessage\" class=\"save-warning\" fxLayoutAlign=\"center center\">\r\n <mat-icon>error</mat-icon>\r\n <span> Total weekly hours entered have a deficit subject to infraction. </span>\r\n </div>\r\n</div>", styles: [""], components: [{ type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i13.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i13.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i13.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i13.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.MatLabel, selector: "mat-label" }, { type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }], pipes: { "date": i14.DatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
883
+ ParticipantTimesheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ParticipantTimesheetComponent, selector: "prutech-participant-timesheet", inputs: { isAttestedCheckValue: "isAttestedCheckValue" }, usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-around start\">\r\n <div fxFlex=\"100%\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"time-sheet-details\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"5%\" fxLayoutAlign=\"end center\">\r\n <mat-icon class=\"material-icons-outlined primary-icon\" [ngClass]=\"{ 'primary-icon': !isBackDisable(), 'grey-icon': isBackDisable() }\"\r\n (click)=\"loadPastCycle()\">arrow_back_ios\r\n </mat-icon>\r\n </div>\r\n <div fxFlex=\"60%\" fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <mat-label class=\"label time-sheet-header\">\r\n Timesheet Cycle <span class=\"left-label\">{{ timeCycleDisplay }}</span>\r\n </mat-label>\r\n </div>\r\n <mat-icon fxFlex=\"5%\" class=\"material-icons-outlined\" [ngClass]=\"{ 'primary-icon': !isForwardDisable(), 'grey-icon': isForwardDisable() }\"\r\n (click)=\"loadForwardCycle()\">\r\n arrow_forward_ios\r\n </mat-icon>\r\n </div>\r\n <ng-container *ngFor=\"let assignment of assignments;let i=index\">\r\n <div fxFlex fxLayoutAlign=\"center center\" class=\"time-sheet-row border-bottom padding\">\r\n <div *ngIf=\"isHoursExceeded(assignment)\" class=\"warning-icon\">\r\n <mat-icon>error</mat-icon>\r\n <span> HOURS EXCEEDED </span>\r\n </div>\r\n\r\n <strong fxFlex=\"50%\" fxLayoutAlign=\"end center\">\r\n ASSIGNMENT {{ i+1 }} ATTRIBUTES\r\n </strong>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" [disabled] = \"!this.details.isDue\"\r\n (click)=\"onClickConciliate(assignment)\">\r\n <span>DO NOT CONCILIATE</span>\r\n <br>\r\n <sub>({{ assignment?.doNotConciliateCounter }} REMAINING)</sub>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" (click)=\"openPCS(assignment)\" \r\n [disabled]=\"isPcsDisabled(assignment)\">\r\n PARTICIPANT CHANGE OF STATUS\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"participant-details time-sheet-row border-bottom padding\">\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Site Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.siteName?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Type</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentType?.displayValue }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Status</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStatus?.displayValue\r\n }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Start Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStartDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment End Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentEndDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hour Group</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourGroup }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hours Assigned</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourAssigned }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Skill Code</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.skillCode?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Course Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.courseName?.displayValue}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"left-label\">\r\n <mat-icon fxFlex=\"10%\" class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"(this.details.isCurrent||this.details.isDue)\" (click)=\"addActivity(assignment)\">add_circle\r\n </mat-icon>\r\n <mat-form-field fxFlex=\"90%\" appearance=\"outline\" class=\"left-label-2 activity-form-field\" floatLabel=\"auto\">\r\n <mat-label>Select Activity</mat-label>\r\n <mat-select [formControl]=\"control\" [disabled]=\"!isVisible() != true? (this.details.isDue || this.details.isCurrent)? (!this.isAttestedCheckValue? assignment.isSelfAttestedSchool:false):true:false\">\r\n <mat-option *ngFor=\"let activity of assignment.filteredActivities\" [value]=\"activity\">\r\n <span [title]=\"activity?.displayValue\">\r\n {{ activity?.displayValue }}\r\n </span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n\r\n <div fxFlex=\"12%\" *ngFor=\"let item of assignment.currentCycleDates\" class=\"time-label\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\">\r\n <div>{{ item?.dayOfWeek }}</div>\r\n <div>{{ item?.date | date: dateFormat }}</div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"12%\" class=\"time-label\"><span>Weekly</span></div>\r\n\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!!assignment.formGroup\">\r\n <form [formGroup]=\"assignment.formGroup\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"20px\"\r\n class=\"time-sheet-row\" *ngFor=\"let item of assignment.timesheetByActivity\">\r\n <div fxFlex=\"15%\" class=\"left-label\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"isVisible()\" (click)=\"removeActivity(item?.id, assignment)\">remove_circle\r\n </mat-icon>\r\n <span class=\"left-label-2\">{{ item?.name }}</span>\r\n </div>\r\n <div formGroupName=\"{{item?.id}}\" fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field fxFlex=\"12%\" appearance=\"outline\" *ngFor=\"let path of dayOfWeeks\" class=\"time-input\">\r\n <input matInput [formControlName]=\"path\" [readonly]=\"!isAttestedCheckValue?assignment.isSelfAttestedSchool:false\" (ngModelChange)=\"updateHours($event, item?.id, path, assignment)\" />\r\n <mat-error *ngIf=\"!!getErrorMessage(item?.id, path, assignment)\">{{ getErrorMessage(item?.id, path,\r\n assignment)\r\n }}</mat-error>\r\n </mat-form-field>\r\n <span fxFlex=\"12%\" class=\"time-label\">{{ getSum(item) }}</span>\r\n </div>\r\n </form>\r\n </ng-container>\r\n\r\n <!--Total-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" class=\"left-label\" [ngClass]=\"{ 'total': isVisible() }\"><span class=\"left-label-2\">Daily\r\n Total</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <div fxFlex=\"12%\" *ngFor=\"let path of dayOfWeeks\" class=\"time-label\">{{ assignment?.dailyTotal[path] }}</div>\r\n <div fxFlex=\"12%\" class=\"time-label\">{{ getTotalSum( assignment ) }}</div>\r\n </div>\r\n </div>\r\n <!--Carfare-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\"><span>Carfare</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.carfareFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.carfareModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"item?.isDisable\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option [value]=\"defaultCarfareOption\">N/A</mat-option>\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n <!--Assignment Mode-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\">\r\n <span>Assignment Mode\r\n <span class=\"prutech-dynamic-button-mandatory\">*</span>\r\n </span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.assignmentModeFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.assignmentModeModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"item?.isDisable ||!isAttestedCheckValue?assignment.isSelfAttestedSchool:false\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"time-sheet-comment\">\r\n <div *ngIf=\"showDcMessage()\" class=\"warning-text\">\r\n <span>{{ this.getDcMessage() }}</span>\r\n </div>\r\n <div *ngIf=\"isParticipantChangeOfStatus()\" class=\"warning-text\">\r\n <span>{{ this.details?.programAlert?.pcsType?.displayValue }} PCS</span><br>\r\n <span>Performed on {{ this.details?.programAlert?.submittedOn | date: 'MM/dd/yyyy'}}</span><br>\r\n <span>Reason: {{ this.details?.programAlert?.reason?.displayValue }}</span><br>\r\n <span class=\"comment\">{{ this.details?.programAlert?.comments }}</span>\r\n </div>\r\n <span>- All hours entered into SEAMS are subject to audit and require back up documentation, either thru separate\r\n manual or electronic tracking which matches the hours submitted for each client. </span><br>\r\n <span *ngIf=\"!!timeFrameMessage\">- Data Entry must be completed by {{ timeFrameMessage }}.</span>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"30px\">\r\n <button mat-flat-button (click)=\"exit()\">EXIT</button>\r\n <button mat-raised-button color=\"primary\" *ngIf=\"isVisible()&& (this.details.isDue ||this.details.isCurrent)\" (click)=\"validateAndSave()\" [disabled]=\"isFormInValid()\">SAVE\r\n </button>\r\n </div>\r\n <div *ngIf=\"showDeficitHoursMessage\" class=\"save-warning\" fxLayoutAlign=\"center center\">\r\n <mat-icon>error</mat-icon>\r\n <span> Total weekly hours entered have a deficit subject to infraction. </span>\r\n </div>\r\n</div>", styles: [""], components: [{ type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i13.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i13.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i13.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i13.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.MatLabel, selector: "mat-label" }, { type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.MatError, selector: "mat-error", inputs: ["id"] }], pipes: { "date": i14.DatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
884
884
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ParticipantTimesheetComponent, decorators: [{
885
885
  type: Component,
886
- args: [{ selector: 'prutech-participant-timesheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-around start\">\r\n <div fxFlex=\"100%\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"time-sheet-details\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"5%\" fxLayoutAlign=\"end center\">\r\n <mat-icon class=\"material-icons-outlined primary-icon\" [ngClass]=\"{ 'primary-icon': !isBackDisable(), 'grey-icon': isBackDisable() }\"\r\n (click)=\"loadPastCycle()\">arrow_back_ios\r\n </mat-icon>\r\n </div>\r\n <div fxFlex=\"60%\" fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <mat-label class=\"label time-sheet-header\">\r\n Timesheet Cycle <span class=\"left-label\">{{ timeCycleDisplay }}</span>\r\n </mat-label>\r\n </div>\r\n <mat-icon fxFlex=\"5%\" class=\"material-icons-outlined\" [ngClass]=\"{ 'primary-icon': !isForwardDisable(), 'grey-icon': isForwardDisable() }\"\r\n (click)=\"loadForwardCycle()\">\r\n arrow_forward_ios\r\n </mat-icon>\r\n </div>\r\n <ng-container *ngFor=\"let assignment of assignments;let i=index\">\r\n <div fxFlex fxLayoutAlign=\"center center\" class=\"time-sheet-row border-bottom padding\">\r\n <div *ngIf=\"isHoursExceeded(assignment)\" class=\"warning-icon\">\r\n <mat-icon>error</mat-icon>\r\n <span> HOURS EXCEEDED </span>\r\n </div>\r\n\r\n <strong fxFlex=\"50%\" fxLayoutAlign=\"end center\">\r\n ASSIGNMENT {{ i+1 }} ATTRIBUTES\r\n </strong>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" [disabled] = \"!this.details.isDue\"\r\n (click)=\"onClickConciliate(assignment)\">\r\n <span>DO NOT CONCILIATE</span>\r\n <br>\r\n <sub>({{ assignment?.doNotConciliateCounter }} REMAINING)</sub>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" (click)=\"openPCS(assignment)\" \r\n [disabled]=\"isPcsDisabled(assignment)\">\r\n PARTICIPANT CHANGE OF STATUS\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"participant-details time-sheet-row border-bottom padding\">\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Site Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.siteName?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Type</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentType?.displayValue }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Status</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStatus?.displayValue\r\n }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Start Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStartDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment End Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentEndDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hour Group</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourGroup }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hours Assigned</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourAssigned }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Skill Code</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.skillCode?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Course Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.courseName?.displayValue}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"left-label\">\r\n <mat-icon fxFlex=\"10%\" class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"isVisible()\" (click)=\"addActivity(assignment)\">add_circle\r\n </mat-icon>\r\n <mat-form-field fxFlex=\"90%\" appearance=\"outline\" class=\"left-label-2 activity-form-field\" floatLabel=\"auto\">\r\n <mat-label>Select Activity</mat-label>\r\n <mat-select [formControl]=\"control\" [disabled]=\"!isVisible()\">\r\n <mat-option *ngFor=\"let activity of assignment.filteredActivities\" [value]=\"activity\">\r\n <span [title]=\"activity?.displayValue\">\r\n {{ activity?.displayValue }}\r\n </span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n\r\n <div fxFlex=\"12%\" *ngFor=\"let item of assignment.currentCycleDates\" class=\"time-label\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\">\r\n <div>{{ item?.dayOfWeek }}</div>\r\n <div>{{ item?.date | date: dateFormat }}</div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"12%\" class=\"time-label\"><span>Weekly</span></div>\r\n\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!!assignment.formGroup\">\r\n <form [formGroup]=\"assignment.formGroup\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"20px\"\r\n class=\"time-sheet-row\" *ngFor=\"let item of assignment.timesheetByActivity\">\r\n <div fxFlex=\"15%\" class=\"left-label\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"isVisible()\" (click)=\"removeActivity(item?.id, assignment)\">remove_circle\r\n </mat-icon>\r\n <span class=\"left-label-2\">{{ item?.name }}</span>\r\n </div>\r\n <div formGroupName=\"{{item?.id}}\" fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field fxFlex=\"12%\" appearance=\"outline\" *ngFor=\"let path of dayOfWeeks\" class=\"time-input\">\r\n <input matInput [formControlName]=\"path\" [readonly]=\"!isAttestedCheckValue?assignment.isSelfAttestedSchool:false\" (ngModelChange)=\"updateHours($event, item?.id, path, assignment)\" />\r\n <mat-error *ngIf=\"!!getErrorMessage(item?.id, path, assignment)\">{{ getErrorMessage(item?.id, path,\r\n assignment)\r\n }}</mat-error>\r\n </mat-form-field>\r\n <span fxFlex=\"12%\" class=\"time-label\">{{ getSum(item) }}</span>\r\n </div>\r\n </form>\r\n </ng-container>\r\n\r\n <!--Total-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" class=\"left-label\" [ngClass]=\"{ 'total': isVisible() }\"><span class=\"left-label-2\">Daily\r\n Total</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <div fxFlex=\"12%\" *ngFor=\"let path of dayOfWeeks\" class=\"time-label\">{{ assignment?.dailyTotal[path] }}</div>\r\n <div fxFlex=\"12%\" class=\"time-label\">{{ getTotalSum( assignment ) }}</div>\r\n </div>\r\n </div>\r\n <!--Carfare-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\"><span>Carfare</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.carfareFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.carfareModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"item?.isDisable\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option [value]=\"defaultCarfareOption\">N/A</mat-option>\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n <!--Assignment Mode-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\">\r\n <span>Assignment Mode\r\n <span class=\"prutech-dynamic-button-mandatory\">*</span>\r\n </span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.assignmentModeFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.assignmentModeModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"!isVisible()\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"time-sheet-comment\">\r\n <div *ngIf=\"showDcMessage()\" class=\"warning-text\">\r\n <span>{{ this.getDcMessage() }}</span>\r\n </div>\r\n <div *ngIf=\"isParticipantChangeOfStatus()\" class=\"warning-text\">\r\n <span>{{ this.details?.programAlert?.pcsType?.displayValue }} PCS</span><br>\r\n <span>Performed on {{ this.details?.programAlert?.submittedOn | date: 'MM/dd/yyyy'}}</span><br>\r\n <span>Reason: {{ this.details?.programAlert?.reason?.displayValue }}</span><br>\r\n <span class=\"comment\">{{ this.details?.programAlert?.comments }}</span>\r\n </div>\r\n <span>- All hours entered into SEAMS are subject to audit and require back up documentation, either thru separate\r\n manual or electronic tracking which matches the hours submitted for each client. </span><br>\r\n <span *ngIf=\"!!timeFrameMessage\">- Data Entry must be completed by {{ timeFrameMessage }}.</span>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"30px\">\r\n <button mat-flat-button (click)=\"exit()\">EXIT</button>\r\n <button mat-raised-button color=\"primary\" *ngIf=\"isVisible()\" (click)=\"validateAndSave()\" [disabled]=\"isFormInValid()\">SAVE\r\n </button>\r\n </div>\r\n <div *ngIf=\"showDeficitHoursMessage\" class=\"save-warning\" fxLayoutAlign=\"center center\">\r\n <mat-icon>error</mat-icon>\r\n <span> Total weekly hours entered have a deficit subject to infraction. </span>\r\n </div>\r\n</div>", styles: [""] }]
886
+ args: [{ selector: 'prutech-participant-timesheet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-around start\">\r\n <div fxFlex=\"100%\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"time-sheet-details\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"5%\" fxLayoutAlign=\"end center\">\r\n <mat-icon class=\"material-icons-outlined primary-icon\" [ngClass]=\"{ 'primary-icon': !isBackDisable(), 'grey-icon': isBackDisable() }\"\r\n (click)=\"loadPastCycle()\">arrow_back_ios\r\n </mat-icon>\r\n </div>\r\n <div fxFlex=\"60%\" fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <mat-label class=\"label time-sheet-header\">\r\n Timesheet Cycle <span class=\"left-label\">{{ timeCycleDisplay }}</span>\r\n </mat-label>\r\n </div>\r\n <mat-icon fxFlex=\"5%\" class=\"material-icons-outlined\" [ngClass]=\"{ 'primary-icon': !isForwardDisable(), 'grey-icon': isForwardDisable() }\"\r\n (click)=\"loadForwardCycle()\">\r\n arrow_forward_ios\r\n </mat-icon>\r\n </div>\r\n <ng-container *ngFor=\"let assignment of assignments;let i=index\">\r\n <div fxFlex fxLayoutAlign=\"center center\" class=\"time-sheet-row border-bottom padding\">\r\n <div *ngIf=\"isHoursExceeded(assignment)\" class=\"warning-icon\">\r\n <mat-icon>error</mat-icon>\r\n <span> HOURS EXCEEDED </span>\r\n </div>\r\n\r\n <strong fxFlex=\"50%\" fxLayoutAlign=\"end center\">\r\n ASSIGNMENT {{ i+1 }} ATTRIBUTES\r\n </strong>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"20px\">\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" [disabled] = \"!this.details.isDue\"\r\n (click)=\"onClickConciliate(assignment)\">\r\n <span>DO NOT CONCILIATE</span>\r\n <br>\r\n <sub>({{ assignment?.doNotConciliateCounter }} REMAINING)</sub>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" class=\"button-size\" (click)=\"openPCS(assignment)\" \r\n [disabled]=\"isPcsDisabled(assignment)\">\r\n PARTICIPANT CHANGE OF STATUS\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"participant-details time-sheet-row border-bottom padding\">\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Site Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.siteName?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Type</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentType?.displayValue }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Status</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStatus?.displayValue\r\n }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment Start Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentStartDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Assignment End Date</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.assignmentEndDate | date:\r\n fullDateFormat }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hour Group</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourGroup }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Hours Assigned</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.hourAssigned }}</div>\r\n </div>\r\n </div>\r\n\r\n <div fxFlex fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"column\">\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Skill Code</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.skillCode?.displayValue }}</div>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"readonly-info\">\r\n <div fxFlex class=\"label\" fxLayoutAlign=\"center center\">Course Name</div>\r\n <div fxFlex class=\"value\" fxLayoutAlign=\"center center\">{{ assignment?.courseName?.displayValue}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-bottom\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"left-label\">\r\n <mat-icon fxFlex=\"10%\" class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"(this.details.isCurrent||this.details.isDue)\" (click)=\"addActivity(assignment)\">add_circle\r\n </mat-icon>\r\n <mat-form-field fxFlex=\"90%\" appearance=\"outline\" class=\"left-label-2 activity-form-field\" floatLabel=\"auto\">\r\n <mat-label>Select Activity</mat-label>\r\n <mat-select [formControl]=\"control\" [disabled]=\"!isVisible() != true? (this.details.isDue || this.details.isCurrent)? (!this.isAttestedCheckValue? assignment.isSelfAttestedSchool:false):true:false\">\r\n <mat-option *ngFor=\"let activity of assignment.filteredActivities\" [value]=\"activity\">\r\n <span [title]=\"activity?.displayValue\">\r\n {{ activity?.displayValue }}\r\n </span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n\r\n <div fxFlex=\"12%\" *ngFor=\"let item of assignment.currentCycleDates\" class=\"time-label\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"start center\">\r\n <div>{{ item?.dayOfWeek }}</div>\r\n <div>{{ item?.date | date: dateFormat }}</div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"12%\" class=\"time-label\"><span>Weekly</span></div>\r\n\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"!!assignment.formGroup\">\r\n <form [formGroup]=\"assignment.formGroup\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"20px\"\r\n class=\"time-sheet-row\" *ngFor=\"let item of assignment.timesheetByActivity\">\r\n <div fxFlex=\"15%\" class=\"left-label\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon class=\"material-icons-outlined\" color=\"primary\" *ngIf=\"isVisible()\" (click)=\"removeActivity(item?.id, assignment)\">remove_circle\r\n </mat-icon>\r\n <span class=\"left-label-2\">{{ item?.name }}</span>\r\n </div>\r\n <div formGroupName=\"{{item?.id}}\" fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <mat-form-field fxFlex=\"12%\" appearance=\"outline\" *ngFor=\"let path of dayOfWeeks\" class=\"time-input\">\r\n <input matInput [formControlName]=\"path\" [readonly]=\"!isAttestedCheckValue?assignment.isSelfAttestedSchool:false\" (ngModelChange)=\"updateHours($event, item?.id, path, assignment)\" />\r\n <mat-error *ngIf=\"!!getErrorMessage(item?.id, path, assignment)\">{{ getErrorMessage(item?.id, path,\r\n assignment)\r\n }}</mat-error>\r\n </mat-form-field>\r\n <span fxFlex=\"12%\" class=\"time-label\">{{ getSum(item) }}</span>\r\n </div>\r\n </form>\r\n </ng-container>\r\n\r\n <!--Total-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"15%\" class=\"left-label\" [ngClass]=\"{ 'total': isVisible() }\"><span class=\"left-label-2\">Daily\r\n Total</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <div fxFlex=\"12%\" *ngFor=\"let path of dayOfWeeks\" class=\"time-label\">{{ assignment?.dailyTotal[path] }}</div>\r\n <div fxFlex=\"12%\" class=\"time-label\">{{ getTotalSum( assignment ) }}</div>\r\n </div>\r\n </div>\r\n <!--Carfare-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\"><span>Carfare</span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.carfareFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.carfareModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"item?.isDisable\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option [value]=\"defaultCarfareOption\">N/A</mat-option>\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n <!--Assignment Mode-->\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" class=\"time-sheet-row border-top\" fxLayoutGap=\"20px\">\r\n <div fxFlex=\"20%\" class=\"left-label total\">\r\n <span>Assignment Mode\r\n <span class=\"prutech-dynamic-button-mandatory\">*</span>\r\n </span>\r\n </div>\r\n <div fxFlex=\"80%\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\" [formGroup]=\"assignment.assignmentModeFormGroup\">\r\n <mat-form-field appearance=\"outline\" fxFlex=\"12%\" *ngFor=\"let item of assignment.assignmentModeModels; let index=index;\"\r\n class=\"time-input\">\r\n <mat-select [disabled]=\"item?.isDisable ||!isAttestedCheckValue?assignment.isSelfAttestedSchool:false\" [formControlName]=\"item?.dayOfWeek\">\r\n <mat-option *ngFor=\"let option of item?.options\" [value]=\"option\">\r\n {{ option.displayValue }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <div fxFlex=\"12%\" class=\"time-label\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"time-sheet-comment\">\r\n <div *ngIf=\"showDcMessage()\" class=\"warning-text\">\r\n <span>{{ this.getDcMessage() }}</span>\r\n </div>\r\n <div *ngIf=\"isParticipantChangeOfStatus()\" class=\"warning-text\">\r\n <span>{{ this.details?.programAlert?.pcsType?.displayValue }} PCS</span><br>\r\n <span>Performed on {{ this.details?.programAlert?.submittedOn | date: 'MM/dd/yyyy'}}</span><br>\r\n <span>Reason: {{ this.details?.programAlert?.reason?.displayValue }}</span><br>\r\n <span class=\"comment\">{{ this.details?.programAlert?.comments }}</span>\r\n </div>\r\n <span>- All hours entered into SEAMS are subject to audit and require back up documentation, either thru separate\r\n manual or electronic tracking which matches the hours submitted for each client. </span><br>\r\n <span *ngIf=\"!!timeFrameMessage\">- Data Entry must be completed by {{ timeFrameMessage }}.</span>\r\n </div>\r\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayoutGap=\"30px\">\r\n <button mat-flat-button (click)=\"exit()\">EXIT</button>\r\n <button mat-raised-button color=\"primary\" *ngIf=\"isVisible()&& (this.details.isDue ||this.details.isCurrent)\" (click)=\"validateAndSave()\" [disabled]=\"isFormInValid()\">SAVE\r\n </button>\r\n </div>\r\n <div *ngIf=\"showDeficitHoursMessage\" class=\"save-warning\" fxLayoutAlign=\"center center\">\r\n <mat-icon>error</mat-icon>\r\n <span> Total weekly hours entered have a deficit subject to infraction. </span>\r\n </div>\r\n</div>", styles: [""] }]
887
887
  }], ctorParameters: function () { return [{ type: i1.TimeKeepingDetailsService }, { type: i2.ParticipantChangeStatusService }, { type: i0.ChangeDetectorRef }, { type: i3.TabService }, { type: i4.Router }, { type: i5.UserService }, { type: i6.MatDialog }, { type: i7.FormBuilder }]; }, propDecorators: { isAttestedCheckValue: [{
888
888
  type: Input
889
889
  }] } });
890
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGljaXBhbnQtdGltZXNoZWV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BydXRlY2gvY29tcGxpYW5jZS9zcmMvbGliL3RpbWUta2VlcGluZy1kZXRhaWxzL2NvbXBvbmVudHMvcGFydGljaXBhbnQtdGltZXNoZWV0L3BhcnRpY2lwYW50LXRpbWVzaGVldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcnV0ZWNoL2NvbXBsaWFuY2Uvc3JjL2xpYi90aW1lLWtlZXBpbmctZGV0YWlscy9jb21wb25lbnRzL3BhcnRpY2lwYW50LXRpbWVzaGVldC9wYXJ0aWNpcGFudC10aW1lc2hlZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBZ0MsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLElBQUksT0FBTyxFQUNqQixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sRUFDUCxHQUFHLEVBQ0gsUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxFQUNILFNBQVMsRUFDVCxHQUFHLEVBQ0gsTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0osTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUVKLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNI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QUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFpQjtRQUNwQyxNQUFNLFFBQVEsR0FBYSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM3RCxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO1lBQ2xELG1EQUFtRDtZQUNuRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2hIO2FBQU07WUFDTCxrQkFBa0I7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNoSDtJQUNILENBQUM7OzJIQWw3QlUsNkJBQTZCOytHQUE3Qiw2QkFBNkIsc0pDdkYxQywramNBMk5NOzRGRHBJTyw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsK0JBQStCLG1CQUd4Qix1QkFBdUIsQ0FBQyxNQUFNO3VUQWtEdEMsb0JBQW9CO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCxJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBMb29rdXAsIFRhYlNlcnZpY2UgfSBmcm9tICdAcHJ1dGVjaC9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgVXNlciwgVXNlclNlcnZpY2UgfSBmcm9tICdAcHJ1dGVjaC9pZGVudGl0eS1jbGllbnQnO1xyXG5pbXBvcnQge1xyXG4gIGNoYWluLFxyXG4gIGNvbmNhdCxcclxuICBmaWx0ZXIgYXMgX2ZpbHRlcixcclxuICBmaW5kLFxyXG4gIGZpcnN0LFxyXG4gIGZvckVhY2gsXHJcbiAgZ2V0LFxyXG4gIGluY2x1ZGVzLFxyXG4gIGludm9rZSxcclxuICBpc0VtcHR5LFxyXG4gIGlzTmFOLFxyXG4gIGlzTmlsLFxyXG4gIGlzTnVtYmVyLFxyXG4gIGtleUJ5LFxyXG4gIGtleXMsXHJcbiAgbGFzdCxcclxuICBtYXAsXHJcbiAgbWFwVmFsdWVzLFxyXG4gIG50aCxcclxuICByZWR1Y2UsXHJcbiAgc2V0LFxyXG4gIHNpemUsXHJcbiAgc29ydEJ5LFxyXG4gIHRvTnVtYmVyLFxyXG4gIHRvU3RyaW5nLFxyXG4gIGhlYWQsXHJcbiAgZXZlcnkgYXMgX2V2ZXJ5LFxyXG4gIHNvbWUsXHJcbiAgY2xvbmVEZWVwLFxyXG4gIHN1bSxcclxuICB2YWx1ZXMsXHJcbiAgb21pdFxyXG59IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCwgZXZlcnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBUaW1lS2VlcGluZ0RldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy90aW1lLWtlZXBpbmctZGV0YWlscy5tb2RlbCc7XHJcbmltcG9ydCB7IFRpbWVTaGVldCB9IGZyb20gJy4uLy4uL21vZGVscy90aW1lLXNoZWV0Lm1vZGVsJztcclxuaW1wb3J0IHsgVGltZUtlZXBpbmdBY3Rpdml0eSB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpdml0eS5tb2RlbCc7XHJcbmltcG9ydCB7IHRpbWVzaGVldERhdGVGb3JtYXQsIGRhdGVGb3JtYXQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGF0ZS1mb3JtYXQnO1xyXG5pbXBvcnQgeyBUaW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZS1rZWVwaW5nLWRldGFpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRpbWVTaGVldFR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGltZS1zaGVldC10eXBlJztcclxuaW1wb3J0IHsgZGF5T2ZXZWVrcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kYXktb2Ytd2Vlayc7XHJcbmltcG9ydCB7IExvYWRQYXN0VGltZXNoZWV0UGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVscy9sb2FkLXBhc3QtdGltZXNoZWV0LXBheWxvYWQnO1xyXG5pbXBvcnQgeyBkaWFsb2dTaXplLCBkbmNEaWFsb2dTaXplIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpYWxvZy1kZWZhdWx0JztcclxuaW1wb3J0IHsgUGFydGljaXBhbnRDaGFuZ2VTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcGFydGljaXBhbnQtY2hhbmdlLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7IFBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BhcnRpY2lwYW50LWNoYW5nZS1zdGF0dXMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEb05vdENvbmNpbGlhdGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9kby1ub3QtY29uY2lsaWF0ZS1kaWFsb2cvZG8tbm90LWNvbmNpbGlhdGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvb2t1cEZpbHRlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcGlwZXMvbG9va3VwLWZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgUHJlQ29uY2lsaWF0aW9uTG9va3VwcyB9IGZyb20gJy4uLy4uL21vZGVscy9wcmUtY29uY2lsaWF0aW9uLWxvb2t1cHMubW9kZWwnO1xyXG5pbXBvcnQgeyBQYXJ0aWNpcGFudENoYW5nZVN0YXR1c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL3BhcnRpY2lwYW50LWNoYW5nZS1zdGF0dXMvcGFydGljaXBhbnQtY2hhbmdlLXN0YXR1cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQY3NGb3JtRGF0YSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvcGNzLWZvcm0tZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IGZ0YywgZnRyIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbnN0YW50cy9wcmUtY29uY2lsaWF0aW9uL3Bjcy10eXBlcyc7XHJcbmltcG9ydCB7IGNvbmZpcm1EaWFsb2dJbmZvIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpcm0tbWVzc2FnZSc7XHJcbmltcG9ydCB7XHJcbiAgYWJhd2RDdXJyZW50Q3ljbGVUaW1lRnJhbWVNZXNzYWdlLFxyXG4gIGFiYXdkRHVlQ3ljbGVUaW1lRnJhbWVNZXNzYWdlLFxyXG4gIGNhQ3VycmVudEN5Y2xlVGltZUZyYW1lTWVzc2FnZSxcclxuICBjYUR1ZUN5Y2xlVGltZUZyYW1lTWVzc2FnZSxcclxuICB2ZW50dXJlQ3VycmVudEN5Y2xlVGltZUZyYW1lTWVzc2FnZSxcclxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGltZS1mcmFtZS1tZXNzYWdlcyc7XHJcbmltcG9ydCB7IExvYWRBY3Rpdml0eVBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvbG9hZC1hY3Rpdml0eS1wYXlsb2FkJztcclxuaW1wb3J0IHsgQ2FyZmFyZVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2FyZmFyZS10eXBlJztcclxuaW1wb3J0IHsgQ2FyZmFyZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhcmZhcmUtbW9kZWwnO1xyXG5pbXBvcnQgeyBTYXZlVGltZXNoZWV0UGNzUGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVscy9zYXZlLXRpbWVzaGVldC1wY3MtcGF5bG9hZCc7XHJcbmltcG9ydCB7IGRjTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kYy1tZXNzYWdlJztcclxuaW1wb3J0IHsgQXNzaWdubWVudE1vZGVUeXBlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fzc2lnbm1lbnQtbW9kZS10eXBlJztcclxuaW1wb3J0IHsgQ2xpZW50QXNzaWdubWVudCB9IGZyb20gJy4uLy4uL21vZGVscy9jbGllbnQtYXNzaWdubWVudCc7XHJcbmltcG9ydCB7IEFjdGl2aXR5TG9va3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGl2aXR5LWxvb2t1cCc7XHJcbmltcG9ydCB7IFNhdmVUaW1la2VlcGluZ0RldGFpbHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2F2ZS10aW1la2VlcGluZy1kZXRhaWxzJztcclxuaW1wb3J0IHsgVGltZXNoZWV0V2FybmluZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGltZXNoZWV0LXdhcm5pbmctbW9kYWwvdGltZXNoZWV0LXdhcm5pbmctbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtTaG93RXNjb2RlU3RhdHVzTWVzc2FnZUNvbXBvbmVudH0gZnJvbSAnLi4vc2hvdy1lc2NvZGUtc3RhdHVzLW1lc3NhZ2Uvc2hvdy1lc2NvZGUtc3RhdHVzLW1lc3NhZ2UuY29tcG9uZW50JztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwcnV0ZWNoLXBhcnRpY2lwYW50LXRpbWVzaGVldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhcnRpY2lwYW50LXRpbWVzaGVldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGFydGljaXBhbnQtdGltZXNoZWV0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXJ0aWNpcGFudFRpbWVzaGVldENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcmVhZG9ubHkgZGF0ZUZvcm1hdDogc3RyaW5nID0gdGltZXNoZWV0RGF0ZUZvcm1hdDtcclxuICByZWFkb25seSBmdWxsRGF0ZUZvcm1hdDogc3RyaW5nID0gZGF0ZUZvcm1hdDtcclxuICByZWFkb25seSBtaW5Ib3VyczogbnVtYmVyID0gMDtcclxuICByZWFkb25seSBtb21lbnREYXRlRm9ybWF0OiBzdHJpbmcgPSAnTU0vREQvWVlZWSc7XHJcbiAgcmVhZG9ubHkgdGltZUN5Y2xlUmUxOiBSZWdFeHAgPSAvXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fS9nO1xyXG4gIHJlYWRvbmx5IHRpbWVDeWNsZVJlMjogUmVnRXhwID0gL1xcZHsyfS1bQS1aXXszfS1cXGR7Mn0vZztcclxuICByZWFkb25seSBjdXN0b21FcnJvck1lc3NhZ2U6IHN0cmluZyA9ICdob3VycyBpbiB0b3RhbCc7XHJcbiAgcmVhZG9ubHkgZnRjVmFsdWU6IHN0cmluZyA9ICdGYWlsdXJlIHRvIENvbXBseSc7XHJcbiAgcmVhZG9ubHkgaG91clBhdHRlcm46IFJlZ0V4cCA9IC9eWzAtOV17MX0kLztcclxuICByZWFkb25seSBjdXJyZW50Q3ljbGVOYW1lOiBzdHJpbmcgPSAnQ3VycmVudCBDeWNsZSc7XHJcbiAgcmVhZG9ubHkgZHVlQ3ljbGVOYW1lOiBzdHJpbmcgPSAnRHVlIEN5Y2xlJztcclxuICByZWFkb25seSBoaXN0b3JpY2FsQ3ljbGVOYW1lOiBzdHJpbmcgPSAnSGlzdG9yaWNhbCBDeWNsZSc7XHJcblxyXG4gIG1heEhvdXJzOiBudW1iZXIgPSA3O1xyXG4gIGhvdXJzUGVyU2NoZWR1bGVEYXk6IG51bWJlciA9IDA7XHJcbiAgdW5leGN1c2VkQWN0aXZpdHk6IG51bWJlciA9IDI0O1xyXG4gIGRldGFpbHM6IFRpbWVLZWVwaW5nRGV0YWlsc01vZGVsO1xyXG4gIC8vYWN0aXZpdGllczogTG9va3VwW107XHJcbiAgdGltZUtlZXBpbmdDeWNsZXM6IExvb2t1cFtdO1xyXG4gIGRpc2FibGU6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgLy9kYWlseVRvdGFsOiB7IFtrOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG4gIGRheU9mV2Vla3M6IHN0cmluZ1tdID0gZGF5T2ZXZWVrcztcclxuICAvL3RpbWVzaGVldEJ5QWN0aXZpdHk6IFRpbWVTaGVldFR5cGVbXTtcclxuICAvL2Zvcm1Hcm91cDogRm9ybUdyb3VwO1xyXG4gIC8vZG9Ob3RDb25jaWxpYXRlQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9kYXlEYXRlOiBzdHJpbmcgPSBtb21lbnQoKS50b0lTT1N0cmluZygpO1xyXG4gIC8vZG9Ob3RDb25jaWxpYXRlQ291bnRlcjogbnVtYmVyID0gMDtcclxuICAvL2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIC8vY3VycmVudEN5Y2xlRW5kRGF0ZTogc3RyaW5nO1xyXG4gIC8vIHRpbWVDeWNsZVN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIC8vIHRpbWVDeWNsZUVuZERhdGU6IHN0cmluZztcclxuICAvL2N1cnJlbnRDeWNsZURhdGVzOiB7IGRhdGU6IHN0cmluZywgZGF5T2ZXZWVrOiBzdHJpbmcgfVtdID0gW107XHJcbiAgdXNlcjogVXNlcjtcclxuICB2aWV3T25seTogYm9vbGVhbjtcclxuICAvL2ZpbHRlcmVkQWN0aXZpdGllczogTG9va3VwW107XHJcbiAgZmlsdGVyUGlwZTogTG9va3VwRmlsdGVyUGlwZSA9IG5ldyBMb29rdXBGaWx0ZXJQaXBlKCk7XHJcbiAgcHJlQ29uY2lsaWF0aW9uTG9va3VwczogUHJlQ29uY2lsaWF0aW9uTG9va3VwcztcclxuICBkZWZhdWx0Q2FyZmFyZU9wdGlvbjogTG9va3VwID0gbmV3IExvb2t1cCh7IGxvb2t1cElkOiAwLCBkaXNwbGF5VmFsdWU6ICdOL0EnIH0pO1xyXG4gIC8vIGNhcmZhcmVGb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxuICAvLyBjYXJmYXJlTW9kZWxzOiBDYXJmYXJlVHlwZVtdO1xyXG4gIC8vIGFzc2lnbm1lbnRNb2RlTW9kZWxzOiBBc3NpZ25tZW50TW9kZVR5cGVbXTtcclxuICAvLyBhc3NpZ25tZW50TW9kZUZvcm1Hcm91cDogRm9ybUdyb3VwO1xyXG4gIGFzc2lnbm1lbnRzOiBDbGllbnRBc3NpZ25tZW50W107XHJcbiAgc2hvd0RlZmljaXRIb3Vyc01lc3NhZ2U6IGJvb2xlYW47XHJcbiAgYXR0ZXN0Y2hlY2tib3hjaGVja2VkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNBdHRlc3RlZENoZWNrVmFsdWU6IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlOiBUaW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwY3NTZXJ2aWNlOiBQYXJ0aWNpcGFudENoYW5nZVN0YXR1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdGFiU2VydmljZTogVGFiU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIsXHJcbiAgICAgIHRoaXMucGNzU2VydmljZS5wY3NMb29rdXBzXSxcclxuICAgICkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSxcclxuICAgICAgZmlsdGVyKChbdXNlciwgbG9va3Vwc106IFtVc2VyLCBQcmVDb25jaWxpYXRpb25Mb29rdXBzXSkgPT4gISF1c2VyICYmICEhbG9va3VwcyksXHJcbiAgICApLnN1YnNjcmliZSgoW3VzZXIsIGxvb2t1cHNdOiBbVXNlciwgUHJlQ29uY2lsaWF0aW9uTG9va3Vwc10pID0+IHtcclxuICAgICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgICAgdGhpcy5wcmVDb25jaWxpYXRpb25Mb29rdXBzID0gbG9va3VwcztcclxuICAgIH0pO1xyXG4gIFxyXG4gICAgLy8gdGhpcy50aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLmFjdGl2aXRpZXMucGlwZShcclxuICAgIC8vICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSxcclxuICAgIC8vICAgZmlsdGVyKChkYXRhOiBBY3Rpdml0eUxvb2t1cCkgPT4gISFkYXRhKSxcclxuICAgIC8vICkuc3Vic2NyaWJlKChkYXRhOiBBY3Rpdml0eUxvb2t1cCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmFjdGl2aXRpZXMgPSBnZXQoZGF0YSwgJ2FjdGl2aXR5TG9va3VwJyk7XHJcblxyXG4gICAgLy8gICBmb3JFYWNoKGdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpLCAoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCkgPT4ge1xyXG4gICAgLy8gICAgIGlmKGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudFR5cGUubG9va3VwSWQnKSA9PSBkYXRhLmFzc2lnbm1lbnRUeXBlSWQpIHtcclxuICAgIC8vICAgICAgIHNldChhc3NpZ25tZW50LCAnZmlsdGVyZWRBY3Rpdml0aWVzJywgdGhpcy5hY3Rpdml0aWVzKTtcclxuICAgIC8vICAgICAgIGlmICghaXNFbXB0eShnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKSkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5idWlsZEZpbHRlcmVkQWN0aXZpdGllcyggZ2V0KGFzc2lnbm1lbnQsICd0aW1lc2hlZXRCeUFjdGl2aXR5JykgKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgdGhpcy50aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLnRpbWVLZWVwaW5nRGV0YWlsXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCksXHJcbiAgICAgICAgZmlsdGVyKChkYXRhOiBUaW1lS2VlcGluZ0RldGFpbHNNb2RlbCkgPT4gISFkYXRhKSxcclxuICAgICAgKS5zdWJzY3JpYmUoKGRhdGE6IFRpbWVLZWVwaW5nRGV0YWlsc01vZGVsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gY2xvbmVEZWVwKGRhdGEpO1xyXG4gICAgICAgIC8vIHRoaXMubWF4SG91cnMgPSBkYXRhLm1heERhaWx5SG91cnM7Ly9QS1xyXG4gICAgICAgIC8vIHRoaXMuaG91cnNQZXJTY2hlZHVsZURheSA9IHRoaXMuZGV0YWlscy5ob3Vyc1BlclNjaGVkdWxlRGF5Oy8vUEtcclxuICAgICAgICAvLyB2aWV3T25seTogRmFpciBIZWFyaW5nIFVzZXIsIHZpZXcgb25seVxyXG4gICAgICAgIHRoaXMudmlld09ubHkgPSAhdGhpcy5kZXRhaWxzLmNhblVwZGF0ZTtcclxuXHJcbiAgICAgICAgdGhpcy5idWlsZFRpbWVzaGVldCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGJ1aWxkVGltZXNoZWV0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hc3NpZ25tZW50cyA9IFsuLi5nZXQodGhpcy5kZXRhaWxzLCAnZ2V0Q2xpZW50QXNzaWdubWVudHMnKV07XHJcbiAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmJ1aWxkU3RhcnRFbmREYXRlcyhhc3NpZ25tZW50KTtcclxuXHJcbiAgICAgIGxldCB0aW1lc2hlZXRCeUFjdGl2aXR5ID0gdGhpcy5idWlsZFRpbWVzaGVldEJ5QWN0aXZpdHkoYXNzaWdubWVudCk7XHJcbiAgICAgIHNldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScsIHRpbWVzaGVldEJ5QWN0aXZpdHkpO1xyXG4gICAgICBzZXQoYXNzaWdubWVudCwgJ2ZpbHRlcmVkQWN0aXZpdGllcycsIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCkpO1xyXG5cclxuICAgICAgdGhpcy5jYWxjdWxhdGVUb3RhbChhc3NpZ25tZW50KTtcclxuXHJcbiAgICAgIGxldCBjYXJmYXJlTW9kZWxzID0gdGhpcy5idWlsZENhcmZhcmUoYXNzaWdubWVudCk7XHJcbiAgICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycsIGNhcmZhcmVNb2RlbHMpO1xyXG5cclxuICAgICAgbGV0IGFzc2lnbm1lbnRNb2RlTW9kZWxzID0gdGhpcy5idWlsZEFzc2lnbm1lbnRNb2RlKGFzc2lnbm1lbnQpO1xyXG4gICAgICBzZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRNb2RlTW9kZWxzJywgYXNzaWdubWVudE1vZGVNb2RlbHMpO1xyXG5cclxuICAgICAgc2V0KGFzc2lnbm1lbnQsICdkb05vdENvbmNpbGlhdGVBY3Rpb24nLCBmYWxzZSk7Ly9kZWZhdWx0XHJcblxyXG4gICAgICB0aGlzLmluaXRGb3JtR3JvdXAoYXNzaWdubWVudCk7XHJcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIC8vIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaExvYWRBY3Rpdml0aWVzKG5ldyBMb2FkQWN0aXZpdHlQYXlsb2FkKHtcclxuICAgICAgLy8gICBhc3NpZ25tZW50VHlwZUlkOiBnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRUeXBlLmxvb2t1cElkJyksXHJcbiAgICAgIC8vICAgbG9va3VwVGltZWtlZXBpbmdDeWNsZUlkOiBnZXQoYXNzaWdubWVudCwgJ2xvb2t1cFRpbWVrZWVwaW5nQ3ljbGUubG9va3VwSWQnKSxcclxuICAgICAgLy8gfSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZnRlck9uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIC8vXHJcbiAgfVxyXG5cclxuICBidWlsZFN0YXJ0RW5kRGF0ZXMoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IENsaWVudEFzc2lnbm1lbnQge1xyXG4gICAgY29uc3QgbG9va3VwVGltZWtlZXBpbmdDeWNsZTogTG9va3VwID0gZ2V0KGFzc2lnbm1lbnQsICdsb29rdXBUaW1la2VlcGluZ0N5Y2xlJyk7XHJcbiAgICBsZXQgY3VycmVudFRpbWVDeWNsZTogc3RyaW5nW10gPSBnZXQobG9va3VwVGltZWtlZXBpbmdDeWNsZSwgJ2Rpc3BsYXlWYWx1ZScpLm1hdGNoKHRoaXMudGltZUN5Y2xlUmUxKTtcclxuICAgIGlmIChpc0VtcHR5KGN1cnJlbnRUaW1lQ3ljbGUpKSB7XHJcbiAgICAgIGN1cnJlbnRUaW1lQ3ljbGUgPSBnZXQobG9va3VwVGltZWtlZXBpbmdDeWNsZSwgJ2Rpc3BsYXlWYWx1ZScpLm1hdGNoKHRoaXMudGltZUN5Y2xlUmUyKTtcclxuICAgIH1cclxuICAgIGxldCB0aW1lQ3ljbGVTdGFydERhdGUgPSBtb21lbnQoZmlyc3QoY3VycmVudFRpbWVDeWNsZSkpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgbGV0IHRpbWVDeWNsZUVuZERhdGUgPSBtb21lbnQobGFzdChjdXJyZW50VGltZUN5Y2xlKSkuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcbiAgICAvLyAwOC0wMS0yMDIxIGlzIFN1bmRheVxyXG4gICAgbGV0IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSA9IG1vbWVudChmaXJzdChjdXJyZW50VGltZUN5Y2xlKSkuaXNvV2Vla2RheSgnTW9uZGF5JykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcbiAgICBsZXQgY3VycmVudEN5Y2xlRGF0ZXMgPSB0aGlzLmJ1aWxkQ3VycmVudEN5Y2xlRGF0ZXMoY3VycmVudEN5Y2xlU3RhcnREYXRlKTtcclxuICAgIGxldCBjdXJyZW50Q3ljbGVFbmREYXRlID0gbW9tZW50KGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSkuYWRkKDYsICdkYXlzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcblxyXG4gICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVTdGFydERhdGUnLCB0aW1lQ3ljbGVTdGFydERhdGUpO1xyXG4gICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVFbmREYXRlJywgdGltZUN5Y2xlRW5kRGF0ZSk7XHJcbiAgICBzZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScsIGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSk7XHJcbiAgICBzZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZURhdGVzJywgY3VycmVudEN5Y2xlRGF0ZXMpO1xyXG4gICAgc2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVFbmREYXRlJywgY3VycmVudEN5Y2xlRW5kRGF0ZSk7XHJcblxyXG4gICAgcmV0dXJuIGFzc2lnbm1lbnQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdGltZUN5Y2xlRGlzcGxheSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSA9IGdldChoZWFkKGdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpKSwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpO1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZUVuZERhdGUgPSBnZXQoaGVhZChnZXQodGhpcy5kZXRhaWxzLCAnZ2V0Q2xpZW50QXNzaWdubWVudHMnKSksICdjdXJyZW50Q3ljbGVFbmREYXRlJyk7XHJcblxyXG4gICAgcmV0dXJuIGAke3RoaXMuY3ljbGVOYW1lfSR7Y3VycmVudEN5Y2xlU3RhcnREYXRlfSAtICR7Y3VycmVudEN5Y2xlRW5kRGF0ZX1gO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRDdXJyZW50Q3ljbGVEYXRlcyhzdGFydERhdGU6IHN0cmluZyk6IHsgZGF5T2ZXZWVrOiBzdHJpbmcsIGRhdGU6IHN0cmluZyB9W10ge1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZURhdGVzOiB7IGRheU9mV2Vlazogc3RyaW5nLCBkYXRlOiBzdHJpbmcgfVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgNzsgaSsrKSB7XHJcbiAgICAgIGN1cnJlbnRDeWNsZURhdGVzID0gY29uY2F0KGN1cnJlbnRDeWNsZURhdGVzLFxyXG4gICAgICAgIHsgZGF0ZTogbW9tZW50KHN0YXJ0RGF0ZSkuYWRkKGksICdkYXlzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksIGRheU9mV2VlazogbnRoKHRoaXMuZGF5T2ZXZWVrcywgaSkgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudEN5Y2xlRGF0ZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZFRpbWVzaGVldEJ5QWN0aXZpdHkoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IFRpbWVTaGVldFR5cGVbXSB7XHJcbiAgICBpZiAoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpKSB7XHJcbiAgICAgIGxldCByZXN1bHRzOiBUaW1lU2hlZXRUeXBlW10gPSBbXTtcclxuICAgICAgbGV0IG9yZGVyOiBudW1iZXIgPSAwO1xyXG4gICAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRGF0ZXMnKSwgKHZhbHVlOiB7IGRheU9mV2Vlazogc3RyaW5nLCBkYXRlOiBzdHJpbmcgfSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRpbWVzaGVldDogVGltZVNoZWV0ID0gZmluZChnZXQoYXNzaWdubWVudCwgJ3RpbWVrZWVwaW5nc1BlckN5Y2xlJyksICh0czogVGltZVNoZWV0KSA9PlxyXG4gICAgICAgICAgbW9tZW50KHRzLmRhdGUpLmlzU2FtZSh2YWx1ZS5kYXRlLCAnZGF5JyksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGltZXNoZWV0KSB7XHJcbiAgICAgICAgICBmb3JFYWNoKHRpbWVzaGVldC5hY3Rpdml0aWVzLCAoYWN0aXZpdHk6IFRpbWVLZWVwaW5nQWN0aXZpdHkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlJZDogbnVtYmVyID0gZ2V0KGFjdGl2aXR5LCAnYWN0aXZpdHlMb29rdXAubG9va3VwSWQnKTtcclxuICAgICAgICAgICAgbGV0IHJvdzogVGltZVNoZWV0VHlwZSA9IGZpbmQocmVzdWx0cywgKHRzOiBUaW1lU2hlZXRUeXBlKSA9PiBnZXQodHMsICdpZCcpID09PSBhY3Rpdml0eUlkKTtcclxuICAgICAgICAgICAgaWYgKCFyb3cpIHtcclxuICAgICAgICAgICAgICByb3cgPSB7IGlkOiBhY3Rpdml0eUlkLCB0aW1lczoge30sIG9yZGVyOiBvcmRlciwgbmFtZTogZ2V0KGFjdGl2aXR5LCAnYWN0aXZpdHlMb29rdXAuZGlzcGxheVZhbHVlJykgfTtcclxuICAgICAgICAgICAgICByZXN1bHRzID0gY29uY2F0KHJlc3VsdHMsIHJvdyk7XHJcbiAgICAgICAgICAgICAgb3JkZXIgPSBvcmRlciArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0KHJvdywgYHRpbWVzLiR7dmFsdWUuZGF5T2ZXZWVrfWAsIGFjdGl2aXR5LnRpbWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRDYXJmYXJlKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBDYXJmYXJlVHlwZVtdIHtcclxuICAgIGxldCBjYXJmYXJlczogQ2FyZmFyZVR5cGVbXSA9IFtdO1xyXG4gICAgZm9yRWFjaCh0aGlzLmRheU9mV2Vla3MsIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgLy8gZ2V0IGluaXRpYWwgZGF0YSBmcm9tIGRldGFpbHNcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlOiBzdHJpbmcgPSBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuYWRkKGluZGV4LCAnZCcpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICBjb25zdCB0aW1lU2hlZXRNb2RlbDogVGltZVNoZWV0ID0gY2hhaW4oYXNzaWdubWVudClcclxuICAgICAgICAuZ2V0KCd0aW1la2VlcGluZ3NQZXJDeWNsZScpXHJcbiAgICAgICAgLmZpbmQoKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShzZWxlY3RlZERhdGUsICdkJykpXHJcbiAgICAgICAgLnZhbHVlKCk7XHJcbiAgICAgIGNvbnN0IGlzRGlzYWJsZTogYm9vbGVhbiA9IGdldCh0aW1lU2hlZXRNb2RlbCwgJ2NhckZhcmUuaXNEaXNhYmxlJywgdHJ1ZSkgfHwgdGhpcy5pc0NhcmZhcmVEaXNhYmxlZChpdGVtLCBhc3NpZ25tZW50KTtcclxuICAgICAgY2FyZmFyZXMgPSBjb25jYXQoY2FyZmFyZXMsIFt7XHJcbiAgICAgICAgZGF0ZTogc2VsZWN0ZWREYXRlLCBkYXlPZldlZWs6IGl0ZW0sXHJcbiAgICAgICAgY2FyZmFyZVR5cGU6IGdldCh0aW1lU2hlZXRNb2RlbCwgJ2NhckZhcmUuY2FyRmFyZVR5cGUnKSxcclxuICAgICAgICBvcHRpb25zOiBnZXQodGltZVNoZWV0TW9kZWwsICdsb29rdXBDYXJGYXJlVHlwZXMnKSxcclxuICAgICAgICBpc0Rpc2FibGU6IGlzRGlzYWJsZSxcclxuICAgICAgfV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2FyZmFyZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZEFzc2lnbm1lbnRNb2RlKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBBc3NpZ25tZW50TW9kZVR5cGVbXSB7XHJcbiAgICBsZXQgYXNzaWdubWVudE1vZGVzOiBBc3NpZ25tZW50TW9kZVR5cGVbXSA9IFtdO1xyXG4gICAgZm9yRWFjaCh0aGlzLmRheU9mV2Vla3MsIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgLy8gZ2V0IGluaXRpYWwgZGF0YSBmcm9tIGRldGFpbHNcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlOiBzdHJpbmcgPSBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuYWRkKGluZGV4LCAnZCcpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICBjb25zdCB0aW1lU2hlZXRNb2RlbDogVGltZVNoZWV0ID0gY2hhaW4oYXNzaWdubWVudClcclxuICAgICAgICAuZ2V0KCd0aW1la2VlcGluZ3NQZXJDeWNsZScpXHJcbiAgICAgICAgLmZpbmQoKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShzZWxlY3RlZERhdGUsICdkJykpXHJcbiAgICAgICAgLnZhbHVlKCk7XHJcbiAgICAgIGNvbnN0IGlzRGlzYWJsZTogYm9vbGVhbiA9IHRoaXMudmlld09ubHkgfHwgZ2V0KHRpbWVTaGVldE1vZGVsLCAnaXNEaXNhYmxlJyk7XHJcbiAgICAgIGFzc2lnbm1lbnRNb2RlcyA9IGNvbmNhdChhc3NpZ25tZW50TW9kZXMsIFt7XHJcbiAgICAgICAgZGF0ZTogc2VsZWN0ZWREYXRlLCBkYXlPZldlZWs6IGl0ZW0sXHJcbiAgICAgICAgYXNzaWdubWVudE1vZGU6IGdldCh0aW1lU2hlZXRNb2RlbCwgJ2Fzc2lnbm1lbnRNb2RlJyksXHJcbiAgICAgICAgb3B0aW9uczogZ2V0KHRpbWVTaGVldE1vZGVsLCAnbG9va3VwQXNzaWdubWVudE1vZGVzJyksXHJcbiAgICAgICAgaXNEaXNhYmxlOiBpc0Rpc2FibGUsXHJcbiAgICAgIH1dKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFzc2lnbm1lbnRNb2RlcztcclxuICB9XHJcblxyXG4gIGluaXRGb3JtR3JvdXAoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgZm9yRWFjaChnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKSwgKGl0ZW06IFRpbWVTaGVldFR5cGUpID0+IHtcclxuICAgICAgY29uc3QgYWN0aXZpdHlJZDogc3RyaW5nID0gdG9TdHJpbmcoZ2V0KGl0ZW0sICdpZCcpKTtcclxuICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woYWN0aXZpdHlJZCwgdGhpcy5idWlsZEFjdGl2aXR5Rm9ybShpdGVtLCBhc3NpZ25tZW50KSk7XHJcbiAgICB9KTtcclxuICAgIHNldChhc3NpZ25tZW50LCAnZm9ybUdyb3VwJywgZm9ybUdyb3VwKTtcclxuICAgIGxldCBjYXJmYXJlRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycpLCAoaXRlbTogQ2FyZmFyZVR5cGUpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWU6IExvb2t1cCA9IGZpbmQoaXRlbS5vcHRpb25zLCAob3B0aW9uOiBMb29rdXApID0+IG9wdGlvbi5sb29rdXBJZCA9PT0gZ2V0KGl0ZW0sICdjYXJmYXJlVHlwZS5sb29rdXBJZCcpKTtcclxuICAgICAgY2FyZmFyZUZvcm1Hcm91cC5hZGRDb250cm9sKGl0ZW0uZGF5T2ZXZWVrLCBuZXcgRm9ybUNvbnRyb2woaXNOaWwodmFsdWUpID8gdGhpcy5kZWZhdWx0Q2FyZmFyZU9wdGlvbiA6IHZhbHVlKSk7XHJcbiAgICB9KTtcclxuICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZUZvcm1Hcm91cCcsIGNhcmZhcmVGb3JtR3JvdXApO1xyXG5cclxuICAgIGxldCBhc3NpZ25tZW50TW9kZUZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgZm9yRWFjaChnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRNb2RlTW9kZWxzJyksIChpdGVtOiBBc3NpZ25tZW50TW9kZVR5cGUpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWU6IExvb2t1cCA9IGZpbmQoaXRlbS5vcHRpb25zLCAob3B0aW9uOiBMb29rdXApID0+IG9wdGlvbi5sb29rdXBJZCA9PT0gZ2V0KGl0ZW0sICdhc3NpZ25tZW50TW9kZS5sb29rdXBJZCcpKTtcclxuICAgICAgYXNzaWdubWVudE1vZGVGb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtLmRheU9mV2VlaywgbmV3IEZvcm1Db250cm9sKGlzTmlsKHZhbHVlKSA/IHRoaXMuZGVmYXVsdENhcmZhcmVPcHRpb24gOiB2YWx1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSk7XHJcbiAgICB9KTtcclxuICAgIHNldChhc3NpZ25tZW50LCAnYXNzaWdubWVudE1vZGVGb3JtR3JvdXAnLCBhc3NpZ25tZW50TW9kZUZvcm1Hcm91cCk7XHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZFBhc3RDeWNsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzQmFja0Rpc2FibGUoKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhZ2V0KHRoaXMuZGV0YWlscywgJ2lzQWJhd2QnKSkge1xyXG4gICAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEN5Y2xlU3RhcnREYXRlOiBzdHJpbmcgPSBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuc3VidHJhY3QoNywgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q3ljbGVFbmREYXRlOiBzdHJpbmcgPSBtb21lbnQoY3VycmVudEN5Y2xlU3RhcnREYXRlKS5hZGQoNiwgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuICAgICAgICBpZiAobW9tZW50KGN1cnJlbnRDeWNsZUVuZERhdGUpLmlzQmVmb3JlKGdldChhc3NpZ25tZW50LCAndGltZUN5Y2xlU3RhcnREYXRlJyksICdkJykpIHtcclxuICAgICAgICAgIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaExvYWRQYXN0VGltZXNoZWV0KG5ldyBMb2FkUGFzdFRpbWVzaGVldFBheWxvYWQoe1xyXG4gICAgICAgICAgICBjYXNlSWQ6IGdldCh0aGlzLmRldGFpbHMsICdjYXNlSWQnKSxcclxuICAgICAgICAgICAgY3ljbGVTdGFydERhdGU6IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZVN0YXJ0RGF0ZScpKS5zdWJ0cmFjdCgxLCAnbW9udGhzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIGN5Y2xlRW5kRGF0ZTogbW9tZW50KGdldChhc3NpZ25tZW50LCAndGltZUN5Y2xlRW5kRGF0ZScpKS5zdWJ0cmFjdCgxLCAnbW9udGhzJykuZW5kT2YoJ21vbnRoJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIGlzQ2E6IHRoaXMuZGV0YWlscy5pc0NhLFxyXG4gICAgICAgICAgICBpc1ZlbnR1cmU6IHRoaXMuZGV0YWlscy5pc1ZlbnR1cmUsXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJywgY3VycmVudEN5Y2xlU3RhcnREYXRlKTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScsIGN1cnJlbnRDeWNsZUVuZERhdGUpO1xyXG5cclxuICAgICAgICAgIGxldCBjdXJyZW50Q3ljbGVEYXRlcyA9IHRoaXMuYnVpbGRDdXJyZW50Q3ljbGVEYXRlcyhjdXJyZW50Q3ljbGVTdGFydERhdGUpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVEYXRlcycsIGN1cnJlbnRDeWNsZURhdGVzKTtcclxuXHJcbiAgICAgICAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IHRoaXMuYnVpbGRUaW1lc2hlZXRCeUFjdGl2aXR5KGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lc2hlZXRCeUFjdGl2aXR5JywgdGltZXNoZWV0QnlBY3Rpdml0eSk7XHJcblxyXG4gICAgICAgICAgaWYgKGdldChhc3NpZ25tZW50LCAnZ2V0QWN0aXZpdGllcycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgbGV0IGNhcmZhcmVNb2RlbHMgPSB0aGlzLmJ1aWxkQ2FyZmFyZShhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycsIGNhcmZhcmVNb2RlbHMpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaW5pdEZvcm1Hcm91cChhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZvciBjYSBhbmQgdmVudHVyZSBjbGllbnRzKHdlZWtseSlcclxuICAgICAgbGV0IGFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuYXNzaWdubWVudHMpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q3ljbGVTdGFydERhdGU6IHN0cmluZyA9IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpKS5zdWJ0cmFjdCg3LCAnZGF5cycpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q3ljbGVFbmREYXRlOiBzdHJpbmcgPSBtb21lbnQoY3VycmVudEN5Y2xlU3RhcnREYXRlKS5hZGQoNiwgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuXHJcbiAgICAgIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaExvYWRQYXN0VGltZXNoZWV0KG5ldyBMb2FkUGFzdFRpbWVzaGVldFBheWxvYWQoe1xyXG4gICAgICAgIC8vYXNzaWdubWVudElkOiBnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRJZCcpLC8vUEtcclxuICAgICAgICBjYXNlSWQ6IHRoaXMuZGV0YWlscy5jYXNlSWQsXHJcbiAgICAgICAgY3ljbGVTdGFydERhdGU6IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSxcclxuICAgICAgICBjeWNsZUVuZERhdGU6IGN1cnJlbnRDeWNsZUVuZERhdGUsXHJcbiAgICAgICAgaXNDYTogdGhpcy5kZXRhaWxzLmlzQ2EsXHJcbiAgICAgICAgaXNWZW50dXJlOiB0aGlzLmRldGFpbHMuaXNWZW50dXJlLFxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRm9yd2FyZEN5Y2xlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNGb3J3YXJkRGlzYWJsZSgpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoISFnZXQodGhpcy5kZXRhaWxzLCAnaXNBYmF3ZCcpKSB7XHJcbiAgICAgIGZvckVhY2godGhpcy5hc3NpZ25tZW50cywgKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpID0+IHtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q3ljbGVTdGFydERhdGU6IHN0cmluZyA9IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpKS5zdWJ0cmFjdCg3LCAnZGF5cycpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDeWNsZUVuZERhdGU6IHN0cmluZyA9IG1vbWVudChjdXJyZW50Q3ljbGVTdGFydERhdGUpLmFkZCg2LCAnZGF5cycpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG5cclxuICAgICAgICBpZiAobW9tZW50KGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSkuaXNBZnRlcihnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZUVuZERhdGUnKSwgJ2RheScpKSB7XHJcbiAgICAgICAgICB0aGlzLnRpbWVLZWVwaW5nRGV0YWlsc1NlcnZpY2UuZGlzcGF0Y2hMb2FkUGFzdFRpbWVzaGVldChuZXcgTG9hZFBhc3RUaW1lc2hlZXRQYXlsb2FkKHtcclxuICAgICAgICAgICAgY2FzZUlkOiBnZXQodGhpcy5kZXRhaWxzLCAnY2FzZUlkJyksXHJcbiAgICAgICAgICAgIGN5Y2xlU3RhcnREYXRlOiBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVTdGFydERhdGUnKSkuYWRkKDEsICdtb250aHMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KSxcclxuICAgICAgICAgICAgY3ljbGVFbmREYXRlOiBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVFbmREYXRlJykpLmFkZCgxLCAnbW9udGhzJykuZW5kT2YoJ21vbnRoJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIGlzQ2E6IHRoaXMuZGV0YWlscy5pc0NhLFxyXG4gICAgICAgICAgICBpc1ZlbnR1cmU6IHRoaXMuZGV0YWlscy5pc1ZlbnR1cmUsXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJywgY3VycmVudEN5Y2xlU3RhcnREYXRlKTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScsIGN1cnJlbnRDeWNsZUVuZERhdGUpO1xyXG5cclxuICAgICAgICAgIGxldCBjdXJyZW50Q3ljbGVEYXRlcyA9IHRoaXMuYnVpbGRDdXJyZW50Q3ljbGVEYXRlcyhjdXJyZW50Q3ljbGVTdGFydERhdGUpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVEYXRlcycsIGN1cnJlbnRDeWNsZURhdGVzKTtcclxuXHJcbiAgICAgICAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IHRoaXMuYnVpbGRUaW1lc2hlZXRCeUFjdGl2aXR5KGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lc2hlZXRCeUFjdGl2aXR5JywgdGltZXNoZWV0QnlBY3Rpdml0eSk7XHJcblxyXG4gICAgICAgICAgaWYgKGdldChhc3NpZ25tZW50LCAnZ2V0QWN0aXZpdGllcycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgbGV0IGNhcmZhcmVNb2RlbHMgPSB0aGlzLmJ1aWxkQ2FyZmFyZShhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycsIGNhcmZhcmVNb2RlbHMpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaW5pdEZvcm1Hcm91cChhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZvciBjYSBhbmQgdmVudHVyZSBjbGllbnRzKHdlZWtseSlcclxuICAgICAgbGV0IGFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuYXNzaWdubWVudHMpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q3ljbGVTdGFydERhdGU6IHN0cmluZyA9IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpKS5hZGQoNywgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuICAgICAgY29uc3QgY3VycmVudEN5Y2xlRW5kRGF0ZTogc3RyaW5nID0gbW9tZW50KGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSkuYWRkKDYsICdkYXlzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcblxyXG4gICAgICB0aGlzLnRpbWVLZWVwaW5nRGV0YWlsc1NlcnZpY2UuZGlzcGF0Y2hMb2FkUGFzdFRpbWVzaGVldChuZXcgTG9hZFBhc3RUaW1lc2hlZXRQYXlsb2FkKHtcclxuICAgICAgICAvL2Fzc2lnbm1lbnRJZDogZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50SWQnKSwvL1BLXHJcbiAgICAgICAgY2FzZUlkOiB0aGlzLmRldGFpbHMuY2FzZUlkLFxyXG4gICAgICAgIGN5Y2xlU3RhcnREYXRlOiBjdXJyZW50Q3ljbGVTdGFydERhdGUsXHJcbiAgICAgICAgY3ljbGVFbmREYXRlOiBjdXJyZW50Q3ljbGVFbmREYXRlLFxyXG4gICAgICAgIGlzQ2E6IHRoaXMuZGV0YWlscy5pc0NhLFxyXG4gICAgICAgIGlzVmVudHVyZTogdGhpcy5kZXRhaWxzLmlzVmVudHVyZSxcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQWN0aXZpdHkoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgYWN0aXZpdHk6IExvb2t1cCA9IHRoaXMuY29udHJvbC52YWx1ZTtcclxuICAgIGlmICghYWN0aXZpdHkgfHwgdGhpcy52aWV3T25seSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvcm1Hcm91cCA9IGdldChhc3NpZ25tZW50LCAnZm9ybUdyb3VwJyk7XHJcbiAgICBpZiAoZm9ybUdyb3VwLmNvbnRhaW5zKHRvU3RyaW5nKGFjdGl2aXR5Lmxvb2t1cElkKSkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmIChnZXQoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCksIGFjdGl2aXR5Lmxvb2t1cElkKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbGV0IHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKTtcclxuICAgIGNvbnN0IGFjdGl2aXR5TnVtYmVyOiBudW1iZXIgPSBnZXQobGFzdCh0aW1lc2hlZXRCeUFjdGl2aXR5KSwgJ29yZGVyJywgMCkgKyAxO1xyXG4gICAgbGV0IG5ld0FjdGl2aXR5VGltZXNoZWV0OiBUaW1lU2hlZXRUeXBlID0ge1xyXG4gICAgICBpZDogYWN0aXZpdHkubG9va3VwSWQsXHJcbiAgICAgIG5hbWU6IGFjdGl2aXR5LmRpc3BsYXlWYWx1ZSwgb3JkZXI6IGFjdGl2aXR5TnVtYmVyLCB0aW1lczogcmVkdWNlKHRoaXMuZGF5T2ZXZWVrcyxcclxuICAgICAgICAocmVzdWx0OiB7IFtrOiBzdHJpbmddOiBudW1iZXIgfSwgZGF5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJlc3VsdFtkYXldID0gbnVsbDtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSwge30pXHJcbiAgICB9O1xyXG4gICAgbGV0IGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBzb3J0QnkoY29uY2F0KHRpbWVzaGVldEJ5QWN0aXZpdHksIG5ld0FjdGl2aXR5VGltZXNoZWV0KSwgWydvcmRlciddKTtcclxuICAgIHNldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScsIGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkpO1xyXG4gICAgdGhpcy5idWlsZEZpbHRlcmVkQWN0aXZpdGllcyhhc3NpZ25tZW50KTtcclxuICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKHRvU3RyaW5nKGFjdGl2aXR5Lmxvb2t1cElkKSwgdGhpcy5idWlsZEFjdGl2aXR5Rm9ybShuZXdBY3Rpdml0eVRpbWVzaGVldCwgYXNzaWdubWVudCkpO1xyXG4gICAgLy9zaG91bGQgdGhpcyBiZSBzZXQgYWdhaW4/XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQpO1xyXG4gICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUFjdGl2aXR5KGFjdGl2aXR5SWQ6IG51bWJlciwgYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICBjb25zdCBhdHRlc3RlZEFjdGl2aXR5U2hvdyA9ICF0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlP2Fzc2lnbm1lbnQuaXNTZWxmQXR0ZXN0ZWRTY2hvb2w6ZmFsc2VcclxuICAgIGlmICh0aGlzLnZpZXdPbmx5IHx8IGF0dGVzdGVkQWN0aXZpdHlTaG93ICE9IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IGdldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScpO1xyXG4gICAgbGV0IGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBzb3J0QnkoX2ZpbHRlcih0aW1lc2hlZXRCeUFjdGl2aXR5LCAoaXRlbTogVGltZVNoZWV0VHlwZSkgPT4gZ2V0KGl0ZW0sICdpZCcpICE9PSBhY3Rpdml0eUlkKSwgJ29yZGVyJyk7XHJcbiAgICBzZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknLCBhbGx0aW1lc2hlZXRCeUFjdGl2aXR5KTtcclxuICAgIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCk7XHJcbiAgICBsZXQgZm9ybUdyb3VwID0gZ2V0KGFzc2lnbm1lbnQsICdmb3JtR3JvdXAnKTtcclxuICAgIGZvcm1Hcm91cC5yZW1vdmVDb250cm9sKHRvU3RyaW5nKGFjdGl2aXR5SWQpKTtcclxuICAgIC8vc2hvdWxkIHRoaXMgYmUgc2V0IGFnYWluP1xyXG4gICAgdGhpcy5jYWxjdWxhdGVUb3RhbChhc3NpZ25tZW50KTtcclxuICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdW0oaXRlbTogVGltZVNoZWV0VHlwZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gcmVkdWNlKGdldChpdGVtLCAndGltZXMnKSwgKHJlc3VsdDogbnVtYmVyLCB0aW1lOiBudW1iZXIpID0+IHJlc3VsdCArPSB0aW1lLCAwKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUhvdXJzKGV2ZW50OiBzdHJpbmcsIGFjdGl2aXR5SWQ6IG51bWJlciwgZGF5T2ZXZWVrOiBzdHJpbmcsIGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiB2b2lkIHtcclxuICAgIGxldCBmb3JtR3JvdXAgPSBnZXQoYXNzaWdubWVudCwgJ2Zvcm1Hcm91cCcpO1xyXG4gICAgY29uc3QgYWN0aXZpdHlDdHJsOiBBYnN0cmFjdENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbdG9TdHJpbmcoYWN0aXZpdHlJZCldO1xyXG4gICAgY29uc3QgY3RybDogQWJzdHJhY3RDb250cm9sID0gYWN0aXZpdHlDdHJsLmdldChkYXlPZldlZWspO1xyXG4gICAgaWYgKCF0aGlzLmhvdXJQYXR0ZXJuLnRlc3QoZXZlbnQpKSB7XHJcbiAgICAgIGludm9rZShjdHJsLCAnc2V0RXJyb3JzJywgeyBwYXR0ZXJuOiAnMCAtIDcnIH0pO1xyXG4gICAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcclxuICAgIGxldCBmb3JtVmFsdWU6IGFueSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgLy8gQ2hlY2sgaWYgb3ZlciA3IGhvdXJzIGluIHRvdGFsIG9uIGFueSBnaXZlbiBkYXkoY3VzdG9tRXJyb3IpO1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxyXG4gICAgY29uc3Qgc3VtT2ZEYXk6IG51bWJlciA9IHJlZHVjZShmb3JtVmFsdWUsIChyZXM6IG51bWJlciwgdjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiByZXMgKyB0b051bWJlcihnZXQodiwgZGF5T2ZXZWVrKSk7XHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICBpZiAoc3VtT2ZEYXkgPiB0aGlzLm1heEhvdXJzKSB7XHJcbiAgICAgIGludm9rZShjdHJsLCAnc2V0RXJyb3JzJywgeyBjdXN0b21FcnJvcjogdGhpcy5jdXN0b21FcnJvck1lc3NhZ2UgfSk7XHJcbiAgICAgIGN0cmwubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgLy8gVXBkYXRlIGRhaWx5IHRvdGFsXHJcbiAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IGdldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScpO1xyXG4gICAgbGV0IGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBzb3J0QnkobWFwKGtleXMoZm9ybVZhbHVlKSwgKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBUaW1lU2hlZXRUeXBlID0gZmluZCh0aW1lc2hlZXRCeUFjdGl2aXR5LCAoaXRlbTogVGltZVNoZWV0VHlwZSkgPT4gdG9TdHJpbmcoaXRlbS5pZCkgPT09IGtleSk7XHJcbiAgICAgIGNvbnN0IHRpbWVzOiB7IFtrOiBzdHJpbmddOiBudW1iZXIgfSA9IG1hcFZhbHVlcyhmb3JtVmFsdWVba2V5XSwgKGhvdXJzOiBzdHJpbmcpID0+IHRoaXMuaG91cnNUb051bWJlcihob3VycykpO1xyXG4gICAgICByZXR1cm4geyBuYW1lOiBzZWxlY3RlZC5uYW1lLCB0aW1lczogdGltZXMsIG9yZGVyOiBzZWxlY3RlZC5vcmRlciwgaWQ6IHRvTnVtYmVyKGtleSkgfTtcclxuICAgIH0pLCAnb3JkZXInKTtcclxuICAgIHNldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScsIGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkpO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVUb3RhbChhc3NpZ25tZW50KTtcclxuICAgIHRoaXMudXBkYXRlQ2FyZmFyZShkYXlPZldlZWssIGFzc2lnbm1lbnQpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRBY3Rpdml0eUZvcm0oaXRlbTogVGltZVNoZWV0VHlwZSwgYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IEZvcm1Hcm91cCB7XHJcbiAgICBsZXQgY3VycmVudEN5Y2xlRGF0ZXMgPSBnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZURhdGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChtYXBWYWx1ZXMoa2V5QnkoY3VycmVudEN5Y2xlRGF0ZXMsICdkYXlPZldlZWsnKSwgKHY6IHsgZGF0ZTogc3RyaW5nLCBkYXlPZldlZWs6IHN0cmluZyB9LCBrOiBzdHJpbmcpID0+IHtcclxuICAgICAgbGV0IHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSBnZXQoaXRlbSwgYHRpbWVzLiR7a31gKTtcclxuICAgICAgaWYgKHRoaXMuaXNGZWRlcmFsSG9saWRheSh2LmRhdGUsIGFzc2lnbm1lbnQpKSB7XHJcbiAgICAgICAgdmFsdWUgPSAnSG9saWRheSc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvbGlkYXkodi5kYXRlLCBhc3NpZ25tZW50KSkge1xyXG4gICAgICAgIHZhbHVlID0gJ0V4Y3VzZSc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFt7IHZhbHVlOiB2YWx1ZSwgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlKHYuZGF0ZSwgYXNzaWdubWVudCkgfSxcclxuICAgICAgW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLmhvdXJQYXR0ZXJuKSwgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhIb3VycyldXTtcclxuICAgICAgLy8sIFZhbGlkYXRvcnMucmVxdWlyZWQgLS0gcmVtb3ZlZCBiZWNhdXNlIGRlZmF1bHQgaG91cnMgaXMgbnVsbCBhbmQgdXNlciBpcyBhbGxvd2VkIHRvIHNhdmUgcGFydGlhbCB0aW1lc2hlZXRcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiB2b2lkIHtcclxuICAgIGxldCBjdXJyZW50Q3ljbGVEYXRlcyA9IGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRGF0ZXMnKTtcclxuICAgIGZvckVhY2goY3VycmVudEN5Y2xlRGF0ZXMsICh2OiB7IGRhdGU6IHN0cmluZywgZGF5T2ZXZWVrOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICBsZXQgdG90YWw6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmIChtb21lbnQodi5kYXRlKS5pc0FmdGVyKGdldChhc3NpZ25tZW50LCAndGltZUN5Y2xlRW5kRGF0ZScpKSB8fCBtb21lbnQodi5kYXRlKS5pc0JlZm9yZShnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZVN0YXJ0RGF0ZScpKSkge1xyXG4gICAgICAgIC8vIGFiYXdkIGNsaWVudHNcclxuICAgICAgICBzZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAnTi9BJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMuaXNIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkgfHwgdGhpcy5pc0ZlZGVyYWxIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkpXHJcbiAgICAgICAgLy8gaWYgaXQncyBwdWJsaWMvZmVkZXJhbCBob2xpZGF5LCB0aGVuIGRhaWx5IHRvdGFsIGlzIGhvdXJzUGVyU2NoZWR1bGVEYXlcclxuICAgICAgICAmJiBtb21lbnQodi5kYXRlKS5pc1NhbWVPckFmdGVyKGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudFN0YXJ0RGF0ZScpLCAnZGF5JylcclxuICAgICAgICAmJiAoKCEhKGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudEVuZERhdGUnKSkgJiYgbW9tZW50KHYuZGF0ZSkuaXNTYW1lT3JCZWZvcmUoZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50RW5kRGF0ZScpLCAnZGF5JykpXHJcbiAgICAgICAgICB8fCAhZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50RW5kRGF0ZScpKVxyXG4gICAgICAgICYmIHRoaXMuaXNPblNjaGVkdWxlKHYuZGF5T2ZXZWVrKSAmJiBzaXplKChnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKSkpID4gMCkge1xyXG4gICAgICAgIHRvdGFsID0gZ2V0KGFzc2lnbm1lbnQsICdob3Vyc1BlclNjaGVkdWxlRGF5Jyk7XHJcbiAgICAgICAgc2V0KGFzc2lnbm1lbnQsIFsnZGFpbHlUb3RhbCcsIHYuZGF5T2ZXZWVrXSwgdG90YWwpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkgfHwgdGhpcy5pc0ZlZGVyYWxIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkpIHtcclxuICAgICAgICBzZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAwKTtcclxuICAgICAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScpLCAodmFsdWU6IFRpbWVTaGVldFR5cGUpID0+IHtcclxuICAgICAgICAgIGxldCB0aW1lOiBudW1iZXIgPSBnZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAwKTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCBbJ2RhaWx5VG90YWwnLCB2LmRheU9mV2Vla10sIHRpbWUgKyBnZXQodmFsdWUsIGB0aW1lcy4ke3YuZGF5T2ZXZWVrfWAsIDApKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbFN1bShhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogbnVtYmVyIHtcclxuICAgIHJldHVybiByZWR1Y2UoZ2V0KGFzc2lnbm1lbnQsICdkYWlseVRvdGFsJyksIChyZXN1bHQ6IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4gcmVzdWx0ICs9IGlzTnVtYmVyKHZhbHVlKSA/IHZhbHVlIDogMCwgMCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgSXMgZWFjaCBob3VyIGVsZW1lbnQgZGlzYWJsZWQ6IGJhc2VkIG9uIGNhblZpZXdPbmx5IG9yIGVhY2ggdGltZWtlZXBpbmdzUGVyQ3ljbGUncyBpc0hvbGlkYXksIGlzRGlzYWJsZS5cclxuICAgKi9cclxuICBpc0Rpc2FibGUoZGF0ZTogc3RyaW5nLCBhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBUaW1lU2hlZXQgPSBmaW5kKGdldChhc3NpZ25tZW50LCAndGltZWtlZXBpbmdzUGVyQ3ljbGUnKSwgKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShkYXRlLCAnZGF5JykpO1xyXG4gICAgICBjb25zdCBpc0Z1dHVyZURhdGU6IGJvb2xlYW4gPSBtb21lbnQoZGF0ZSkuaXNBZnRlcihtb21lbnQoKSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnZpZXdPbmx5IHx8ICFzZWxlY3RlZCB8fCAhIWdldChzZWxlY3RlZCwgJ2lzSG9saWRheScpIHx8ICEhZ2V0KHNlbGVjdGVkLCAnaXNEaXNhYmxlJykgfHwgISFnZXQoc2VsZWN0ZWQsICdpc0ZlZGVyYWxIb2xpZGF5JykgfHwgaXNGdXR1cmVEYXRlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudmlld09ubHk7XHJcbiAgfVxyXG5cclxuICBpc0hvbGlkYXkoZGF0ZTogc3RyaW5nLCBhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBUaW1lU2hlZXQgPSBmaW5kKGdldChhc3NpZ25tZW50LCAndGltZWtlZXBpbmdzUGVyQ3ljbGUnKSwgKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShkYXRlLCAnZGF5JykpO1xyXG4gICAgICByZXR1cm4gZ2V0KHNlbGVjdGVkLCAnaXNIb2xpZGF5JywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNGZWRlcmFsSG9saWRheShkYXRlOiBzdHJpbmcsIGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBib29sZWFuIHtcclxuICAgIGlmIChnZXQoYXNzaWdubWVudCwgJ3RpbWVrZWVwaW5nc1BlckN5Y2xlJykpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQ6IFRpbWVTaGVldCA9IGZpbmQoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpLCAodGltZXNoZWV0OiBUaW1lU2hlZXQpID0+IG1vbWVudCh0aW1lc2hlZXQuZGF0ZSkuaXNTYW1lKGRhdGUsICdkYXknKSk7XHJcbiAgICAgIHJldHVybiBnZXQoc2VsZWN0ZWQsICdpc0ZlZGVyYWxIb2xpZGF5JywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNGb3J3YXJkRGlzYWJsZSgpOiBib29sZWFuIHtcclxuICAgIGxldCBhc3NpZ25tZW50ID0gaGVhZCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpO1xyXG4gICAgaWYgKGdldCh0aGlzLmRldGFpbHMsICdpc0FiYXdkJykgJiYgbW9tZW50KGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScpKS5pc0JlZm9yZShnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZUVuZERhdGUnKSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFnZXQodGhpcy5kZXRhaWxzLCAnY2FuR29Gb3J3YXJkJyk7XHJcbiAgfVxyXG5cclxuICBpc0JhY2tEaXNhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuZGV0YWlscywgJ2dldENsaWVudEFzc2lnbm1lbnRzJyk7XHJcbiAgICBpZiAoZ2V0KHRoaXMuZGV0YWlscywgJ2lzQWJhd2QnKSAmJiBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuaXNBZnRlcihnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZVN0YXJ0RGF0ZScpKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIWdldCh0aGlzLmRldGFpbHMsICdjYW5Hb1Bhc3QnKTtcclxuICB9XHJcblxyXG4gIGlzSG91cnNFeGNlZWRlZChhOiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUb3RhbFN1bShhKSA+IGEuaG91ckFzc2lnbmVkO1xyXG4gIH1cclxuXHJcbiAgaG91cnNMb2dnZWQoZm9ybVZhbHVlOiBhbnkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHJlZHVjZShmb3JtVmFsdWUsIChyZXN1bHQ6IG51bWJlciwgdmFsdWU6IG51bWJlciwga2V5OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKHRvTnVtYmVyKGtleSkgIT09IHRoaXMudW5leGN1c2VkQWN0aXZpdHkpIHtcclxuICAgICAgICByZXN1bHQgKz0gc3VtKG1hcCh2YWx1ZXModmFsdWUpLCAodjogdW5rbm93bikgPT4gdG9OdW1iZXIodikpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBpc0hvdXJzRGVmaWNpdCgpOiBib29sZWFuIHtcclxuICAgIGxldCBnZXRIb3VycyA9IG1hcCh0aGlzLmFzc2lnbm1lbnRzLCAoYTogQ2xpZW50QXNzaWdubWVudCkgPT4ge1xyXG4gICAgICBsZXQgZm9ybVZhbHVlOiBhbnkgPSBpbnZva2UoYSwgJ2Zvcm1Hcm91cC5nZXRSYXdWYWx1ZScpO1xyXG4gICAgICByZXR1cm4gdGhpcy5ob3Vyc0xvZ2dlZChmb3JtVmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgdG90YWxIb3VyczogbnVtYmVyID0gc3VtKGdldEhvdXJzKTtcclxuICAgIGxldCBlbmdhZ2VtZW50SG91cnM6IG51bWJlciA9IE1hdGgubWluKGdldChoZWFkKHRoaXMuYXNzaWdubWVudHMpLCAnaG91ckdyb3VwJyksIDMwKTtcclxuICAgIHJldHVybiB0b3RhbEhvdXJzIDwgZW5nYWdlbWVudEhvdXJzO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVBbmRTYXZlKCk6IHZvaWQge1xyXG4gICAgbGV0IGhvdXJzRXhjZWVkZWQ6IGJvb2xlYW4gPSBzb21lKHRoaXMuYXNzaWdubWVudHMsIChhOiBDbGllbnRBc3NpZ25tZW50KSA9PiB0aGlzLmdldFRvdGFsU3VtKGEpID4gYS5ob3VyQXNzaWduZWQpO1xyXG4gICAgdGhpcy5zaG93RGVmaWNpdEhvdXJzTWVzc2FnZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChob3Vyc0V4Y2VlZGVkKSB7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRpbWVzaGVldFdhcm5pbmdNb2RhbENvbXBvbmVudD4gPSB0aGlzLmRpYWxvZy5vcGVuKFRpbWVzaGVldFdhcm5pbmdNb2RhbENvbXBvbmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dEZWZpY2l0SG91cnNNZXNzYWdlID0gKGdldCh0aGlzLmRldGFpbHMsICdpc0R1ZScpICYmIHRoaXMuaXNIb3Vyc0RlZmljaXQoKSk7XHJcbiAgICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2F2ZVBheWxvYWQoYXNzaWdubWVudElkPzogbnVtYmVyKTogU2F2ZVRpbWVrZWVwaW5nRGV0YWlscyB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XHJcbiAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhOiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICAgIGxldCBjYXJmYXJlRm9ybVZhbHVlOiBhbnkgPSBpbnZva2UoYSwgJ2NhcmZhcmVGb3JtR3JvdXAuZ2V0UmF3VmFsdWUnKTtcclxuICAgICAgbGV0IGFzc2lnbm1lbnRNb2RlRm9ybVZhbHVlOiBhbnkgPSBpbnZva2UoYSwgJ2Fzc2lnbm1lbnRNb2RlRm9ybUdyb3VwLmdldFJhd1ZhbHVlJyk7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcclxuICAgICAgbGV0IGZvcm1WYWx1ZTogYW55ID0gaW52b2tlKGEsICdmb3JtR3JvdXAuZ2V0UmF3VmFsdWUnKTtcclxuICAgICAgbGV0IGFzbXQgPSBmaW5kKGdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycsIFtdKSwgKGM6IENsaWVudEFzc2lnbm1lbnQpID0+IGMuYXNzaWdubWVudElkID09IGEuYXNzaWdubWVudElkKTtcclxuICAgICAgbGV0IG9sZFRpbWVTaGVldHM6IFRpbWVTaGVldFtdID0gZ2V0KGFzbXQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpO1xyXG4gICAgICBjb25zdCB0aW1la2VlcGluZ3NQZXJDeWNsZTogVGltZVNoZWV0W10gPSBtYXAob2xkVGltZVNoZWV0cywgKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiB7XHJcbiAgICAgICAgLy8gYWRkIGFjdGl2aXR5IHRvIGN1cnJlbnQgd2VlayBvbmx5XHJcbiAgICAgICAgaWYgKG1vbWVudCh0aW1lc2hlZXQuZGF0ZSkuaXNBZnRlcihnZXQoYSwgJ2N1cnJlbnRDeWNsZUVuZERhdGUnKSwgJ2RheScpXHJcbiAgICAgICAgICB8fCBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzQmVmb3JlKGdldChhLCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJyksICdkYXknKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRpbWVzaGVldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYWN0aXZpdGllczogVGltZUtlZXBpbmdBY3Rpdml0eVtdID0gbWFwKGtleXMoZm9ybVZhbHVlKSwgKGFjdGl2aXR5SWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGl2aXR5OiBMb29rdXAgPSBmaW5kKGdldChhLCAnZ2V0QWN0aXZpdGllcycpLCAoYWN0aXZpdHk6IExvb2t1cCkgPT4gYWN0aXZpdHkubG9va3VwSWQgPT09IHRvTnVtYmVyKGFjdGl2aXR5SWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZGF5T2ZXZWVrOiBzdHJpbmcgPSB0aW1lc2hlZXQuZGF5T2ZXZWVrO1xyXG4gICAgICAgICAgICBjb25zdCBvbGRBY3Rpdml0eTogVGltZUtlZXBpbmdBY3Rpdml0eSA9XHJcbiAgICAgICAgICAgICAgZmluZChnZXQodGltZXNoZWV0LCAnYWN0aXZpdGllcycpLCAoYWN0aXZpdHk6IFRpbWVLZWVwaW5nQWN0aXZpdHkpID0+IGFjdGl2aXR5LmFjdGl2aXR5TG9va3VwLmxvb2t1cElkID09PSB0b051bWJlcihhY3Rpdml0eUlkKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGltZUtlZXBpbmdBY3Rpdml0eSh7XHJcbiAgICAgICAgICAgICAgdGltZWtlZXBpbmdBY3Rpdml0eU1hcHBpbmdJZDogZ2V0KG9sZEFjdGl2aXR5LCAndGltZWtlZXBpbmdBY3Rpdml0eU1hcHBpbmdJZCcsIHVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgICAgYXNzaWdubWVudEFjdGl2aXR5SWQ6IGdldChvbGRBY3Rpdml0eSwgJ2Fzc2lnbm1lbnRBY3Rpdml0eUlkJywgdW5kZWZpbmVkKSxcclxuICAgICAgICAgICAgICBhY3Rpdml0eUxvb2t1cDogc2VsZWN0ZWRBY3Rpdml0eSxcclxuICAgICAgICAgICAgICB0aW1lOiB0aGlzLmhvdXJzVG9OdW1iZXIoZ2V0KGZvcm1WYWx1ZSwgYCR7YWN0aXZpdHlJZH0uJHtkYXlPZldlZWt9YCkpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgbGV0IGNhcmZhcmU6IENhcmZhcmVNb2RlbCA9IHRpbWVzaGVldC5jYXJGYXJlO1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udGltZXNoZWV0LFxyXG4gICAgICAgICAgICBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzLFxyXG4gICAgICAgICAgICBjYXJGYXJlOiB7XHJcbiAgICAgICAgICAgICAgLi4uY2FyZmFyZSxcclxuICAgICAgICAgICAgICBpZDogZ2V0KGNhcmZhcmVGb3JtVmFsdWUsIGAke3RpbWVzaGVldC5kYXlPZldlZWt9Lmxvb2t1cElkYCkgPT09IDAgPyAwIDogZ2V0KGNhcmZhcmUsICdpZCcpLFxyXG4gICAgICAgICAgICAgIGNhckZhcmVUeXBlOiBnZXQoY2FyZmFyZUZvcm1WYWx1ZSwgYCR7dGltZXNoZWV0LmRheU9mV2Vla30ubG9va3VwSWRgKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGdldChjYXJmYXJlRm9ybVZhbHVlLCB0aW1lc2hlZXQuZGF5T2ZXZWVrKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXNzaWdubWVudE1vZGU6IGdldChhc3NpZ25tZW50TW9kZUZvcm1WYWx1ZSwgYCR7dGltZXNoZWV0LmRheU9mV2Vla30ubG9va3VwSWRgKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGdldChhc3NpZ25tZW50TW9kZUZvcm1WYWx1ZSwgdGltZXNoZWV0LmRheU9mV2VlayksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNldChhLCAnc2F2ZVRpbWVrZWVwaW5nc1BlckN5Y2xlJywgdGltZWtlZXBpbmdzUGVyQ3ljbGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gbGV0IGlzRG5jVXNlZDogYm9vbGVhbiA9IGdldCh0aGlzLmRldGFpbHMsICdpc0ROQ1VzZWQnKTtcclxuICAgIC8vIGlmICghaXNEbmNVc2VkICYmIHRoaXMuZG9Ob3RDb25jaWxpYXRlQWN0aW9uKSB7XHJcbiAgICAvLyAgIGlzRG5jVXNlZCA9IHRydWU7XHJcbiAgICAvLyB9XHJcbiAgICBsZXQgc2F2ZVRpbWVrZWVwaW5nID0gbmV3IFNhdmVUaW1la2VlcGluZ0RldGFpbHMoe1xyXG4gICAgICBjYXNlSWQ6IHRoaXMuZGV0YWlscy5jYXNlSWQsXHJcbiAgICAgIHRpbWVLZWVwaW5nQ3ljbGVJZDogZ2V0KGhlYWQodGhpcy5hc3NpZ25tZW50cyksICdsb29rdXBUaW1la2VlcGluZ0N5Y2xlLmxvb2t1cElkJyksXHJcbiAgICAgIGlzU2VsZkF0dGVzdGVkQ2hlY2tlZDogdGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSxcclxuICAgICAgcG9zdENsaWVudFBhcnRpY2lwYW50VGltZVNoZWV0czogbWFwKHRoaXMuYXNzaWdubWVudHMsIChhOiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmEsXHJcbiAgICAgICAgICBpc1BDUzogKGFzc2lnbm1lbnRJZCA9PSBhLmFzc2lnbm1lbnRJZCkgPyB0cnVlIDogbnVsbCxcclxuICAgICAgICAgIHRpbWVrZWVwaW5nc1BlckN5Y2xlOiBnZXQoYSwgJ3NhdmVUaW1la2VlcGluZ3NQZXJDeWNsZScpLFxyXG4gICAgICAgICAgLy9kb05vdENvbmNpbGlhdGVDb3VudGVyOiB0aGlzLmRvTm90Q29uY2lsaWF0ZUNvdW50ZXIsXHJcbiAgICAgICAgICBpc0ROQ1VzZWQ6IGdldChhLCAnaXNEbmNVc2VkJykgfHwgKCFnZXQoYSwgJ2lzRG5jVXNlZCcpICYmIGdldChhLCAnZG9Ob3RDb25jaWxpYXRlQWN0aW9uJykpLFxyXG4gICAgICAgICAgdXBkYXRlZE9uOiBtb21lbnQoKS5mb3JtYXQoKSxcclxuICAgICAgICAgIHVwZGF0ZWRCeTogdGhpcy51cGRhdGVkQnksXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2F2ZVRpbWVrZWVwaW5nO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGxldCB0aW1lc2hlZXQgPSB0aGlzLmdldFNhdmVQYXlsb2FkKCk7XHJcbiAgICBsZXQgc2hvd0NvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbiA9IHNvbWUodGhpcy5hc3NpZ25tZW50cywgKGE6IENsaWVudEFzc2lnbm1lbnQpID0+ICEhZ2V0KGEsICdpc0ROQ1VzZWQnKSB8fCBnZXQoYSwgJ2RvTm90Q29uY2lsaWF0ZUFjdGlvbicpKTtcclxuICAgIGlmIChzaG93Q29uZmlybWF0aW9uRGlhbG9nKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1EaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQ+ID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICB3aWR0aDogZG5jRGlhbG9nU2l6ZSxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgZGF0YTogY29uZmlybURpYWxvZ0luZm8sXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XHJcbiAgICAgIGNvbmZpcm1EaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoU2F2ZURldGFpbHModGltZXNoZWV0KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc3BhdGNoU2F2ZURldGFpbHModGltZXNoZWV0KTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZGlzcGF0Y2hTYXZlRGV0YWlscyh0aW1lc2hlZXQ6IFNhdmVUaW1la2VlcGluZ0RldGFpbHMpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0ZXN0Y2hlY2tib3hjaGVja2VkID0gdHJ1ZTtcclxuICAgIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaFNhdmVUaW1lS2VlcGluZ0RldGFpbHMobmV3IFNhdmVUaW1lc2hlZXRQY3NQYXlsb2FkKHtcclxuICAgICAgdGltZXNoZWV0XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvL3NhdmUoKTogdm9pZCB7fVxyXG4gIG9wZW5QQ1MoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSA9IGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJyk7XHJcbiAgICBsZXQgY3VycmVudEN5Y2xlRW5kRGF0ZSA9IGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScpO1xyXG4gICAgbGV0IGlzUENTb2ZDbGllbnRFeGVtcHRFU2NvZGUzMiA9IGdldChhc3NpZ25tZW50LCdpc1BDU29mQ2xpZW50RXhlbXB0RVNjb2RlMzInKTtcclxuICAgIGlmKGlzUENTb2ZDbGllbnRFeGVtcHRFU2NvZGUzMil7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNob3dFc2NvZGVTdGF0dXNNZXNzYWdlQ29tcG9uZW50Pj0gdGhpcy5kaWFsb2cub3BlbihTaG93RXNjb2RlU3RhdHVzTWVzc2FnZUNvbXBvbmVudCx7XHJcbiAgICAgICAgd2lkdGg6IGRpYWxvZ1NpemUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxQYXJ0aWNpcGFudENoYW5nZVN0YXR1c0NvbXBvbmVudD4gPSB0aGlzLmRpYWxvZy5vcGVuKFBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBkaWFsb2dTaXplLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwY3NGb3JtRGF0YTogbmV3IFBjc0Zvcm1EYXRhKHtcclxuICAgICAgICAgIHN1Ym1pdHRlZEJ5OiB0aGlzLnVwZGF0ZWRCeSxcclxuICAgICAgICAgIHN1Ym1pdHRlZE9uOiB0aGlzLnRvZGF5RGF0ZSxcclxuICAgICAgICAgIGRhdGVPZkluZnJhY3Rpb246IHRoaXMudG9kYXlEYXRlLFxyXG4gICAgICAgICAgY3VycmVudEN5Y2xlU3RhcnREYXRlOiBjdXJyZW50Q3ljbGVTdGFydERhdGUsXHJcbiAgICAgICAgICBjdXJyZW50Q3ljbGVFbmREYXRlOiBjdXJyZW50Q3ljbGVFbmREYXRlLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHBjc1R5cGU6IG5ldyBMb29rdXAoeyBsb29rdXBJZDogZnRjLCBkaXNwbGF5VmFsdWU6IHRoaXMuZnRjVmFsdWUgfSksXHJcbiAgICAgICAgdmlld09ubHk6IGZhbHNlLFxyXG4gICAgICAgIHByZUNvbmNpbGlhdGlvbkxvb2t1cHM6IHtcclxuICAgICAgICAgIC4uLnRoaXMucHJlQ29uY2lsaWF0aW9uTG9va3VwcyxcclxuICAgICAgICAgIHBjc1R5cGVMb29rdXA6IHRoaXMuY3JlYXRlUGNzVHlwZUxvb2t1cHMoKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHJlczogUGFydGljaXBhbnRDaGFuZ2VTdGF0dXMpID0+IHtcclxuICAgICAgaWYgKCEhcmVzKSB7XHJcbiAgICAgICAgbGV0IGxvb2t1cFRpbWVrZWVwaW5nQ3ljbGVJZCA9IGdldChoZWFkKHRoaXMuYXNzaWdubWVudHMpLCAnbG9va3VwVGltZWtlZXBpbmdDeWNsZS5sb29rdXBJZCcpO1xyXG4gICAgICAgIGlmIChpc05pbChnZXQoYXNzaWdubWVudCwgJ3RpbWVrZWVwaW5nQ3ljbGVJZCcpKSkge1xyXG4gICAgICAgICAgdGhpcy50aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLmRpc3BhdGNoU2F2ZVRpbWVLZWVwaW5nRGV0YWlscyhuZXcgU2F2ZVRpbWVzaGVldFBjc1BheWxvYWQoe1xyXG4gICAgICAgICAgICB0aW1lc2hlZXQ6IHRoaXMuZ2V0U2F2ZVBheWxvYWQoIGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudElkJykgKSxcclxuICAgICAgICAgICAgcGNzOiBuZXcgUGFydGljaXBhbnRDaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICBjYXNlSWQ6IGdldCh0aGlzLmRldGFpbHMsICdjYXNlSWQnKSxcclxuICAgICAgICAgICAgICBhc3NpZ25tZW50SWQ6IGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudElkJyksXHJcbiAgICAgICAgICAgICAgY3ljbGU6IGxvb2t1cFRpbWVrZWVwaW5nQ3ljbGVJZCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGNzU2VydmljZS5kaXNwYXRjaFNhdmVQY3MobmV3IFBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgLi4ucmVzLFxyXG4gICAgICAgICAgICBjYXNlSWQ6IGdldCh0aGlzLmRldGFpbHMsICdjYXNlSWQnKSxcclxuICAgICAgICAgICAgYXNzaWdubWVudElkOiBnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRJZCcpLFxyXG4gICAgICAgICAgICBjeWNsZTogbG9va3VwVGltZWtlZXBpbmdDeWNsZUlkLFxyXG4gICAgICAgICAgICB0aW1lS2VlcGluZ0N5Y2xlSWQ6IGdldChhc3NpZ25tZW50LCAndGltZWtlZXBpbmdDeWNsZUlkJyksXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgfVxyXG5cclxuICBpc0NvbmNpbGlhdGVEaXNhYmxlZChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICAvLyBETkMgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIGRvTm90Q29uY2lsaWF0ZSBpcyBmYWxzZSBvciBpc0ROQ1VzZWQgaXMgdHJ1ZSAoZG5jIGFscmVhZHkgZW5hYmxlZCBpbiB0aGlzIHRpbWUgY3ljbGUpXHJcbiAgICByZXR1cm4gdGhpcy52aWV3T25seSB8fCAhZ2V0KGFzc2lnbm1lbnQsICdkb05vdENvbmNpbGlhdGUnLCBmYWxzZSkgfHwgISFnZXQoYXNzaWdubWVudCwgJ2lzRE5DVXNlZCcpO1xyXG4gIH1cclxuXHJcbiAgaXNQY3NEaXNhYmxlZChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZih0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlID09IHRydWUgJiYgdGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSAhPSB1bmRlZmluZWQpe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuaXNBdHRlc3RlZENoZWNrVmFsdWUgPT0gZmFsc2UgJiYgdGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSAhPSB1bmRlZmluZWQpe1xyXG4gICAgICByZXR1cm4gZ2V0KGFzc2lnbm1lbnQsICdpc1NlbGZBdHRlc3RlZFNjaG9vbCcpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlID09PSB1bmRlZmluZWQgJiYgZ2V0KGFzc2lnbm1lbnQsICdpc1NlbGZBdHRlc3RlZFNjaG9vbCcpID09PSB0cnVlKXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBpZiBETkMgaXMgZW5hYmxlZCwgdGhlbiBQQ1Mgd2lsbCBiZSBkaXNhYmxlZC5cclxuICAgIGVsc2V7XHJcbiAgICByZXR1cm4gdGhpcy52aWV3T25seSB8fCAhZ2V0KGFzc2lnbm1lbnQsICdjYW5DcmVhdGVQQ1MnKSB8fCBnZXQoYXNzaWdubWVudCwgJ2RvTm90Q29uY2lsaWF0ZUFjdGlvbicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0NvbmNpbGlhdGUoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG5jRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RG9Ob3RDb25jaWxpYXRlRGlhbG9nQ29tcG9uZW50PiA9IHRoaXMuZGlhbG9nLm9wZW4oRG9Ob3RDb25jaWxpYXRlRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBkbmNEaWFsb2dTaXplLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBkb05vdENvbmNpbGlhdGVDb3VudGVyOiBnZXQoYXNzaWdubWVudCwgJ2RvTm90Q29uY2lsaWF0ZUNvdW50ZXInKSxcclxuICAgICAgICBkb05vdENvbmNpbGlhdGVBY3Rpb246IGdldChhc3NpZ25tZW50LCAnZG9Ob3RDb25jaWxpYXRlQWN0aW9uJyksXHJcbiAgICAgICAgbWF4RG9Ob3RDb25jaWxpYXRlQ291bnQ6IHRoaXMuZGV0YWlscy5tYXhEb05vdENvbmNpbGlhdGVDb3VudCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgZG5jRGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHJlczogbnVtYmVyKSA9PiB7XHJcbiAgICAgIC8vIGRvTm90Q29uY2lsaWF0ZUFjdGlvbiBpcyB0cnVlOiBkbmMgaW4gRG9Ob3RDb25jaWxpYXRlRGlhbG9nQ29tcG9uZW50IGlzIGVuYWJsZWRcclxuICAgICAgbGV0IGRvTm90Q29uY2lsaWF0ZUFjdGlvbiA9IGdldChhc3NpZ25tZW50LCAnZG9Ob3RDb25jaWxpYXRlQ291bnRlcicpICE9PSByZXMgfHwgZ2V0KGFzc2lnbm1lbnQsICdkb05vdENvbmNpbGlhdGVBY3Rpb24nKTtcclxuICAgICAgbGV0IGRvTm90Q29uY2lsaWF0ZUNvdW50ZXIgPSByZXM7XHJcblxyXG4gICAgICBzZXQoYXNzaWdubWVudCwgJ2RvTm90Q29uY2lsaWF0ZUFjdGlvbicsIGRvTm90Q29uY2lsaWF0ZUFjdGlvbik7XHJcbiAgICAgIHNldChhc3NpZ25tZW50LCAnZG9Ob3RDb25jaWxpYXRlQ291bnRlcicsIGRvTm90Q29uY2lsaWF0ZUNvdW50ZXIpO1xyXG5cclxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNQYXJ0aWNpcGFudENoYW5nZU9mU3RhdHVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhZ2V0KHRoaXMuZGV0YWlscywgJ3Byb2dyYW1BbGVydCcpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0RjTWVzc2FnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIWdldCh0aGlzLmRldGFpbHMsICdkY01lc3NhZ2UnKTtcclxuICB9XHJcblxyXG4gIGdldERjTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuYXNzaWdubWVudHMpOyAvL0NoZWNrIGlmIHRoaXMgaXMgcmlnaHRcclxuICAgIHJldHVybiB0aGlzLmRldGFpbHMgPyBgJHtkY01lc3NhZ2V9JHttb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50U3RhcnREYXRlJykpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpfWAgK1xyXG4gICAgICAoZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50RW5kRGF0ZScpID8gYCB0byAke21vbWVudChnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRFbmREYXRlJykpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpfWAgOiAnJykgOiAnJztcclxuICB9XHJcblxyXG4gIGdldEVycm9yTWVzc2FnZShmb3JtR3JvdXBOYW1lOiBudW1iZXIsIGNvbnRyb2xOYW1lOiBzdHJpbmcsIGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZvcm1Hcm91cCA9IGdldChhc3NpZ25tZW50LCAnZm9ybUdyb3VwJyk7XHJcbiAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvU3RyaW5nKGZvcm1Hcm91cE5hbWUpKS5nZXQoY29udHJvbE5hbWUpO1xyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcclxuICAgICAgcmV0dXJuICdSZXF1aXJlZCc7XHJcbiAgICB9XHJcbiAgICBpZiAoY29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XHJcbiAgICAgIHJldHVybiBgMCAtICR7dGhpcy5tYXhIb3Vyc30gaG91cnNgO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ2N1c3RvbUVycm9yJykpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMubWF4SG91cnN9ICR7dGhpcy5jdXN0b21FcnJvck1lc3NhZ2V9YDtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBpc0Zvcm1JblZhbGlkKCl7XHJcbiAgICBsZXQgYXNzaWdubWVudFNlbGZBdHRDaGVja1ZhbCA6Ym9vbGVhbjtcclxuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gWy4uLmdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpXTtcclxuICAgICBmb3JFYWNoKGFzc2lnbm1lbnRzLCAoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCkgPT4ge1xyXG4gICAgICBpZihhc3NpZ25tZW50LmlzU2VsZkF0dGVzdGVkU2Nob29sICE9IHRydWUpe1xyXG4gICAgICBhc3NpZ25tZW50U2VsZkF0dENoZWNrVmFsID0gdHJ1ZTtcclxuICAgICAgfSBcclxuICAgIH0pXHJcbiAgICBpZihhc3NpZ25tZW50U2VsZkF0dENoZWNrVmFsKXtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSA9PSB0cnVlKXtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlIHx8IFxyXG4gICAgICAgIHNvbWUoZ2V0KHRoaXMuZGV0YWlscywgJ2dldENsaWVudEFzc2lnbm1lbnRzJyksIChjOiBDbGllbnRBc3NpZ25tZW50KSA9PiBnZXQoYywgJ2Zvcm1Hcm91cC5pbnZhbGlkJykpO1xyXG4gICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIGV4aXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYlNlcnZpY2UucmVtb3ZlVGFiKGB0aW1la2VlcGluZy8ke3RoaXMuZGV0YWlscy5jYXNlSWR9YCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdXBkYXRlZEJ5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZ2V0KHRoaXMudXNlciwgJ2xhc3ROYW1lJykgKyAnLCAnICsgZ2V0KHRoaXMudXNlciwgJ2ZpcnN0TmFtZScpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRpbWVGcmFtZU1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRldGFpbHMpIHtcclxuICAgICAgaWYgKHRoaXMuZGV0YWlscy5pc0FiYXdkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5pc0N1cnJlbnQgPyBhYmF3ZEN1cnJlbnRDeWNsZVRpbWVGcmFtZU1lc3NhZ2UgOiB0aGlzLmRldGFpbHMuaXNEdWUgPyBhYmF3ZER1ZUN5Y2xlVGltZUZyYW1lTWVzc2FnZSA6ICcnO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGV0YWlscy5pc1ZlbnR1cmUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmlzQ3VycmVudCA/IHZlbnR1cmVDdXJyZW50Q3ljbGVUaW1lRnJhbWVNZXNzYWdlIDogJyc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kZXRhaWxzLmlzQ2EpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmlzQ3VycmVudCA/IGNhQ3VycmVudEN5Y2xlVGltZUZyYW1lTWVzc2FnZSA6IHRoaXMuZGV0YWlscy5pc0R1ZSA/IGNhRHVlQ3ljbGVUaW1lRnJhbWVNZXNzYWdlIDogJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldCBjeWNsZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRldGFpbHMpIHtcclxuICAgICAgaWYoIXRoaXMuZGV0YWlscy5pc0N1cnJlbnQgJiYgIXRoaXMuZGV0YWlscy5pc0R1ZSl7XHJcbiAgICAgICByZXR1cm4gIHRoaXMuaGlzdG9yaWNhbEN5Y2xlTmFtZSArICcgLSAnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaXNDdXJyZW50ID8gdGhpcy5jdXJyZW50Q3ljbGVOYW1lICsgJyAtICcgOiB0aGlzLmRldGFpbHMuaXNEdWUgPyB0aGlzLmR1ZUN5Y2xlTmFtZSArICcgLSAnIDogJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0luQ2FEdWVDeWNsZUNvbXBsZXRlZFRpbWUoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY29tcGxldGVkRGF0ZTogc3RyaW5nID0gbW9tZW50KGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJykpLmFkZCgxNCwgJ2RheScpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgcmV0dXJuIG1vbWVudChjb21wbGV0ZWREYXRlKS5pc1NhbWVPckFmdGVyKG1vbWVudCgpLCAnZGF5Jyk7XHJcbiAgfVxyXG5cclxuICBpc1Zpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICBpZih0aGlzLmRldGFpbHMuaXNEdWUgfHwgdGhpcy5kZXRhaWxzLmlzQ3VycmVudCl7XHJcbiAgICAgIHJlcyA9ICF0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlPyBhc3NpZ25tZW50LmlzU2VsZkF0dGVzdGVkU2Nob29sOmZhbHNlO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuXHJcbiAgIGlmICh0aGlzLnZpZXdPbmx5KSB7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9IFxyXG4gICAgZm9yRWFjaCh0aGlzLmFzc2lnbm1lbnRzLCAoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCkgPT4ge1xyXG4gICAgICBpZiAoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpKSB7XHJcbiAgICAgICAgZm9yRWFjaChnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZURhdGVzJyksICh2YWx1ZTogeyBkYXlPZldlZWs6IHN0cmluZywgZGF0ZTogc3RyaW5nIH0pID0+IHsgICAgIFxyXG4gICAgICAgICAgY29uc3QgdGltZXNoZWV0OiBUaW1lU2hlZXQgPSBmaW5kKGdldChhc3NpZ25tZW50LCAndGltZWtlZXBpbmdzUGVyQ3ljbGUnKSwgKHRzOiBUaW1lU2hlZXQpID0+XHJcbiAgICAgICAgICAgIG1vbWVudCh0cy5kYXRlKS5pc1NhbWUodmFsdWUuZGF0ZSwgJ2RheScpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJlcyA9IHJlcyB8fCAhZ2V0KHRpbWVzaGVldCwgJ2lzRGlzYWJsZScsIHRydWUpOyAvLyBhYmF3ZCBjbGllbnQsIGlmIHRpbWVzaGVldCBpcyBudWxsIHRoZW4gaXNEaXNhYmxlIGlzIHRydWUgZGVmYXVsdFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZEV4aXN0ZWRBY3Rpdml0aWVzKGFjdGl2aXRpZXM6IExvb2t1cFtdLCB0aW1lc2hlZXRzOiBUaW1lU2hlZXRUeXBlW10pOiBMb29rdXBbXSB7XHJcbiAgICByZXR1cm4gX2ZpbHRlcihhY3Rpdml0aWVzLCAoYWN0aXZpdHk6IExvb2t1cCkgPT4gISFmaW5kKHRpbWVzaGVldHMsICh0czogVGltZVNoZWV0VHlwZSkgPT4gYWN0aXZpdHkubG9va3VwSWQgPT09IHRzLmlkKSk7XHJcbiAgfVxyXG5cclxuICAvLyBmaWx0ZXIgYmFzZWQgb24gZXhpc3RlZCBhY3Rpdml0aWVzIG9uIHRpbWUgc2hlZXRcclxuICBidWlsZEZpbHRlcmVkQWN0aXZpdGllcyhhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogTG9va3VwW10ge1xyXG4gICAgY29uc3QgZXhpc3RlZEFjdGl2aXRpZXM6IExvb2t1cFtdID0gdGhpcy5idWlsZEV4aXN0ZWRBY3Rpdml0aWVzKGdldChhc3NpZ25tZW50LCAnZ2V0QWN0aXZpdGllcycpLCBnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKSk7XHJcbiAgICBsZXQgZmlsdGVyZWRBY3Rpdml0aWVzID0gdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybShnZXQoYXNzaWdubWVudCwgJ2dldEFjdGl2aXRpZXMnKSwgZXhpc3RlZEFjdGl2aXRpZXMpO1xyXG4gICAgc2V0KGFzc2lnbm1lbnQsICdmaWx0ZXJlZEFjdGl2aXRpZXMnLCBmaWx0ZXJlZEFjdGl2aXRpZXMpO1xyXG4gICAgcmV0dXJuIGZpbHRlcmVkQWN0aXZpdGllcztcclxuICB9XHJcblxyXG4gIGlzQ2FyZmFyZURpc2FibGVkKGRheU9mV2Vlazogc3RyaW5nLCBhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICAvLyBDYXJmYXJlIG11c3Qgbm90IGJlIGFsbG93ZWQgZm9yIHRoZSBkYXkgaWYgZGFpbHkgcmVxdWlyZWQgaG91cnMgYXJlIG5vdCBtZXRcclxuICAgIHJldHVybiB0aGlzLnZpZXdPbmx5IHx8IGdldChhc3NpZ25tZW50LCAnZGFpbHlUb3RhbCcsIGRheU9mV2VlaykgPCB0aGlzLm1heEhvdXJzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2FyZmFyZShkYXlPZldlZWs6IHN0cmluZywgYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgLy8gaWYgZGFpbHkgcmVxdWlyZWQgaG91cnMgYXJlIG1ldCwgZW5hYmxlIGNhcmZhcmUgZm9yIHRoYXQgZGF5LCBlbHNlIHNldCBpdCBOL0EgYW5kIGRpc2FibGUgaXQuXHJcbiAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRGF0ZXMnKSwgKGl0ZW06IHsgZGF0ZTogc3RyaW5nLCBkYXlPZldlZWs6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgIGlmIChkYXlPZldlZWsgPT09IGl0ZW0uZGF5T2ZXZWVrKSB7XHJcbiAgICAgICAgY29uc3QgdGltZVNoZWV0TW9kZWw6IFRpbWVTaGVldCA9IGNoYWluKHRoaXMuZGV0YWlscylcclxuICAgICAgICAgIC5nZXQoJ3RpbWVrZWVwaW5nc1BlckN5Y2xlJylcclxuICAgICAgICAgIC5maW5kKCh0aW1lc2hlZXQ6IFRpbWVTaGVldCkgPT4gbW9tZW50KHRpbWVzaGVldC5kYXRlKS5pc1NhbWUoaXRlbS5kYXRlLCAnZCcpKVxyXG4gICAgICAgICAgLnZhbHVlKCk7XHJcbiAgICAgICAgLy8gaWYgdGltZXNoZWV0TW9kZWwgbnVsbChBYmF3ZCBjbGllbnRzKSwgY2FyRmFyZSBkaXNhYmxlZCBkZWZhdWx0XHJcbiAgICAgICAgY29uc3QgaXNEaXNhYmxlOiBib29sZWFuID0gZ2V0KHRpbWVTaGVldE1vZGVsLCAnY2FyRmFyZS5pc0Rpc2FibGUnLCB0cnVlKSB8fCB0aGlzLmlzQ2FyZmFyZURpc2FibGVkKGRheU9mV2VlaywgYXNzaWdubWVudCk7XHJcblxyXG4gICAgICAgIGlmIChpc0Rpc2FibGUgPT09IHRydWUgJiYgZ2V0KHRpbWVTaGVldE1vZGVsLCAnY2FyRmFyZS5pc0Rpc2FibGUnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIGxldCBjYXJmYXJlRm9ybUdyb3VwID0gZ2V0KGFzc2lnbm1lbnQsICdjYXJmYXJlRm9ybUdyb3VwJylcclxuICAgICAgICAgIGNvbnN0IGNhcmZhcmVDdHJsOiBBYnN0cmFjdENvbnRyb2wgPSBjYXJmYXJlRm9ybUdyb3VwLmNvbnRyb2xzW2RheU9mV2Vla107XHJcbiAgICAgICAgICBjYXJmYXJlQ3RybC5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRDYXJmYXJlT3B0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvckVhY2goZ2V0KGFzc2lnbm1lbnQsICdjYXJmYXJlTW9kZWxzJyksIChjYXJGYXJlOiBDYXJmYXJlVHlwZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNhckZhcmUuZGF5T2ZXZWVrID09PSBkYXlPZldlZWspIHtcclxuICAgICAgICAgICAgc2V0KGNhckZhcmUsICdpc0Rpc2FibGUnLCBpc0Rpc2FibGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaG91cnNUb051bWJlcihob3Vyczogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc05pbChob3VycykgPyBudWxsIDogaXNOYU4odG9OdW1iZXIoaG91cnMpKSA/IG51bGwgOiB0b051bWJlcihob3Vycyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzT25TY2hlZHVsZShkYXlPZldlZWs6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc2NoZWR1bGU6IHN0cmluZ1tdID0gZ2V0KHRoaXMuZGV0YWlscywgJ3NjaGVkdWxlRGF5cycpO1xyXG4gICAgcmV0dXJuIGluY2x1ZGVzKHNjaGVkdWxlLCBkYXlPZldlZWspO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVQY3NUeXBlTG9va3VwcygpOiBMb29rdXBbXSB7XHJcbiAgICBpZiAoISFnZXQodGhpcy5kZXRhaWxzLCAnaXNOb25TYW5jdGlvblBjc0FsbG93ZWQnKSkge1xyXG4gICAgICAvLyBpbiB0aW1la2VlcGluZywgb25seSBjYW4gZG8gZnRjIGFuZCBub24tc2FuY3Rpb25cclxuICAgICAgcmV0dXJuIF9maWx0ZXIoZ2V0KHRoaXMucHJlQ29uY2lsaWF0aW9uTG9va3VwcywgJ3Bjc1R5cGVMb29rdXAnKSwgKGxvb2t1cDogTG9va3VwKSA9PiBsb29rdXAubG9va3VwSWQgIT09IGZ0cik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjYW4gZG8gZnRjIG9ubHlcclxuICAgICAgcmV0dXJuIF9maWx0ZXIoZ2V0KHRoaXMucHJlQ29uY2lsaWF0aW9uTG9va3VwcywgJ3Bjc1R5cGVMb29rdXAnKSwgKGxvb2t1cDogTG9va3VwKSA9PiBsb29rdXAubG9va3VwSWQgPT09IGZ0Yyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiPlxyXG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWFyb3VuZCBzdGFydFwiPlxyXG4gICAgPGRpdiBmeEZsZXg9XCIxMDAlXCI+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiIGNsYXNzPVwidGltZS1zaGVldC1kZXRhaWxzXCI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwidGltZS1zaGVldC1yb3cgYm9yZGVyLWJvdHRvbVwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCI1JVwiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHByaW1hcnktaWNvblwiIFtuZ0NsYXNzXT1cInsgJ3ByaW1hcnktaWNvbic6ICFpc0JhY2tEaXNhYmxlKCksICdncmV5LWljb24nOiBpc0JhY2tEaXNhYmxlKCkgfVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRQYXN0Q3ljbGUoKVwiPmFycm93X2JhY2tfaW9zXHJcbiAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgZnhGbGV4PVwiNjAlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwibGFiZWwgdGltZS1zaGVldC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICBUaW1lc2hlZXQgQ3ljbGUgPHNwYW4gY2xhc3M9XCJsZWZ0LWxhYmVsXCI+e3sgdGltZUN5Y2xlRGlzcGxheSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBmeEZsZXg9XCI1JVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBbbmdDbGFzc109XCJ7ICdwcmltYXJ5LWljb24nOiAhaXNGb3J3YXJkRGlzYWJsZSgpLCAnZ3JleS1pY29uJzogaXNGb3J3YXJkRGlzYWJsZSgpIH1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibG9hZEZvcndhcmRDeWNsZSgpXCI+XHJcbiAgICAgICAgICAgIGFycm93X2ZvcndhcmRfaW9zXHJcbiAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFzc2lnbm1lbnQgb2YgYXNzaWdubWVudHM7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJ0aW1lLXNoZWV0LXJvdyBib3JkZXItYm90dG9tIHBhZGRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzSG91cnNFeGNlZWRlZChhc3NpZ25tZW50KVwiIGNsYXNzPVwid2FybmluZy1pY29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmVycm9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8c3Bhbj4gSE9VUlMgRVhDRUVERUQgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxzdHJvbmcgZnhGbGV4PVwiNTAlXCIgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICBBU1NJR05NRU5UIHt7IGkrMSB9fSAgQVRUUklCVVRFU1xyXG4gICAgICAgICAgICA8L3N0cm9uZz5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYnV0dG9uLXNpemVcIiBbZGlzYWJsZWRdID0gXCIhdGhpcy5kZXRhaWxzLmlzRHVlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrQ29uY2lsaWF0ZShhc3NpZ25tZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+RE8gTk9UIENPTkNJTElBVEU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICA8c3ViPih7eyBhc3NpZ25tZW50Py5kb05vdENvbmNpbGlhdGVDb3VudGVyIH19IFJFTUFJTklORyk8L3N1Yj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImJ1dHRvbi1zaXplXCIgKGNsaWNrKT1cIm9wZW5QQ1MoYXNzaWdubWVudClcIiBcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNQY3NEaXNhYmxlZChhc3NpZ25tZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgUEFSVElDSVBBTlQgQ0hBTkdFIE9GIFNUQVRVU1xyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LWRldGFpbHMgdGltZS1zaGVldC1yb3cgYm9yZGVyLWJvdHRvbSBwYWRkaW5nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlNpdGUgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJ2YWx1ZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+e3sgYXNzaWdubWVudD8uc2l0ZU5hbWU/LmRpc3BsYXlWYWx1ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPkFzc2lnbm1lbnQgVHlwZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJ2YWx1ZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+e3sgYXNzaWdubWVudD8uYXNzaWdubWVudFR5cGU/LmRpc3BsYXlWYWx1ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPkFzc2lnbm1lbnQgU3RhdHVzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cInZhbHVlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBhc3NpZ25tZW50Py5hc3NpZ25tZW50U3RhdHVzPy5kaXNwbGF5VmFsdWVcclxuICAgICAgICAgICAgICAgICAgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJyZWFkb25seS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cImxhYmVsXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5Bc3NpZ25tZW50IFN0YXJ0IERhdGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwidmFsdWVcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPnt7IGFzc2lnbm1lbnQ/LmFzc2lnbm1lbnRTdGFydERhdGUgfCBkYXRlOlxyXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0ZUZvcm1hdCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPkFzc2lnbm1lbnQgRW5kIERhdGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwidmFsdWVcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPnt7IGFzc2lnbm1lbnQ/LmFzc2lnbm1lbnRFbmREYXRlIHwgZGF0ZTpcclxuICAgICAgICAgICAgICAgICAgZnVsbERhdGVGb3JtYXQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJyZWFkb25seS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cImxhYmVsXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5Ib3VyIEdyb3VwPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cInZhbHVlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBhc3NpZ25tZW50Py5ob3VyR3JvdXAgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJyZWFkb25seS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cImxhYmVsXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5Ib3VycyBBc3NpZ25lZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJ2YWx1ZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+e3sgYXNzaWdubWVudD8uaG91ckFzc2lnbmVkIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicmVhZG9ubHktaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJsYWJlbFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+U2tpbGwgQ29kZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJ2YWx1ZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+e3sgYXNzaWdubWVudD8uc2tpbGxDb2RlPy5kaXNwbGF5VmFsdWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJyZWFkb25seS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cImxhYmVsXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5Db3Vyc2UgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJ2YWx1ZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+e3sgYXNzaWdubWVudD8uY291cnNlTmFtZT8uZGlzcGxheVZhbHVlfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBjbGFzcz1cInRpbWUtc2hlZXQtcm93IGJvcmRlci1ib3R0b21cIiBmeExheW91dEdhcD1cIjIwcHhcIj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxNSVcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwibGVmdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gZnhGbGV4PVwiMTAlXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiaXNWaXNpYmxlKClcIiAoY2xpY2spPVwiYWRkQWN0aXZpdHkoYXNzaWdubWVudClcIj5hZGRfY2lyY2xlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiOTAlXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImxlZnQtbGFiZWwtMiBhY3Rpdml0eS1mb3JtLWZpZWxkXCIgZmxvYXRMYWJlbD1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+U2VsZWN0IEFjdGl2aXR5PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtkaXNhYmxlZF09XCIhaXNWaXNpYmxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGFjdGl2aXR5IG9mIGFzc2lnbm1lbnQuZmlsdGVyZWRBY3Rpdml0aWVzXCIgW3ZhbHVlXT1cImFjdGl2aXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cImFjdGl2aXR5Py5kaXNwbGF5VmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGl2aXR5Py5kaXNwbGF5VmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI4MCVcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEyJVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFzc2lnbm1lbnQuY3VycmVudEN5Y2xlRGF0ZXNcIiBjbGFzcz1cInRpbWUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+e3sgaXRlbT8uZGF5T2ZXZWVrIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+e3sgaXRlbT8uZGF0ZSB8IGRhdGU6IGRhdGVGb3JtYXQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTIlXCIgY2xhc3M9XCJ0aW1lLWxhYmVsXCI+PHNwYW4+V2Vla2x5PC9zcGFuPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWFzc2lnbm1lbnQuZm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiYXNzaWdubWVudC5mb3JtR3JvdXBcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLXNoZWV0LXJvd1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFzc2lnbm1lbnQudGltZXNoZWV0QnlBY3Rpdml0eVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTUlXCIgY2xhc3M9XCJsZWZ0LWxhYmVsXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwiaXNWaXNpYmxlKClcIiAoY2xpY2spPVwicmVtb3ZlQWN0aXZpdHkoaXRlbT8uaWQsIGFzc2lnbm1lbnQpXCI+cmVtb3ZlX2NpcmNsZVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGVmdC1sYWJlbC0yXCI+e3sgaXRlbT8ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJ7e2l0ZW0/LmlkfX1cIiBmeEZsZXg9XCI4MCVcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEyJVwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgKm5nRm9yPVwibGV0IHBhdGggb2YgZGF5T2ZXZWVrc1wiIGNsYXNzPVwidGltZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sTmFtZV09XCJwYXRoXCIgW3JlYWRvbmx5XT1cIiFpc0F0dGVzdGVkQ2hlY2tWYWx1ZT9hc3NpZ25tZW50LmlzU2VsZkF0dGVzdGVkU2Nob29sOmZhbHNlXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlSG91cnMoJGV2ZW50LCBpdGVtPy5pZCwgcGF0aCwgYXNzaWdubWVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiISFnZXRFcnJvck1lc3NhZ2UoaXRlbT8uaWQsIHBhdGgsIGFzc2lnbm1lbnQpXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKGl0ZW0/LmlkLCBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgfX08L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9XCIxMiVcIiBjbGFzcz1cInRpbWUtbGFiZWxcIj57eyBnZXRTdW0oaXRlbSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDwhLS1Ub3RhbC0tPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwidGltZS1zaGVldC1yb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxNSVcIiBjbGFzcz1cImxlZnQtbGFiZWxcIiBbbmdDbGFzc109XCJ7ICd0b3RhbCc6IGlzVmlzaWJsZSgpIH1cIj48c3BhbiBjbGFzcz1cImxlZnQtbGFiZWwtMlwiPkRhaWx5XHJcbiAgICAgICAgICAgICAgICBUb3RhbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiODAlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEyJVwiICpuZ0Zvcj1cImxldCBwYXRoIG9mIGRheU9mV2Vla3NcIiBjbGFzcz1cInRpbWUtbGFiZWxcIj57eyBhc3NpZ25tZW50Py5kYWlseVRvdGFsW3BhdGhdIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxMiVcIiBjbGFzcz1cInRpbWUtbGFiZWxcIj57eyBnZXRUb3RhbFN1bSggYXNzaWdubWVudCApIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tQ2FyZmFyZS0tPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwidGltZS1zaGVldC1yb3cgYm9yZGVyLXRvcFwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjIwJVwiIGNsYXNzPVwibGVmdC1sYWJlbCB0b3RhbFwiPjxzcGFuPkNhcmZhcmU8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjgwJVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJhc3NpZ25tZW50LmNhcmZhcmVGb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBmeEZsZXg9XCIxMiVcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhc3NpZ25tZW50LmNhcmZhcmVNb2RlbHM7IGxldCBpbmRleD1pbmRleDtcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbZGlzYWJsZWRdPVwiaXRlbT8uaXNEaXNhYmxlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJpdGVtPy5kYXlPZldlZWtcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImRlZmF1bHRDYXJmYXJlT3B0aW9uXCI+Ti9BPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGl0ZW0/Lm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmRpc3BsYXlWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEyJVwiIGNsYXNzPVwidGltZS1sYWJlbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLUFzc2lnbm1lbnQgTW9kZS0tPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwidGltZS1zaGVldC1yb3cgYm9yZGVyLXRvcFwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjIwJVwiIGNsYXNzPVwibGVmdC1sYWJlbCB0b3RhbFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPkFzc2lnbm1lbnQgTW9kZVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcnV0ZWNoLWR5bmFtaWMtYnV0dG9uLW1hbmRhdG9yeVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI4MCVcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIFtmb3JtR3JvdXBdPVwiYXNzaWdubWVudC5hc3NpZ25tZW50TW9kZUZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGZ4RmxleD1cIjEyJVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFzc2lnbm1lbnQuYXNzaWdubWVudE1vZGVNb2RlbHM7IGxldCBpbmRleD1pbmRleDtcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbZGlzYWJsZWRdPVwiIWlzVmlzaWJsZSgpXCIgW2Zvcm1Db250cm9sTmFtZV09XCJpdGVtPy5kYXlPZldlZWtcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpdGVtPy5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5VmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxMiVcIiBjbGFzcz1cInRpbWUtbGFiZWxcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRpbWUtc2hlZXQtY29tbWVudFwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dEY01lc3NhZ2UoKVwiIGNsYXNzPVwid2FybmluZy10ZXh0XCI+XHJcbiAgICAgIDxzcGFuPnt7IHRoaXMuZ2V0RGNNZXNzYWdlKCkgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJpc1BhcnRpY2lwYW50Q2hhbmdlT2ZTdGF0dXMoKVwiIGNsYXNzPVwid2FybmluZy10ZXh0XCI+XHJcbiAgICAgIDxzcGFuPnt7IHRoaXMuZGV0YWlscz8ucHJvZ3JhbUFsZXJ0Py5wY3NUeXBlPy5kaXNwbGF5VmFsdWUgfX0gUENTPC9zcGFuPjxicj5cclxuICAgICAgPHNwYW4+UGVyZm9ybWVkIG9uIHt7IHRoaXMuZGV0YWlscz8ucHJvZ3JhbUFsZXJ0Py5zdWJtaXR0ZWRPbiB8IGRhdGU6ICdNTS9kZC95eXl5J319PC9zcGFuPjxicj5cclxuICAgICAgPHNwYW4+UmVhc29uOiB7eyB0aGlzLmRldGFpbHM/LnByb2dyYW1BbGVydD8ucmVhc29uPy5kaXNwbGF5VmFsdWUgfX08L3NwYW4+PGJyPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNvbW1lbnRcIj57eyB0aGlzLmRldGFpbHM/LnByb2dyYW1BbGVydD8uY29tbWVudHMgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzcGFuPi0gQWxsIGhvdXJzIGVudGVyZWQgaW50byBTRUFNUyBhcmUgc3ViamVjdCB0byBhdWRpdCBhbmQgcmVxdWlyZSBiYWNrIHVwIGRvY3VtZW50YXRpb24sIGVpdGhlciB0aHJ1IHNlcGFyYXRlXHJcbiAgICAgIG1hbnVhbCBvciBlbGVjdHJvbmljIHRyYWNraW5nIHdoaWNoIG1hdGNoZXMgdGhlIGhvdXJzIHN1Ym1pdHRlZCBmb3IgZWFjaCBjbGllbnQuIDwvc3Bhbj48YnI+XHJcbiAgICA8c3BhbiAqbmdJZj1cIiEhdGltZUZyYW1lTWVzc2FnZVwiPi0gRGF0YSBFbnRyeSBtdXN0IGJlIGNvbXBsZXRlZCBieSB7eyB0aW1lRnJhbWVNZXNzYWdlIH19Ljwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIzMHB4XCI+XHJcbiAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwiZXhpdCgpXCI+RVhJVDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImlzVmlzaWJsZSgpXCIgKGNsaWNrKT1cInZhbGlkYXRlQW5kU2F2ZSgpXCIgW2Rpc2FibGVkXT1cImlzRm9ybUluVmFsaWQoKVwiPlNBVkVcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVmaWNpdEhvdXJzTWVzc2FnZVwiIGNsYXNzPVwic2F2ZS13YXJuaW5nXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cclxuICAgIDxtYXQtaWNvbj5lcnJvcjwvbWF0LWljb24+XHJcbiAgICA8c3Bhbj4gVG90YWwgd2Vla2x5IGhvdXJzIGVudGVyZWQgaGF2ZSBhIGRlZmljaXQgc3ViamVjdCB0byBpbmZyYWN0aW9uLiA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
890
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGljaXBhbnQtdGltZXNoZWV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BydXRlY2gvY29tcGxpYW5jZS9zcmMvbGliL3RpbWUta2VlcGluZy1kZXRhaWxzL2NvbXBvbmVudHMvcGFydGljaXBhbnQtdGltZXNoZWV0L3BhcnRpY2lwYW50LXRpbWVzaGVldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcnV0ZWNoL2NvbXBsaWFuY2Uvc3JjL2xpYi90aW1lLWtlZXBpbmctZGV0YWlscy9jb21wb25lbnRzL3BhcnRpY2lwYW50LXRpbWVzaGVldC9wYXJ0aWNpcGFudC10aW1lc2hlZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBZ0MsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLElBQUksT0FBTyxFQUNqQixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sRUFDUCxHQUFHLEVBQ0gsUUFBUSxFQUNSLE1BQU0sRUFDTixPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osR0FBRyxFQUNILFNBQVMsRUFDVCxHQUFHLEVBQ0gsTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0osTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxFQUVKLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxFQUNI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QUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVPLFlBQVksQ0FBQyxTQUFpQjtRQUNwQyxNQUFNLFFBQVEsR0FBYSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM3RCxPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO1lBQ2xELG1EQUFtRDtZQUNuRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2hIO2FBQU07WUFDTCxrQkFBa0I7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNoSDtJQUNILENBQUM7OzJIQWw3QlUsNkJBQTZCOytHQUE3Qiw2QkFBNkIsc0pDdkYxQyxxeWNBMk5NOzRGRHBJTyw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsK0JBQStCLG1CQUd4Qix1QkFBdUIsQ0FBQyxNQUFNO3VUQWtEdEMsb0JBQW9CO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uSW5pdCxJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBMb29rdXAsIFRhYlNlcnZpY2UgfSBmcm9tICdAcHJ1dGVjaC9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgVXNlciwgVXNlclNlcnZpY2UgfSBmcm9tICdAcHJ1dGVjaC9pZGVudGl0eS1jbGllbnQnO1xyXG5pbXBvcnQge1xyXG4gIGNoYWluLFxyXG4gIGNvbmNhdCxcclxuICBmaWx0ZXIgYXMgX2ZpbHRlcixcclxuICBmaW5kLFxyXG4gIGZpcnN0LFxyXG4gIGZvckVhY2gsXHJcbiAgZ2V0LFxyXG4gIGluY2x1ZGVzLFxyXG4gIGludm9rZSxcclxuICBpc0VtcHR5LFxyXG4gIGlzTmFOLFxyXG4gIGlzTmlsLFxyXG4gIGlzTnVtYmVyLFxyXG4gIGtleUJ5LFxyXG4gIGtleXMsXHJcbiAgbGFzdCxcclxuICBtYXAsXHJcbiAgbWFwVmFsdWVzLFxyXG4gIG50aCxcclxuICByZWR1Y2UsXHJcbiAgc2V0LFxyXG4gIHNpemUsXHJcbiAgc29ydEJ5LFxyXG4gIHRvTnVtYmVyLFxyXG4gIHRvU3RyaW5nLFxyXG4gIGhlYWQsXHJcbiAgZXZlcnkgYXMgX2V2ZXJ5LFxyXG4gIHNvbWUsXHJcbiAgY2xvbmVEZWVwLFxyXG4gIHN1bSxcclxuICB2YWx1ZXMsXHJcbiAgb21pdFxyXG59IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCwgZXZlcnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBUaW1lS2VlcGluZ0RldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy90aW1lLWtlZXBpbmctZGV0YWlscy5tb2RlbCc7XHJcbmltcG9ydCB7IFRpbWVTaGVldCB9IGZyb20gJy4uLy4uL21vZGVscy90aW1lLXNoZWV0Lm1vZGVsJztcclxuaW1wb3J0IHsgVGltZUtlZXBpbmdBY3Rpdml0eSB9IGZyb20gJy4uLy4uL21vZGVscy9hY3Rpdml0eS5tb2RlbCc7XHJcbmltcG9ydCB7IHRpbWVzaGVldERhdGVGb3JtYXQsIGRhdGVGb3JtYXQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGF0ZS1mb3JtYXQnO1xyXG5pbXBvcnQgeyBUaW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZS1rZWVwaW5nLWRldGFpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRpbWVTaGVldFR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGltZS1zaGVldC10eXBlJztcclxuaW1wb3J0IHsgZGF5T2ZXZWVrcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kYXktb2Ytd2Vlayc7XHJcbmltcG9ydCB7IExvYWRQYXN0VGltZXNoZWV0UGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVscy9sb2FkLXBhc3QtdGltZXNoZWV0LXBheWxvYWQnO1xyXG5pbXBvcnQgeyBkaWFsb2dTaXplLCBkbmNEaWFsb2dTaXplIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpYWxvZy1kZWZhdWx0JztcclxuaW1wb3J0IHsgUGFydGljaXBhbnRDaGFuZ2VTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcGFydGljaXBhbnQtY2hhbmdlLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7IFBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BhcnRpY2lwYW50LWNoYW5nZS1zdGF0dXMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEb05vdENvbmNpbGlhdGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9kby1ub3QtY29uY2lsaWF0ZS1kaWFsb2cvZG8tbm90LWNvbmNpbGlhdGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvb2t1cEZpbHRlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcGlwZXMvbG9va3VwLWZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgUHJlQ29uY2lsaWF0aW9uTG9va3VwcyB9IGZyb20gJy4uLy4uL21vZGVscy9wcmUtY29uY2lsaWF0aW9uLWxvb2t1cHMubW9kZWwnO1xyXG5pbXBvcnQgeyBQYXJ0aWNpcGFudENoYW5nZVN0YXR1c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL3BhcnRpY2lwYW50LWNoYW5nZS1zdGF0dXMvcGFydGljaXBhbnQtY2hhbmdlLXN0YXR1cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQY3NGb3JtRGF0YSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvcGNzLWZvcm0tZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IGZ0YywgZnRyIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbnN0YW50cy9wcmUtY29uY2lsaWF0aW9uL3Bjcy10eXBlcyc7XHJcbmltcG9ydCB7IGNvbmZpcm1EaWFsb2dJbmZvIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpcm0tbWVzc2FnZSc7XHJcbmltcG9ydCB7XHJcbiAgYWJhd2RDdXJyZW50Q3ljbGVUaW1lRnJhbWVNZXNzYWdlLFxyXG4gIGFiYXdkRHVlQ3ljbGVUaW1lRnJhbWVNZXNzYWdlLFxyXG4gIGNhQ3VycmVudEN5Y2xlVGltZUZyYW1lTWVzc2FnZSxcclxuICBjYUR1ZUN5Y2xlVGltZUZyYW1lTWVzc2FnZSxcclxuICB2ZW50dXJlQ3VycmVudEN5Y2xlVGltZUZyYW1lTWVzc2FnZSxcclxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGltZS1mcmFtZS1tZXNzYWdlcyc7XHJcbmltcG9ydCB7IExvYWRBY3Rpdml0eVBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvbG9hZC1hY3Rpdml0eS1wYXlsb2FkJztcclxuaW1wb3J0IHsgQ2FyZmFyZVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2FyZmFyZS10eXBlJztcclxuaW1wb3J0IHsgQ2FyZmFyZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhcmZhcmUtbW9kZWwnO1xyXG5pbXBvcnQgeyBTYXZlVGltZXNoZWV0UGNzUGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVscy9zYXZlLXRpbWVzaGVldC1wY3MtcGF5bG9hZCc7XHJcbmltcG9ydCB7IGRjTWVzc2FnZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kYy1tZXNzYWdlJztcclxuaW1wb3J0IHsgQXNzaWdubWVudE1vZGVUeXBlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fzc2lnbm1lbnQtbW9kZS10eXBlJztcclxuaW1wb3J0IHsgQ2xpZW50QXNzaWdubWVudCB9IGZyb20gJy4uLy4uL21vZGVscy9jbGllbnQtYXNzaWdubWVudCc7XHJcbmltcG9ydCB7IEFjdGl2aXR5TG9va3VwIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FjdGl2aXR5LWxvb2t1cCc7XHJcbmltcG9ydCB7IFNhdmVUaW1la2VlcGluZ0RldGFpbHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2F2ZS10aW1la2VlcGluZy1kZXRhaWxzJztcclxuaW1wb3J0IHsgVGltZXNoZWV0V2FybmluZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGltZXNoZWV0LXdhcm5pbmctbW9kYWwvdGltZXNoZWV0LXdhcm5pbmctbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtTaG93RXNjb2RlU3RhdHVzTWVzc2FnZUNvbXBvbmVudH0gZnJvbSAnLi4vc2hvdy1lc2NvZGUtc3RhdHVzLW1lc3NhZ2Uvc2hvdy1lc2NvZGUtc3RhdHVzLW1lc3NhZ2UuY29tcG9uZW50JztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwcnV0ZWNoLXBhcnRpY2lwYW50LXRpbWVzaGVldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhcnRpY2lwYW50LXRpbWVzaGVldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGFydGljaXBhbnQtdGltZXNoZWV0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXJ0aWNpcGFudFRpbWVzaGVldENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcmVhZG9ubHkgZGF0ZUZvcm1hdDogc3RyaW5nID0gdGltZXNoZWV0RGF0ZUZvcm1hdDtcclxuICByZWFkb25seSBmdWxsRGF0ZUZvcm1hdDogc3RyaW5nID0gZGF0ZUZvcm1hdDtcclxuICByZWFkb25seSBtaW5Ib3VyczogbnVtYmVyID0gMDtcclxuICByZWFkb25seSBtb21lbnREYXRlRm9ybWF0OiBzdHJpbmcgPSAnTU0vREQvWVlZWSc7XHJcbiAgcmVhZG9ubHkgdGltZUN5Y2xlUmUxOiBSZWdFeHAgPSAvXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fS9nO1xyXG4gIHJlYWRvbmx5IHRpbWVDeWNsZVJlMjogUmVnRXhwID0gL1xcZHsyfS1bQS1aXXszfS1cXGR7Mn0vZztcclxuICByZWFkb25seSBjdXN0b21FcnJvck1lc3NhZ2U6IHN0cmluZyA9ICdob3VycyBpbiB0b3RhbCc7XHJcbiAgcmVhZG9ubHkgZnRjVmFsdWU6IHN0cmluZyA9ICdGYWlsdXJlIHRvIENvbXBseSc7XHJcbiAgcmVhZG9ubHkgaG91clBhdHRlcm46IFJlZ0V4cCA9IC9eWzAtOV17MX0kLztcclxuICByZWFkb25seSBjdXJyZW50Q3ljbGVOYW1lOiBzdHJpbmcgPSAnQ3VycmVudCBDeWNsZSc7XHJcbiAgcmVhZG9ubHkgZHVlQ3ljbGVOYW1lOiBzdHJpbmcgPSAnRHVlIEN5Y2xlJztcclxuICByZWFkb25seSBoaXN0b3JpY2FsQ3ljbGVOYW1lOiBzdHJpbmcgPSAnSGlzdG9yaWNhbCBDeWNsZSc7XHJcblxyXG4gIG1heEhvdXJzOiBudW1iZXIgPSA3O1xyXG4gIGhvdXJzUGVyU2NoZWR1bGVEYXk6IG51bWJlciA9IDA7XHJcbiAgdW5leGN1c2VkQWN0aXZpdHk6IG51bWJlciA9IDI0O1xyXG4gIGRldGFpbHM6IFRpbWVLZWVwaW5nRGV0YWlsc01vZGVsO1xyXG4gIC8vYWN0aXZpdGllczogTG9va3VwW107XHJcbiAgdGltZUtlZXBpbmdDeWNsZXM6IExvb2t1cFtdO1xyXG4gIGRpc2FibGU6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgLy9kYWlseVRvdGFsOiB7IFtrOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG4gIGRheU9mV2Vla3M6IHN0cmluZ1tdID0gZGF5T2ZXZWVrcztcclxuICAvL3RpbWVzaGVldEJ5QWN0aXZpdHk6IFRpbWVTaGVldFR5cGVbXTtcclxuICAvL2Zvcm1Hcm91cDogRm9ybUdyb3VwO1xyXG4gIC8vZG9Ob3RDb25jaWxpYXRlQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9kYXlEYXRlOiBzdHJpbmcgPSBtb21lbnQoKS50b0lTT1N0cmluZygpO1xyXG4gIC8vZG9Ob3RDb25jaWxpYXRlQ291bnRlcjogbnVtYmVyID0gMDtcclxuICAvL2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIC8vY3VycmVudEN5Y2xlRW5kRGF0ZTogc3RyaW5nO1xyXG4gIC8vIHRpbWVDeWNsZVN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIC8vIHRpbWVDeWNsZUVuZERhdGU6IHN0cmluZztcclxuICAvL2N1cnJlbnRDeWNsZURhdGVzOiB7IGRhdGU6IHN0cmluZywgZGF5T2ZXZWVrOiBzdHJpbmcgfVtdID0gW107XHJcbiAgdXNlcjogVXNlcjtcclxuICB2aWV3T25seTogYm9vbGVhbjtcclxuICAvL2ZpbHRlcmVkQWN0aXZpdGllczogTG9va3VwW107XHJcbiAgZmlsdGVyUGlwZTogTG9va3VwRmlsdGVyUGlwZSA9IG5ldyBMb29rdXBGaWx0ZXJQaXBlKCk7XHJcbiAgcHJlQ29uY2lsaWF0aW9uTG9va3VwczogUHJlQ29uY2lsaWF0aW9uTG9va3VwcztcclxuICBkZWZhdWx0Q2FyZmFyZU9wdGlvbjogTG9va3VwID0gbmV3IExvb2t1cCh7IGxvb2t1cElkOiAwLCBkaXNwbGF5VmFsdWU6ICdOL0EnIH0pO1xyXG4gIC8vIGNhcmZhcmVGb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxuICAvLyBjYXJmYXJlTW9kZWxzOiBDYXJmYXJlVHlwZVtdO1xyXG4gIC8vIGFzc2lnbm1lbnRNb2RlTW9kZWxzOiBBc3NpZ25tZW50TW9kZVR5cGVbXTtcclxuICAvLyBhc3NpZ25tZW50TW9kZUZvcm1Hcm91cDogRm9ybUdyb3VwO1xyXG4gIGFzc2lnbm1lbnRzOiBDbGllbnRBc3NpZ25tZW50W107XHJcbiAgc2hvd0RlZmljaXRIb3Vyc01lc3NhZ2U6IGJvb2xlYW47XHJcbiAgYXR0ZXN0Y2hlY2tib3hjaGVja2VkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaXNBdHRlc3RlZENoZWNrVmFsdWU6IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlOiBUaW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwY3NTZXJ2aWNlOiBQYXJ0aWNpcGFudENoYW5nZVN0YXR1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdGFiU2VydmljZTogVGFiU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIsXHJcbiAgICAgIHRoaXMucGNzU2VydmljZS5wY3NMb29rdXBzXSxcclxuICAgICkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSxcclxuICAgICAgZmlsdGVyKChbdXNlciwgbG9va3Vwc106IFtVc2VyLCBQcmVDb25jaWxpYXRpb25Mb29rdXBzXSkgPT4gISF1c2VyICYmICEhbG9va3VwcyksXHJcbiAgICApLnN1YnNjcmliZSgoW3VzZXIsIGxvb2t1cHNdOiBbVXNlciwgUHJlQ29uY2lsaWF0aW9uTG9va3Vwc10pID0+IHtcclxuICAgICAgdGhpcy51c2VyID0gdXNlcjtcclxuICAgICAgdGhpcy5wcmVDb25jaWxpYXRpb25Mb29rdXBzID0gbG9va3VwcztcclxuICAgIH0pO1xyXG4gIFxyXG4gICAgLy8gdGhpcy50aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLmFjdGl2aXRpZXMucGlwZShcclxuICAgIC8vICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSxcclxuICAgIC8vICAgZmlsdGVyKChkYXRhOiBBY3Rpdml0eUxvb2t1cCkgPT4gISFkYXRhKSxcclxuICAgIC8vICkuc3Vic2NyaWJlKChkYXRhOiBBY3Rpdml0eUxvb2t1cCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmFjdGl2aXRpZXMgPSBnZXQoZGF0YSwgJ2FjdGl2aXR5TG9va3VwJyk7XHJcblxyXG4gICAgLy8gICBmb3JFYWNoKGdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpLCAoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCkgPT4ge1xyXG4gICAgLy8gICAgIGlmKGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudFR5cGUubG9va3VwSWQnKSA9PSBkYXRhLmFzc2lnbm1lbnRUeXBlSWQpIHtcclxuICAgIC8vICAgICAgIHNldChhc3NpZ25tZW50LCAnZmlsdGVyZWRBY3Rpdml0aWVzJywgdGhpcy5hY3Rpdml0aWVzKTtcclxuICAgIC8vICAgICAgIGlmICghaXNFbXB0eShnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKSkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5idWlsZEZpbHRlcmVkQWN0aXZpdGllcyggZ2V0KGFzc2lnbm1lbnQsICd0aW1lc2hlZXRCeUFjdGl2aXR5JykgKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgdGhpcy50aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLnRpbWVLZWVwaW5nRGV0YWlsXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCksXHJcbiAgICAgICAgZmlsdGVyKChkYXRhOiBUaW1lS2VlcGluZ0RldGFpbHNNb2RlbCkgPT4gISFkYXRhKSxcclxuICAgICAgKS5zdWJzY3JpYmUoKGRhdGE6IFRpbWVLZWVwaW5nRGV0YWlsc01vZGVsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gY2xvbmVEZWVwKGRhdGEpO1xyXG4gICAgICAgIC8vIHRoaXMubWF4SG91cnMgPSBkYXRhLm1heERhaWx5SG91cnM7Ly9QS1xyXG4gICAgICAgIC8vIHRoaXMuaG91cnNQZXJTY2hlZHVsZURheSA9IHRoaXMuZGV0YWlscy5ob3Vyc1BlclNjaGVkdWxlRGF5Oy8vUEtcclxuICAgICAgICAvLyB2aWV3T25seTogRmFpciBIZWFyaW5nIFVzZXIsIHZpZXcgb25seVxyXG4gICAgICAgIHRoaXMudmlld09ubHkgPSAhdGhpcy5kZXRhaWxzLmNhblVwZGF0ZTtcclxuXHJcbiAgICAgICAgdGhpcy5idWlsZFRpbWVzaGVldCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGJ1aWxkVGltZXNoZWV0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hc3NpZ25tZW50cyA9IFsuLi5nZXQodGhpcy5kZXRhaWxzLCAnZ2V0Q2xpZW50QXNzaWdubWVudHMnKV07XHJcbiAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmJ1aWxkU3RhcnRFbmREYXRlcyhhc3NpZ25tZW50KTtcclxuXHJcbiAgICAgIGxldCB0aW1lc2hlZXRCeUFjdGl2aXR5ID0gdGhpcy5idWlsZFRpbWVzaGVldEJ5QWN0aXZpdHkoYXNzaWdubWVudCk7XHJcbiAgICAgIHNldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScsIHRpbWVzaGVldEJ5QWN0aXZpdHkpO1xyXG4gICAgICBzZXQoYXNzaWdubWVudCwgJ2ZpbHRlcmVkQWN0aXZpdGllcycsIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCkpO1xyXG5cclxuICAgICAgdGhpcy5jYWxjdWxhdGVUb3RhbChhc3NpZ25tZW50KTtcclxuXHJcbiAgICAgIGxldCBjYXJmYXJlTW9kZWxzID0gdGhpcy5idWlsZENhcmZhcmUoYXNzaWdubWVudCk7XHJcbiAgICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycsIGNhcmZhcmVNb2RlbHMpO1xyXG5cclxuICAgICAgbGV0IGFzc2lnbm1lbnRNb2RlTW9kZWxzID0gdGhpcy5idWlsZEFzc2lnbm1lbnRNb2RlKGFzc2lnbm1lbnQpO1xyXG4gICAgICBzZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRNb2RlTW9kZWxzJywgYXNzaWdubWVudE1vZGVNb2RlbHMpO1xyXG5cclxuICAgICAgc2V0KGFzc2lnbm1lbnQsICdkb05vdENvbmNpbGlhdGVBY3Rpb24nLCBmYWxzZSk7Ly9kZWZhdWx0XHJcblxyXG4gICAgICB0aGlzLmluaXRGb3JtR3JvdXAoYXNzaWdubWVudCk7XHJcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIC8vIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaExvYWRBY3Rpdml0aWVzKG5ldyBMb2FkQWN0aXZpdHlQYXlsb2FkKHtcclxuICAgICAgLy8gICBhc3NpZ25tZW50VHlwZUlkOiBnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRUeXBlLmxvb2t1cElkJyksXHJcbiAgICAgIC8vICAgbG9va3VwVGltZWtlZXBpbmdDeWNsZUlkOiBnZXQoYXNzaWdubWVudCwgJ2xvb2t1cFRpbWVrZWVwaW5nQ3ljbGUubG9va3VwSWQnKSxcclxuICAgICAgLy8gfSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZnRlck9uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIC8vXHJcbiAgfVxyXG5cclxuICBidWlsZFN0YXJ0RW5kRGF0ZXMoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IENsaWVudEFzc2lnbm1lbnQge1xyXG4gICAgY29uc3QgbG9va3VwVGltZWtlZXBpbmdDeWNsZTogTG9va3VwID0gZ2V0KGFzc2lnbm1lbnQsICdsb29rdXBUaW1la2VlcGluZ0N5Y2xlJyk7XHJcbiAgICBsZXQgY3VycmVudFRpbWVDeWNsZTogc3RyaW5nW10gPSBnZXQobG9va3VwVGltZWtlZXBpbmdDeWNsZSwgJ2Rpc3BsYXlWYWx1ZScpLm1hdGNoKHRoaXMudGltZUN5Y2xlUmUxKTtcclxuICAgIGlmIChpc0VtcHR5KGN1cnJlbnRUaW1lQ3ljbGUpKSB7XHJcbiAgICAgIGN1cnJlbnRUaW1lQ3ljbGUgPSBnZXQobG9va3VwVGltZWtlZXBpbmdDeWNsZSwgJ2Rpc3BsYXlWYWx1ZScpLm1hdGNoKHRoaXMudGltZUN5Y2xlUmUyKTtcclxuICAgIH1cclxuICAgIGxldCB0aW1lQ3ljbGVTdGFydERhdGUgPSBtb21lbnQoZmlyc3QoY3VycmVudFRpbWVDeWNsZSkpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgbGV0IHRpbWVDeWNsZUVuZERhdGUgPSBtb21lbnQobGFzdChjdXJyZW50VGltZUN5Y2xlKSkuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcbiAgICAvLyAwOC0wMS0yMDIxIGlzIFN1bmRheVxyXG4gICAgbGV0IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSA9IG1vbWVudChmaXJzdChjdXJyZW50VGltZUN5Y2xlKSkuaXNvV2Vla2RheSgnTW9uZGF5JykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcbiAgICBsZXQgY3VycmVudEN5Y2xlRGF0ZXMgPSB0aGlzLmJ1aWxkQ3VycmVudEN5Y2xlRGF0ZXMoY3VycmVudEN5Y2xlU3RhcnREYXRlKTtcclxuICAgIGxldCBjdXJyZW50Q3ljbGVFbmREYXRlID0gbW9tZW50KGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSkuYWRkKDYsICdkYXlzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcblxyXG4gICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVTdGFydERhdGUnLCB0aW1lQ3ljbGVTdGFydERhdGUpO1xyXG4gICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVFbmREYXRlJywgdGltZUN5Y2xlRW5kRGF0ZSk7XHJcbiAgICBzZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScsIGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSk7XHJcbiAgICBzZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZURhdGVzJywgY3VycmVudEN5Y2xlRGF0ZXMpO1xyXG4gICAgc2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVFbmREYXRlJywgY3VycmVudEN5Y2xlRW5kRGF0ZSk7XHJcblxyXG4gICAgcmV0dXJuIGFzc2lnbm1lbnQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdGltZUN5Y2xlRGlzcGxheSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSA9IGdldChoZWFkKGdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpKSwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpO1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZUVuZERhdGUgPSBnZXQoaGVhZChnZXQodGhpcy5kZXRhaWxzLCAnZ2V0Q2xpZW50QXNzaWdubWVudHMnKSksICdjdXJyZW50Q3ljbGVFbmREYXRlJyk7XHJcblxyXG4gICAgcmV0dXJuIGAke3RoaXMuY3ljbGVOYW1lfSR7Y3VycmVudEN5Y2xlU3RhcnREYXRlfSAtICR7Y3VycmVudEN5Y2xlRW5kRGF0ZX1gO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRDdXJyZW50Q3ljbGVEYXRlcyhzdGFydERhdGU6IHN0cmluZyk6IHsgZGF5T2ZXZWVrOiBzdHJpbmcsIGRhdGU6IHN0cmluZyB9W10ge1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZURhdGVzOiB7IGRheU9mV2Vlazogc3RyaW5nLCBkYXRlOiBzdHJpbmcgfVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgNzsgaSsrKSB7XHJcbiAgICAgIGN1cnJlbnRDeWNsZURhdGVzID0gY29uY2F0KGN1cnJlbnRDeWNsZURhdGVzLFxyXG4gICAgICAgIHsgZGF0ZTogbW9tZW50KHN0YXJ0RGF0ZSkuYWRkKGksICdkYXlzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksIGRheU9mV2VlazogbnRoKHRoaXMuZGF5T2ZXZWVrcywgaSkgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudEN5Y2xlRGF0ZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZFRpbWVzaGVldEJ5QWN0aXZpdHkoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IFRpbWVTaGVldFR5cGVbXSB7XHJcbiAgICBpZiAoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpKSB7XHJcbiAgICAgIGxldCByZXN1bHRzOiBUaW1lU2hlZXRUeXBlW10gPSBbXTtcclxuICAgICAgbGV0IG9yZGVyOiBudW1iZXIgPSAwO1xyXG4gICAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRGF0ZXMnKSwgKHZhbHVlOiB7IGRheU9mV2Vlazogc3RyaW5nLCBkYXRlOiBzdHJpbmcgfSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRpbWVzaGVldDogVGltZVNoZWV0ID0gZmluZChnZXQoYXNzaWdubWVudCwgJ3RpbWVrZWVwaW5nc1BlckN5Y2xlJyksICh0czogVGltZVNoZWV0KSA9PlxyXG4gICAgICAgICAgbW9tZW50KHRzLmRhdGUpLmlzU2FtZSh2YWx1ZS5kYXRlLCAnZGF5JyksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGltZXNoZWV0KSB7XHJcbiAgICAgICAgICBmb3JFYWNoKHRpbWVzaGVldC5hY3Rpdml0aWVzLCAoYWN0aXZpdHk6IFRpbWVLZWVwaW5nQWN0aXZpdHkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHlJZDogbnVtYmVyID0gZ2V0KGFjdGl2aXR5LCAnYWN0aXZpdHlMb29rdXAubG9va3VwSWQnKTtcclxuICAgICAgICAgICAgbGV0IHJvdzogVGltZVNoZWV0VHlwZSA9IGZpbmQocmVzdWx0cywgKHRzOiBUaW1lU2hlZXRUeXBlKSA9PiBnZXQodHMsICdpZCcpID09PSBhY3Rpdml0eUlkKTtcclxuICAgICAgICAgICAgaWYgKCFyb3cpIHtcclxuICAgICAgICAgICAgICByb3cgPSB7IGlkOiBhY3Rpdml0eUlkLCB0aW1lczoge30sIG9yZGVyOiBvcmRlciwgbmFtZTogZ2V0KGFjdGl2aXR5LCAnYWN0aXZpdHlMb29rdXAuZGlzcGxheVZhbHVlJykgfTtcclxuICAgICAgICAgICAgICByZXN1bHRzID0gY29uY2F0KHJlc3VsdHMsIHJvdyk7XHJcbiAgICAgICAgICAgICAgb3JkZXIgPSBvcmRlciArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0KHJvdywgYHRpbWVzLiR7dmFsdWUuZGF5T2ZXZWVrfWAsIGFjdGl2aXR5LnRpbWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRDYXJmYXJlKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBDYXJmYXJlVHlwZVtdIHtcclxuICAgIGxldCBjYXJmYXJlczogQ2FyZmFyZVR5cGVbXSA9IFtdO1xyXG4gICAgZm9yRWFjaCh0aGlzLmRheU9mV2Vla3MsIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgLy8gZ2V0IGluaXRpYWwgZGF0YSBmcm9tIGRldGFpbHNcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlOiBzdHJpbmcgPSBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuYWRkKGluZGV4LCAnZCcpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICBjb25zdCB0aW1lU2hlZXRNb2RlbDogVGltZVNoZWV0ID0gY2hhaW4oYXNzaWdubWVudClcclxuICAgICAgICAuZ2V0KCd0aW1la2VlcGluZ3NQZXJDeWNsZScpXHJcbiAgICAgICAgLmZpbmQoKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShzZWxlY3RlZERhdGUsICdkJykpXHJcbiAgICAgICAgLnZhbHVlKCk7XHJcbiAgICAgIGNvbnN0IGlzRGlzYWJsZTogYm9vbGVhbiA9IGdldCh0aW1lU2hlZXRNb2RlbCwgJ2NhckZhcmUuaXNEaXNhYmxlJywgdHJ1ZSkgfHwgdGhpcy5pc0NhcmZhcmVEaXNhYmxlZChpdGVtLCBhc3NpZ25tZW50KTtcclxuICAgICAgY2FyZmFyZXMgPSBjb25jYXQoY2FyZmFyZXMsIFt7XHJcbiAgICAgICAgZGF0ZTogc2VsZWN0ZWREYXRlLCBkYXlPZldlZWs6IGl0ZW0sXHJcbiAgICAgICAgY2FyZmFyZVR5cGU6IGdldCh0aW1lU2hlZXRNb2RlbCwgJ2NhckZhcmUuY2FyRmFyZVR5cGUnKSxcclxuICAgICAgICBvcHRpb25zOiBnZXQodGltZVNoZWV0TW9kZWwsICdsb29rdXBDYXJGYXJlVHlwZXMnKSxcclxuICAgICAgICBpc0Rpc2FibGU6IGlzRGlzYWJsZSxcclxuICAgICAgfV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2FyZmFyZXM7XHJcbiAgfVxyXG5cclxuICBidWlsZEFzc2lnbm1lbnRNb2RlKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBBc3NpZ25tZW50TW9kZVR5cGVbXSB7XHJcbiAgICBsZXQgYXNzaWdubWVudE1vZGVzOiBBc3NpZ25tZW50TW9kZVR5cGVbXSA9IFtdO1xyXG4gICAgZm9yRWFjaCh0aGlzLmRheU9mV2Vla3MsIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgLy8gZ2V0IGluaXRpYWwgZGF0YSBmcm9tIGRldGFpbHNcclxuICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlOiBzdHJpbmcgPSBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuYWRkKGluZGV4LCAnZCcpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICBjb25zdCB0aW1lU2hlZXRNb2RlbDogVGltZVNoZWV0ID0gY2hhaW4oYXNzaWdubWVudClcclxuICAgICAgICAuZ2V0KCd0aW1la2VlcGluZ3NQZXJDeWNsZScpXHJcbiAgICAgICAgLmZpbmQoKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShzZWxlY3RlZERhdGUsICdkJykpXHJcbiAgICAgICAgLnZhbHVlKCk7XHJcbiAgICAgIGNvbnN0IGlzRGlzYWJsZTogYm9vbGVhbiA9IHRoaXMudmlld09ubHkgfHwgZ2V0KHRpbWVTaGVldE1vZGVsLCAnaXNEaXNhYmxlJyk7XHJcbiAgICAgIGFzc2lnbm1lbnRNb2RlcyA9IGNvbmNhdChhc3NpZ25tZW50TW9kZXMsIFt7XHJcbiAgICAgICAgZGF0ZTogc2VsZWN0ZWREYXRlLCBkYXlPZldlZWs6IGl0ZW0sXHJcbiAgICAgICAgYXNzaWdubWVudE1vZGU6IGdldCh0aW1lU2hlZXRNb2RlbCwgJ2Fzc2lnbm1lbnRNb2RlJyksXHJcbiAgICAgICAgb3B0aW9uczogZ2V0KHRpbWVTaGVldE1vZGVsLCAnbG9va3VwQXNzaWdubWVudE1vZGVzJyksXHJcbiAgICAgICAgaXNEaXNhYmxlOiBpc0Rpc2FibGUsXHJcbiAgICAgIH1dKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFzc2lnbm1lbnRNb2RlcztcclxuICB9XHJcblxyXG4gIGluaXRGb3JtR3JvdXAoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgZm9yRWFjaChnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKSwgKGl0ZW06IFRpbWVTaGVldFR5cGUpID0+IHtcclxuICAgICAgY29uc3QgYWN0aXZpdHlJZDogc3RyaW5nID0gdG9TdHJpbmcoZ2V0KGl0ZW0sICdpZCcpKTtcclxuICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woYWN0aXZpdHlJZCwgdGhpcy5idWlsZEFjdGl2aXR5Rm9ybShpdGVtLCBhc3NpZ25tZW50KSk7XHJcbiAgICB9KTtcclxuICAgIHNldChhc3NpZ25tZW50LCAnZm9ybUdyb3VwJywgZm9ybUdyb3VwKTtcclxuICAgIGxldCBjYXJmYXJlRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycpLCAoaXRlbTogQ2FyZmFyZVR5cGUpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWU6IExvb2t1cCA9IGZpbmQoaXRlbS5vcHRpb25zLCAob3B0aW9uOiBMb29rdXApID0+IG9wdGlvbi5sb29rdXBJZCA9PT0gZ2V0KGl0ZW0sICdjYXJmYXJlVHlwZS5sb29rdXBJZCcpKTtcclxuICAgICAgY2FyZmFyZUZvcm1Hcm91cC5hZGRDb250cm9sKGl0ZW0uZGF5T2ZXZWVrLCBuZXcgRm9ybUNvbnRyb2woaXNOaWwodmFsdWUpID8gdGhpcy5kZWZhdWx0Q2FyZmFyZU9wdGlvbiA6IHZhbHVlKSk7XHJcbiAgICB9KTtcclxuICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZUZvcm1Hcm91cCcsIGNhcmZhcmVGb3JtR3JvdXApO1xyXG5cclxuICAgIGxldCBhc3NpZ25tZW50TW9kZUZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgZm9yRWFjaChnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRNb2RlTW9kZWxzJyksIChpdGVtOiBBc3NpZ25tZW50TW9kZVR5cGUpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWU6IExvb2t1cCA9IGZpbmQoaXRlbS5vcHRpb25zLCAob3B0aW9uOiBMb29rdXApID0+IG9wdGlvbi5sb29rdXBJZCA9PT0gZ2V0KGl0ZW0sICdhc3NpZ25tZW50TW9kZS5sb29rdXBJZCcpKTtcclxuICAgICAgYXNzaWdubWVudE1vZGVGb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtLmRheU9mV2VlaywgbmV3IEZvcm1Db250cm9sKGlzTmlsKHZhbHVlKSA/IHRoaXMuZGVmYXVsdENhcmZhcmVPcHRpb24gOiB2YWx1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSk7XHJcbiAgICB9KTtcclxuICAgIHNldChhc3NpZ25tZW50LCAnYXNzaWdubWVudE1vZGVGb3JtR3JvdXAnLCBhc3NpZ25tZW50TW9kZUZvcm1Hcm91cCk7XHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZFBhc3RDeWNsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzQmFja0Rpc2FibGUoKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhZ2V0KHRoaXMuZGV0YWlscywgJ2lzQWJhd2QnKSkge1xyXG4gICAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEN5Y2xlU3RhcnREYXRlOiBzdHJpbmcgPSBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuc3VidHJhY3QoNywgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q3ljbGVFbmREYXRlOiBzdHJpbmcgPSBtb21lbnQoY3VycmVudEN5Y2xlU3RhcnREYXRlKS5hZGQoNiwgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuICAgICAgICBpZiAobW9tZW50KGN1cnJlbnRDeWNsZUVuZERhdGUpLmlzQmVmb3JlKGdldChhc3NpZ25tZW50LCAndGltZUN5Y2xlU3RhcnREYXRlJyksICdkJykpIHtcclxuICAgICAgICAgIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaExvYWRQYXN0VGltZXNoZWV0KG5ldyBMb2FkUGFzdFRpbWVzaGVldFBheWxvYWQoe1xyXG4gICAgICAgICAgICBjYXNlSWQ6IGdldCh0aGlzLmRldGFpbHMsICdjYXNlSWQnKSxcclxuICAgICAgICAgICAgY3ljbGVTdGFydERhdGU6IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZVN0YXJ0RGF0ZScpKS5zdWJ0cmFjdCgxLCAnbW9udGhzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIGN5Y2xlRW5kRGF0ZTogbW9tZW50KGdldChhc3NpZ25tZW50LCAndGltZUN5Y2xlRW5kRGF0ZScpKS5zdWJ0cmFjdCgxLCAnbW9udGhzJykuZW5kT2YoJ21vbnRoJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIGlzQ2E6IHRoaXMuZGV0YWlscy5pc0NhLFxyXG4gICAgICAgICAgICBpc1ZlbnR1cmU6IHRoaXMuZGV0YWlscy5pc1ZlbnR1cmUsXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJywgY3VycmVudEN5Y2xlU3RhcnREYXRlKTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScsIGN1cnJlbnRDeWNsZUVuZERhdGUpO1xyXG5cclxuICAgICAgICAgIGxldCBjdXJyZW50Q3ljbGVEYXRlcyA9IHRoaXMuYnVpbGRDdXJyZW50Q3ljbGVEYXRlcyhjdXJyZW50Q3ljbGVTdGFydERhdGUpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVEYXRlcycsIGN1cnJlbnRDeWNsZURhdGVzKTtcclxuXHJcbiAgICAgICAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IHRoaXMuYnVpbGRUaW1lc2hlZXRCeUFjdGl2aXR5KGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lc2hlZXRCeUFjdGl2aXR5JywgdGltZXNoZWV0QnlBY3Rpdml0eSk7XHJcblxyXG4gICAgICAgICAgaWYgKGdldChhc3NpZ25tZW50LCAnZ2V0QWN0aXZpdGllcycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgbGV0IGNhcmZhcmVNb2RlbHMgPSB0aGlzLmJ1aWxkQ2FyZmFyZShhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycsIGNhcmZhcmVNb2RlbHMpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaW5pdEZvcm1Hcm91cChhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZvciBjYSBhbmQgdmVudHVyZSBjbGllbnRzKHdlZWtseSlcclxuICAgICAgbGV0IGFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuYXNzaWdubWVudHMpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q3ljbGVTdGFydERhdGU6IHN0cmluZyA9IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpKS5zdWJ0cmFjdCg3LCAnZGF5cycpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q3ljbGVFbmREYXRlOiBzdHJpbmcgPSBtb21lbnQoY3VycmVudEN5Y2xlU3RhcnREYXRlKS5hZGQoNiwgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuXHJcbiAgICAgIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaExvYWRQYXN0VGltZXNoZWV0KG5ldyBMb2FkUGFzdFRpbWVzaGVldFBheWxvYWQoe1xyXG4gICAgICAgIC8vYXNzaWdubWVudElkOiBnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRJZCcpLC8vUEtcclxuICAgICAgICBjYXNlSWQ6IHRoaXMuZGV0YWlscy5jYXNlSWQsXHJcbiAgICAgICAgY3ljbGVTdGFydERhdGU6IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSxcclxuICAgICAgICBjeWNsZUVuZERhdGU6IGN1cnJlbnRDeWNsZUVuZERhdGUsXHJcbiAgICAgICAgaXNDYTogdGhpcy5kZXRhaWxzLmlzQ2EsXHJcbiAgICAgICAgaXNWZW50dXJlOiB0aGlzLmRldGFpbHMuaXNWZW50dXJlLFxyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRm9yd2FyZEN5Y2xlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNGb3J3YXJkRGlzYWJsZSgpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoISFnZXQodGhpcy5kZXRhaWxzLCAnaXNBYmF3ZCcpKSB7XHJcbiAgICAgIGZvckVhY2godGhpcy5hc3NpZ25tZW50cywgKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpID0+IHtcclxuICAgICAgICBjb25zdCBjdXJyZW50Q3ljbGVTdGFydERhdGU6IHN0cmluZyA9IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpKS5zdWJ0cmFjdCg3LCAnZGF5cycpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDeWNsZUVuZERhdGU6IHN0cmluZyA9IG1vbWVudChjdXJyZW50Q3ljbGVTdGFydERhdGUpLmFkZCg2LCAnZGF5cycpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG5cclxuICAgICAgICBpZiAobW9tZW50KGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSkuaXNBZnRlcihnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZUVuZERhdGUnKSwgJ2RheScpKSB7XHJcbiAgICAgICAgICB0aGlzLnRpbWVLZWVwaW5nRGV0YWlsc1NlcnZpY2UuZGlzcGF0Y2hMb2FkUGFzdFRpbWVzaGVldChuZXcgTG9hZFBhc3RUaW1lc2hlZXRQYXlsb2FkKHtcclxuICAgICAgICAgICAgY2FzZUlkOiBnZXQodGhpcy5kZXRhaWxzLCAnY2FzZUlkJyksXHJcbiAgICAgICAgICAgIGN5Y2xlU3RhcnREYXRlOiBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVTdGFydERhdGUnKSkuYWRkKDEsICdtb250aHMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KSxcclxuICAgICAgICAgICAgY3ljbGVFbmREYXRlOiBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICd0aW1lQ3ljbGVFbmREYXRlJykpLmFkZCgxLCAnbW9udGhzJykuZW5kT2YoJ21vbnRoJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIGlzQ2E6IHRoaXMuZGV0YWlscy5pc0NhLFxyXG4gICAgICAgICAgICBpc1ZlbnR1cmU6IHRoaXMuZGV0YWlscy5pc1ZlbnR1cmUsXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJywgY3VycmVudEN5Y2xlU3RhcnREYXRlKTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScsIGN1cnJlbnRDeWNsZUVuZERhdGUpO1xyXG5cclxuICAgICAgICAgIGxldCBjdXJyZW50Q3ljbGVEYXRlcyA9IHRoaXMuYnVpbGRDdXJyZW50Q3ljbGVEYXRlcyhjdXJyZW50Q3ljbGVTdGFydERhdGUpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVEYXRlcycsIGN1cnJlbnRDeWNsZURhdGVzKTtcclxuXHJcbiAgICAgICAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IHRoaXMuYnVpbGRUaW1lc2hlZXRCeUFjdGl2aXR5KGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgc2V0KGFzc2lnbm1lbnQsICd0aW1lc2hlZXRCeUFjdGl2aXR5JywgdGltZXNoZWV0QnlBY3Rpdml0eSk7XHJcblxyXG4gICAgICAgICAgaWYgKGdldChhc3NpZ25tZW50LCAnZ2V0QWN0aXZpdGllcycpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQpO1xyXG4gICAgICAgICAgbGV0IGNhcmZhcmVNb2RlbHMgPSB0aGlzLmJ1aWxkQ2FyZmFyZShhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCAnY2FyZmFyZU1vZGVscycsIGNhcmZhcmVNb2RlbHMpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaW5pdEZvcm1Hcm91cChhc3NpZ25tZW50KTtcclxuICAgICAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZvciBjYSBhbmQgdmVudHVyZSBjbGllbnRzKHdlZWtseSlcclxuICAgICAgbGV0IGFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuYXNzaWdubWVudHMpO1xyXG4gICAgICBjb25zdCBjdXJyZW50Q3ljbGVTdGFydERhdGU6IHN0cmluZyA9IG1vbWVudChnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZVN0YXJ0RGF0ZScpKS5hZGQoNywgJ2RheXMnKS5mb3JtYXQodGhpcy5tb21lbnREYXRlRm9ybWF0KTtcclxuICAgICAgY29uc3QgY3VycmVudEN5Y2xlRW5kRGF0ZTogc3RyaW5nID0gbW9tZW50KGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSkuYWRkKDYsICdkYXlzJykuZm9ybWF0KHRoaXMubW9tZW50RGF0ZUZvcm1hdCk7XHJcblxyXG4gICAgICB0aGlzLnRpbWVLZWVwaW5nRGV0YWlsc1NlcnZpY2UuZGlzcGF0Y2hMb2FkUGFzdFRpbWVzaGVldChuZXcgTG9hZFBhc3RUaW1lc2hlZXRQYXlsb2FkKHtcclxuICAgICAgICAvL2Fzc2lnbm1lbnRJZDogZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50SWQnKSwvL1BLXHJcbiAgICAgICAgY2FzZUlkOiB0aGlzLmRldGFpbHMuY2FzZUlkLFxyXG4gICAgICAgIGN5Y2xlU3RhcnREYXRlOiBjdXJyZW50Q3ljbGVTdGFydERhdGUsXHJcbiAgICAgICAgY3ljbGVFbmREYXRlOiBjdXJyZW50Q3ljbGVFbmREYXRlLFxyXG4gICAgICAgIGlzQ2E6IHRoaXMuZGV0YWlscy5pc0NhLFxyXG4gICAgICAgIGlzVmVudHVyZTogdGhpcy5kZXRhaWxzLmlzVmVudHVyZSxcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQWN0aXZpdHkoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgYWN0aXZpdHk6IExvb2t1cCA9IHRoaXMuY29udHJvbC52YWx1ZTtcclxuICAgIGlmICghYWN0aXZpdHkgfHwgdGhpcy52aWV3T25seSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvcm1Hcm91cCA9IGdldChhc3NpZ25tZW50LCAnZm9ybUdyb3VwJyk7XHJcbiAgICBpZiAoZm9ybUdyb3VwLmNvbnRhaW5zKHRvU3RyaW5nKGFjdGl2aXR5Lmxvb2t1cElkKSkpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmIChnZXQoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCksIGFjdGl2aXR5Lmxvb2t1cElkKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgbGV0IHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKTtcclxuICAgIGNvbnN0IGFjdGl2aXR5TnVtYmVyOiBudW1iZXIgPSBnZXQobGFzdCh0aW1lc2hlZXRCeUFjdGl2aXR5KSwgJ29yZGVyJywgMCkgKyAxO1xyXG4gICAgbGV0IG5ld0FjdGl2aXR5VGltZXNoZWV0OiBUaW1lU2hlZXRUeXBlID0ge1xyXG4gICAgICBpZDogYWN0aXZpdHkubG9va3VwSWQsXHJcbiAgICAgIG5hbWU6IGFjdGl2aXR5LmRpc3BsYXlWYWx1ZSwgb3JkZXI6IGFjdGl2aXR5TnVtYmVyLCB0aW1lczogcmVkdWNlKHRoaXMuZGF5T2ZXZWVrcyxcclxuICAgICAgICAocmVzdWx0OiB7IFtrOiBzdHJpbmddOiBudW1iZXIgfSwgZGF5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJlc3VsdFtkYXldID0gbnVsbDtcclxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSwge30pXHJcbiAgICB9O1xyXG4gICAgbGV0IGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBzb3J0QnkoY29uY2F0KHRpbWVzaGVldEJ5QWN0aXZpdHksIG5ld0FjdGl2aXR5VGltZXNoZWV0KSwgWydvcmRlciddKTtcclxuICAgIHNldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScsIGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkpO1xyXG4gICAgdGhpcy5idWlsZEZpbHRlcmVkQWN0aXZpdGllcyhhc3NpZ25tZW50KTtcclxuICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKHRvU3RyaW5nKGFjdGl2aXR5Lmxvb2t1cElkKSwgdGhpcy5idWlsZEFjdGl2aXR5Rm9ybShuZXdBY3Rpdml0eVRpbWVzaGVldCwgYXNzaWdubWVudCkpO1xyXG4gICAgLy9zaG91bGQgdGhpcyBiZSBzZXQgYWdhaW4/XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQpO1xyXG4gICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUFjdGl2aXR5KGFjdGl2aXR5SWQ6IG51bWJlciwgYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICBjb25zdCBhdHRlc3RlZEFjdGl2aXR5U2hvdyA9ICF0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlP2Fzc2lnbm1lbnQuaXNTZWxmQXR0ZXN0ZWRTY2hvb2w6ZmFsc2VcclxuICAgIGlmICh0aGlzLnZpZXdPbmx5IHx8IGF0dGVzdGVkQWN0aXZpdHlTaG93ICE9IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IGdldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScpO1xyXG4gICAgbGV0IGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBzb3J0QnkoX2ZpbHRlcih0aW1lc2hlZXRCeUFjdGl2aXR5LCAoaXRlbTogVGltZVNoZWV0VHlwZSkgPT4gZ2V0KGl0ZW0sICdpZCcpICE9PSBhY3Rpdml0eUlkKSwgJ29yZGVyJyk7XHJcbiAgICBzZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknLCBhbGx0aW1lc2hlZXRCeUFjdGl2aXR5KTtcclxuICAgIHRoaXMuYnVpbGRGaWx0ZXJlZEFjdGl2aXRpZXMoYXNzaWdubWVudCk7XHJcbiAgICBsZXQgZm9ybUdyb3VwID0gZ2V0KGFzc2lnbm1lbnQsICdmb3JtR3JvdXAnKTtcclxuICAgIGZvcm1Hcm91cC5yZW1vdmVDb250cm9sKHRvU3RyaW5nKGFjdGl2aXR5SWQpKTtcclxuICAgIC8vc2hvdWxkIHRoaXMgYmUgc2V0IGFnYWluP1xyXG4gICAgdGhpcy5jYWxjdWxhdGVUb3RhbChhc3NpZ25tZW50KTtcclxuICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdW0oaXRlbTogVGltZVNoZWV0VHlwZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gcmVkdWNlKGdldChpdGVtLCAndGltZXMnKSwgKHJlc3VsdDogbnVtYmVyLCB0aW1lOiBudW1iZXIpID0+IHJlc3VsdCArPSB0aW1lLCAwKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUhvdXJzKGV2ZW50OiBzdHJpbmcsIGFjdGl2aXR5SWQ6IG51bWJlciwgZGF5T2ZXZWVrOiBzdHJpbmcsIGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiB2b2lkIHtcclxuICAgIGxldCBmb3JtR3JvdXAgPSBnZXQoYXNzaWdubWVudCwgJ2Zvcm1Hcm91cCcpO1xyXG4gICAgY29uc3QgYWN0aXZpdHlDdHJsOiBBYnN0cmFjdENvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbdG9TdHJpbmcoYWN0aXZpdHlJZCldO1xyXG4gICAgY29uc3QgY3RybDogQWJzdHJhY3RDb250cm9sID0gYWN0aXZpdHlDdHJsLmdldChkYXlPZldlZWspO1xyXG4gICAgaWYgKCF0aGlzLmhvdXJQYXR0ZXJuLnRlc3QoZXZlbnQpKSB7XHJcbiAgICAgIGludm9rZShjdHJsLCAnc2V0RXJyb3JzJywgeyBwYXR0ZXJuOiAnMCAtIDcnIH0pO1xyXG4gICAgICBjdHJsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcclxuICAgIGxldCBmb3JtVmFsdWU6IGFueSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgLy8gQ2hlY2sgaWYgb3ZlciA3IGhvdXJzIGluIHRvdGFsIG9uIGFueSBnaXZlbiBkYXkoY3VzdG9tRXJyb3IpO1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxyXG4gICAgY29uc3Qgc3VtT2ZEYXk6IG51bWJlciA9IHJlZHVjZShmb3JtVmFsdWUsIChyZXM6IG51bWJlciwgdjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiByZXMgKyB0b051bWJlcihnZXQodiwgZGF5T2ZXZWVrKSk7XHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICBpZiAoc3VtT2ZEYXkgPiB0aGlzLm1heEhvdXJzKSB7XHJcbiAgICAgIGludm9rZShjdHJsLCAnc2V0RXJyb3JzJywgeyBjdXN0b21FcnJvcjogdGhpcy5jdXN0b21FcnJvck1lc3NhZ2UgfSk7XHJcbiAgICAgIGN0cmwubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgLy8gVXBkYXRlIGRhaWx5IHRvdGFsXHJcbiAgICBsZXQgdGltZXNoZWV0QnlBY3Rpdml0eSA9IGdldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScpO1xyXG4gICAgbGV0IGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkgPSBzb3J0QnkobWFwKGtleXMoZm9ybVZhbHVlKSwgKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBUaW1lU2hlZXRUeXBlID0gZmluZCh0aW1lc2hlZXRCeUFjdGl2aXR5LCAoaXRlbTogVGltZVNoZWV0VHlwZSkgPT4gdG9TdHJpbmcoaXRlbS5pZCkgPT09IGtleSk7XHJcbiAgICAgIGNvbnN0IHRpbWVzOiB7IFtrOiBzdHJpbmddOiBudW1iZXIgfSA9IG1hcFZhbHVlcyhmb3JtVmFsdWVba2V5XSwgKGhvdXJzOiBzdHJpbmcpID0+IHRoaXMuaG91cnNUb051bWJlcihob3VycykpO1xyXG4gICAgICByZXR1cm4geyBuYW1lOiBzZWxlY3RlZC5uYW1lLCB0aW1lczogdGltZXMsIG9yZGVyOiBzZWxlY3RlZC5vcmRlciwgaWQ6IHRvTnVtYmVyKGtleSkgfTtcclxuICAgIH0pLCAnb3JkZXInKTtcclxuICAgIHNldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScsIGFsbHRpbWVzaGVldEJ5QWN0aXZpdHkpO1xyXG4gICAgdGhpcy5jYWxjdWxhdGVUb3RhbChhc3NpZ25tZW50KTtcclxuICAgIHRoaXMudXBkYXRlQ2FyZmFyZShkYXlPZldlZWssIGFzc2lnbm1lbnQpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRBY3Rpdml0eUZvcm0oaXRlbTogVGltZVNoZWV0VHlwZSwgYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IEZvcm1Hcm91cCB7XHJcbiAgICBsZXQgY3VycmVudEN5Y2xlRGF0ZXMgPSBnZXQoYXNzaWdubWVudCwgJ2N1cnJlbnRDeWNsZURhdGVzJyk7XHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChtYXBWYWx1ZXMoa2V5QnkoY3VycmVudEN5Y2xlRGF0ZXMsICdkYXlPZldlZWsnKSwgKHY6IHsgZGF0ZTogc3RyaW5nLCBkYXlPZldlZWs6IHN0cmluZyB9LCBrOiBzdHJpbmcpID0+IHtcclxuICAgICAgbGV0IHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSBnZXQoaXRlbSwgYHRpbWVzLiR7a31gKTtcclxuICAgICAgaWYgKHRoaXMuaXNGZWRlcmFsSG9saWRheSh2LmRhdGUsIGFzc2lnbm1lbnQpKSB7XHJcbiAgICAgICAgdmFsdWUgPSAnSG9saWRheSc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hvbGlkYXkodi5kYXRlLCBhc3NpZ25tZW50KSkge1xyXG4gICAgICAgIHZhbHVlID0gJ0V4Y3VzZSc7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFt7IHZhbHVlOiB2YWx1ZSwgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlKHYuZGF0ZSwgYXNzaWdubWVudCkgfSxcclxuICAgICAgW1ZhbGlkYXRvcnMucGF0dGVybih0aGlzLmhvdXJQYXR0ZXJuKSwgVmFsaWRhdG9ycy5tYXgodGhpcy5tYXhIb3VycyldXTtcclxuICAgICAgLy8sIFZhbGlkYXRvcnMucmVxdWlyZWQgLS0gcmVtb3ZlZCBiZWNhdXNlIGRlZmF1bHQgaG91cnMgaXMgbnVsbCBhbmQgdXNlciBpcyBhbGxvd2VkIHRvIHNhdmUgcGFydGlhbCB0aW1lc2hlZXRcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVRvdGFsKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiB2b2lkIHtcclxuICAgIGxldCBjdXJyZW50Q3ljbGVEYXRlcyA9IGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRGF0ZXMnKTtcclxuICAgIGZvckVhY2goY3VycmVudEN5Y2xlRGF0ZXMsICh2OiB7IGRhdGU6IHN0cmluZywgZGF5T2ZXZWVrOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICBsZXQgdG90YWw6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmIChtb21lbnQodi5kYXRlKS5pc0FmdGVyKGdldChhc3NpZ25tZW50LCAndGltZUN5Y2xlRW5kRGF0ZScpKSB8fCBtb21lbnQodi5kYXRlKS5pc0JlZm9yZShnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZVN0YXJ0RGF0ZScpKSkge1xyXG4gICAgICAgIC8vIGFiYXdkIGNsaWVudHNcclxuICAgICAgICBzZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAnTi9BJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMuaXNIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkgfHwgdGhpcy5pc0ZlZGVyYWxIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkpXHJcbiAgICAgICAgLy8gaWYgaXQncyBwdWJsaWMvZmVkZXJhbCBob2xpZGF5LCB0aGVuIGRhaWx5IHRvdGFsIGlzIGhvdXJzUGVyU2NoZWR1bGVEYXlcclxuICAgICAgICAmJiBtb21lbnQodi5kYXRlKS5pc1NhbWVPckFmdGVyKGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudFN0YXJ0RGF0ZScpLCAnZGF5JylcclxuICAgICAgICAmJiAoKCEhKGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudEVuZERhdGUnKSkgJiYgbW9tZW50KHYuZGF0ZSkuaXNTYW1lT3JCZWZvcmUoZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50RW5kRGF0ZScpLCAnZGF5JykpXHJcbiAgICAgICAgICB8fCAhZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50RW5kRGF0ZScpKVxyXG4gICAgICAgICYmIHRoaXMuaXNPblNjaGVkdWxlKHYuZGF5T2ZXZWVrKSAmJiBzaXplKChnZXQoYXNzaWdubWVudCwgJ3RpbWVzaGVldEJ5QWN0aXZpdHknKSkpID4gMCkge1xyXG4gICAgICAgIHRvdGFsID0gZ2V0KGFzc2lnbm1lbnQsICdob3Vyc1BlclNjaGVkdWxlRGF5Jyk7XHJcbiAgICAgICAgc2V0KGFzc2lnbm1lbnQsIFsnZGFpbHlUb3RhbCcsIHYuZGF5T2ZXZWVrXSwgdG90YWwpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkgfHwgdGhpcy5pc0ZlZGVyYWxIb2xpZGF5KHYuZGF0ZSwgYXNzaWdubWVudCkpIHtcclxuICAgICAgICBzZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAwKTtcclxuICAgICAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScpLCAodmFsdWU6IFRpbWVTaGVldFR5cGUpID0+IHtcclxuICAgICAgICAgIGxldCB0aW1lOiBudW1iZXIgPSBnZXQoYXNzaWdubWVudCwgWydkYWlseVRvdGFsJywgdi5kYXlPZldlZWtdLCAwKTtcclxuICAgICAgICAgIHNldChhc3NpZ25tZW50LCBbJ2RhaWx5VG90YWwnLCB2LmRheU9mV2Vla10sIHRpbWUgKyBnZXQodmFsdWUsIGB0aW1lcy4ke3YuZGF5T2ZXZWVrfWAsIDApKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbFN1bShhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogbnVtYmVyIHtcclxuICAgIHJldHVybiByZWR1Y2UoZ2V0KGFzc2lnbm1lbnQsICdkYWlseVRvdGFsJyksIChyZXN1bHQ6IG51bWJlciwgdmFsdWU6IG51bWJlcikgPT4gcmVzdWx0ICs9IGlzTnVtYmVyKHZhbHVlKSA/IHZhbHVlIDogMCwgMCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgSXMgZWFjaCBob3VyIGVsZW1lbnQgZGlzYWJsZWQ6IGJhc2VkIG9uIGNhblZpZXdPbmx5IG9yIGVhY2ggdGltZWtlZXBpbmdzUGVyQ3ljbGUncyBpc0hvbGlkYXksIGlzRGlzYWJsZS5cclxuICAgKi9cclxuICBpc0Rpc2FibGUoZGF0ZTogc3RyaW5nLCBhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBUaW1lU2hlZXQgPSBmaW5kKGdldChhc3NpZ25tZW50LCAndGltZWtlZXBpbmdzUGVyQ3ljbGUnKSwgKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShkYXRlLCAnZGF5JykpO1xyXG4gICAgICBjb25zdCBpc0Z1dHVyZURhdGU6IGJvb2xlYW4gPSBtb21lbnQoZGF0ZSkuaXNBZnRlcihtb21lbnQoKSk7XHJcbiAgICAgIHJldHVybiB0aGlzLnZpZXdPbmx5IHx8ICFzZWxlY3RlZCB8fCAhIWdldChzZWxlY3RlZCwgJ2lzSG9saWRheScpIHx8ICEhZ2V0KHNlbGVjdGVkLCAnaXNEaXNhYmxlJykgfHwgISFnZXQoc2VsZWN0ZWQsICdpc0ZlZGVyYWxIb2xpZGF5JykgfHwgaXNGdXR1cmVEYXRlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudmlld09ubHk7XHJcbiAgfVxyXG5cclxuICBpc0hvbGlkYXkoZGF0ZTogc3RyaW5nLCBhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkOiBUaW1lU2hlZXQgPSBmaW5kKGdldChhc3NpZ25tZW50LCAndGltZWtlZXBpbmdzUGVyQ3ljbGUnKSwgKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShkYXRlLCAnZGF5JykpO1xyXG4gICAgICByZXR1cm4gZ2V0KHNlbGVjdGVkLCAnaXNIb2xpZGF5JywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNGZWRlcmFsSG9saWRheShkYXRlOiBzdHJpbmcsIGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBib29sZWFuIHtcclxuICAgIGlmIChnZXQoYXNzaWdubWVudCwgJ3RpbWVrZWVwaW5nc1BlckN5Y2xlJykpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQ6IFRpbWVTaGVldCA9IGZpbmQoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpLCAodGltZXNoZWV0OiBUaW1lU2hlZXQpID0+IG1vbWVudCh0aW1lc2hlZXQuZGF0ZSkuaXNTYW1lKGRhdGUsICdkYXknKSk7XHJcbiAgICAgIHJldHVybiBnZXQoc2VsZWN0ZWQsICdpc0ZlZGVyYWxIb2xpZGF5JywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNGb3J3YXJkRGlzYWJsZSgpOiBib29sZWFuIHtcclxuICAgIGxldCBhc3NpZ25tZW50ID0gaGVhZCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpO1xyXG4gICAgaWYgKGdldCh0aGlzLmRldGFpbHMsICdpc0FiYXdkJykgJiYgbW9tZW50KGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScpKS5pc0JlZm9yZShnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZUVuZERhdGUnKSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFnZXQodGhpcy5kZXRhaWxzLCAnY2FuR29Gb3J3YXJkJyk7XHJcbiAgfVxyXG5cclxuICBpc0JhY2tEaXNhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuZGV0YWlscywgJ2dldENsaWVudEFzc2lnbm1lbnRzJyk7XHJcbiAgICBpZiAoZ2V0KHRoaXMuZGV0YWlscywgJ2lzQWJhd2QnKSAmJiBtb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVTdGFydERhdGUnKSkuaXNBZnRlcihnZXQoYXNzaWdubWVudCwgJ3RpbWVDeWNsZVN0YXJ0RGF0ZScpKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIWdldCh0aGlzLmRldGFpbHMsICdjYW5Hb1Bhc3QnKTtcclxuICB9XHJcblxyXG4gIGlzSG91cnNFeGNlZWRlZChhOiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUb3RhbFN1bShhKSA+IGEuaG91ckFzc2lnbmVkO1xyXG4gIH1cclxuXHJcbiAgaG91cnNMb2dnZWQoZm9ybVZhbHVlOiBhbnkpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHJlZHVjZShmb3JtVmFsdWUsIChyZXN1bHQ6IG51bWJlciwgdmFsdWU6IG51bWJlciwga2V5OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKHRvTnVtYmVyKGtleSkgIT09IHRoaXMudW5leGN1c2VkQWN0aXZpdHkpIHtcclxuICAgICAgICByZXN1bHQgKz0gc3VtKG1hcCh2YWx1ZXModmFsdWUpLCAodjogdW5rbm93bikgPT4gdG9OdW1iZXIodikpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBpc0hvdXJzRGVmaWNpdCgpOiBib29sZWFuIHtcclxuICAgIGxldCBnZXRIb3VycyA9IG1hcCh0aGlzLmFzc2lnbm1lbnRzLCAoYTogQ2xpZW50QXNzaWdubWVudCkgPT4ge1xyXG4gICAgICBsZXQgZm9ybVZhbHVlOiBhbnkgPSBpbnZva2UoYSwgJ2Zvcm1Hcm91cC5nZXRSYXdWYWx1ZScpO1xyXG4gICAgICByZXR1cm4gdGhpcy5ob3Vyc0xvZ2dlZChmb3JtVmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgdG90YWxIb3VyczogbnVtYmVyID0gc3VtKGdldEhvdXJzKTtcclxuICAgIGxldCBlbmdhZ2VtZW50SG91cnM6IG51bWJlciA9IE1hdGgubWluKGdldChoZWFkKHRoaXMuYXNzaWdubWVudHMpLCAnaG91ckdyb3VwJyksIDMwKTtcclxuICAgIHJldHVybiB0b3RhbEhvdXJzIDwgZW5nYWdlbWVudEhvdXJzO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVBbmRTYXZlKCk6IHZvaWQge1xyXG4gICAgbGV0IGhvdXJzRXhjZWVkZWQ6IGJvb2xlYW4gPSBzb21lKHRoaXMuYXNzaWdubWVudHMsIChhOiBDbGllbnRBc3NpZ25tZW50KSA9PiB0aGlzLmdldFRvdGFsU3VtKGEpID4gYS5ob3VyQXNzaWduZWQpO1xyXG4gICAgdGhpcy5zaG93RGVmaWNpdEhvdXJzTWVzc2FnZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChob3Vyc0V4Y2VlZGVkKSB7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFRpbWVzaGVldFdhcm5pbmdNb2RhbENvbXBvbmVudD4gPSB0aGlzLmRpYWxvZy5vcGVuKFRpbWVzaGVldFdhcm5pbmdNb2RhbENvbXBvbmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dEZWZpY2l0SG91cnNNZXNzYWdlID0gKGdldCh0aGlzLmRldGFpbHMsICdpc0R1ZScpICYmIHRoaXMuaXNIb3Vyc0RlZmljaXQoKSk7XHJcbiAgICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2F2ZVBheWxvYWQoYXNzaWdubWVudElkPzogbnVtYmVyKTogU2F2ZVRpbWVrZWVwaW5nRGV0YWlscyB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XHJcbiAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhOiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICAgIGxldCBjYXJmYXJlRm9ybVZhbHVlOiBhbnkgPSBpbnZva2UoYSwgJ2NhcmZhcmVGb3JtR3JvdXAuZ2V0UmF3VmFsdWUnKTtcclxuICAgICAgbGV0IGFzc2lnbm1lbnRNb2RlRm9ybVZhbHVlOiBhbnkgPSBpbnZva2UoYSwgJ2Fzc2lnbm1lbnRNb2RlRm9ybUdyb3VwLmdldFJhd1ZhbHVlJyk7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcclxuICAgICAgbGV0IGZvcm1WYWx1ZTogYW55ID0gaW52b2tlKGEsICdmb3JtR3JvdXAuZ2V0UmF3VmFsdWUnKTtcclxuICAgICAgbGV0IGFzbXQgPSBmaW5kKGdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycsIFtdKSwgKGM6IENsaWVudEFzc2lnbm1lbnQpID0+IGMuYXNzaWdubWVudElkID09IGEuYXNzaWdubWVudElkKTtcclxuICAgICAgbGV0IG9sZFRpbWVTaGVldHM6IFRpbWVTaGVldFtdID0gZ2V0KGFzbXQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpO1xyXG4gICAgICBjb25zdCB0aW1la2VlcGluZ3NQZXJDeWNsZTogVGltZVNoZWV0W10gPSBtYXAob2xkVGltZVNoZWV0cywgKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiB7XHJcbiAgICAgICAgLy8gYWRkIGFjdGl2aXR5IHRvIGN1cnJlbnQgd2VlayBvbmx5XHJcbiAgICAgICAgaWYgKG1vbWVudCh0aW1lc2hlZXQuZGF0ZSkuaXNBZnRlcihnZXQoYSwgJ2N1cnJlbnRDeWNsZUVuZERhdGUnKSwgJ2RheScpXHJcbiAgICAgICAgICB8fCBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzQmVmb3JlKGdldChhLCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJyksICdkYXknKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRpbWVzaGVldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYWN0aXZpdGllczogVGltZUtlZXBpbmdBY3Rpdml0eVtdID0gbWFwKGtleXMoZm9ybVZhbHVlKSwgKGFjdGl2aXR5SWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEFjdGl2aXR5OiBMb29rdXAgPSBmaW5kKGdldChhLCAnZ2V0QWN0aXZpdGllcycpLCAoYWN0aXZpdHk6IExvb2t1cCkgPT4gYWN0aXZpdHkubG9va3VwSWQgPT09IHRvTnVtYmVyKGFjdGl2aXR5SWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZGF5T2ZXZWVrOiBzdHJpbmcgPSB0aW1lc2hlZXQuZGF5T2ZXZWVrO1xyXG4gICAgICAgICAgICBjb25zdCBvbGRBY3Rpdml0eTogVGltZUtlZXBpbmdBY3Rpdml0eSA9XHJcbiAgICAgICAgICAgICAgZmluZChnZXQodGltZXNoZWV0LCAnYWN0aXZpdGllcycpLCAoYWN0aXZpdHk6IFRpbWVLZWVwaW5nQWN0aXZpdHkpID0+IGFjdGl2aXR5LmFjdGl2aXR5TG9va3VwLmxvb2t1cElkID09PSB0b051bWJlcihhY3Rpdml0eUlkKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGltZUtlZXBpbmdBY3Rpdml0eSh7XHJcbiAgICAgICAgICAgICAgdGltZWtlZXBpbmdBY3Rpdml0eU1hcHBpbmdJZDogZ2V0KG9sZEFjdGl2aXR5LCAndGltZWtlZXBpbmdBY3Rpdml0eU1hcHBpbmdJZCcsIHVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgICAgYXNzaWdubWVudEFjdGl2aXR5SWQ6IGdldChvbGRBY3Rpdml0eSwgJ2Fzc2lnbm1lbnRBY3Rpdml0eUlkJywgdW5kZWZpbmVkKSxcclxuICAgICAgICAgICAgICBhY3Rpdml0eUxvb2t1cDogc2VsZWN0ZWRBY3Rpdml0eSxcclxuICAgICAgICAgICAgICB0aW1lOiB0aGlzLmhvdXJzVG9OdW1iZXIoZ2V0KGZvcm1WYWx1ZSwgYCR7YWN0aXZpdHlJZH0uJHtkYXlPZldlZWt9YCkpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgbGV0IGNhcmZhcmU6IENhcmZhcmVNb2RlbCA9IHRpbWVzaGVldC5jYXJGYXJlO1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udGltZXNoZWV0LFxyXG4gICAgICAgICAgICBhY3Rpdml0aWVzOiBhY3Rpdml0aWVzLFxyXG4gICAgICAgICAgICBjYXJGYXJlOiB7XHJcbiAgICAgICAgICAgICAgLi4uY2FyZmFyZSxcclxuICAgICAgICAgICAgICBpZDogZ2V0KGNhcmZhcmVGb3JtVmFsdWUsIGAke3RpbWVzaGVldC5kYXlPZldlZWt9Lmxvb2t1cElkYCkgPT09IDAgPyAwIDogZ2V0KGNhcmZhcmUsICdpZCcpLFxyXG4gICAgICAgICAgICAgIGNhckZhcmVUeXBlOiBnZXQoY2FyZmFyZUZvcm1WYWx1ZSwgYCR7dGltZXNoZWV0LmRheU9mV2Vla30ubG9va3VwSWRgKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGdldChjYXJmYXJlRm9ybVZhbHVlLCB0aW1lc2hlZXQuZGF5T2ZXZWVrKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXNzaWdubWVudE1vZGU6IGdldChhc3NpZ25tZW50TW9kZUZvcm1WYWx1ZSwgYCR7dGltZXNoZWV0LmRheU9mV2Vla30ubG9va3VwSWRgKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGdldChhc3NpZ25tZW50TW9kZUZvcm1WYWx1ZSwgdGltZXNoZWV0LmRheU9mV2VlayksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNldChhLCAnc2F2ZVRpbWVrZWVwaW5nc1BlckN5Y2xlJywgdGltZWtlZXBpbmdzUGVyQ3ljbGUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gbGV0IGlzRG5jVXNlZDogYm9vbGVhbiA9IGdldCh0aGlzLmRldGFpbHMsICdpc0ROQ1VzZWQnKTtcclxuICAgIC8vIGlmICghaXNEbmNVc2VkICYmIHRoaXMuZG9Ob3RDb25jaWxpYXRlQWN0aW9uKSB7XHJcbiAgICAvLyAgIGlzRG5jVXNlZCA9IHRydWU7XHJcbiAgICAvLyB9XHJcbiAgICBsZXQgc2F2ZVRpbWVrZWVwaW5nID0gbmV3IFNhdmVUaW1la2VlcGluZ0RldGFpbHMoe1xyXG4gICAgICBjYXNlSWQ6IHRoaXMuZGV0YWlscy5jYXNlSWQsXHJcbiAgICAgIHRpbWVLZWVwaW5nQ3ljbGVJZDogZ2V0KGhlYWQodGhpcy5hc3NpZ25tZW50cyksICdsb29rdXBUaW1la2VlcGluZ0N5Y2xlLmxvb2t1cElkJyksXHJcbiAgICAgIGlzU2VsZkF0dGVzdGVkQ2hlY2tlZDogdGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSxcclxuICAgICAgcG9zdENsaWVudFBhcnRpY2lwYW50VGltZVNoZWV0czogbWFwKHRoaXMuYXNzaWdubWVudHMsIChhOiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmEsXHJcbiAgICAgICAgICBpc1BDUzogKGFzc2lnbm1lbnRJZCA9PSBhLmFzc2lnbm1lbnRJZCkgPyB0cnVlIDogbnVsbCxcclxuICAgICAgICAgIHRpbWVrZWVwaW5nc1BlckN5Y2xlOiBnZXQoYSwgJ3NhdmVUaW1la2VlcGluZ3NQZXJDeWNsZScpLFxyXG4gICAgICAgICAgLy9kb05vdENvbmNpbGlhdGVDb3VudGVyOiB0aGlzLmRvTm90Q29uY2lsaWF0ZUNvdW50ZXIsXHJcbiAgICAgICAgICBpc0ROQ1VzZWQ6IGdldChhLCAnaXNEbmNVc2VkJykgfHwgKCFnZXQoYSwgJ2lzRG5jVXNlZCcpICYmIGdldChhLCAnZG9Ob3RDb25jaWxpYXRlQWN0aW9uJykpLFxyXG4gICAgICAgICAgdXBkYXRlZE9uOiBtb21lbnQoKS5mb3JtYXQoKSxcclxuICAgICAgICAgIHVwZGF0ZWRCeTogdGhpcy51cGRhdGVkQnksXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2F2ZVRpbWVrZWVwaW5nO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGxldCB0aW1lc2hlZXQgPSB0aGlzLmdldFNhdmVQYXlsb2FkKCk7XHJcbiAgICBsZXQgc2hvd0NvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbiA9IHNvbWUodGhpcy5hc3NpZ25tZW50cywgKGE6IENsaWVudEFzc2lnbm1lbnQpID0+ICEhZ2V0KGEsICdpc0ROQ1VzZWQnKSB8fCBnZXQoYSwgJ2RvTm90Q29uY2lsaWF0ZUFjdGlvbicpKTtcclxuICAgIGlmIChzaG93Q29uZmlybWF0aW9uRGlhbG9nKSB7XHJcbiAgICAgIGNvbnN0IGNvbmZpcm1EaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQ+ID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICB3aWR0aDogZG5jRGlhbG9nU2l6ZSxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgZGF0YTogY29uZmlybURpYWxvZ0luZm8sXHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XHJcbiAgICAgIGNvbmZpcm1EaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoU2F2ZURldGFpbHModGltZXNoZWV0KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpc3BhdGNoU2F2ZURldGFpbHModGltZXNoZWV0KTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZGlzcGF0Y2hTYXZlRGV0YWlscyh0aW1lc2hlZXQ6IFNhdmVUaW1la2VlcGluZ0RldGFpbHMpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0ZXN0Y2hlY2tib3hjaGVja2VkID0gdHJ1ZTtcclxuICAgIHRoaXMudGltZUtlZXBpbmdEZXRhaWxzU2VydmljZS5kaXNwYXRjaFNhdmVUaW1lS2VlcGluZ0RldGFpbHMobmV3IFNhdmVUaW1lc2hlZXRQY3NQYXlsb2FkKHtcclxuICAgICAgdGltZXNoZWV0XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvL3NhdmUoKTogdm9pZCB7fVxyXG4gIG9wZW5QQ1MoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJlbnRDeWNsZVN0YXJ0RGF0ZSA9IGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJyk7XHJcbiAgICBsZXQgY3VycmVudEN5Y2xlRW5kRGF0ZSA9IGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRW5kRGF0ZScpO1xyXG4gICAgbGV0IGlzUENTb2ZDbGllbnRFeGVtcHRFU2NvZGUzMiA9IGdldChhc3NpZ25tZW50LCdpc1BDU29mQ2xpZW50RXhlbXB0RVNjb2RlMzInKTtcclxuICAgIGlmKGlzUENTb2ZDbGllbnRFeGVtcHRFU2NvZGUzMil7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNob3dFc2NvZGVTdGF0dXNNZXNzYWdlQ29tcG9uZW50Pj0gdGhpcy5kaWFsb2cub3BlbihTaG93RXNjb2RlU3RhdHVzTWVzc2FnZUNvbXBvbmVudCx7XHJcbiAgICAgICAgd2lkdGg6IGRpYWxvZ1NpemUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxQYXJ0aWNpcGFudENoYW5nZVN0YXR1c0NvbXBvbmVudD4gPSB0aGlzLmRpYWxvZy5vcGVuKFBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBkaWFsb2dTaXplLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBwY3NGb3JtRGF0YTogbmV3IFBjc0Zvcm1EYXRhKHtcclxuICAgICAgICAgIHN1Ym1pdHRlZEJ5OiB0aGlzLnVwZGF0ZWRCeSxcclxuICAgICAgICAgIHN1Ym1pdHRlZE9uOiB0aGlzLnRvZGF5RGF0ZSxcclxuICAgICAgICAgIGRhdGVPZkluZnJhY3Rpb246IHRoaXMudG9kYXlEYXRlLFxyXG4gICAgICAgICAgY3VycmVudEN5Y2xlU3RhcnREYXRlOiBjdXJyZW50Q3ljbGVTdGFydERhdGUsXHJcbiAgICAgICAgICBjdXJyZW50Q3ljbGVFbmREYXRlOiBjdXJyZW50Q3ljbGVFbmREYXRlLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHBjc1R5cGU6IG5ldyBMb29rdXAoeyBsb29rdXBJZDogZnRjLCBkaXNwbGF5VmFsdWU6IHRoaXMuZnRjVmFsdWUgfSksXHJcbiAgICAgICAgdmlld09ubHk6IGZhbHNlLFxyXG4gICAgICAgIHByZUNvbmNpbGlhdGlvbkxvb2t1cHM6IHtcclxuICAgICAgICAgIC4uLnRoaXMucHJlQ29uY2lsaWF0aW9uTG9va3VwcyxcclxuICAgICAgICAgIHBjc1R5cGVMb29rdXA6IHRoaXMuY3JlYXRlUGNzVHlwZUxvb2t1cHMoKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHJlczogUGFydGljaXBhbnRDaGFuZ2VTdGF0dXMpID0+IHtcclxuICAgICAgaWYgKCEhcmVzKSB7XHJcbiAgICAgICAgbGV0IGxvb2t1cFRpbWVrZWVwaW5nQ3ljbGVJZCA9IGdldChoZWFkKHRoaXMuYXNzaWdubWVudHMpLCAnbG9va3VwVGltZWtlZXBpbmdDeWNsZS5sb29rdXBJZCcpO1xyXG4gICAgICAgIGlmIChpc05pbChnZXQoYXNzaWdubWVudCwgJ3RpbWVrZWVwaW5nQ3ljbGVJZCcpKSkge1xyXG4gICAgICAgICAgdGhpcy50aW1lS2VlcGluZ0RldGFpbHNTZXJ2aWNlLmRpc3BhdGNoU2F2ZVRpbWVLZWVwaW5nRGV0YWlscyhuZXcgU2F2ZVRpbWVzaGVldFBjc1BheWxvYWQoe1xyXG4gICAgICAgICAgICB0aW1lc2hlZXQ6IHRoaXMuZ2V0U2F2ZVBheWxvYWQoIGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudElkJykgKSxcclxuICAgICAgICAgICAgcGNzOiBuZXcgUGFydGljaXBhbnRDaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIC4uLnJlcyxcclxuICAgICAgICAgICAgICBjYXNlSWQ6IGdldCh0aGlzLmRldGFpbHMsICdjYXNlSWQnKSxcclxuICAgICAgICAgICAgICBhc3NpZ25tZW50SWQ6IGdldChhc3NpZ25tZW50LCAnYXNzaWdubWVudElkJyksXHJcbiAgICAgICAgICAgICAgY3ljbGU6IGxvb2t1cFRpbWVrZWVwaW5nQ3ljbGVJZCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGNzU2VydmljZS5kaXNwYXRjaFNhdmVQY3MobmV3IFBhcnRpY2lwYW50Q2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgLi4ucmVzLFxyXG4gICAgICAgICAgICBjYXNlSWQ6IGdldCh0aGlzLmRldGFpbHMsICdjYXNlSWQnKSxcclxuICAgICAgICAgICAgYXNzaWdubWVudElkOiBnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRJZCcpLFxyXG4gICAgICAgICAgICBjeWNsZTogbG9va3VwVGltZWtlZXBpbmdDeWNsZUlkLFxyXG4gICAgICAgICAgICB0aW1lS2VlcGluZ0N5Y2xlSWQ6IGdldChhc3NpZ25tZW50LCAndGltZWtlZXBpbmdDeWNsZUlkJyksXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgfVxyXG5cclxuICBpc0NvbmNpbGlhdGVEaXNhYmxlZChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICAvLyBETkMgd2lsbCBiZSBkaXNhYmxlZCB3aGVuIGRvTm90Q29uY2lsaWF0ZSBpcyBmYWxzZSBvciBpc0ROQ1VzZWQgaXMgdHJ1ZSAoZG5jIGFscmVhZHkgZW5hYmxlZCBpbiB0aGlzIHRpbWUgY3ljbGUpXHJcbiAgICByZXR1cm4gdGhpcy52aWV3T25seSB8fCAhZ2V0KGFzc2lnbm1lbnQsICdkb05vdENvbmNpbGlhdGUnLCBmYWxzZSkgfHwgISFnZXQoYXNzaWdubWVudCwgJ2lzRE5DVXNlZCcpO1xyXG4gIH1cclxuXHJcbiAgaXNQY3NEaXNhYmxlZChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogYm9vbGVhbiB7XHJcbiAgICBpZih0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlID09IHRydWUgJiYgdGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSAhPSB1bmRlZmluZWQpe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuaXNBdHRlc3RlZENoZWNrVmFsdWUgPT0gZmFsc2UgJiYgdGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSAhPSB1bmRlZmluZWQpe1xyXG4gICAgICByZXR1cm4gZ2V0KGFzc2lnbm1lbnQsICdpc1NlbGZBdHRlc3RlZFNjaG9vbCcpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlID09PSB1bmRlZmluZWQgJiYgZ2V0KGFzc2lnbm1lbnQsICdpc1NlbGZBdHRlc3RlZFNjaG9vbCcpID09PSB0cnVlKXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBpZiBETkMgaXMgZW5hYmxlZCwgdGhlbiBQQ1Mgd2lsbCBiZSBkaXNhYmxlZC5cclxuICAgIGVsc2V7XHJcbiAgICByZXR1cm4gdGhpcy52aWV3T25seSB8fCAhZ2V0KGFzc2lnbm1lbnQsICdjYW5DcmVhdGVQQ1MnKSB8fCBnZXQoYXNzaWdubWVudCwgJ2RvTm90Q29uY2lsaWF0ZUFjdGlvbicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0NvbmNpbGlhdGUoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG5jRGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RG9Ob3RDb25jaWxpYXRlRGlhbG9nQ29tcG9uZW50PiA9IHRoaXMuZGlhbG9nLm9wZW4oRG9Ob3RDb25jaWxpYXRlRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBkbmNEaWFsb2dTaXplLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBkb05vdENvbmNpbGlhdGVDb3VudGVyOiBnZXQoYXNzaWdubWVudCwgJ2RvTm90Q29uY2lsaWF0ZUNvdW50ZXInKSxcclxuICAgICAgICBkb05vdENvbmNpbGlhdGVBY3Rpb246IGdldChhc3NpZ25tZW50LCAnZG9Ob3RDb25jaWxpYXRlQWN0aW9uJyksXHJcbiAgICAgICAgbWF4RG9Ob3RDb25jaWxpYXRlQ291bnQ6IHRoaXMuZGV0YWlscy5tYXhEb05vdENvbmNpbGlhdGVDb3VudCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgZG5jRGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHJlczogbnVtYmVyKSA9PiB7XHJcbiAgICAgIC8vIGRvTm90Q29uY2lsaWF0ZUFjdGlvbiBpcyB0cnVlOiBkbmMgaW4gRG9Ob3RDb25jaWxpYXRlRGlhbG9nQ29tcG9uZW50IGlzIGVuYWJsZWRcclxuICAgICAgbGV0IGRvTm90Q29uY2lsaWF0ZUFjdGlvbiA9IGdldChhc3NpZ25tZW50LCAnZG9Ob3RDb25jaWxpYXRlQ291bnRlcicpICE9PSByZXMgfHwgZ2V0KGFzc2lnbm1lbnQsICdkb05vdENvbmNpbGlhdGVBY3Rpb24nKTtcclxuICAgICAgbGV0IGRvTm90Q29uY2lsaWF0ZUNvdW50ZXIgPSByZXM7XHJcblxyXG4gICAgICBzZXQoYXNzaWdubWVudCwgJ2RvTm90Q29uY2lsaWF0ZUFjdGlvbicsIGRvTm90Q29uY2lsaWF0ZUFjdGlvbik7XHJcbiAgICAgIHNldChhc3NpZ25tZW50LCAnZG9Ob3RDb25jaWxpYXRlQ291bnRlcicsIGRvTm90Q29uY2lsaWF0ZUNvdW50ZXIpO1xyXG5cclxuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNQYXJ0aWNpcGFudENoYW5nZU9mU3RhdHVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhZ2V0KHRoaXMuZGV0YWlscywgJ3Byb2dyYW1BbGVydCcpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0RjTWVzc2FnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIWdldCh0aGlzLmRldGFpbHMsICdkY01lc3NhZ2UnKTtcclxuICB9XHJcblxyXG4gIGdldERjTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQgPSBoZWFkKHRoaXMuYXNzaWdubWVudHMpOyAvL0NoZWNrIGlmIHRoaXMgaXMgcmlnaHRcclxuICAgIHJldHVybiB0aGlzLmRldGFpbHMgPyBgJHtkY01lc3NhZ2V9JHttb21lbnQoZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50U3RhcnREYXRlJykpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpfWAgK1xyXG4gICAgICAoZ2V0KGFzc2lnbm1lbnQsICdhc3NpZ25tZW50RW5kRGF0ZScpID8gYCB0byAke21vbWVudChnZXQoYXNzaWdubWVudCwgJ2Fzc2lnbm1lbnRFbmREYXRlJykpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpfWAgOiAnJykgOiAnJztcclxuICB9XHJcblxyXG4gIGdldEVycm9yTWVzc2FnZShmb3JtR3JvdXBOYW1lOiBudW1iZXIsIGNvbnRyb2xOYW1lOiBzdHJpbmcsIGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBzdHJpbmcge1xyXG4gICAgbGV0IGZvcm1Hcm91cCA9IGdldChhc3NpZ25tZW50LCAnZm9ybUdyb3VwJyk7XHJcbiAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvU3RyaW5nKGZvcm1Hcm91cE5hbWUpKS5nZXQoY29udHJvbE5hbWUpO1xyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcclxuICAgICAgcmV0dXJuICdSZXF1aXJlZCc7XHJcbiAgICB9XHJcbiAgICBpZiAoY29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XHJcbiAgICAgIHJldHVybiBgMCAtICR7dGhpcy5tYXhIb3Vyc30gaG91cnNgO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ2N1c3RvbUVycm9yJykpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMubWF4SG91cnN9ICR7dGhpcy5jdXN0b21FcnJvck1lc3NhZ2V9YDtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBpc0Zvcm1JblZhbGlkKCl7XHJcbiAgICBsZXQgYXNzaWdubWVudFNlbGZBdHRDaGVja1ZhbCA6Ym9vbGVhbjtcclxuICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gWy4uLmdldCh0aGlzLmRldGFpbHMsICdnZXRDbGllbnRBc3NpZ25tZW50cycpXTtcclxuICAgICBmb3JFYWNoKGFzc2lnbm1lbnRzLCAoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCkgPT4ge1xyXG4gICAgICBpZihhc3NpZ25tZW50LmlzU2VsZkF0dGVzdGVkU2Nob29sICE9IHRydWUpe1xyXG4gICAgICBhc3NpZ25tZW50U2VsZkF0dENoZWNrVmFsID0gdHJ1ZTtcclxuICAgICAgfSBcclxuICAgIH0pXHJcbiAgICBpZihhc3NpZ25tZW50U2VsZkF0dENoZWNrVmFsKXtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5pc0F0dGVzdGVkQ2hlY2tWYWx1ZSA9PSB0cnVlKXtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlIHx8IFxyXG4gICAgICAgIHNvbWUoZ2V0KHRoaXMuZGV0YWlscywgJ2dldENsaWVudEFzc2lnbm1lbnRzJyksIChjOiBDbGllbnRBc3NpZ25tZW50KSA9PiBnZXQoYywgJ2Zvcm1Hcm91cC5pbnZhbGlkJykpO1xyXG4gICB9XHJcbiAgICBcclxuICB9XHJcblxyXG4gIGV4aXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYlNlcnZpY2UucmVtb3ZlVGFiKGB0aW1la2VlcGluZy8ke3RoaXMuZGV0YWlscy5jYXNlSWR9YCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdXBkYXRlZEJ5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZ2V0KHRoaXMudXNlciwgJ2xhc3ROYW1lJykgKyAnLCAnICsgZ2V0KHRoaXMudXNlciwgJ2ZpcnN0TmFtZScpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRpbWVGcmFtZU1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRldGFpbHMpIHtcclxuICAgICAgaWYgKHRoaXMuZGV0YWlscy5pc0FiYXdkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlscy5pc0N1cnJlbnQgPyBhYmF3ZEN1cnJlbnRDeWNsZVRpbWVGcmFtZU1lc3NhZ2UgOiB0aGlzLmRldGFpbHMuaXNEdWUgPyBhYmF3ZER1ZUN5Y2xlVGltZUZyYW1lTWVzc2FnZSA6ICcnO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGV0YWlscy5pc1ZlbnR1cmUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmlzQ3VycmVudCA/IHZlbnR1cmVDdXJyZW50Q3ljbGVUaW1lRnJhbWVNZXNzYWdlIDogJyc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kZXRhaWxzLmlzQ2EpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxzLmlzQ3VycmVudCA/IGNhQ3VycmVudEN5Y2xlVGltZUZyYW1lTWVzc2FnZSA6IHRoaXMuZGV0YWlscy5pc0R1ZSA/IGNhRHVlQ3ljbGVUaW1lRnJhbWVNZXNzYWdlIDogJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldCBjeWNsZU5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRldGFpbHMpIHtcclxuICAgICAgaWYoIXRoaXMuZGV0YWlscy5pc0N1cnJlbnQgJiYgIXRoaXMuZGV0YWlscy5pc0R1ZSl7XHJcbiAgICAgICByZXR1cm4gIHRoaXMuaGlzdG9yaWNhbEN5Y2xlTmFtZSArICcgLSAnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmRldGFpbHMuaXNDdXJyZW50ID8gdGhpcy5jdXJyZW50Q3ljbGVOYW1lICsgJyAtICcgOiB0aGlzLmRldGFpbHMuaXNEdWUgPyB0aGlzLmR1ZUN5Y2xlTmFtZSArICcgLSAnIDogJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0luQ2FEdWVDeWNsZUNvbXBsZXRlZFRpbWUoYXNzaWdubWVudDogQ2xpZW50QXNzaWdubWVudCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY29tcGxldGVkRGF0ZTogc3RyaW5nID0gbW9tZW50KGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlU3RhcnREYXRlJykpLmFkZCgxNCwgJ2RheScpLmZvcm1hdCh0aGlzLm1vbWVudERhdGVGb3JtYXQpO1xyXG4gICAgcmV0dXJuIG1vbWVudChjb21wbGV0ZWREYXRlKS5pc1NhbWVPckFmdGVyKG1vbWVudCgpLCAnZGF5Jyk7XHJcbiAgfVxyXG5cclxuICBpc1Zpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGZvckVhY2godGhpcy5hc3NpZ25tZW50cywgKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpID0+IHtcclxuICAgIGlmKHRoaXMuZGV0YWlscy5pc0R1ZSB8fCB0aGlzLmRldGFpbHMuaXNDdXJyZW50KXtcclxuICAgICAgcmVzID0gIXRoaXMuaXNBdHRlc3RlZENoZWNrVmFsdWU/IGFzc2lnbm1lbnQuaXNTZWxmQXR0ZXN0ZWRTY2hvb2w6ZmFsc2U7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG5cclxuICAgaWYgKHRoaXMudmlld09ubHkpIHtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0gXHJcbiAgICBmb3JFYWNoKHRoaXMuYXNzaWdubWVudHMsIChhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KSA9PiB7XHJcbiAgICAgIGlmIChnZXQoYXNzaWdubWVudCwgJ3RpbWVrZWVwaW5nc1BlckN5Y2xlJykpIHtcclxuICAgICAgICBmb3JFYWNoKGdldChhc3NpZ25tZW50LCAnY3VycmVudEN5Y2xlRGF0ZXMnKSwgKHZhbHVlOiB7IGRheU9mV2Vlazogc3RyaW5nLCBkYXRlOiBzdHJpbmcgfSkgPT4geyAgICAgXHJcbiAgICAgICAgICBjb25zdCB0aW1lc2hlZXQ6IFRpbWVTaGVldCA9IGZpbmQoZ2V0KGFzc2lnbm1lbnQsICd0aW1la2VlcGluZ3NQZXJDeWNsZScpLCAodHM6IFRpbWVTaGVldCkgPT5cclxuICAgICAgICAgICAgbW9tZW50KHRzLmRhdGUpLmlzU2FtZSh2YWx1ZS5kYXRlLCAnZGF5JyksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcmVzID0gcmVzIHx8ICFnZXQodGltZXNoZWV0LCAnaXNEaXNhYmxlJywgdHJ1ZSk7IC8vIGFiYXdkIGNsaWVudCwgaWYgdGltZXNoZWV0IGlzIG51bGwgdGhlbiBpc0Rpc2FibGUgaXMgdHJ1ZSBkZWZhdWx0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGJ1aWxkRXhpc3RlZEFjdGl2aXRpZXMoYWN0aXZpdGllczogTG9va3VwW10sIHRpbWVzaGVldHM6IFRpbWVTaGVldFR5cGVbXSk6IExvb2t1cFtdIHtcclxuICAgIHJldHVybiBfZmlsdGVyKGFjdGl2aXRpZXMsIChhY3Rpdml0eTogTG9va3VwKSA9PiAhIWZpbmQodGltZXNoZWV0cywgKHRzOiBUaW1lU2hlZXRUeXBlKSA9PiBhY3Rpdml0eS5sb29rdXBJZCA9PT0gdHMuaWQpKTtcclxuICB9XHJcblxyXG4gIC8vIGZpbHRlciBiYXNlZCBvbiBleGlzdGVkIGFjdGl2aXRpZXMgb24gdGltZSBzaGVldFxyXG4gIGJ1aWxkRmlsdGVyZWRBY3Rpdml0aWVzKGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBMb29rdXBbXSB7XHJcbiAgICBjb25zdCBleGlzdGVkQWN0aXZpdGllczogTG9va3VwW10gPSB0aGlzLmJ1aWxkRXhpc3RlZEFjdGl2aXRpZXMoZ2V0KGFzc2lnbm1lbnQsICdnZXRBY3Rpdml0aWVzJyksIGdldChhc3NpZ25tZW50LCAndGltZXNoZWV0QnlBY3Rpdml0eScpKTtcclxuICAgIGxldCBmaWx0ZXJlZEFjdGl2aXRpZXMgPSB0aGlzLmZpbHRlclBpcGUudHJhbnNmb3JtKGdldChhc3NpZ25tZW50LCAnZ2V0QWN0aXZpdGllcycpLCBleGlzdGVkQWN0aXZpdGllcyk7XHJcbiAgICBzZXQoYXNzaWdubWVudCwgJ2ZpbHRlcmVkQWN0aXZpdGllcycsIGZpbHRlcmVkQWN0aXZpdGllcyk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWRBY3Rpdml0aWVzO1xyXG4gIH1cclxuXHJcbiAgaXNDYXJmYXJlRGlzYWJsZWQoZGF5T2ZXZWVrOiBzdHJpbmcsIGFzc2lnbm1lbnQ6IENsaWVudEFzc2lnbm1lbnQpOiBib29sZWFuIHtcclxuICAgIC8vIENhcmZhcmUgbXVzdCBub3QgYmUgYWxsb3dlZCBmb3IgdGhlIGRheSBpZiBkYWlseSByZXF1aXJlZCBob3VycyBhcmUgbm90IG1ldFxyXG4gICAgcmV0dXJuIHRoaXMudmlld09ubHkgfHwgZ2V0KGFzc2lnbm1lbnQsICdkYWlseVRvdGFsJywgZGF5T2ZXZWVrKSA8IHRoaXMubWF4SG91cnM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDYXJmYXJlKGRheU9mV2Vlazogc3RyaW5nLCBhc3NpZ25tZW50OiBDbGllbnRBc3NpZ25tZW50KTogdm9pZCB7XHJcbiAgICAvLyBpZiBkYWlseSByZXF1aXJlZCBob3VycyBhcmUgbWV0LCBlbmFibGUgY2FyZmFyZSBmb3IgdGhhdCBkYXksIGVsc2Ugc2V0IGl0IE4vQSBhbmQgZGlzYWJsZSBpdC5cclxuICAgIGZvckVhY2goZ2V0KGFzc2lnbm1lbnQsICdjdXJyZW50Q3ljbGVEYXRlcycpLCAoaXRlbTogeyBkYXRlOiBzdHJpbmcsIGRheU9mV2Vlazogc3RyaW5nIH0pID0+IHtcclxuICAgICAgaWYgKGRheU9mV2VlayA9PT0gaXRlbS5kYXlPZldlZWspIHtcclxuICAgICAgICBjb25zdCB0aW1lU2hlZXRNb2RlbDogVGltZVNoZWV0ID0gY2hhaW4odGhpcy5kZXRhaWxzKVxyXG4gICAgICAgICAgLmdldCgndGltZWtlZXBpbmdzUGVyQ3ljbGUnKVxyXG4gICAgICAgICAgLmZpbmQoKHRpbWVzaGVldDogVGltZVNoZWV0KSA9PiBtb21lbnQodGltZXNoZWV0LmRhdGUpLmlzU2FtZShpdGVtLmRhdGUsICdkJykpXHJcbiAgICAgICAgICAudmFsdWUoKTtcclxuICAgICAgICAvLyBpZiB0aW1lc2hlZXRNb2RlbCBudWxsKEFiYXdkIGNsaWVudHMpLCBjYXJGYXJlIGRpc2FibGVkIGRlZmF1bHRcclxuICAgICAgICBjb25zdCBpc0Rpc2FibGU6IGJvb2xlYW4gPSBnZXQodGltZVNoZWV0TW9kZWwsICdjYXJGYXJlLmlzRGlzYWJsZScsIHRydWUpIHx8IHRoaXMuaXNDYXJmYXJlRGlzYWJsZWQoZGF5T2ZXZWVrLCBhc3NpZ25tZW50KTtcclxuXHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZSA9PT0gdHJ1ZSAmJiBnZXQodGltZVNoZWV0TW9kZWwsICdjYXJGYXJlLmlzRGlzYWJsZScpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgbGV0IGNhcmZhcmVGb3JtR3JvdXAgPSBnZXQoYXNzaWdubWVudCwgJ2NhcmZhcmVGb3JtR3JvdXAnKVxyXG4gICAgICAgICAgY29uc3QgY2FyZmFyZUN0cmw6IEFic3RyYWN0Q29udHJvbCA9IGNhcmZhcmVGb3JtR3JvdXAuY29udHJvbHNbZGF5T2ZXZWVrXTtcclxuICAgICAgICAgIGNhcmZhcmVDdHJsLnNldFZhbHVlKHRoaXMuZGVmYXVsdENhcmZhcmVPcHRpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yRWFjaChnZXQoYXNzaWdubWVudCwgJ2NhcmZhcmVNb2RlbHMnKSwgKGNhckZhcmU6IENhcmZhcmVUeXBlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2FyRmFyZS5kYXlPZldlZWsgPT09IGRheU9mV2Vlaykge1xyXG4gICAgICAgICAgICBzZXQoY2FyRmFyZSwgJ2lzRGlzYWJsZScsIGlzRGlzYWJsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBob3Vyc1RvTnVtYmVyKGhvdXJzOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGlzTmlsKGhvdXJzKSA/IG51bGwgOiBpc05hTih0b051bWJlcihob3VycykpID8gbnVsbCA6IHRvTnVtYmVyKGhvdXJzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNPblNjaGVkdWxlKGRheU9mV2Vlazogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzY2hlZHVsZTogc3RyaW5nW10gPSBnZXQodGhpcy5kZXRhaWxzLCAnc2NoZWR1bGVEYXlzJyk7XHJcbiAgICByZXR1cm4gaW5jbHVkZXMoc2NoZWR1bGUsIGRheU9mV2Vlayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVBjc1R5cGVMb29rdXBzKCk6IExvb2t1cFtdIHtcclxuICAgIGlmICghIWdldCh0aGlzLmRldGFpbHMsICdpc05vblNhbmN0aW9uUGNzQWxsb3dlZCcpKSB7XHJcbiAgICAgIC8vIGluIHRpbWVrZWVwaW5nLCBvbmx5IGNhbiBkbyBmdGMgYW5kIG5vbi1zYW5jdGlvblxyXG4gICAgICByZXR1cm4gX2ZpbHRlcihnZXQodGhpcy5wcmVDb25jaWxpYXRpb25Mb29rdXBzLCAncGNzVHlwZUxvb2t1cCcpLCAobG9va3VwOiBMb29rdXApID0+IGxvb2t1cC5sb29rdXBJZCAhPT0gZnRyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGNhbiBkbyBmdGMgb25seVxyXG4gICAgICByZXR1cm4gX2ZpbHRlcihnZXQodGhpcy5wcmVDb25jaWxpYXRpb25Mb29rdXBzLCAncGNzVHlwZUxvb2t1cCcpLCAobG9va3VwOiBMb29rdXApID0+IGxvb2t1cC5sb29rdXBJZCA9PT0gZnRjKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCI+XHJcbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYXJvdW5kIHN0YXJ0XCI+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjEwMCVcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCIgY2xhc3M9XCJ0aW1lLXNoZWV0LWRldGFpbHNcIj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgY2xhc3M9XCJ0aW1lLXNoZWV0LXJvdyBib3JkZXItYm90dG9tXCIgZnhMYXlvdXRHYXA9XCIyMHB4XCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjUlXCIgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgcHJpbWFyeS1pY29uXCIgW25nQ2xhc3NdPVwieyAncHJpbWFyeS1pY29uJzogIWlzQmFja0Rpc2FibGUoKSwgJ2dyZXktaWNvbic6IGlzQmFja0Rpc2FibGUoKSB9XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZFBhc3RDeWNsZSgpXCI+YXJyb3dfYmFja19pb3NcclxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCI2MCVcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIyMHB4XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJsYWJlbCB0aW1lLXNoZWV0LWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgIFRpbWVzaGVldCBDeWNsZSA8c3BhbiBjbGFzcz1cImxlZnQtbGFiZWxcIj57eyB0aW1lQ3ljbGVEaXNwbGF5IH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1pY29uIGZ4RmxleD1cIjUlXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtuZ0NsYXNzXT1cInsgJ3ByaW1hcnktaWNvbic6ICFpc0ZvcndhcmREaXNhYmxlKCksICdncmV5LWljb24nOiBpc0ZvcndhcmREaXNhYmxlKCkgfVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJsb2FkRm9yd2FyZEN5Y2xlKClcIj5cclxuICAgICAgICAgICAgYXJyb3dfZm9yd2FyZF9pb3NcclxuICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYXNzaWdubWVudCBvZiBhc3NpZ25tZW50cztsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInRpbWUtc2hlZXQtcm93IGJvcmRlci1ib3R0b20gcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNIb3Vyc0V4Y2VlZGVkKGFzc2lnbm1lbnQpXCIgY2xhc3M9XCJ3YXJuaW5nLWljb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+ZXJyb3I8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDxzcGFuPiBIT1VSUyBFWENFRURFRCA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPHN0cm9uZyBmeEZsZXg9XCI1MCVcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIEFTU0lHTk1FTlQge3sgaSsxIH19ICBBVFRSSUJVVEVTXHJcbiAgICAgICAgICAgIDwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIyMHB4XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJidXR0b24tc2l6ZVwiIFtkaXNhYmxlZF0gPSBcIiF0aGlzLmRldGFpbHMuaXNEdWVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDb25jaWxpYXRlKGFzc2lnbm1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5ETyBOT1QgQ09OQ0lMSUFURTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgIDxzdWI+KHt7IGFzc2lnbm1lbnQ/LmRvTm90Q29uY2lsaWF0ZUNvdW50ZXIgfX0gUkVNQUlOSU5HKTwvc3ViPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYnV0dG9uLXNpemVcIiAoY2xpY2spPVwib3BlblBDUyhhc3NpZ25tZW50KVwiIFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Bjc0Rpc2FibGVkKGFzc2lnbm1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICBQQVJUSUNJUEFOVCBDSEFOR0UgT0YgU1RBVFVTXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFydGljaXBhbnQtZGV0YWlscyB0aW1lLXNoZWV0LXJvdyBib3JkZXItYm90dG9tIHBhZGRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicmVhZG9ubHktaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJsYWJlbFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+U2l0ZSBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cInZhbHVlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBhc3NpZ25tZW50Py5zaXRlTmFtZT8uZGlzcGxheVZhbHVlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicmVhZG9ubHktaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJsYWJlbFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+QXNzaWdubWVudCBUeXBlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cInZhbHVlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBhc3NpZ25tZW50Py5hc3NpZ25tZW50VHlwZT8uZGlzcGxheVZhbHVlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicmVhZG9ubHktaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJsYWJlbFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+QXNzaWdubWVudCBTdGF0dXM8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwidmFsdWVcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPnt7IGFzc2lnbm1lbnQ/LmFzc2lnbm1lbnRTdGF0dXM/LmRpc3BsYXlWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPkFzc2lnbm1lbnQgU3RhcnQgRGF0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJ2YWx1ZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+e3sgYXNzaWdubWVudD8uYXNzaWdubWVudFN0YXJ0RGF0ZSB8IGRhdGU6XHJcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRlRm9ybWF0IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwicmVhZG9ubHktaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJsYWJlbFwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+QXNzaWdubWVudCBFbmQgRGF0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeEZsZXggY2xhc3M9XCJ2YWx1ZVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+e3sgYXNzaWdubWVudD8uYXNzaWdubWVudEVuZERhdGUgfCBkYXRlOlxyXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0ZUZvcm1hdCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IHN0cmV0Y2hcIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPkhvdXIgR3JvdXA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwidmFsdWVcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPnt7IGFzc2lnbm1lbnQ/LmhvdXJHcm91cCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPkhvdXJzIEFzc2lnbmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cInZhbHVlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBhc3NpZ25tZW50Py5ob3VyQXNzaWduZWQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJyZWFkb25seS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cImxhYmVsXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5Ta2lsbCBDb2RlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cInZhbHVlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBhc3NpZ25tZW50Py5za2lsbENvZGU/LmRpc3BsYXlWYWx1ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInJlYWRvbmx5LWluZm9cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4IGNsYXNzPVwibGFiZWxcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPkNvdXJzZSBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleCBjbGFzcz1cInZhbHVlXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj57eyBhc3NpZ25tZW50Py5jb3Vyc2VOYW1lPy5kaXNwbGF5VmFsdWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGNsYXNzPVwidGltZS1zaGVldC1yb3cgYm9yZGVyLWJvdHRvbVwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjE1JVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgY2xhc3M9XCJsZWZ0LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uIGZ4RmxleD1cIjEwJVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cIih0aGlzLmRldGFpbHMuaXNDdXJyZW50fHx0aGlzLmRldGFpbHMuaXNEdWUpXCIgKGNsaWNrKT1cImFkZEFjdGl2aXR5KGFzc2lnbm1lbnQpXCI+YWRkX2NpcmNsZVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI5MCVcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibGVmdC1sYWJlbC0yIGFjdGl2aXR5LWZvcm0tZmllbGRcIiBmbG9hdExhYmVsPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlNlbGVjdCBBY3Rpdml0eTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFtkaXNhYmxlZF09XCIhaXNWaXNpYmxlKCkgIT0gdHJ1ZT8gKHRoaXMuZGV0YWlscy5pc0R1ZSB8fCB0aGlzLmRldGFpbHMuaXNDdXJyZW50KT8gKCF0aGlzLmlzQXR0ZXN0ZWRDaGVja1ZhbHVlPyBhc3NpZ25tZW50LmlzU2VsZkF0dGVzdGVkU2Nob29sOmZhbHNlKTp0cnVlOmZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGFjdGl2aXR5IG9mIGFzc2lnbm1lbnQuZmlsdGVyZWRBY3Rpdml0aWVzXCIgW3ZhbHVlXT1cImFjdGl2aXR5XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiYWN0aXZpdHk/LmRpc3BsYXlWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBhY3Rpdml0eT8uZGlzcGxheVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjgwJVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTIlXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXNzaWdubWVudC5jdXJyZW50Q3ljbGVEYXRlc1wiIGNsYXNzPVwidGltZS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj57eyBpdGVtPy5kYXlPZldlZWsgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj57eyBpdGVtPy5kYXRlIHwgZGF0ZTogZGF0ZUZvcm1hdCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxMiVcIiBjbGFzcz1cInRpbWUtbGFiZWxcIj48c3Bhbj5XZWVrbHk8L3NwYW4+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhYXNzaWdubWVudC5mb3JtR3JvdXBcIj5cclxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhc3NpZ25tZW50LmZvcm1Hcm91cFwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhMYXlvdXRHYXA9XCIyMHB4XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtc2hlZXQtcm93XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXNzaWdubWVudC50aW1lc2hlZXRCeUFjdGl2aXR5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIxNSVcIiBjbGFzcz1cImxlZnQtbGFiZWxcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCIgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJpc1Zpc2libGUoKVwiIChjbGljayk9XCJyZW1vdmVBY3Rpdml0eShpdGVtPy5pZCwgYXNzaWdubWVudClcIj5yZW1vdmVfY2lyY2xlXHJcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWZ0LWxhYmVsLTJcIj57eyBpdGVtPy5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInt7aXRlbT8uaWR9fVwiIGZ4RmxleD1cIjgwJVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMTIlXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiAqbmdGb3I9XCJsZXQgcGF0aCBvZiBkYXlPZldlZWtzXCIgY2xhc3M9XCJ0aW1lLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xOYW1lXT1cInBhdGhcIiBbcmVhZG9ubHldPVwiIWlzQXR0ZXN0ZWRDaGVja1ZhbHVlP2Fzc2lnbm1lbnQuaXNTZWxmQXR0ZXN0ZWRTY2hvb2w6ZmFsc2VcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVIb3VycygkZXZlbnQsIGl0ZW0/LmlkLCBwYXRoLCBhc3NpZ25tZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCIhIWdldEVycm9yTWVzc2FnZShpdGVtPy5pZCwgcGF0aCwgYXNzaWdubWVudClcIj57eyBnZXRFcnJvck1lc3NhZ2UoaXRlbT8uaWQsIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudClcclxuICAgICAgICAgICAgICAgICAgICB9fTwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD1cIjEyJVwiIGNsYXNzPVwidGltZS1sYWJlbFwiPnt7IGdldFN1bShpdGVtKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPCEtLVRvdGFsLS0+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgY2xhc3M9XCJ0aW1lLXNoZWV0LXJvd1wiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjE1JVwiIGNsYXNzPVwibGVmdC1sYWJlbFwiIFtuZ0NsYXNzXT1cInsgJ3RvdGFsJzogaXNWaXNpYmxlKCkgfVwiPjxzcGFuIGNsYXNzPVwibGVmdC1sYWJlbC0yXCI+RGFpbHlcclxuICAgICAgICAgICAgICAgIFRvdGFsPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI4MCVcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTIlXCIgKm5nRm9yPVwibGV0IHBhdGggb2YgZGF5T2ZXZWVrc1wiIGNsYXNzPVwidGltZS1sYWJlbFwiPnt7IGFzc2lnbm1lbnQ/LmRhaWx5VG90YWxbcGF0aF0gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjEyJVwiIGNsYXNzPVwidGltZS1sYWJlbFwiPnt7IGdldFRvdGFsU3VtKCBhc3NpZ25tZW50ICkgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS1DYXJmYXJlLS0+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgY2xhc3M9XCJ0aW1lLXNoZWV0LXJvdyBib3JkZXItdG9wXCIgZnhMYXlvdXRHYXA9XCIyMHB4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMjAlXCIgY2xhc3M9XCJsZWZ0LWxhYmVsIHRvdGFsXCI+PHNwYW4+Q2FyZmFyZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiODAlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBbZm9ybUdyb3VwXT1cImFzc2lnbm1lbnQuY2FyZmFyZUZvcm1Hcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGZ4RmxleD1cIjEyJVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFzc2lnbm1lbnQuY2FyZmFyZU1vZGVsczsgbGV0IGluZGV4PWluZGV4O1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtkaXNhYmxlZF09XCJpdGVtPy5pc0Rpc2FibGVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0/LmRheU9mV2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZGVmYXVsdENhcmZhcmVPcHRpb25cIj5OL0E8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbT8ub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTIlXCIgY2xhc3M9XCJ0aW1lLWxhYmVsXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tQXNzaWdubWVudCBNb2RlLS0+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgY2xhc3M9XCJ0aW1lLXNoZWV0LXJvdyBib3JkZXItdG9wXCIgZnhMYXlvdXRHYXA9XCIyMHB4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMjAlXCIgY2xhc3M9XCJsZWZ0LWxhYmVsIHRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+QXNzaWdubWVudCBNb2RlXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBydXRlY2gtZHluYW1pYy1idXR0b24tbWFuZGF0b3J5XCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjgwJVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgW2Zvcm1Hcm91cF09XCJhc3NpZ25tZW50LmFzc2lnbm1lbnRNb2RlRm9ybUdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgZnhGbGV4PVwiMTIlXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXNzaWdubWVudC5hc3NpZ25tZW50TW9kZU1vZGVsczsgbGV0IGluZGV4PWluZGV4O1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtkaXNhYmxlZF09XCJpdGVtPy5pc0Rpc2FibGUgfHwhaXNBdHRlc3RlZENoZWNrVmFsdWU/YXNzaWdubWVudC5pc1NlbGZBdHRlc3RlZFNjaG9vbDpmYWxzZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiaXRlbT8uZGF5T2ZXZWVrXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbT8ub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24uZGlzcGxheVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiMTIlXCIgY2xhc3M9XCJ0aW1lLWxhYmVsXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ0aW1lLXNoZWV0LWNvbW1lbnRcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGNNZXNzYWdlKClcIiBjbGFzcz1cIndhcm5pbmctdGV4dFwiPlxyXG4gICAgICA8c3Bhbj57eyB0aGlzLmdldERjTWVzc2FnZSgpIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXNQYXJ0aWNpcGFudENoYW5nZU9mU3RhdHVzKClcIiBjbGFzcz1cIndhcm5pbmctdGV4dFwiPlxyXG4gICAgICA8c3Bhbj57eyB0aGlzLmRldGFpbHM/LnByb2dyYW1BbGVydD8ucGNzVHlwZT8uZGlzcGxheVZhbHVlIH19IFBDUzwvc3Bhbj48YnI+XHJcbiAgICAgIDxzcGFuPlBlcmZvcm1lZCBvbiB7eyB0aGlzLmRldGFpbHM/LnByb2dyYW1BbGVydD8uc3VibWl0dGVkT24gfCBkYXRlOiAnTU0vZGQveXl5eSd9fTwvc3Bhbj48YnI+XHJcbiAgICAgIDxzcGFuPlJlYXNvbjoge3sgdGhpcy5kZXRhaWxzPy5wcm9ncmFtQWxlcnQ/LnJlYXNvbj8uZGlzcGxheVZhbHVlIH19PC9zcGFuPjxicj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjb21tZW50XCI+e3sgdGhpcy5kZXRhaWxzPy5wcm9ncmFtQWxlcnQ/LmNvbW1lbnRzIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8c3Bhbj4tIEFsbCBob3VycyBlbnRlcmVkIGludG8gU0VBTVMgYXJlIHN1YmplY3QgdG8gYXVkaXQgYW5kIHJlcXVpcmUgYmFjayB1cCBkb2N1bWVudGF0aW9uLCBlaXRoZXIgdGhydSBzZXBhcmF0ZVxyXG4gICAgICBtYW51YWwgb3IgZWxlY3Ryb25pYyB0cmFja2luZyB3aGljaCBtYXRjaGVzIHRoZSBob3VycyBzdWJtaXR0ZWQgZm9yIGVhY2ggY2xpZW50LiA8L3NwYW4+PGJyPlxyXG4gICAgPHNwYW4gKm5nSWY9XCIhIXRpbWVGcmFtZU1lc3NhZ2VcIj4tIERhdGEgRW50cnkgbXVzdCBiZSBjb21wbGV0ZWQgYnkge3sgdGltZUZyYW1lTWVzc2FnZSB9fS48L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGZ4TGF5b3V0R2FwPVwiMzBweFwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImV4aXQoKVwiPkVYSVQ8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJpc1Zpc2libGUoKSYmICh0aGlzLmRldGFpbHMuaXNEdWUgfHx0aGlzLmRldGFpbHMuaXNDdXJyZW50KVwiIChjbGljayk9XCJ2YWxpZGF0ZUFuZFNhdmUoKVwiIFtkaXNhYmxlZF09XCJpc0Zvcm1JblZhbGlkKClcIj5TQVZFXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd0RlZmljaXRIb3Vyc01lc3NhZ2VcIiBjbGFzcz1cInNhdmUtd2FybmluZ1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XHJcbiAgICA8bWF0LWljb24+ZXJyb3I8L21hdC1pY29uPlxyXG4gICAgPHNwYW4+IFRvdGFsIHdlZWtseSBob3VycyBlbnRlcmVkIGhhdmUgYSBkZWZpY2l0IHN1YmplY3QgdG8gaW5mcmFjdGlvbi4gPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=