@dereekb/dbx-form 9.24.21 → 9.24.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -88,7 +88,7 @@ export class DbxCalendarScheduleSelectionStore extends ComponentStore {
88
88
  this.currentSelectionValue$ = this.state$.pipe(map((x) => x.currentSelectionValue), shareReplay(1));
89
89
  this.currentSelectionValueStart$ = this.currentSelectionValue$.pipe(map((x) => x?.dateScheduleRange.start), distinctUntilChanged(isSameDate), shareReplay(1));
90
90
  this.currentSelectionValueDateBlockTimingDateFactory$ = this.currentSelectionValueStart$.pipe(map((start) => (start ? dateBlockTimingDateFactory({ start }) : undefined)), shareReplay(1));
91
- this.currentSelectionValueDateBlockDurationSpan$ = this.currentSelectionValue$.pipe(map((x) => (x ? expandDateScheduleRange(x) : [])), shareReplay(1));
91
+ this.currentSelectionValueDateBlockDurationSpan$ = this.currentSelectionValue$.pipe(map((x) => (x ? expandDateScheduleRange({ ...x, duration: 1 }) : [])), shareReplay(1));
92
92
  this.selectionValueSelectedIndexes$ = this.currentSelectionValueDateBlockDurationSpan$.pipe(map((x) => new Set(x.map((y) => y.i))), distinctUntilHasDifferentValues(), shareReplay(1));
93
93
  this.selectionValueSelectedDates$ = this.currentSelectionValueDateBlockTimingDateFactory$.pipe(switchMap((dateFactory) => {
94
94
  return dateFactory ? this.selectionValueSelectedIndexes$.pipe(map((x) => mapValuesToSet(x, (y) => formatToISO8601DayString(dateFactory(y))))) : of(new Set());
@@ -107,7 +107,7 @@ export class DbxCalendarScheduleSelectionStore extends ComponentStore {
107
107
  return x;
108
108
  }), distinctUntilChanged(), shareReplay(1));
109
109
  this.selectionValueWithTimezone$ = this.currentSelectionValueWithTimezone$.pipe(filterMaybe(), shareReplay(1));
110
- this.selectionValueWithTimezoneDateBlockDurationSpan$ = this.selectionValueWithTimezone$.pipe(map((x) => expandDateScheduleRange(x)), shareReplay(1));
110
+ this.selectionValueWithTimezoneDateBlockDurationSpan$ = this.selectionValueWithTimezone$.pipe(map((x) => expandDateScheduleRange({ ...x, duration: 1 })), shareReplay(1));
111
111
  this.nextToggleSelection$ = this.hasConfiguredMinMaxRange$.pipe(switchMap((hasConfiguredMinMaxRange) => {
112
112
  let obs;
113
113
  if (hasConfiguredMinMaxRange) {
@@ -595,4 +595,4 @@ export function computeCalendarScheduleSelectionDateBlockRange(state) {
595
595
  return undefined;
596
596
  }
597
597
  }
598
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwseUJBQXlCLEVBR3pCLDBCQUEwQixFQUcxQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBRWhDLG1CQUFtQixFQUNuQix1QkFBdUIsRUFJdkIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQix3Q0FBd0MsRUFDeEMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsa0NBQWtDLEVBQ2xDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFFckIsdUJBQXVCLEVBR3ZCLHdCQUF3QixFQUV4QixxQ0FBcUMsRUFFckMsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBNEQsZUFBZSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsaUNBQWlDLEVBQVksZUFBZSxFQUFnQyxLQUFLLEVBQXNCLE1BQU0sRUFBRSxXQUFXLEVBQWdCLGFBQWEsRUFBdUMsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9WLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUQsT0FBTyxFQUFjLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ25JLE9BQU8sRUFBK0Usa0RBQWtELEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUF3SGhMLE1BQU0sVUFBVSxxQ0FBcUM7SUFDbkQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0saUJBQWlCLEdBQUcsd0NBQXdDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4RixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sWUFBWSxHQUFHLDhCQUE4QixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvRCxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxPQUFPO1FBQ0wsS0FBSztRQUNMLFlBQVk7UUFDWixjQUFjLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDekIsbUJBQW1CO1FBQ25CLHFCQUFxQixFQUFFLG1CQUFtQjtRQUMxQyxpQkFBaUI7UUFDakIsY0FBYztRQUNkLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7UUFDOUIsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7UUFDekIsc0NBQXNDLEVBQUUsSUFBSTtRQUM1QyxrQkFBa0IsRUFBRSxrREFBa0Q7S0FDdkUsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsQ0FBcUU7SUFDM0csT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxDQUFxRTtJQUMzRyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtDQUFrQyxDQUFDLENBQXFFO0lBQ3RILE9BQU87UUFDTCxLQUFLLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztRQUM5QyxHQUFHLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx3Q0FBd0MsQ0FBQyxDQUE0RjtJQUNuSixPQUFPLENBQUMsQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7QUFDN0UsQ0FBQztBQUdELE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSxjQUE4QztJQUNuRztRQUNFLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDLENBQUM7UUFHakQsUUFBUTtRQUNDLG9CQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQXVCLEVBQUUsRUFBRTtZQUNqRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNiLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQzVCLEtBQUssRUFBRSxFQUNQLFdBQVcsRUFBRSxFQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILGtCQUFrQjtRQUNULFlBQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQ3BCLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8scUJBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEksYUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzVDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUNwQixvQkFBb0IsQ0FBQyxhQUFhLENBQUMsRUFDbkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFDTyxhQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ2xCLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUNuQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLDhCQUF5QixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzdELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUN6RCxvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLGdCQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUN4QixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsRUFDaEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxjQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUN0QixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsRUFDaEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyx1QkFBa0IsR0FBK0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3hHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzVHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzlCLE9BQU8sQ0FBNEMsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxPQUFPLFNBQVMsQ0FBQzthQUNsQjtRQUNILENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sZ0JBQVcsR0FBd0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4STs7V0FFRztRQUNNLG1CQUFjLEdBQW9DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN6RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDNUIsb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxnQ0FBMkIsR0FBc0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3hILEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sMEJBQXFCLEdBQXNFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNsSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFDMUIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxzQkFBaUIsR0FBaUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3pFLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDckQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyw0Q0FBdUMsR0FBK0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzdGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLEVBQ3BELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sOEJBQXlCLEdBQStCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUMvRSxFQUFFO1FBQ0YsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLEVBQzdDLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sZUFBVSxHQUEwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9GLHVCQUFrQixHQUErQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFDL0IsK0JBQStCLEVBQUUsRUFDakMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxrQkFBYSxHQUF5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDN0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsRUFDbkMsK0JBQStCLEVBQUUsRUFDakMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxxQkFBZ0IsR0FBc0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzdFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUN0QixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLHVCQUFrQixHQUFzQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDL0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDakcsb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyw2QkFBd0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDN0csb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTywyQkFBc0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsRUFDbkMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxnQ0FBMkIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUNyRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFDdEMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEVBQ2hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8scURBQWdELEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FDL0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUMzRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLGdEQUEyQyxHQUFtRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUNySSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDakQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxtQ0FBOEIsR0FBb0MsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLElBQUksQ0FDOUgsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QywrQkFBK0IsRUFBRSxFQUNqQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLGlDQUE0QixHQUFzQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsSUFBSSxDQUNuSSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN4QixPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQW9CLENBQUMsQ0FBQztRQUNsTCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLG9CQUFlLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRix1Q0FBa0MsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUM1RSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxjQUFjLEVBQUU7Z0JBQ3ZCLENBQUMsR0FBRztvQkFDRixpQkFBaUIsRUFBRTt3QkFDakIsR0FBRyxDQUFDLENBQUMsaUJBQWlCO3dCQUN0QixLQUFLLEVBQUUsY0FBYyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7d0JBQ3ZFLEdBQUcsRUFBRSxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQztxQkFDcEU7aUJBQ2dDLENBQUM7YUFDckM7WUFFRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxFQUNGLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sZ0NBQTJCLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRyxxREFBZ0QsR0FBbUQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FDL0ksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLHlCQUFvQixHQUEwQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUN4RyxTQUFTLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFO1lBQ3JDLElBQUksR0FBMEMsQ0FBQztZQUUvQyxJQUFJLHdCQUF3QixFQUFFO2dCQUM1QixHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRTtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5RTtZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxtQ0FBOEIsR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUNwRixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxFQUNoQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUM3QyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLDRCQUF1QixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEcsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEVBQ2hDLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU8sa0JBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFDckMsb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFTyxvQkFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDNUIsb0JBQW9CLEVBQUUsRUFDdEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFFRixzQkFBc0I7UUFDYix1QkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEUsbUJBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDOUQsY0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNoRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN4RCw4Q0FBeUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDaEgsZ0JBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUUvRSxnQkFBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN6RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUVuRSw0SEFBNEg7UUFDbkgsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUE0RCxFQUFFLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUoscUJBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUF5RCxFQUFFLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkosd0JBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUE0RCxFQUFFLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUoscUJBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUF5RCxFQUFFLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFNUosb0ZBQW9GO1FBQzNFLHVCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBeUQsRUFBRSxFQUFFLENBQUMsMkJBQTJCLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU5SyxtQkFBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBZ0MsS0FBSyxFQUFFLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkksNkJBQXdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBRTlFLDJCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUNqRixvQkFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNuRSw0QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpKLDhCQUF5QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBK0IsRUFBRSxFQUFFLENBQUMscUNBQXFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUksMEJBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxrQkFBK0QsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlKOzs7O1dBSUc7UUFDTSx5QkFBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLGNBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFyUmpILENBQUM7OytIQUhVLGlDQUFpQzttSUFBakMsaUNBQWlDOzRGQUFqQyxpQ0FBaUM7a0JBRDdDLFVBQVU7O0FBNFJYLE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxLQUFxQyxFQUFFLHFCQUFnRDtJQUMxSSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWpDLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUkscUJBQXFCLEtBQUssS0FBSyxFQUFFO1FBQ2hFLEtBQUssR0FBRywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0tBQ2xGO0lBRUQsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLHFCQUFxQixFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxxREFBcUQsQ0FBQyxZQUE0QyxFQUFFLHNDQUFzRDtJQUN4SyxJQUFJLEtBQUssR0FBbUMsRUFBRSxHQUFHLFlBQVksRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO0lBRXhHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxzQ0FBc0MsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFFO1FBQ3BILEtBQUssR0FBRywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxrRUFBa0U7S0FDbkg7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsS0FBcUMsRUFBRSxlQUFxRjtJQUNwSyxJQUFJLGtCQUEyQyxDQUFDO0lBRWhELElBQUksZUFBZSxFQUFFO1FBQ25CLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxtQ0FBbUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUN6RDtJQUVELEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQzFELE9BQU8scUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLDhCQUE4QixDQUFDLEtBQXFDLEVBQUUsZUFBMEM7SUFDOUgsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUVyQixJQUFJLGVBQWUsSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUNwRSxLQUFLLENBQUMsZUFBZSxHQUFHO1lBQ3RCLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNwRixHQUFHLEVBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDN0UsQ0FBQztLQUNIO1NBQU07UUFDTCxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7S0FDOUI7SUFFRCxPQUFPLHFCQUFxQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFxQyxFQUFFLFdBQWdEO0lBQzNILE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWxFLElBQUksa0JBQWtCLEdBQWlFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztJQUNsRyxJQUFJLE1BQU0sR0FBd0MsSUFBSSxDQUFDO0lBRXZELHVFQUF1RTtJQUN2RSxJQUFJLFdBQVcsSUFBSSxVQUFVLEVBQUUsTUFBTSxJQUFJLGVBQWUsRUFBRTtRQUN4RCxJQUFJLGFBQTJDLENBQUM7UUFFaEQsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLEdBQUcsZ0NBQWdDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBRXRFLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRTtnQkFDdEIsYUFBYSxHQUFHO29CQUNkLEdBQUcsTUFBTTtvQkFDVCxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDakQsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLGFBQWEsR0FBRyxNQUFNLENBQUM7YUFDeEI7U0FDRjthQUFNO1lBQ0wsYUFBYSxHQUFHO2dCQUNkLENBQUMsRUFBRSxJQUFJO2dCQUNQLEVBQUUsRUFBRSxVQUFzQjthQUMzQixDQUFDO1NBQ0g7UUFFRCxJQUFJLGVBQWUsRUFBRTtZQUNuQixhQUFhLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUNoRCxhQUFhLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxREFBcUQ7U0FDdEg7UUFFRDs7O1dBR0c7UUFDSCxhQUFhLENBQUMsS0FBSyxHQUFHLFdBQVcsRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztRQUV4RCxvQkFBb0I7UUFDcEIsa0JBQWtCLEdBQUcsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDNUQ7SUFFRCxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztJQUVqRCxpR0FBaUc7SUFDakcsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtRQUMxQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxZQUFZLEdBQUcsOEJBQThCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELEtBQUssQ0FBQyxjQUFjLEdBQUcseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDekQ7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUU7UUFDL0IsS0FBSyxHQUFHLG9DQUFvQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztLQUNsRjtJQUVELDhDQUE4QztJQUM5QyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUV2QyxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUU7UUFDMUIsS0FBSyxHQUFHLDJCQUEyQixDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ3RFO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QixDQUFDLEtBQXFDLEVBQUUsUUFBK0I7SUFDakgsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXhDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFFbEYsSUFBSSxjQUFjLElBQUkscUJBQXFCLEVBQUU7UUFDM0MsOERBQThEO1FBRTlELE1BQU0sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxHQUFHLHFCQUFxQixDQUFDO1FBQzlFLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRixNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsc0JBQXNCLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEYsTUFBTSxRQUFRLEdBQXNCO1lBQ2xDLEdBQUcscUJBQXFCLENBQUMsaUJBQWlCO1lBQzFDLEtBQUs7WUFDTCxHQUFHO1NBQ0osQ0FBQztRQUVGLE9BQU8scUNBQXFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDaEc7U0FBTTtRQUNMLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7S0FDckU7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLEtBQXFDLEVBQUUsTUFBZ0M7SUFDM0gsTUFBTSxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUN4RCxNQUFNLHdCQUF3QixHQUFHLHFCQUFxQixFQUFFLGlCQUFpQixDQUFDLENBQUMseUNBQXlDO0lBRXBILElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLEVBQUU7UUFDdEUsMklBQTJJO1FBQzNJLDJCQUEyQjtRQUUzQixJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sR0FBRztnQkFDUCxHQUFHLE1BQU07Z0JBQ1QsS0FBSyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0RSxHQUFHLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbkUsQ0FBQztTQUNIO0tBQ0Y7SUFFRCxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUU5RSxJQUFJLFdBQVcsRUFBRTtRQUNmLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTTtRQUNMLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtZQUNsQixNQUFNLFNBQVMsR0FBbUMsRUFBRSxHQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkosT0FBTyxrQ0FBa0MsQ0FBQyx5Q0FBeUMsQ0FBQyxTQUFTLENBQUMsRUFBRSwwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDL0k7YUFBTTtZQUNMLE9BQU8seUNBQXlDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7U0FDbEc7S0FDRjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUseUNBQXlDLENBQUMsS0FBcUMsRUFBRSxNQUE0QztJQUMzSSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbEUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO0lBRTdFLElBQUkscUNBQXFDLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLENBQUMsRUFBRTtRQUMxRixPQUFPLEtBQUssQ0FBQyxDQUFDLFlBQVk7S0FDM0I7U0FBTTtRQUNMLE9BQU8sMENBQTBDLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0tBQzdGO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQ0FBa0MsQ0FBQyxLQUFxQyxFQUFFLE1BQTRDO0lBQ3BJLE1BQU0sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTNDLElBQUksZUFBNEQsQ0FBQztJQUVqRSxJQUFJLG1CQUFtQixJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ2pELElBQUkscUNBQXFDLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLEVBQUU7WUFDNUUsZUFBZSxHQUFHLFNBQVMsQ0FBQyxDQUFDLFdBQVc7U0FDekM7YUFBTTtZQUNMLGVBQWUsR0FBRyxZQUFZLENBQUM7U0FDaEM7S0FDRjtTQUFNLElBQUksbUJBQW1CLEtBQUssTUFBTSxFQUFFO1FBQ3pDLGVBQWUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsK0JBQStCO0tBQ2hGO0lBRUQsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1FBQ2pDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7U0FBTTtRQUNMLE9BQU8sMENBQTBDLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ3BIO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSwwQ0FBMEMsQ0FBQyxhQUE2QyxFQUFFLFNBQXlDO0lBQ2pKLE1BQU0sb0JBQW9CLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO0lBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFlBQVksSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUM7SUFFakYsSUFBSSxxQ0FBcUMsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO1FBQ2pGLE9BQU8sU0FBUyxDQUFDLENBQUMsc0dBQXNHO0tBQ3pIO1NBQU07UUFDTCxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUN0RixNQUFNLGlCQUFpQixHQUFHLHdDQUF3QyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFckYsT0FBTyx5Q0FBeUMsQ0FBQztZQUMvQyxHQUFHLFNBQVM7WUFDWiw4REFBOEQ7WUFDOUQscUJBQXFCO1lBQ3JCLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7S0FDSjtBQUNILENBQUM7QUFpQkQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLEtBQXFDLEVBQUUsTUFBaUQ7SUFDbEksTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNySixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkYsSUFBSSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7SUFDbkMsSUFBSSxRQUFRLEdBQUcsZUFBZSxDQUFDO0lBRS9COzs7O09BSUc7SUFDSCxJQUFJLGNBQW1DLENBQUM7SUFFeEMsU0FBUyxTQUFTLENBQUMsT0FBNkQ7UUFDOUUsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDbEUsSUFBSSxHQUFHLEdBQWdFLE1BQU0sQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3hGLE1BQU0sU0FBUyxHQUE4QixNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRXBILFFBQVEsU0FBUyxFQUFFO1lBQ2pCLEtBQUssS0FBSztnQkFDUixJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtvQkFDdEMsVUFBVSxHQUFHLE9BQU8sQ0FBQztvQkFDckIsUUFBUSxHQUFHLE9BQU8sQ0FBQztvQkFDbkIsR0FBRyxHQUFHLEVBQUUsQ0FBQztpQkFDVjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ1QsTUFBTTtTQUNUO1FBRUQsY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXpDLElBQUksTUFBTSxDQUFDLGlCQUFpQixJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV2QyxVQUFVLEdBQUcsT0FBTyxDQUFDO1lBQ3JCLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDbkIsY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRjtLQUNGO1NBQU07UUFDTCxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRS9DLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNqQixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekcsV0FBVyxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztTQUM5QztRQUVELElBQUksY0FBMkUsQ0FBQztRQUNoRixJQUFJLG1CQUFnRixDQUFDO1FBRXJGLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFO2dCQUM1QixjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUM3QjtpQkFBTTtnQkFDTCxtQkFBbUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ2xDO1NBQ0Y7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDakIsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzVCLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDaEM7U0FDRjtRQUVELElBQUksY0FBYyxFQUFFO1lBQ2xCLGFBQWEsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLFFBQVEsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztTQUMxRDtLQUNGO0lBRUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3JFLFNBQVMsQ0FBQyxZQUFZLEdBQUcsNENBQTRDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFakYscURBQXFEO0lBQ3JELE1BQU0saUJBQWlCLEdBQUcseUNBQXlDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0UsSUFBSSxpQkFBaUIsRUFBRTtRQUNyQixPQUFPLHlDQUF5QyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDL0w7U0FBTTtRQUNMLG1CQUFtQjtRQUNuQixPQUFPLHlDQUF5QyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzdEO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx5Q0FBeUMsQ0FBQyxLQUFxQztJQUM3RixPQUFPLHlDQUF5QyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5SCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLEtBQXFDLEVBQUUsTUFBK0M7SUFDaEksTUFBTSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDMUcsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUF1QixlQUFlLElBQUksRUFBRSxDQUFDO0lBRW5GLE1BQU0sVUFBVSxHQUFTLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkQsTUFBTSxRQUFRLEdBQVMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVqRCxNQUFNLFlBQVksR0FBRyxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFFN0osSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEVBQUU7UUFDdEosT0FBTyxLQUFLLENBQUMsQ0FBQywwQ0FBMEM7S0FDekQ7SUFFRCxtREFBbUQ7SUFDbkQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFNUMsTUFBTSxjQUFjLEdBQXFCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsaUNBQWlDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNuRixNQUFNLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBRTFELE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNyRSxPQUFPLHlDQUF5QyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLFVBQVUseUNBQXlDLENBQUMsU0FBeUM7SUFDakcsU0FBUyxDQUFDLFlBQVksR0FBRyw0Q0FBNEMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRixTQUFTLENBQUMscUJBQXFCLEdBQUcsNkJBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0UsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSw0Q0FBNEMsQ0FBQyxLQUFxQztJQUNoRyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3hGLElBQUksb0JBQXdELENBQUM7SUFFN0QsSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFO1FBQzFCLG9CQUFvQixHQUFHLGtDQUFrQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ2hJO1NBQU07UUFDTCxvQkFBb0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDcEM7SUFFRCxPQUFPLENBQUMsS0FBMEMsRUFBRSxFQUFFO1FBQ3BELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEMsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsaUJBQWlCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNoSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEtBQXFDO0lBQ2pGLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztJQUN6SSxNQUFNLGlCQUFpQixHQUFHLHlDQUF5QyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNFLElBQUksaUJBQWlCLElBQUksSUFBSSxFQUFFO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7SUFDdEcsSUFBSSx5QkFBeUIsR0FBcUIsRUFBRSxDQUFDO0lBQ3JELElBQUksV0FBVyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFbkMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDO0lBQ3ZCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUVuQixxSEFBcUg7SUFDckgsSUFBSSxzQ0FBc0MsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFO1FBQzNELEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRXJCLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUNmLEdBQUcsR0FBRywyQkFBMkIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsTUFBTSxzQkFBc0IsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlFLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM3RCxXQUFXLEdBQUcsV0FBVyxHQUFHLHNCQUFzQixDQUFDO0tBQ3BEO0lBRUQsTUFBTSxRQUFRLEdBQUcsc0NBQXNDO1FBQ3JELENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN4RSxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsV0FBVyxDQUFDO0lBRWhCLE1BQU0sY0FBYyxHQUFxQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7SUFFMUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFFN0QsTUFBTSxDQUFDLEdBQTRCLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbEYsTUFBTSxDQUFDLEdBQXFCLEVBQUUsQ0FBQyxDQUFDLCtDQUErQztJQUUvRSx3REFBd0Q7SUFDeEQsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxlQUFlO0tBQzdCO0lBRUQsTUFBTSxpQkFBaUIsR0FBc0I7UUFDM0MsS0FBSztRQUNMLEdBQUc7UUFDSCxDQUFDO1FBQ0QsQ0FBQztRQUNELEVBQUU7S0FDSCxDQUFDO0lBRUYsT0FBTztRQUNMLGlCQUFpQjtRQUNqQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0tBQzVCLENBQUM7QUFDSixDQUFDO0FBT0QsTUFBTSxVQUFVLHlDQUF5QyxDQUFDLEtBQXFDO0lBQzdGLE1BQU0sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxjQUFjLEdBQUcsOENBQThDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0UsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFO1FBQzFCLE9BQU8sSUFBSSxDQUFDLENBQUMseUNBQXlDO0tBQ3ZEO0lBRUQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sUUFBUSxHQUFxQixLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzdGLE1BQU0sZUFBZSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBK0M7UUFDekQsY0FBYztRQUNkLEtBQUs7UUFDTCxHQUFHO1FBQ0gsUUFBUTtLQUNULENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLHFDQUFxQyxDQUFDLEtBQXFDO0lBQ3pGLE1BQU0sV0FBVyxHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELE1BQU0sY0FBYyxHQUFHLDhDQUE4QyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdFLE1BQU0sU0FBUyxHQUFxQixjQUFjLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqSyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLDhDQUE4QyxDQUFDLEtBQXFDO0lBQ2xHLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQzFILE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxNQUFNLHVCQUF1QixHQUFHLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRXpFLElBQUksVUFBaUMsQ0FBQztJQUN0QyxJQUFJLFFBQStCLENBQUM7SUFFcEMsSUFBSSx1QkFBdUIsRUFBRTtRQUMzQixVQUFVLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDO1FBQ3pDLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQUM7S0FDeEM7SUFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtRQUMxQyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLFVBQVUsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQzFGLFFBQVEsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0tBQ2pGO0lBRUQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7UUFDMUMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUU5QixzQkFBc0I7UUFDdEIsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixRQUFRLEdBQUcsU0FBUyxDQUFDO1FBRXJCLDhJQUE4STtRQUM5SSxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTthQUNQO1NBQ0Y7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RELElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07YUFDUDtTQUNGO0tBQ0Y7SUFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtRQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7S0FDeEM7U0FBTTtRQUNMLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIGRhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIERhdGVCbG9ja0luZGV4LFxuICBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZSxcbiAgZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnksXG4gIERhdGVPckRhdGVCbG9ja0luZGV4LFxuICBEYXRlUmFuZ2UsXG4gIGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIsXG4gIGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXlDb2RlLFxuICBkYXRlU2NoZWR1bGVFbmNvZGVkV2VlayxcbiAgRGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWssXG4gIERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSxcbiAgZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXMsXG4gIGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQsXG4gIGZpbmRNYXhEYXRlLFxuICBmaW5kTWluRGF0ZSxcbiAgaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbixcbiAgSXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNTYW1lRGF0ZSxcbiAgaXNTYW1lRGF0ZURheSxcbiAgaXNTYW1lRGF0ZVJhbmdlLFxuICBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2UsXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4QXJyYXlGYWN0b3J5LFxuICBpc0luZmluaXRlRGF0ZVJhbmdlLFxuICBjb3B5SG91cnNBbmRNaW51dGVzRnJvbURhdGUsXG4gIGRhdGVUaW1lem9uZVV0Y05vcm1hbCxcbiAgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsXG4gIGV4cGFuZERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlQmxvY2ssXG4gIERhdGVCbG9ja0R1cmF0aW9uU3BhbixcbiAgZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCxcbiAgZGF0ZVNjaGVkdWxlRGF5Q29kZXNBcmVTZXRzRXF1aXZhbGVudCxcbiAgZGF0ZVNjaGVkdWxlRGF5Q29kZXNTZXRGcm9tRGF5c09mV2VlayxcbiAgc2ltcGxpZnlEYXRlU2NoZWR1bGVEYXlDb2RlcyxcbiAgZnVsbFdlZWtEYXlTY2hlZHVsZURheUNvZGVzXG59IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbEhhc0RpZmZlcmVudFZhbHVlcywgZmlsdGVyTWF5YmUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IE1heWJlLCBUaW1lem9uZVN0cmluZywgRGVjaXNpb25GdW5jdGlvbiwgSXRlcmFibGVPclZhbHVlLCBpdGVyYWJsZVRvQXJyYXksIGFkZFRvU2V0LCB0b2dnbGVJblNldCwgaXNJbmRleE51bWJlckluSW5kZXhSYW5nZUZ1bmN0aW9uLCBNYXliZU1hcCwgbWluQW5kTWF4TnVtYmVyLCBzZXRzQXJlRXF1aXZhbGVudCwgRGF5T2ZXZWVrLCByYW5nZSwgQWxsT3JOb25lU2VsZWN0aW9uLCB1bmlxdWUsIG1lcmdlQXJyYXlzLCBBcnJheU9yVmFsdWUsIHJlbW92ZUZyb21TZXQsIElTTzg2MDFEYXlTdHJpbmcsIGZpbHRlclZhbHVlc1RvU2V0LCBtYXBWYWx1ZXNUb1NldCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgc3RhcnRPZkRheSwgZW5kT2ZEYXksIGlzQmVmb3JlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBmaXJzdCwgY29tYmluZUxhdGVzdFdpdGgsIG9mLCBzY2hlZHVsZWQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnksIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZSwgZGVmYXVsdENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnkgfSBmcm9tICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIElucHV0IFN0YXJ0IERhdGVcbiAgICovXG4gIGlucHV0U3RhcnQ6IERhdGU7XG4gIC8qKlxuICAgKiBJbnB1dCBFbmQgRGF0ZVxuICAgKi9cbiAgaW5wdXRFbmQ6IERhdGU7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UgPSBQYXJ0aWFsPE1heWJlTWFwPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSBleHRlbmRzIFBhcnRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2Uge1xuICAvKipcbiAgICogUmVhZG9ubHkgc3RhdGUgb2YgdGhlIHZpZXcuXG4gICAqXG4gICAqIERvZXMgbm90IGFmZmVjdCBzdGF0ZSBjaGFuZ2VzIGRpcmVjdGx5LCBidXQgaW5zdGVhZCBhY3RzIGFzIGEgZmxhZyBmb3IgdGhlIHBhcmVudCB2aWV3IHRvIHNldCBhbmQgdGhlIGNvbnN1bWluZyB2aWV3cyB0byB1cGRhdGUgb24uXG4gICAqL1xuICBpc1ZpZXdSZWFkb25seT86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogU2V0IG9mIHRoZSBkYXlzIG9mIHdlZWsgdGhhdCBhcmUgYWxsb3dlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgZGVmYXVsdFNjaGVkdWxlRGF5czogU2V0PERhdGVTY2hlZHVsZURheUNvZGU+O1xuICAvKipcbiAgICogRmlsdGVycyB0aGUgZGF5cyBvZiB0aGUgc2NoZWR1bGUgdG8gb25seSBhbGxvdyBzZWxlY3RpbmcgZGF5cyBpbiB0aGUgc2NoZWR1bGUuXG4gICAqXG4gICAqIElmIGZpbHRlci5zdGFydCBpcyBwcm92aWRlZCwgdGhlbiB0aGUgdGltZXpvbmUgaXMgaWdub3JlZCwgaWYgb25lIGlzIHByZXNlbnQuXG4gICAqL1xuICBmaWx0ZXI/OiBNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZXhjbHVzaW9ucyB0aGF0IG1heSBub3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGZpbHRlci5cbiAgICovXG4gIGlucHV0RXhjbHVzaW9ucz86IE1heWJlPEFycmF5T3JWYWx1ZTxEYXRlT3JEYXRlUmFuZ2VPckRhdGVCbG9ja0luZGV4T3JEYXRlQmxvY2tSYW5nZT4+O1xuICAvKipcbiAgICogVGhlIGNvbXB1dGVkIGV4Y2x1c2lvbnMgZ2l2ZW4gdGhlIGlucHV0IGV4Y2x1c2lvbnMuXG4gICAqL1xuICBjb21wdXRlZEV4Y2x1c2lvbnM/OiBNYXliZTxEYXRlQmxvY2tJbmRleFtdPjtcbiAgLyoqXG4gICAqIFRoZSBtaW4vbWF4IGRhdGUgcmFuZ2UuIFVzZWQgZm9yIHJlc3RyaWN0aW5nIHRoZSBtaW4vbWF4IHZhbHVlLiBXb3JrcyB3aXRoIHRoZSBmaWx0ZXIuIFRoZSBncmVhdGVyL2xlc3NlciBvZiB0aGUgc3RhcnQvZW5kIGRhdGVzIGFyZSB1c2VkIGlmIGJvdGggYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgbWluTWF4RGF0ZVJhbmdlPzogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFN0YXJ0IGRhdGUuIElzIHVwZGF0ZWQgYXMgdGhlIGlucHV0U3RhcnQgaXMgbW9kaWZpZWQgb3IgZmlsdGVyIGlzIHByb3ZpZGVkIHRoYXQgcHJvdmlkZXMgdGhlIHN0YXJ0IGRhdGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRvZGF5IGFuZCB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIHN0YXJ0OiBEYXRlO1xuICAvKipcbiAgICogVGltZXpvbmUgdG8gdXNlLiBPbmx5SW5mbHVlbmNlcyB0aGUgb3V0cHV0IHN0YXJ0IGRhdGUuXG4gICAqL1xuICB0aW1lem9uZT86IE1heWJlPFRpbWV6b25lU3RyaW5nPjtcbiAgLyoqXG4gICAqIEN1cnJlbnQgdGltZXpvbmUgbm9ybWFsIHdpdGggdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICB0aW1lem9uZU5vcm1hbD86IE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPjtcbiAgLyoqXG4gICAqIERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeVxuICAgKi9cbiAgaW5kZXhGYWN0b3J5OiBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3Rvcnk7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBtYW51YWxseSBzZWxlY3RlZCBkYXRlcyB3aXRoaW4gdGhlIHBpY2tlZCByYW5nZS4gVGhpcyBpcyBOT1QgdGhlIHNldCBvZiBhbGwgc2VsZWN0ZWQgaW5kZXhlcyBpbiB0ZXJtcyBvZiBvdXRwdXQuXG4gICAqXG4gICAqIFZhbHVlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgdGhlIFwiaW5wdXRcIiByYW5nZSBhcmUgY29uc2lkZXJlZCB0b2dnbGVkIG9uLCB3aGlsZSB0aG9zZVxuICAgKiB0aGF0IGFyZSBzZWxlY3RlZCB3aXRoaW4gdGhlIHJhbmdlIGFyZSBjb25zaWRlcmVkIHRvZ2dsZWQgb2ZmLlxuICAgKlxuICAgKiBJZiBkYXRlcyBhcmUgc2VsZWN0ZWQsIGFuZCB0aGVuIGEgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gdGhvc2UgZGF0ZXMgd2l0aGluIHRoZSByYW5nZSB0aGF0IGZhbGxcbiAgICogd2l0aGluIHRoZSByYW5nZSBhcmUgY2xlYXJlZCBmcm9tIHNlbGVjdGlvbi5cbiAgICpcbiAgICogVGhlc2UgaW5kZXhlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IGRhdGUuXG4gICAqL1xuICB0b2dnbGVkSW5kZXhlczogU2V0PERhdGVCbG9ja0luZGV4PjtcbiAgLyoqXG4gICAqIERheXMgb2YgdGhlIHNjaGVkdWxlIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgcGlja2VkLiBJZiBub3QgZGVmaW5lZCwgZGVmYXVsdHMgdG8gZGVmYXVsdFNjaGVkdWxlRGF5cy5cbiAgICovXG4gIHNjaGVkdWxlRGF5cz86IE1heWJlPFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPj47XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBEYXRlU2NoZWR1bGVEYXlDb2RlIHZhbHVlLlxuICAgKi9cbiAgZWZmZWN0aXZlU2NoZWR1bGVEYXlzOiBTZXQ8RGF0ZVNjaGVkdWxlRGF5Q29kZT47XG4gIC8qKlxuICAgKiBTZXQgb2YgdGhlIGRheXMgb2Ygd2VlayB0aGF0IGFyZSBhbGxvd2VkLiBEZXJpdmVkIGZyb20gdGhlIGN1cnJlbnQgc2NoZWR1bGUgZGF5cyB2YWx1ZS5cbiAgICovXG4gIGFsbG93ZWREYXlzT2ZXZWVrOiBTZXQ8RGF5T2ZXZWVrPjtcbiAgLyoqXG4gICAqXG4gICAqL1xuICBpbmRleERheU9mV2VlazogRGF0ZUJsb2NrRGF5T2ZXZWVrRmFjdG9yeTtcbiAgLyoqXG4gICAqIERlY2lzaW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgaXMgZW5hYmxlZCBnaXZlbiB0aGUgY3VycmVudCBmaWx0ZXIuXG4gICAqL1xuICBpc0VuYWJsZWRGaWx0ZXJEYXk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+O1xuICAvKipcbiAgICogRGVjaXNpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgdGhlIGN1cnJlbnQgZmlsdGVyIGludG8gYWNjb3VudC5cbiAgICovXG4gIGlzRW5hYmxlZERheTogRGVjaXNpb25GdW5jdGlvbjxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIC8qKlxuICAgKiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5IGZvciB0aGUgdmlldy5cbiAgICovXG4gIGNlbGxDb250ZW50RmFjdG9yeTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeTtcbiAgLyoqXG4gICAqIEN1cnJlbnQgc2VsZWN0aW9uIHZhbHVlLlxuICAgKi9cbiAgY3VycmVudFNlbGVjdGlvblZhbHVlPzogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgZmlsdGVyIGFzIHRoZSBzdGFydCBhbmQgZW5kIHJhbmdlIGluc3RlYWQgb2Ygb3B0aW1pemluZyBmb3IgdGhlIGN1cnJlbnQgaW5kZXguXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcj86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgc2VsZWN0aW9uIHN0YXRlIHdoZW4gdGhlIGNhbGVuZGFyIGlzIHJlc2V0LlxuICAgKi9cbiAgaW5pdGlhbFNlbGVjdGlvblN0YXRlPzogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgZGVmYXVsdFNjaGVkdWxlRGF5cyA9IG5ldyBTZXQoW0RhdGVTY2hlZHVsZURheUNvZGUuV0VFS0RBWSwgRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLRU5EXSk7XG4gIGNvbnN0IGFsbG93ZWREYXlzT2ZXZWVrID0gZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXNUb0RheU9mV2Vla1NldChkZWZhdWx0U2NoZWR1bGVEYXlzKTtcbiAgY29uc3Qgc3RhcnQgPSBzdGFydE9mRGF5KG5ldyBEYXRlKCkpO1xuICBjb25zdCBpbmRleEZhY3RvcnkgPSBkYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnkoeyBzdGFydCB9KTtcbiAgY29uc3QgaW5kZXhEYXlPZldlZWsgPSBkYXRlQmxvY2tEYXlPZldlZWtGYWN0b3J5KHN0YXJ0KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0LFxuICAgIGluZGV4RmFjdG9yeSxcbiAgICB0b2dnbGVkSW5kZXhlczogbmV3IFNldCgpLFxuICAgIGRlZmF1bHRTY2hlZHVsZURheXMsXG4gICAgZWZmZWN0aXZlU2NoZWR1bGVEYXlzOiBkZWZhdWx0U2NoZWR1bGVEYXlzLFxuICAgIGFsbG93ZWREYXlzT2ZXZWVrLFxuICAgIGluZGV4RGF5T2ZXZWVrLFxuICAgIGlzRW5hYmxlZEZpbHRlckRheTogKCkgPT4gdHJ1ZSxcbiAgICBpc0VuYWJsZWREYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyOiB0cnVlLFxuICAgIGNlbGxDb250ZW50RmFjdG9yeTogZGVmYXVsdENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnlcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNaW5EYXRlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IE1heWJlPERhdGU+IHtcbiAgcmV0dXJuIGZpbmRNYXhEYXRlKFt4LmZpbHRlcj8uc3RhcnQsIHgubWluTWF4RGF0ZVJhbmdlPy5zdGFydF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZU1heERhdGUoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogTWF5YmU8RGF0ZT4ge1xuICByZXR1cm4gZmluZE1pbkRhdGUoW3guZmlsdGVyPy5lbmQsIHgubWluTWF4RGF0ZVJhbmdlPy5lbmRdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2UoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogUGFydGlhbDxEYXRlUmFuZ2U+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogY2FsZW5kYXJTY2hlZHVsZU1pbkRhdGUoeCkgfHwgdW5kZWZpbmVkLFxuICAgIGVuZDogY2FsZW5kYXJTY2hlZHVsZU1heERhdGUoeCkgfHwgdW5kZWZpbmVkXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcic+KSB7XG4gIHJldHVybiB4LmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyICYmIHguZmlsdGVyPy5zdGFydCAhPSBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGluaXRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoKSk7XG4gIH1cblxuICAvLyBNQVJLOlxuICByZWFkb25seSB0b2dnbGVTZWxlY3Rpb24gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLm5leHRUb2dnbGVTZWxlY3Rpb24kLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBmaWx0ZXJNYXliZSgpLFxuICAgICAgICAgIHRhcCgoeCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxEYXRlcyh4KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gTUFSSzogQWNjZXNzb3JzXG4gIHJlYWRvbmx5IGZpbHRlciQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5maWx0ZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW5NYXhEYXRlUmFuZ2UkID0gdGhpcy5zdGF0ZSQucGlwZShtYXAoY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVSYW5nZSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBtaW5EYXRlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uc3RhcnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIHJlYWRvbmx5IG1heERhdGUkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5lbmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geCAhPSBudWxsICYmIHguc3RhcnQgIT0gbnVsbCAmJiB4LmVuZCAhPSBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRTdGFydCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pbnB1dFN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0RW5kJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlucHV0RW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRJbnB1dFJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pID0+ICh7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZShhLmlucHV0U3RhcnQsIGIuaW5wdXRTdGFydCkgJiYgaXNTYW1lRGF0ZShhLmlucHV0RW5kLCBiLmlucHV0RW5kKSksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeC5pbnB1dFN0YXJ0ICYmIHguaW5wdXRFbmQpIHtcbiAgICAgICAgcmV0dXJuIHggYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0UmFuZ2UkOiBPYnNlcnZhYmxlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4gPSB0aGlzLmN1cnJlbnRJbnB1dFJhbmdlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHZhbHVlLiBUaGlzIGlzIHRoZSBzZXQgb2YgbWFudWFsbHkgdG9nZ2VkIG9mZiBkYXRlcy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHVwZGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZXMkOiBPYnNlcnZhYmxlPFNldDxEYXRlQmxvY2tJbmRleD4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgudG9nZ2xlZEluZGV4ZXMpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0VuYWJsZWRGaWx0ZXJEYXlGdW5jdGlvbiQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaXNFbmFibGVkRmlsdGVyRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzRW5hYmxlZERheUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc0VuYWJsZWREYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERhdGVSYW5nZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcChjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZVJhbmdlKGEsIGIpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyJDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIkOiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgLy9cbiAgICBtYXAoY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlciksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZSQ6IE9ic2VydmFibGU8RGF0ZVJhbmdlPiA9IHRoaXMuY3VycmVudERhdGVSYW5nZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgYWxsb3dlZERheXNPZldlZWskOiBPYnNlcnZhYmxlPFNldDxEYXlPZldlZWs+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmFsbG93ZWREYXlzT2ZXZWVrKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzY2hlZHVsZURheXMkOiBPYnNlcnZhYmxlPFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5lZmZlY3RpdmVTY2hlZHVsZURheXMpLFxuICAgIGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRUaW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnRpbWV6b25lKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZWZmZWN0aXZlVGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKCFjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHgpICYmIHgudGltZXpvbmUgPyB4LnRpbWV6b25lIDogdW5kZWZpbmVkKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVRpbWV6b25lTm9ybWFsJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoIWNhbGVuZGFyU2NoZWR1bGVTdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIoeCkgJiYgeC50aW1lem9uZU5vcm1hbCA/IHgudGltZXpvbmVOb3JtYWwgOiB1bmRlZmluZWQpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVTdGFydCQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmRhdGVTY2hlZHVsZVJhbmdlLnN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5JCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlU3RhcnQkLnBpcGUoXG4gICAgbWFwKChzdGFydCkgPT4gKHN0YXJ0ID8gZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnkoeyBzdGFydCB9KSA6IHVuZGVmaW5lZCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlRGF0ZUJsb2NrRHVyYXRpb25TcGFuJDogT2JzZXJ2YWJsZTxEYXRlQmxvY2tEdXJhdGlvblNwYW48RGF0ZUJsb2NrPltdPiA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHggPyBleHBhbmREYXRlU2NoZWR1bGVSYW5nZSh4KSA6IFtdKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVNlbGVjdGVkSW5kZXhlcyQ6IE9ic2VydmFibGU8U2V0PERhdGVCbG9ja0luZGV4Pj4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja0R1cmF0aW9uU3BhbiQucGlwZShcbiAgICBtYXAoKHgpID0+IG5ldyBTZXQoeC5tYXAoKHkpID0+IHkuaSkpKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVNlbGVjdGVkRGF0ZXMkOiBPYnNlcnZhYmxlPFNldDxJU084NjAxRGF5U3RyaW5nPj4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoZGF0ZUZhY3RvcnkpID0+IHtcbiAgICAgIHJldHVybiBkYXRlRmFjdG9yeSA/IHRoaXMuc2VsZWN0aW9uVmFsdWVTZWxlY3RlZEluZGV4ZXMkLnBpcGUobWFwKCh4KSA9PiBtYXBWYWx1ZXNUb1NldCh4LCAoeSkgPT4gZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nKGRhdGVGYWN0b3J5KHkpKSkpKSA6IG9mKG5ldyBTZXQ8SVNPODYwMURheVN0cmluZz4oKSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuZWZmZWN0aXZlVGltZXpvbmVOb3JtYWwkKSxcbiAgICBtYXAoKFt4LCB0aW1lem9uZU5vcm1hbF0pID0+IHtcbiAgICAgIGlmICh4ICYmIHRpbWV6b25lTm9ybWFsKSB7XG4gICAgICAgIHggPSB7XG4gICAgICAgICAgZGF0ZVNjaGVkdWxlUmFuZ2U6IHtcbiAgICAgICAgICAgIC4uLnguZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgICAgICAgICBzdGFydDogdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZSh4LmRhdGVTY2hlZHVsZVJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICAgIGVuZDogdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZSh4LmRhdGVTY2hlZHVsZVJhbmdlLmVuZClcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lRGF0ZUJsb2NrRHVyYXRpb25TcGFuJDogT2JzZXJ2YWJsZTxEYXRlQmxvY2tEdXJhdGlvblNwYW48RGF0ZUJsb2NrPltdPiA9IHRoaXMuc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBleHBhbmREYXRlU2NoZWR1bGVSYW5nZSh4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBuZXh0VG9nZ2xlU2VsZWN0aW9uJDogT2JzZXJ2YWJsZTxNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+PiA9IHRoaXMuaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlKSA9PiB7XG4gICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4+O1xuXG4gICAgICBpZiAoaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlKSB7XG4gICAgICAgIG9icyA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKG1hcCgoeCkgPT4gKHggPyAnbm9uZScgOiAnYWxsJykpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKG1hcCgoeCkgPT4gKHggPyAnbm9uZScgOiB1bmRlZmluZWQpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnM7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmRhdGVTY2hlZHVsZVJhbmdlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlU2NoZWR1bGVSYW5nZVZhbHVlJCA9IHRoaXMuY3VycmVudERhdGVTY2hlZHVsZVJhbmdlVmFsdWUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGNlbGxDb250ZW50RmFjdG9yeSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jZWxsQ29udGVudEZhY3RvcnkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0N1c3RvbWl6ZWQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgudG9nZ2xlZEluZGV4ZXMuc2l6ZSA+IDApLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1ZpZXdSZWFkb25seSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc1ZpZXdSZWFkb25seSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcmVhZG9ubHkgc2V0TWluTWF4RGF0ZVJhbmdlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aE1pbk1heERhdGVSYW5nZSk7XG4gIHJlYWRvbmx5IHNldERlZmF1bHRXZWVrID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aE1pbk1heERhdGVSYW5nZSk7XG4gIHJlYWRvbmx5IHNldEZpbHRlciA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIpO1xuICByZWFkb25seSBzZXRFeGNsdXNpb25zID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aEV4Y2x1c2lvbnMpO1xuICByZWFkb25seSBzZXRDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcik7XG4gIHJlYWRvbmx5IGNsZWFyRmlsdGVyID0gdGhpcy51cGRhdGVyKChzdGF0ZSkgPT4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCB1bmRlZmluZWQpKTtcblxuICByZWFkb25seSBzZXRUaW1lem9uZSA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhUaW1lem9uZVZhbHVlKTtcbiAgcmVhZG9ubHkgc2V0SW5wdXRSYW5nZSA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkUmFuZ2UpO1xuXG4gIC8vIE5PVEU6IFNlbGVjdGVkIGRhdGVzIGFyZSBOT1Qgc2VsZWN0ZWQgaW5kZXhlcy4gVGhleSBhcmUgdGhlIGludGVybmFsIHNlbGVjdGVkIGRhdGVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNlbGVjdGlvbi5cbiAgcmVhZG9ubHkgdG9nZ2xlU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHRvZ2dsZTogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHRvZ2dsZSB9KSk7XG4gIHJlYWRvbmx5IGFkZFNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBhZGQ6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBhZGQgfSkpO1xuICByZWFkb25seSByZW1vdmVTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgcmVtb3ZlOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgcmVtb3ZlIH0pKTtcbiAgcmVhZG9ubHkgc2V0U2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHNldDogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNldCB9KSk7XG5cbiAgLy8gTk9URTogU2VsZWN0ZWQgaW5kZXhlcyBhcmUgdGhlIHR5cGljYWwvZXhwZWN0ZWQgaW5kZXhlcyB0aGF0IGFyZSBzZWxlY3RlZCBvciBub3QuXG4gIHJlYWRvbmx5IHNldFNlbGVjdGVkSW5kZXhlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHNldDogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNldCwgaW52ZXJ0U2V0QmVoYXZpb3I6IHRydWUgfSkpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdEFsbERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2VsZWN0QWxsOiBBbGxPck5vbmVTZWxlY3Rpb24gPSAnYWxsJykgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNlbGVjdEFsbCB9KSk7XG4gIHJlYWRvbmx5IHNldEluaXRpYWxTZWxlY3Rpb25TdGF0ZSA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUpO1xuXG4gIHJlYWRvbmx5IHNldERlZmF1bHRTY2hlZHVsZURheXMgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERlZmF1bHRTY2hlZHVsZURheXMpO1xuICByZWFkb25seSBzZXRTY2hlZHVsZURheXMgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyk7XG4gIHJlYWRvbmx5IHNldEFsbG93QWxsU2NoZWR1bGVEYXlzID0gdGhpcy51cGRhdGVyKChzdGF0ZSkgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZSwgW0RhdGVTY2hlZHVsZURheUNvZGUuV0VFS0RBWSwgRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLRU5EXSkpO1xuXG4gIHJlYWRvbmx5IHNldERhdGVTY2hlZHVsZVJhbmdlVmFsdWUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB2YWx1ZTogTWF5YmU8RGF0ZVNjaGVkdWxlUmFuZ2U+KSA9PiB1cGRhdGVTdGF0ZVdpdGhEYXRlU2NoZWR1bGVSYW5nZVZhbHVlKHN0YXRlLCB2YWx1ZSkpO1xuICByZWFkb25seSBzZXRDZWxsQ29udGVudEZhY3RvcnkgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjZWxsQ29udGVudEZhY3Rvcnk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnkpID0+ICh7IC4uLnN0YXRlLCBjZWxsQ29udGVudEZhY3RvcnkgfSkpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IHRoZSBwYXJlbnQgdmlldyB0byBwcm9wb2dhdGUgYSByZWFkb25seSBzdGF0ZS5cbiAgICpcbiAgICogU2hvdWxkIHR5cGljYWxseSBub3QgYmUgdXNlZCBieSB0aGUgdXNlciBkaXJlY3RseSB3aXRoIHRoZSBpbnRlbnRpb24gb2YgdGhlIHBhcmVudCBzeW5jaHJvbml6aW5nIHRvIHRoaXMgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXRWaWV3UmVhZG9ubHlTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGlzVmlld1JlYWRvbmx5OiBib29sZWFuKSA9PiAoeyAuLi5zdGF0ZSwgaXNWaWV3UmVhZG9ubHkgfSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoSW5pdGlhbFNlbGVjdGlvblN0YXRlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZTogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgdG9nZ2xlZEluZGV4ZXMgfSA9IHN0YXRlO1xuXG4gIGlmICh0b2dnbGVkSW5kZXhlcy5zaXplID09PSAwICYmIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSA9PT0gJ2FsbCcpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBzZWxlY3RBbGw6IGluaXRpYWxTZWxlY3Rpb25TdGF0ZSB9KTtcbiAgfVxuXG4gIHJldHVybiB7IC4uLnN0YXRlLCBpbml0aWFsU2VsZWN0aW9uU3RhdGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKGN1cnJlbnRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogTWF5YmU8Ym9vbGVhbj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBsZXQgc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSA9IHsgLi4uY3VycmVudFN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciB9O1xuXG4gIGlmIChCb29sZWFuKGN1cnJlbnRTdGF0ZS5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcikgIT09IEJvb2xlYW4oY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHt9KTsgLy8gcmVjYWxjdWxhdGUgaWYgY2hhbmdlIG9jY3VycyBhcyBpdCB3aWxsIGFmZmVjdCB0aGUgb3V0cHV0IHZhbHVlXG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhFeGNsdXNpb25zKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGlucHV0RXhjbHVzaW9uczogTWF5YmU8QXJyYXlPclZhbHVlPERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlPj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBsZXQgY29tcHV0ZWRFeGNsdXNpb25zOiBNYXliZTxEYXRlQmxvY2tJbmRleFtdPjtcblxuICBpZiAoaW5wdXRFeGNsdXNpb25zKSB7XG4gICAgY29uc3QgeyBpbmRleEZhY3RvcnkgfSA9IHN0YXRlO1xuICAgIGNvbnN0IGluZGV4QXJyYXlGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhBcnJheUZhY3RvcnkoaW5kZXhGYWN0b3J5KTtcbiAgICBjb21wdXRlZEV4Y2x1c2lvbnMgPSBpbmRleEFycmF5RmFjdG9yeShpbnB1dEV4Y2x1c2lvbnMpO1xuICB9XG5cbiAgc3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dEV4Y2x1c2lvbnMsIGNvbXB1dGVkRXhjbHVzaW9ucyB9O1xuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCBzdGF0ZS5maWx0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG1pbk1heERhdGVSYW5nZTogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIHN0YXRlID0geyAuLi5zdGF0ZSB9O1xuXG4gIGlmIChtaW5NYXhEYXRlUmFuZ2UgIT0gbnVsbCAmJiAhaXNJbmZpbml0ZURhdGVSYW5nZShtaW5NYXhEYXRlUmFuZ2UpKSB7XG4gICAgc3RhdGUubWluTWF4RGF0ZVJhbmdlID0ge1xuICAgICAgc3RhcnQ6IG1pbk1heERhdGVSYW5nZS5zdGFydCAhPSBudWxsID8gc3RhcnRPZkRheShtaW5NYXhEYXRlUmFuZ2Uuc3RhcnQpIDogdW5kZWZpbmVkLFxuICAgICAgZW5kOiBtaW5NYXhEYXRlUmFuZ2UuZW5kICE9IG51bGwgPyBlbmRPZkRheShtaW5NYXhEYXRlUmFuZ2UuZW5kKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIHN0YXRlLm1pbk1heERhdGVSYW5nZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHN0YXRlLmZpbHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRGaWx0ZXI6IE1heWJlPERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBjb21wdXRlZEV4Y2x1c2lvbnM6IGV4Y2x1c2lvbnMsIG1pbk1heERhdGVSYW5nZSB9ID0gc3RhdGU7XG5cbiAgbGV0IGlzRW5hYmxlZEZpbHRlckRheTogTWF5YmU8RGVjaXNpb25GdW5jdGlvbjxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+ID0gKCkgPT4gdHJ1ZTtcbiAgbGV0IGZpbHRlcjogTWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4gPSBudWxsO1xuXG4gIC8vIGNyZWF0ZSB0aGUgZmlsdGVyIHVzaW5nIGlucHV0RmlsdGVyLCBleGNsdXNpb25zLCBhbmQgbWluTWF4RGF0ZVJhbmdlXG4gIGlmIChpbnB1dEZpbHRlciB8fCBleGNsdXNpb25zPy5sZW5ndGggfHwgbWluTWF4RGF0ZVJhbmdlKSB7XG4gICAgbGV0IGVuYWJsZWRGaWx0ZXI6IERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc7XG5cbiAgICBpZiAoaW5wdXRGaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnKGlucHV0RmlsdGVyKTsgLy8gY29weSBmaWx0ZXJcblxuICAgICAgaWYgKGV4Y2x1c2lvbnM/Lmxlbmd0aCkge1xuICAgICAgICBlbmFibGVkRmlsdGVyID0ge1xuICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICBleDogdW5pcXVlKG1lcmdlQXJyYXlzKFtmaWx0ZXIuZXgsIGV4Y2x1c2lvbnNdKSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuYWJsZWRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuYWJsZWRGaWx0ZXIgPSB7XG4gICAgICAgIHc6ICc4OScsXG4gICAgICAgIGV4OiBleGNsdXNpb25zIGFzIG51bWJlcltdXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtaW5NYXhEYXRlUmFuZ2UpIHtcbiAgICAgIGVuYWJsZWRGaWx0ZXIubWluTWF4RGF0ZVJhbmdlID0gbWluTWF4RGF0ZVJhbmdlO1xuICAgICAgZW5hYmxlZEZpbHRlci5zZXRTdGFydEFzTWluRGF0ZSA9IGZpbHRlcj8uc3RhcnQgPyB0cnVlIDogZmFsc2U7IC8vIElmIGEgc3RhcnQgZGF0ZSBpcyBzZXQsIHRoZW4gaXQgYmVjb21lcyB0aGUgZmxvb3IuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGlucHV0IGZpbHRlciBoYXMgYSBzdGFydCBkYXRlLCB1c2UgdGhhdCBhcyB0aGUgcmVsYXRpdmUgc3RhcnQgdG8gZW5zdXJlIGluZGV4ZXMgYXJlIGNvbXBhcmVkIHRoZSBzYW1lLFxuICAgICAqIG90aGVyd2lzZSB1c2UgdGhlIHN0YXRlJ3Mgc3RhcnQuIFRoaXMgaXMgaW1wb3J0YW50IGZvciB0aGUgaW5kZXggY2FsY3VsYXRpb25zLlxuICAgICAqL1xuICAgIGVuYWJsZWRGaWx0ZXIuc3RhcnQgPSBpbnB1dEZpbHRlcj8uc3RhcnQgPz8gc3RhdGUuc3RhcnQ7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGZpbHRlclxuICAgIGlzRW5hYmxlZEZpbHRlckRheSA9IGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIoZW5hYmxlZEZpbHRlcik7XG4gIH1cblxuICBzdGF0ZSA9IHsgLi4uc3RhdGUsIGZpbHRlciwgaXNFbmFibGVkRmlsdGVyRGF5IH07XG5cbiAgLy8gRm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZSwgdXNlIHRoZSBmaWx0ZXIncyBzdGFydCBkYXRlIGFzIHRoZSByZWxhdGl2ZSBzdGFydCBpZiBhcHBsaWNhYmxlLlxuICBpZiAoZmlsdGVyICYmIGZpbHRlci5zdGFydCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gZmlsdGVyLnN0YXJ0O1xuICAgIHN0YXRlLnN0YXJ0ID0gc3RhcnQ7XG4gICAgc3RhdGUuaW5kZXhGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KHsgc3RhcnQgfSk7XG4gICAgc3RhdGUuaW5kZXhEYXlPZldlZWsgPSBkYXRlQmxvY2tEYXlPZldlZWtGYWN0b3J5KHN0YXJ0KTtcbiAgfVxuXG4gIC8vIGF0dGVtcHQgdG8gcmUtYXBwbHkgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHN0YXRlIG9uY2UgZmlsdGVyIGlzIGFwcGxpZWRcbiAgaWYgKHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoSW5pdGlhbFNlbGVjdGlvblN0YXRlKHN0YXRlLCBzdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUpO1xuICB9XG5cbiAgLy8gcmUtY2FsY3VsYXRlIHRoZSBzZWxlY3Rpb24gZ2l2ZW4gdGhlIGZpbHRlclxuICBjb25zdCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0gPSBzdGF0ZTtcblxuICBpZiAoaW5wdXRTdGFydCAmJiBpbnB1dEVuZCkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKHN0YXRlLCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoVGltZXpvbmVWYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCB0aW1lem9uZTogTWF5YmU8VGltZXpvbmVTdHJpbmc+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBjdXJyZW50U2VsZWN0aW9uVmFsdWUgfSA9IHN0YXRlO1xuXG4gIGNvbnN0IHRpbWV6b25lTm9ybWFsID0gdGltZXpvbmUgPyBkYXRlVGltZXpvbmVVdGNOb3JtYWwoeyB0aW1lem9uZSB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAodGltZXpvbmVOb3JtYWwgJiYgY3VycmVudFNlbGVjdGlvblZhbHVlKSB7XG4gICAgLy8gdXBkYXRlIHRoZSBzZWxlY3Rpb24gdmFsdWUgdG8gcmVmbGVjdCB0aGUgdGltZXpvbmUgY2hhbmdlcy5cblxuICAgIGNvbnN0IHsgZGF0ZVNjaGVkdWxlUmFuZ2U6IGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZSB9ID0gY3VycmVudFNlbGVjdGlvblZhbHVlO1xuICAgIGNvbnN0IHN0YXJ0ID0gdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZShjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2Uuc3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IHRpbWV6b25lTm9ybWFsLnRhcmdldERhdGVUb1N5c3RlbURhdGUoY3VycmVudERhdGVTY2hlZHVsZVJhbmdlLmVuZCk7XG5cbiAgICBjb25zdCBuZXdSYW5nZTogRGF0ZVNjaGVkdWxlUmFuZ2UgPSB7XG4gICAgICAuLi5jdXJyZW50U2VsZWN0aW9uVmFsdWUuZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZFxuICAgIH07XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSh7IC4uLnN0YXRlLCB0aW1lem9uZSwgdGltZXpvbmVOb3JtYWwgfSwgbmV3UmFuZ2UpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7IC4uLnN0YXRlLCB0aW1lem9uZSwgdGltZXpvbmVOb3JtYWwgfTsgLy8gbm8gY2hhbmdlIGluIHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aERhdGVTY2hlZHVsZVJhbmdlVmFsdWUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY2hhbmdlOiBNYXliZTxEYXRlU2NoZWR1bGVSYW5nZT4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHRpbWV6b25lTm9ybWFsLCBjdXJyZW50U2VsZWN0aW9uVmFsdWUgfSA9IHN0YXRlO1xuICBjb25zdCBjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2UgPSBjdXJyZW50U2VsZWN0aW9uVmFsdWU/LmRhdGVTY2hlZHVsZVJhbmdlOyAvLyBjdXJyZW50IHJhbmdlIGlzIGFsd2F5cyBpbiBzeXN0ZW0gdGltZVxuXG4gIGlmICghY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlcihzdGF0ZSkgJiYgdGltZXpvbmVOb3JtYWwpIHtcbiAgICAvLyBXaGVuIHVzaW5nIHRpbWV6b25lcywgYWx3YXlzIHJldHVybiBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZGF5LiBJbnB1dHMgYXJlIGNvbnZlcnRlZCB0byB0aGUgc3lzdGVtIHRpbWUgYW5kIHVzZWQgYXMgdGhlIHN0YXJ0IG9mIHRoZSBkYXkuXG4gICAgLy8gT3V0cHV0cyByZW1haW4gYWNjdXJhdGUuXG5cbiAgICBpZiAoY2hhbmdlKSB7XG4gICAgICBjaGFuZ2UgPSB7XG4gICAgICAgIC4uLmNoYW5nZSxcbiAgICAgICAgc3RhcnQ6IHN0YXJ0T2ZEYXkodGltZXpvbmVOb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShjaGFuZ2Uuc3RhcnQpKSxcbiAgICAgICAgZW5kOiBzdGFydE9mRGF5KHRpbWV6b25lTm9ybWFsLnN5c3RlbURhdGVUb1RhcmdldERhdGUoY2hhbmdlLmVuZCkpXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzU2FtZVZhbHVlID0gaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UoY3VycmVudERhdGVTY2hlZHVsZVJhbmdlLCBjaGFuZ2UpO1xuXG4gIGlmIChpc1NhbWVWYWx1ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbmdlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydDogY2hhbmdlLnN0YXJ0LCBpbnB1dEVuZDogY2hhbmdlLmVuZCwgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoY2hhbmdlLmV4KSB9O1xuICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKSwgZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXMoY2hhbmdlLncgfHwgJzg5JykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9TZWxlY3Rpb25DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGUpOyAvLyBjbGVhciBzZWxlY3Rpb24sIHJldGFpbiBkaXNhYmxlZCBkYXlzXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGVmYXVsdFNjaGVkdWxlRGF5cyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPEl0ZXJhYmxlPERhdGVTY2hlZHVsZURheUNvZGU+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgZGVmYXVsdFNjaGVkdWxlRGF5czogY3VycmVudERlZmF1bHRTY2hlZHVsZURheXMgfSA9IHN0YXRlO1xuICBjb25zdCBkZWZhdWx0U2NoZWR1bGVEYXlzID0gbmV3IFNldChjaGFuZ2UgPz8gZnVsbFdlZWtEYXlTY2hlZHVsZURheUNvZGVzKCkpO1xuXG4gIGlmIChkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KGRlZmF1bHRTY2hlZHVsZURheXMsIGN1cnJlbnREZWZhdWx0U2NoZWR1bGVEYXlzKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gbm8gY2hhbmdlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZSwgeyAuLi5zdGF0ZSwgZGVmYXVsdFNjaGVkdWxlRGF5cyB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPEl0ZXJhYmxlPERhdGVTY2hlZHVsZURheUNvZGU+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgc2NoZWR1bGVEYXlzOiBjdXJyZW50U2NoZWR1bGVEYXlzIH0gPSBzdGF0ZTtcbiAgY29uc3Qgc2NoZWR1bGVEYXlzID0gbmV3IFNldChjaGFuZ2UgPz8gW10pO1xuXG4gIGxldCBuZXdTY2hlZHVsZURheXM6IFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPiB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKGN1cnJlbnRTY2hlZHVsZURheXMgIT0gbnVsbCAmJiBjaGFuZ2UgIT0gbnVsbCkge1xuICAgIGlmIChkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KHNjaGVkdWxlRGF5cywgY3VycmVudFNjaGVkdWxlRGF5cykpIHtcbiAgICAgIG5ld1NjaGVkdWxlRGF5cyA9IHVuZGVmaW5lZDsgLy9ubyBjaGFuZ2VcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2NoZWR1bGVEYXlzID0gc2NoZWR1bGVEYXlzO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjdXJyZW50U2NoZWR1bGVEYXlzICE9PSBjaGFuZ2UpIHtcbiAgICBuZXdTY2hlZHVsZURheXMgPSBjaGFuZ2UgPyBzY2hlZHVsZURheXMgOiBudWxsOyAvLyBzZXQgdGhlIG5ldyBvbmUsIG9yIGNsZWFyIGl0XG4gIH1cblxuICBpZiAobmV3U2NoZWR1bGVEYXlzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZSwgeyAuLi5zdGF0ZSwgc2NoZWR1bGVEYXlzOiBuZXdTY2hlZHVsZURheXMgPz8gdW5kZWZpbmVkIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZVVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMocHJldmlvdXNTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBuZXh0U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHByZXZpb3VzU2NoZWR1bGVEYXlzID0gcHJldmlvdXNTdGF0ZS5lZmZlY3RpdmVTY2hlZHVsZURheXM7XG4gIGNvbnN0IG5leHRTY2hlZHVsZURheXMgPSBuZXh0U3RhdGUuc2NoZWR1bGVEYXlzID8/IG5leHRTdGF0ZS5kZWZhdWx0U2NoZWR1bGVEYXlzO1xuXG4gIGlmIChkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KG5leHRTY2hlZHVsZURheXMsIHByZXZpb3VzU2NoZWR1bGVEYXlzKSkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7IC8vIHRoZSBkZWZhdWx0IG9yIGlucHV0IHNjaGVkdWxlIGNoYW5nZWQgYnV0IHRoZSBzY2hlZHVsZSBpcyBzdGlsbCB0aGUgc2FtZSwgc28gbm8gbmVlZCBmb3IgYW4gdXBkYXRlLlxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyA9IG5ldyBTZXQoc2ltcGxpZnlEYXRlU2NoZWR1bGVEYXlDb2RlcyhuZXh0U2NoZWR1bGVEYXlzKSk7XG4gICAgY29uc3QgYWxsb3dlZERheXNPZldlZWsgPSBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2Rlc1RvRGF5T2ZXZWVrU2V0KG5leHRTY2hlZHVsZURheXMpO1xuXG4gICAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIC8vIHVwZGF0ZSB0aGUgZWZmZWN0aXZlIHNjaGVkdWxlIGRheXMgYW5kIGFsbG93ZWQgZGF5cyBvZiB3ZWVrXG4gICAgICBlZmZlY3RpdmVTY2hlZHVsZURheXMsXG4gICAgICBhbGxvd2VkRGF5c09mV2Vla1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlRGF0ZXNDaGFuZ2Uge1xuICByZXNldD86IHRydWU7XG4gIHRvZ2dsZT86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIGFkZD86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHJlbW92ZT86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHNldD86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD47XG4gIHNlbGVjdEFsbD86IEFsbE9yTm9uZVNlbGVjdGlvbjtcbiAgLyoqXG4gICAqIEludmVydHMgdGhlIHNldCBkYXRlIGNoYW5naW5nIGJlaGF2aW9yIHNvIHRoYXQgdGhlIHNldCBpbnB1dCBpcyB0cmVhdGVkIGFzIGl0ZW1zIHRoYXQgc2hvdWxkIGJlIHJldGFpbmVkIGluc3RlYWQgb2YgZXhjbHVkZWQuXG4gICAqXG4gICAqIElnbm9yZWQgd2hlbiBzZXQgaXMgbm90IHVzZWQuIElnbm9yZWQgZm9yIHNlbGVjdEFsbC5cbiAgICovXG4gIGludmVydFNldEJlaGF2aW9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZURhdGVzQ2hhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhGYWN0b3J5LCBpbmRleERheU9mV2VlaywgaW5wdXRTdGFydDogY3VycmVudElucHV0U3RhcnQsIGlucHV0RW5kOiBjdXJyZW50SW5wdXRFbmQsIG1pbk1heERhdGVSYW5nZSwgZmlsdGVyIH0gPSBzdGF0ZTtcbiAgY29uc3QgeyBzdGFydDogbWluRGF0ZSwgZW5kOiBtYXhEYXRlIH0gPSBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKHN0YXRlKTtcbiAgbGV0IGlucHV0U3RhcnQgPSBjdXJyZW50SW5wdXRTdGFydDtcbiAgbGV0IGlucHV0RW5kID0gY3VycmVudElucHV0RW5kO1xuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgc2V0IG9mIGluZGV4ZXMgdGhhdCBhcmUgaW50ZXJuYWxseSBcInNlbGVjdGVkXCIgc28gdGhhdCB0aGV5IGFyZSBleGNsdWRlZCBmcm9tIHRoZSBpbnB1dFN0YXJ0L2lucHV0RW5kIGRhdGUgcmFuZ2UuXG4gICAqXG4gICAqIERvIG5vdCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgYWN0dWFsIGluZGV4ZXMgdGhhdCBhcmUgc2VsZWN0ZWQuXG4gICAqL1xuICBsZXQgdG9nZ2xlZEluZGV4ZXM6IFNldDxEYXRlQmxvY2tJbmRleD47XG5cbiAgZnVuY3Rpb24gYXNJbmRleGVzKGluZGV4ZXM6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pOiBEYXRlQmxvY2tJbmRleFtdIHtcbiAgICByZXR1cm4gaXRlcmFibGVUb0FycmF5KGluZGV4ZXMpLm1hcChpbmRleEZhY3RvcnkpO1xuICB9XG5cbiAgaWYgKGNoYW5nZS5yZXNldCB8fCBjaGFuZ2Uuc2VsZWN0QWxsICE9IG51bGwgfHwgY2hhbmdlLnNldCAhPSBudWxsKSB7XG4gICAgbGV0IHNldDogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSBjaGFuZ2Uuc2V0ID8/IFtdO1xuICAgIGNvbnN0IHNlbGVjdEFsbDogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPiA9IGNoYW5nZS5yZXNldCA9PT0gdHJ1ZSA/IHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSA6IGNoYW5nZS5zZWxlY3RBbGw7XG5cbiAgICBzd2l0Y2ggKHNlbGVjdEFsbCkge1xuICAgICAgY2FzZSAnYWxsJzpcbiAgICAgICAgaWYgKG1pbkRhdGUgIT0gbnVsbCAmJiBtYXhEYXRlICE9IG51bGwpIHtcbiAgICAgICAgICBpbnB1dFN0YXJ0ID0gbWluRGF0ZTtcbiAgICAgICAgICBpbnB1dEVuZCA9IG1heERhdGU7XG4gICAgICAgICAgc2V0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgaW5wdXRTdGFydCA9IG51bGw7XG4gICAgICAgIGlucHV0RW5kID0gbnVsbDtcbiAgICAgICAgc2V0ID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChhc0luZGV4ZXMoc2V0KSk7XG5cbiAgICBpZiAoY2hhbmdlLmludmVydFNldEJlaGF2aW9yICYmIG1pbkRhdGUgJiYgbWF4RGF0ZSAmJiAhc2VsZWN0QWxsKSB7XG4gICAgICBjb25zdCBtaW5JbmRleCA9IGluZGV4RmFjdG9yeShtaW5EYXRlKTtcbiAgICAgIGNvbnN0IG1heEluZGV4ID0gaW5kZXhGYWN0b3J5KG1heERhdGUpO1xuXG4gICAgICBpbnB1dFN0YXJ0ID0gbWluRGF0ZTtcbiAgICAgIGlucHV0RW5kID0gbWF4RGF0ZTtcbiAgICAgIHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChyYW5nZShtaW5JbmRleCwgbWF4SW5kZXggKyAxKS5maWx0ZXIoKHgpID0+ICF0b2dnbGVkSW5kZXhlcy5oYXMoeCkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KHN0YXRlLnRvZ2dsZWRJbmRleGVzKTtcblxuICAgIGlmIChjaGFuZ2UudG9nZ2xlKSB7XG4gICAgICBjb25zdCBhbGxvd2VkVG9Ub2dnbGUgPSBhc0luZGV4ZXMoY2hhbmdlLnRvZ2dsZSkuZmlsdGVyKChpKSA9PiBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoaSkpKTtcbiAgICAgIHRvZ2dsZUluU2V0KHRvZ2dsZWRJbmRleGVzLCBhbGxvd2VkVG9Ub2dnbGUpO1xuICAgIH1cblxuICAgIGxldCBhZGRUb0V4Y2x1c2lvbjogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj47XG4gICAgbGV0IHJlbW92ZUZyb21FeGNsdXNpb246IE1heWJlPEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+O1xuXG4gICAgaWYgKGNoYW5nZS5hZGQpIHtcbiAgICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IpIHtcbiAgICAgICAgYWRkVG9FeGNsdXNpb24gPSBjaGFuZ2UuYWRkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlRnJvbUV4Y2x1c2lvbiA9IGNoYW5nZS5hZGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5yZW1vdmUpIHtcbiAgICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IpIHtcbiAgICAgICAgcmVtb3ZlRnJvbUV4Y2x1c2lvbiA9IGNoYW5nZS5yZW1vdmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRUb0V4Y2x1c2lvbiA9IGNoYW5nZS5yZW1vdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZFRvRXhjbHVzaW9uKSB7XG4gICAgICByZW1vdmVGcm9tU2V0KHRvZ2dsZWRJbmRleGVzLCBhc0luZGV4ZXMoYWRkVG9FeGNsdXNpb24pKTtcbiAgICB9XG5cbiAgICBpZiAocmVtb3ZlRnJvbUV4Y2x1c2lvbikge1xuICAgICAgYWRkVG9TZXQodG9nZ2xlZEluZGV4ZXMsIGFzSW5kZXhlcyhyZW1vdmVGcm9tRXhjbHVzaW9uKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIHRvZ2dsZWRJbmRleGVzIH07XG4gIG5leHRTdGF0ZS5pc0VuYWJsZWREYXkgPSBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuXG4gIC8vIFJlY2FsY3VsYXRlIHRoZSByYW5nZSBhbmQgc2ltcGxpZmllZCB0byBleGNsdXNpb25zXG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24obmV4dFN0YXRlKTtcblxuICBpZiAocmFuZ2VBbmRFeGNsdXNpb24pIHtcbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoeyAuLi5uZXh0U3RhdGUsIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KHJhbmdlQW5kRXhjbHVzaW9uLmV4Y2x1ZGVkKSwgaW5wdXRTdGFydDogcmFuZ2VBbmRFeGNsdXNpb24uc3RhcnQsIGlucHV0RW5kOiByYW5nZUFuZEV4Y2x1c2lvbi5lbmQgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gc2VsZWN0ZWQgZGF5c1xuICAgIHJldHVybiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHsgLi4uc3RhdGUsIHRvZ2dsZWRJbmRleGVzOiBuZXcgU2V0KCksIGlucHV0U3RhcnQ6IG51bGwsIGlucHV0RW5kOiBudWxsIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBpbnB1dFN0YXJ0OiBjdXJyZW50SW5wdXRTdGFydCwgaW5wdXRFbmQ6IGN1cnJlbnRJbnB1dEVuZCwgaW5kZXhGYWN0b3J5LCBtaW5NYXhEYXRlUmFuZ2UgfSA9IHN0YXRlO1xuICBjb25zdCB7IHN0YXJ0OiBtaW5EYXRlLCBlbmQ6IG1heERhdGUgfTogUGFydGlhbDxEYXRlUmFuZ2U+ID0gbWluTWF4RGF0ZVJhbmdlID8/IHt9O1xuXG4gIGNvbnN0IGlucHV0U3RhcnQ6IERhdGUgPSBzdGFydE9mRGF5KGNoYW5nZS5pbnB1dFN0YXJ0KTtcbiAgY29uc3QgaW5wdXRFbmQ6IERhdGUgPSBlbmRPZkRheShjaGFuZ2UuaW5wdXRFbmQpO1xuXG4gIGNvbnN0IGlzVmFsaWRSYW5nZSA9IG1pbkRhdGUgIT0gbnVsbCB8fCBtYXhEYXRlICE9IG51bGwgPyBpc0RhdGVJbkRhdGVSYW5nZUZ1bmN0aW9uKHsgc3RhcnQ6IG1pbkRhdGUgPz8gdW5kZWZpbmVkLCBlbmQ6IG1heERhdGUgPz8gdW5kZWZpbmVkIH0pIDogKCkgPT4gdHJ1ZTtcblxuICBpZiAoIWlzVmFsaWRSYW5nZShpbnB1dFN0YXJ0KSB8fCAhaXNWYWxpZFJhbmdlKGlucHV0RW5kKSB8fCAoaXNTYW1lRGF0ZURheShpbnB1dFN0YXJ0LCBjdXJyZW50SW5wdXRTdGFydCkgJiYgaXNTYW1lRGF0ZURheShpbnB1dEVuZCwgY3VycmVudElucHV0RW5kKSkpIHtcbiAgICByZXR1cm4gc3RhdGU7IC8vIGlmIG5vIGNoYW5nZSwgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxuICB9XG5cbiAgLy8gcmV0YWluIGFsbCBpbmRleGVzIHRoYXQgYXJlIHdpdGhpbiB0aGUgbmV3IHJhbmdlXG4gIGNvbnN0IG1pbkluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0U3RhcnQpO1xuICBjb25zdCBtYXhJbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dEVuZCkgKyAxO1xuXG4gIGNvbnN0IGN1cnJlbnRJbmRleGVzOiBEYXRlQmxvY2tJbmRleFtdID0gQXJyYXkuZnJvbShzdGF0ZS50b2dnbGVkSW5kZXhlcyk7XG4gIGNvbnN0IGlzSW5DdXJyZW50UmFuZ2UgPSBpc0luZGV4TnVtYmVySW5JbmRleFJhbmdlRnVuY3Rpb24oeyBtaW5JbmRleCwgbWF4SW5kZXggfSk7XG4gIGNvbnN0IGV4Y2x1ZGVkSW5kZXhlc0luTmV3UmFuZ2UgPSBjdXJyZW50SW5kZXhlcy5maWx0ZXIoaXNJbkN1cnJlbnRSYW5nZSk7XG4gIGNvbnN0IHRvZ2dsZWRJbmRleGVzID0gbmV3IFNldChleGNsdWRlZEluZGV4ZXNJbk5ld1JhbmdlKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCB0b2dnbGVkSW5kZXhlcywgaW5wdXRTdGFydCwgaW5wdXRFbmQgfTtcbiAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIG5leHRTdGF0ZS5pc0VuYWJsZWREYXkgPSBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuICBuZXh0U3RhdGUuY3VycmVudFNlbGVjdGlvblZhbHVlID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uVmFsdWUobmV4dFN0YXRlKTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PiB7XG4gIGNvbnN0IHsgYWxsb3dlZERheXNPZldlZWssIGluZGV4RmFjdG9yeSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIGluZGV4RGF5T2ZXZWVrIH0gPSBzdGF0ZTtcbiAgbGV0IGlzSW5TdGFydEFuZEVuZFJhbmdlOiBJc0RhdGVXaXRoaW5EYXRlQmxvY2tSYW5nZUZ1bmN0aW9uO1xuXG4gIGlmIChpbnB1dFN0YXJ0ICYmIGlucHV0RW5kKSB7XG4gICAgaXNJblN0YXJ0QW5kRW5kUmFuZ2UgPSBpc0RhdGVXaXRoaW5EYXRlQmxvY2tSYW5nZUZ1bmN0aW9uKHsgc3RhcnQ6IHN0YXRlLnN0YXJ0LCByYW5nZTogeyBzdGFydDogaW5wdXRTdGFydCwgZW5kOiBpbnB1dEVuZCB9IH0pO1xuICB9IGVsc2Uge1xuICAgIGlzSW5TdGFydEFuZEVuZFJhbmdlID0gKCkgPT4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gKGlucHV0OiBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0KTtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBpbmRleERheU9mV2VlayhpbmRleCk7XG5cbiAgICBjb25zdCBpc0luU2VsZWN0ZWRSYW5nZSA9IGlzSW5TdGFydEFuZEVuZFJhbmdlKGluZGV4KTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gc3RhdGUudG9nZ2xlZEluZGV4ZXMuaGFzKGluZGV4KTtcbiAgICBjb25zdCBpc0FsbG93ZWREYXlPZldlZWsgPSBhbGxvd2VkRGF5c09mV2Vlay5oYXMoZGF5T2ZXZWVrKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGlzQWxsb3dlZERheU9mV2VlayAmJiAoKGlzSW5TZWxlY3RlZFJhbmdlICYmICFpc1NlbGVjdGVkKSB8fCAoaXNTZWxlY3RlZCAmJiAhaXNJblNlbGVjdGVkUmFuZ2UpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uVmFsdWUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZT4ge1xuICBjb25zdCB7IGluZGV4RmFjdG9yeSwgYWxsb3dlZERheXNPZldlZWssIGVmZmVjdGl2ZVNjaGVkdWxlRGF5cywgaW5kZXhEYXlPZldlZWssIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyLCBmaWx0ZXIgfSA9IHN0YXRlO1xuICBjb25zdCByYW5nZUFuZEV4Y2x1c2lvbiA9IGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uKHN0YXRlKTtcblxuICBpZiAocmFuZ2VBbmRFeGNsdXNpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBzdGFydDogcmFuZ2VTdGFydCwgZW5kOiByYW5nZUVuZCwgZXhjbHVkZWQ6IGFsbEV4Y2x1ZGVkLCBkYXRlQmxvY2tSYW5nZSB9ID0gcmFuZ2VBbmRFeGNsdXNpb247XG4gIGxldCBmaWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlOiBEYXRlQmxvY2tJbmRleFtdID0gW107XG4gIGxldCBpbmRleE9mZnNldCA9IGRhdGVCbG9ja1JhbmdlLmk7XG5cbiAgbGV0IHN0YXJ0ID0gcmFuZ2VTdGFydDtcbiAgbGV0IGVuZCA9IHJhbmdlRW5kO1xuXG4gIC8vIElmIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyIGlzIHRydWUsIHRoZW4gd2UgbmVlZCB0byBvZmZzZXQgdGhlIHZhbHVlcyB0byBiZSByZWxhdGl2ZSB0byB0aGF0IHN0YXJ0LlxuICBpZiAoY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgJiYgZmlsdGVyPy5zdGFydCkge1xuICAgIHN0YXJ0ID0gZmlsdGVyLnN0YXJ0O1xuXG4gICAgaWYgKGZpbHRlcj8uZW5kKSB7XG4gICAgICBlbmQgPSBjb3B5SG91cnNBbmRNaW51dGVzRnJvbURhdGUoZW5kLCBmaWx0ZXIuZW5kKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0ID0gaW5kZXhGYWN0b3J5KHJhbmdlU3RhcnQpIC0gaW5kZXhGYWN0b3J5KHN0YXJ0KTtcbiAgICBmaWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlID0gcmFuZ2UoMCwgZmlsdGVyU3RhcnRJbmRleE9mZnNldCk7XG4gICAgaW5kZXhPZmZzZXQgPSBpbmRleE9mZnNldCAtIGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQ7XG4gIH1cblxuICBjb25zdCBleGNsdWRlZCA9IGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyXG4gICAgPyBhbGxFeGNsdWRlZC5maWx0ZXIoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaXNFeGNsdWRlZEluZGV4ID0gYWxsb3dlZERheXNPZldlZWsuaGFzKGluZGV4RGF5T2ZXZWVrKHgpKTsgLy8gPz8/XG4gICAgICAgIHJldHVybiBpc0V4Y2x1ZGVkSW5kZXg7XG4gICAgICB9KVxuICAgIDogYWxsRXhjbHVkZWQ7XG5cbiAgY29uc3Qgb2Zmc2V0RXhjbHVkZWQ6IERhdGVCbG9ja0luZGV4W10gPSBleGNsdWRlZC5tYXAoKHgpID0+IHggLSBpbmRleE9mZnNldCk7IC8vIHNldCB0byB0aGUgcHJvcGVyIG9mZnNldFxuXG4gIGNvbnN0IGV4ID0gWy4uLmZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2UsIC4uLm9mZnNldEV4Y2x1ZGVkXTtcblxuICBjb25zdCB3OiBEYXRlU2NoZWR1bGVFbmNvZGVkV2VlayA9IGRhdGVTY2hlZHVsZUVuY29kZWRXZWVrKGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyk7XG4gIGNvbnN0IGQ6IERhdGVCbG9ja0luZGV4W10gPSBbXTsgLy8gXCJpbmNsdWRlZFwiIGJsb2NrcyBhcmUgbmV2ZXIgdXNlZC9jYWxjdWxhdGVkLlxuXG4gIC8vIEFsd2F5cyBlbnN1cmUgdGhlIGVuZCBpcyBhZnRlciBvciBlcXVhbCB0byB0aGUgc3RhcnQuXG4gIGlmIChpc0JlZm9yZShlbmQsIHN0YXJ0KSkge1xuICAgIGVuZCA9IHN0YXJ0OyAvLyBlbmQgaXMgc3RhcnRcbiAgfVxuXG4gIGNvbnN0IGRhdGVTY2hlZHVsZVJhbmdlOiBEYXRlU2NoZWR1bGVSYW5nZSA9IHtcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgdyxcbiAgICBkLFxuICAgIGV4XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRlU2NoZWR1bGVSYW5nZSxcbiAgICBtaW5NYXhSYW5nZTogeyBzdGFydCwgZW5kIH1cbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24gZXh0ZW5kcyBEYXRlUmFuZ2Uge1xuICBkYXRlQmxvY2tSYW5nZTogRGF0ZUJsb2NrUmFuZ2VXaXRoUmFuZ2U7XG4gIGV4Y2x1ZGVkOiBEYXRlQmxvY2tJbmRleFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24oc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbj4ge1xuICBjb25zdCB7IGlzRW5hYmxlZERheSwgaXNFbmFibGVkRmlsdGVyRGF5IH0gPSBzdGF0ZTtcbiAgY29uc3QgZGF0ZUZhY3RvcnkgPSBkYXRlQmxvY2tUaW1pbmdEYXRlRmFjdG9yeShzdGF0ZSk7XG4gIGNvbnN0IGRhdGVCbG9ja1JhbmdlID0gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQmxvY2tSYW5nZShzdGF0ZSk7XG5cbiAgaWYgKGRhdGVCbG9ja1JhbmdlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gcmV0dXJucyBudWxsIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ID0gZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UuaSk7XG4gIGNvbnN0IGVuZCA9IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLnRvKTtcblxuICBjb25zdCBleGNsdWRlZDogRGF0ZUJsb2NrSW5kZXhbXSA9IHJhbmdlKGRhdGVCbG9ja1JhbmdlLmksIGRhdGVCbG9ja1JhbmdlLnRvICsgMSkuZmlsdGVyKCh4KSA9PiB7XG4gICAgY29uc3QgaXNFeGNsdWRlZEluZGV4ID0gIWlzRW5hYmxlZERheSh4KSB8fCAhaXNFbmFibGVkRmlsdGVyRGF5KHgpO1xuICAgIHJldHVybiBpc0V4Y2x1ZGVkSW5kZXg7XG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdDogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uID0ge1xuICAgIGRhdGVCbG9ja1JhbmdlLFxuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICBleGNsdWRlZFxuICB9O1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxEYXRlUmFuZ2U+IHtcbiAgY29uc3QgZGF0ZUZhY3RvcnkgPSBkYXRlQmxvY2tUaW1pbmdEYXRlRmFjdG9yeShzdGF0ZSk7XG4gIGNvbnN0IGRhdGVCbG9ja1JhbmdlID0gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQmxvY2tSYW5nZShzdGF0ZSk7XG4gIGNvbnN0IGRhdGVSYW5nZTogTWF5YmU8RGF0ZVJhbmdlPiA9IGRhdGVCbG9ja1JhbmdlICE9IG51bGwgPyB7IHN0YXJ0OiBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS5pKSwgZW5kOiBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS50byBhcyBudW1iZXIpIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBkYXRlUmFuZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVCbG9ja1JhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZT4ge1xuICBjb25zdCB7IGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleEZhY3RvcnksIGlucHV0U3RhcnQsIGlucHV0RW5kLCBpbmRleERheU9mV2VlaywgaXNFbmFibGVkRGF5LCBpc0VuYWJsZWRGaWx0ZXJEYXkgfSA9IHN0YXRlO1xuICBjb25zdCBlbmFibGVkRXhjbHVzaW9uSW5kZXhlcyA9IEFycmF5LmZyb20oc3RhdGUudG9nZ2xlZEluZGV4ZXMpLmZpbHRlcigoaSkgPT4gYWxsb3dlZERheXNPZldlZWsuaGFzKGluZGV4RGF5T2ZXZWVrKGkpKSk7XG4gIGNvbnN0IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzID0gbWluQW5kTWF4TnVtYmVyKGVuYWJsZWRFeGNsdXNpb25JbmRleGVzKTtcblxuICBsZXQgc3RhcnRSYW5nZTogTWF5YmU8RGF0ZUJsb2NrSW5kZXg+O1xuICBsZXQgZW5kUmFuZ2U6IE1heWJlPERhdGVCbG9ja0luZGV4PjtcblxuICBpZiAobWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICBzdGFydFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWluO1xuICAgIGVuZFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWF4O1xuICB9XG5cbiAgaWYgKGlucHV0U3RhcnQgIT0gbnVsbCAmJiBpbnB1dEVuZCAhPSBudWxsKSB7XG4gICAgY29uc3QgaW5wdXRTdGFydEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0U3RhcnQpO1xuICAgIGNvbnN0IGlucHV0RW5kSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRFbmQpO1xuXG4gICAgc3RhcnRSYW5nZSA9IHN0YXJ0UmFuZ2UgIT0gbnVsbCA/IE1hdGgubWluKGlucHV0U3RhcnRJbmRleCwgc3RhcnRSYW5nZSkgOiBpbnB1dFN0YXJ0SW5kZXg7XG4gICAgZW5kUmFuZ2UgPSBlbmRSYW5nZSAhPSBudWxsID8gTWF0aC5tYXgoaW5wdXRFbmRJbmRleCwgZW5kUmFuZ2UpIDogaW5wdXRFbmRJbmRleDtcbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIGNvbnN0IHNjYW5TdGFydEluZGV4ID0gc3RhcnRSYW5nZTtcbiAgICBjb25zdCBzY2FuRW5kSW5kZXggPSBlbmRSYW5nZTtcblxuICAgIC8vIGNsZWFyIHN0YXJ0IGFuZCBlbmRcbiAgICBzdGFydFJhbmdlID0gdW5kZWZpbmVkO1xuICAgIGVuZFJhbmdlID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIG1pbiBpcyBlcXVhbCB0byB0aGUgc3RhcnQgaW5kZXgsIHRoZW4gd2UgYXJlIGluIHRoZSByYW5nZSBhbmQgbmVlZCB0byBpdGVyYXRlIGRhdGVzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaXMgbm90IHNlbGVjdGVkL2V4Y2x1ZGVkLlxuICAgIGZvciAobGV0IGkgPSBzY2FuU3RhcnRJbmRleDsgaSA8PSBzY2FuRW5kSW5kZXg7IGkgKz0gMSkge1xuICAgICAgaWYgKGlzRW5hYmxlZEZpbHRlckRheShpKSAmJiBpc0VuYWJsZWREYXkoaSkpIHtcbiAgICAgICAgc3RhcnRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhbWUgd2l0aCB0aGUgbWF4XG4gICAgZm9yIChsZXQgaSA9IHNjYW5FbmRJbmRleDsgaSA+PSBzY2FuU3RhcnRJbmRleDsgaSAtPSAxKSB7XG4gICAgICBpZiAoaXNFbmFibGVkRmlsdGVyRGF5KGkpICYmIGlzRW5hYmxlZERheShpKSkge1xuICAgICAgICBlbmRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGk6IHN0YXJ0UmFuZ2UsIHRvOiBlbmRSYW5nZSB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
598
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwseUJBQXlCLEVBR3pCLDBCQUEwQixFQUcxQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBRWhDLG1CQUFtQixFQUNuQix1QkFBdUIsRUFJdkIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQix3Q0FBd0MsRUFDeEMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsa0NBQWtDLEVBQ2xDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFFckIsdUJBQXVCLEVBR3ZCLHdCQUF3QixFQUV4QixxQ0FBcUMsRUFFckMsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBNEQsZUFBZSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsaUNBQWlDLEVBQVksZUFBZSxFQUFnQyxLQUFLLEVBQXNCLE1BQU0sRUFBRSxXQUFXLEVBQWdCLGFBQWEsRUFBdUMsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9WLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUQsT0FB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LENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNmLE1BQU07YUFDUDtTQUNGO1FBRUQsb0JBQW9CO1FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RCxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDNUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDYixNQUFNO2FBQ1A7U0FDRjtLQUNGO0lBRUQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7UUFDMUMsT0FBTyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO0tBQ3hDO1NBQU07UUFDTCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEYXRlQmxvY2tEYXlPZldlZWtGYWN0b3J5LFxuICBkYXRlQmxvY2tEYXlPZldlZWtGYWN0b3J5LFxuICBEYXRlQmxvY2tJbmRleCxcbiAgRGF0ZUJsb2NrUmFuZ2VXaXRoUmFuZ2UsXG4gIGRhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5LFxuICBEYXRlT3JEYXRlQmxvY2tJbmRleCxcbiAgRGF0ZVJhbmdlLFxuICBkYXRlU2NoZWR1bGVEYXRlRmlsdGVyLFxuICBjb3B5RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZyxcbiAgRGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZyxcbiAgRGF0ZVNjaGVkdWxlRGF5Q29kZSxcbiAgZGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWssXG4gIERhdGVTY2hlZHVsZUVuY29kZWRXZWVrLFxuICBEYXRlU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5LFxuICBkYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzLFxuICBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2Rlc1RvRGF5T2ZXZWVrU2V0LFxuICBmaW5kTWF4RGF0ZSxcbiAgZmluZE1pbkRhdGUsXG4gIGlzRGF0ZUluRGF0ZVJhbmdlRnVuY3Rpb24sXG4gIElzRGF0ZVdpdGhpbkRhdGVCbG9ja1JhbmdlRnVuY3Rpb24sXG4gIGlzRGF0ZVdpdGhpbkRhdGVCbG9ja1JhbmdlRnVuY3Rpb24sXG4gIGlzU2FtZURhdGUsXG4gIGlzU2FtZURhdGVEYXksXG4gIGlzU2FtZURhdGVSYW5nZSxcbiAgaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UsXG4gIERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlLFxuICBkYXRlVGltaW5nUmVsYXRpdmVJbmRleEFycmF5RmFjdG9yeSxcbiAgaXNJbmZpbml0ZURhdGVSYW5nZSxcbiAgY29weUhvdXJzQW5kTWludXRlc0Zyb21EYXRlLFxuICBkYXRlVGltZXpvbmVVdGNOb3JtYWwsXG4gIERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlLFxuICBleHBhbmREYXRlU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZUJsb2NrLFxuICBEYXRlQmxvY2tEdXJhdGlvblNwYW4sXG4gIGZvcm1hdFRvSVNPODYwMURheVN0cmluZyxcbiAgRGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQsXG4gIGRhdGVTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQsXG4gIGRhdGVTY2hlZHVsZURheUNvZGVzU2V0RnJvbURheXNPZldlZWssXG4gIHNpbXBsaWZ5RGF0ZVNjaGVkdWxlRGF5Q29kZXMsXG4gIGZ1bGxXZWVrRGF5U2NoZWR1bGVEYXlDb2Rlc1xufSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxIYXNEaWZmZXJlbnRWYWx1ZXMsIGZpbHRlck1heWJlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBNYXliZSwgVGltZXpvbmVTdHJpbmcsIERlY2lzaW9uRnVuY3Rpb24sIEl0ZXJhYmxlT3JWYWx1ZSwgaXRlcmFibGVUb0FycmF5LCBhZGRUb1NldCwgdG9nZ2xlSW5TZXQsIGlzSW5kZXhOdW1iZXJJbkluZGV4UmFuZ2VGdW5jdGlvbiwgTWF5YmVNYXAsIG1pbkFuZE1heE51bWJlciwgc2V0c0FyZUVxdWl2YWxlbnQsIERheU9mV2VlaywgcmFuZ2UsIEFsbE9yTm9uZVNlbGVjdGlvbiwgdW5pcXVlLCBtZXJnZUFycmF5cywgQXJyYXlPclZhbHVlLCByZW1vdmVGcm9tU2V0LCBJU084NjAxRGF5U3RyaW5nLCBmaWx0ZXJWYWx1ZXNUb1NldCwgbWFwVmFsdWVzVG9TZXQgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIGVuZE9mRGF5LCBpc0JlZm9yZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCwgZmlyc3QsIGNvbWJpbmVMYXRlc3RXaXRoLCBvZiwgc2NoZWR1bGVkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5LCBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWUsIGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5IH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZSB7XG4gIC8qKlxuICAgKiBJbnB1dCBTdGFydCBEYXRlXG4gICAqL1xuICBpbnB1dFN0YXJ0OiBEYXRlO1xuICAvKipcbiAgICogSW5wdXQgRW5kIERhdGVcbiAgICovXG4gIGlucHV0RW5kOiBEYXRlO1xufVxuXG5leHBvcnQgdHlwZSBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlID0gUGFydGlhbDxNYXliZU1hcDxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgZXh0ZW5kcyBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIFJlYWRvbmx5IHN0YXRlIG9mIHRoZSB2aWV3LlxuICAgKlxuICAgKiBEb2VzIG5vdCBhZmZlY3Qgc3RhdGUgY2hhbmdlcyBkaXJlY3RseSwgYnV0IGluc3RlYWQgYWN0cyBhcyBhIGZsYWcgZm9yIHRoZSBwYXJlbnQgdmlldyB0byBzZXQgYW5kIHRoZSBjb25zdW1pbmcgdmlld3MgdG8gdXBkYXRlIG9uLlxuICAgKi9cbiAgaXNWaWV3UmVhZG9ubHk/OiBNYXliZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFNldCBvZiB0aGUgZGF5cyBvZiB3ZWVrIHRoYXQgYXJlIGFsbG93ZWQgYnkgZGVmYXVsdC5cbiAgICovXG4gIGRlZmF1bHRTY2hlZHVsZURheXM6IFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPjtcbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGRheXMgb2YgdGhlIHNjaGVkdWxlIHRvIG9ubHkgYWxsb3cgc2VsZWN0aW5nIGRheXMgaW4gdGhlIHNjaGVkdWxlLlxuICAgKlxuICAgKiBJZiBmaWx0ZXIuc3RhcnQgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIHRpbWV6b25lIGlzIGlnbm9yZWQsIGlmIG9uZSBpcyBwcmVzZW50LlxuICAgKi9cbiAgZmlsdGVyPzogTWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz47XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGV4Y2x1c2lvbnMgdGhhdCBtYXkgbm90IGJlIGRlZmluZWQgd2l0aGluIHRoZSBmaWx0ZXIuXG4gICAqL1xuICBpbnB1dEV4Y2x1c2lvbnM/OiBNYXliZTxBcnJheU9yVmFsdWU8RGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFRoZSBjb21wdXRlZCBleGNsdXNpb25zIGdpdmVuIHRoZSBpbnB1dCBleGNsdXNpb25zLlxuICAgKi9cbiAgY29tcHV0ZWRFeGNsdXNpb25zPzogTWF5YmU8RGF0ZUJsb2NrSW5kZXhbXT47XG4gIC8qKlxuICAgKiBUaGUgbWluL21heCBkYXRlIHJhbmdlLiBVc2VkIGZvciByZXN0cmljdGluZyB0aGUgbWluL21heCB2YWx1ZS4gV29ya3Mgd2l0aCB0aGUgZmlsdGVyLiBUaGUgZ3JlYXRlci9sZXNzZXIgb2YgdGhlIHN0YXJ0L2VuZCBkYXRlcyBhcmUgdXNlZCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIG1pbk1heERhdGVSYW5nZT86IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj47XG4gIC8qKlxuICAgKiBTdGFydCBkYXRlLiBJcyB1cGRhdGVkIGFzIHRoZSBpbnB1dFN0YXJ0IGlzIG1vZGlmaWVkIG9yIGZpbHRlciBpcyBwcm92aWRlZCB0aGF0IHByb3ZpZGVzIHRoZSBzdGFydCBkYXRlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0b2RheSBhbmQgdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICBzdGFydDogRGF0ZTtcbiAgLyoqXG4gICAqIFRpbWV6b25lIHRvIHVzZS4gT25seUluZmx1ZW5jZXMgdGhlIG91dHB1dCBzdGFydCBkYXRlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxUaW1lem9uZVN0cmluZz47XG4gIC8qKlxuICAgKiBDdXJyZW50IHRpbWV6b25lIG5vcm1hbCB3aXRoIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgdGltZXpvbmVOb3JtYWw/OiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT47XG4gIC8qKlxuICAgKiBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlcbiAgICovXG4gIGluZGV4RmFjdG9yeTogRGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5O1xuICAvKipcbiAgICogQXJyYXkgb2YgbWFudWFsbHkgc2VsZWN0ZWQgZGF0ZXMgd2l0aGluIHRoZSBwaWNrZWQgcmFuZ2UuIFRoaXMgaXMgTk9UIHRoZSBzZXQgb2YgYWxsIHNlbGVjdGVkIGluZGV4ZXMgaW4gdGVybXMgb2Ygb3V0cHV0LlxuICAgKlxuICAgKiBWYWx1ZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHRoZSBcImlucHV0XCIgcmFuZ2UgYXJlIGNvbnNpZGVyZWQgdG9nZ2xlZCBvbiwgd2hpbGUgdGhvc2VcbiAgICogdGhhdCBhcmUgc2VsZWN0ZWQgd2l0aGluIHRoZSByYW5nZSBhcmUgY29uc2lkZXJlZCB0b2dnbGVkIG9mZi5cbiAgICpcbiAgICogSWYgZGF0ZXMgYXJlIHNlbGVjdGVkLCBhbmQgdGhlbiBhIHJhbmdlIGlzIHNlbGVjdGVkLCB0aGVuIHRob3NlIGRhdGVzIHdpdGhpbiB0aGUgcmFuZ2UgdGhhdCBmYWxsXG4gICAqIHdpdGhpbiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQgZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIFRoZXNlIGluZGV4ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBkYXRlLlxuICAgKi9cbiAgdG9nZ2xlZEluZGV4ZXM6IFNldDxEYXRlQmxvY2tJbmRleD47XG4gIC8qKlxuICAgKiBEYXlzIG9mIHRoZSBzY2hlZHVsZSB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHBpY2tlZC4gSWYgbm90IGRlZmluZWQsIGRlZmF1bHRzIHRvIGRlZmF1bHRTY2hlZHVsZURheXMuXG4gICAqL1xuICBzY2hlZHVsZURheXM/OiBNYXliZTxTZXQ8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgRGF0ZVNjaGVkdWxlRGF5Q29kZSB2YWx1ZS5cbiAgICovXG4gIGVmZmVjdGl2ZVNjaGVkdWxlRGF5czogU2V0PERhdGVTY2hlZHVsZURheUNvZGU+O1xuICAvKipcbiAgICogU2V0IG9mIHRoZSBkYXlzIG9mIHdlZWsgdGhhdCBhcmUgYWxsb3dlZC4gRGVyaXZlZCBmcm9tIHRoZSBjdXJyZW50IHNjaGVkdWxlIGRheXMgdmFsdWUuXG4gICAqL1xuICBhbGxvd2VkRGF5c09mV2VlazogU2V0PERheU9mV2Vlaz47XG4gIC8qKlxuICAgKlxuICAgKi9cbiAgaW5kZXhEYXlPZldlZWs6IERhdGVCbG9ja0RheU9mV2Vla0ZhY3Rvcnk7XG4gIC8qKlxuICAgKiBEZWNpc2lvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGlzIGVuYWJsZWQgZ2l2ZW4gdGhlIGN1cnJlbnQgZmlsdGVyLlxuICAgKi9cbiAgaXNFbmFibGVkRmlsdGVyRGF5OiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgLyoqXG4gICAqIERlY2lzaW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBjdXJyZW50IGZpbHRlciBpbnRvIGFjY291bnQuXG4gICAqL1xuICBpc0VuYWJsZWREYXk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+O1xuICAvKipcbiAgICogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSBmb3IgdGhlIHZpZXcuXG4gICAqL1xuICBjZWxsQ29udGVudEZhY3Rvcnk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3Rvcnk7XG4gIC8qKlxuICAgKiBDdXJyZW50IHNlbGVjdGlvbiB2YWx1ZS5cbiAgICovXG4gIGN1cnJlbnRTZWxlY3Rpb25WYWx1ZT86IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIGZpbHRlciBhcyB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBpbnN0ZWFkIG9mIG9wdGltaXppbmcgZm9yIHRoZSBjdXJyZW50IGluZGV4LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI/OiBNYXliZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHNlbGVjdGlvbiBzdGF0ZSB3aGVuIHRoZSBjYWxlbmRhciBpcyByZXNldC5cbiAgICovXG4gIGluaXRpYWxTZWxlY3Rpb25TdGF0ZT86IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKCk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IGRlZmF1bHRTY2hlZHVsZURheXMgPSBuZXcgU2V0KFtEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtEQVksIERhdGVTY2hlZHVsZURheUNvZGUuV0VFS0VORF0pO1xuICBjb25zdCBhbGxvd2VkRGF5c09mV2VlayA9IGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQoZGVmYXVsdFNjaGVkdWxlRGF5cyk7XG4gIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZkRheShuZXcgRGF0ZSgpKTtcbiAgY29uc3QgaW5kZXhGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KHsgc3RhcnQgfSk7XG4gIGNvbnN0IGluZGV4RGF5T2ZXZWVrID0gZGF0ZUJsb2NrRGF5T2ZXZWVrRmFjdG9yeShzdGFydCk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydCxcbiAgICBpbmRleEZhY3RvcnksXG4gICAgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoKSxcbiAgICBkZWZhdWx0U2NoZWR1bGVEYXlzLFxuICAgIGVmZmVjdGl2ZVNjaGVkdWxlRGF5czogZGVmYXVsdFNjaGVkdWxlRGF5cyxcbiAgICBhbGxvd2VkRGF5c09mV2VlayxcbiAgICBpbmRleERheU9mV2VlayxcbiAgICBpc0VuYWJsZWRGaWx0ZXJEYXk6ICgpID0+IHRydWUsXG4gICAgaXNFbmFibGVkRGF5OiAoKSA9PiBmYWxzZSxcbiAgICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogdHJ1ZSxcbiAgICBjZWxsQ29udGVudEZhY3Rvcnk6IGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluRGF0ZSh4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBNYXliZTxEYXRlPiB7XG4gIHJldHVybiBmaW5kTWF4RGF0ZShbeC5maWx0ZXI/LnN0YXJ0LCB4Lm1pbk1heERhdGVSYW5nZT8uc3RhcnRdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IE1heWJlPERhdGU+IHtcbiAgcmV0dXJuIGZpbmRNaW5EYXRlKFt4LmZpbHRlcj8uZW5kLCB4Lm1pbk1heERhdGVSYW5nZT8uZW5kXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IFBhcnRpYWw8RGF0ZVJhbmdlPiB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGNhbGVuZGFyU2NoZWR1bGVNaW5EYXRlKHgpIHx8IHVuZGVmaW5lZCxcbiAgICBlbmQ6IGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHgpIHx8IHVuZGVmaW5lZFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlcih4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXInPikge1xuICByZXR1cm4geC5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAmJiB4LmZpbHRlcj8uc3RhcnQgIT0gbnVsbDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSBleHRlbmRzIENvbXBvbmVudFN0b3JlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZT4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihpbml0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKCkpO1xuICB9XG5cbiAgLy8gTUFSSzpcbiAgcmVhZG9ubHkgdG9nZ2xlU2VsZWN0aW9uID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5uZXh0VG9nZ2xlU2VsZWN0aW9uJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgZmlsdGVyTWF5YmUoKSxcbiAgICAgICAgICB0YXAoKHgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsRGF0ZXMoeCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICByZWFkb25seSBmaWx0ZXIkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZmlsdGVyKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWluTWF4RGF0ZVJhbmdlJCA9IHRoaXMuc3RhdGUkLnBpcGUobWFwKGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2UpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlUmFuZ2UpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgbWluRGF0ZSQgPSB0aGlzLm1pbk1heERhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICByZWFkb25seSBtYXhEYXRlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSQgPSB0aGlzLm1pbk1heERhdGVSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHggIT0gbnVsbCAmJiB4LnN0YXJ0ICE9IG51bGwgJiYgeC5lbmQgIT0gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0U3RhcnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaW5wdXRTdGFydCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dEVuZCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pbnB1dEVuZCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50SW5wdXRSYW5nZSQ6IE9ic2VydmFibGU8TWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeyBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9KSA9PiAoeyBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9KSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGlzU2FtZURhdGUoYS5pbnB1dFN0YXJ0LCBiLmlucHV0U3RhcnQpICYmIGlzU2FtZURhdGUoYS5pbnB1dEVuZCwgYi5pbnB1dEVuZCkpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHguaW5wdXRTdGFydCAmJiB4LmlucHV0RW5kKSB7XG4gICAgICAgIHJldHVybiB4IGFzIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpbnB1dFJhbmdlJDogT2JzZXJ2YWJsZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+ID0gdGhpcy5jdXJyZW50SW5wdXRSYW5nZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB2YWx1ZS4gVGhpcyBpcyB0aGUgc2V0IG9mIG1hbnVhbGx5IHRvZ2dlZCBvZmYgZGF0ZXMuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZWxlY3RlZERhdGVzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZUJsb2NrSW5kZXg+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnRvZ2dsZWRJbmRleGVzKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkRmlsdGVyRGF5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlzRW5hYmxlZEZpbHRlckRheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0VuYWJsZWREYXlGdW5jdGlvbiQ6IE9ic2VydmFibGU8RGVjaXNpb25GdW5jdGlvbjxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguaXNFbmFibGVkRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlUmFuZ2UkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGlzU2FtZURhdGVSYW5nZShhLCBiKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyJDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIC8vXG4gICAgbWFwKGNhbGVuZGFyU2NoZWR1bGVTdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2UkOiBPYnNlcnZhYmxlPERhdGVSYW5nZT4gPSB0aGlzLmN1cnJlbnREYXRlUmFuZ2UkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGFsbG93ZWREYXlzT2ZXZWVrJDogT2JzZXJ2YWJsZTxTZXQ8RGF5T2ZXZWVrPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5hbGxvd2VkRGF5c09mV2VlayksXG4gICAgZGlzdGluY3RVbnRpbEhhc0RpZmZlcmVudFZhbHVlcygpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2NoZWR1bGVEYXlzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZWZmZWN0aXZlU2NoZWR1bGVEYXlzKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50VGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50aW1lem9uZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICghY2FsZW5kYXJTY2hlZHVsZVN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlcih4KSAmJiB4LnRpbWV6b25lID8geC50aW1lem9uZSA6IHVuZGVmaW5lZCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlZmZlY3RpdmVUaW1lem9uZU5vcm1hbCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKCFjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHgpICYmIHgudGltZXpvbmVOb3JtYWwgPyB4LnRpbWV6b25lTm9ybWFsIDogdW5kZWZpbmVkKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jdXJyZW50U2VsZWN0aW9uVmFsdWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlU3RhcnQkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5kYXRlU2NoZWR1bGVSYW5nZS5zdGFydCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVEYXRlQmxvY2tUaW1pbmdEYXRlRmFjdG9yeSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZVN0YXJ0JC5waXBlKFxuICAgIG1hcCgoc3RhcnQpID0+IChzdGFydCA/IGRhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5KHsgc3RhcnQgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja0R1cmF0aW9uU3BhbiQ6IE9ic2VydmFibGU8RGF0ZUJsb2NrRHVyYXRpb25TcGFuPERhdGVCbG9jaz5bXT4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4ID8gZXhwYW5kRGF0ZVNjaGVkdWxlUmFuZ2UoeyAuLi54LCBkdXJhdGlvbjogMSB9KSA6IFtdKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVNlbGVjdGVkSW5kZXhlcyQ6IE9ic2VydmFibGU8U2V0PERhdGVCbG9ja0luZGV4Pj4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja0R1cmF0aW9uU3BhbiQucGlwZShcbiAgICBtYXAoKHgpID0+IG5ldyBTZXQoeC5tYXAoKHkpID0+IHkuaSkpKSxcbiAgICBkaXN0aW5jdFVudGlsSGFzRGlmZmVyZW50VmFsdWVzKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZVNlbGVjdGVkRGF0ZXMkOiBPYnNlcnZhYmxlPFNldDxJU084NjAxRGF5U3RyaW5nPj4gPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZURhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoZGF0ZUZhY3RvcnkpID0+IHtcbiAgICAgIHJldHVybiBkYXRlRmFjdG9yeSA/IHRoaXMuc2VsZWN0aW9uVmFsdWVTZWxlY3RlZEluZGV4ZXMkLnBpcGUobWFwKCh4KSA9PiBtYXBWYWx1ZXNUb1NldCh4LCAoeSkgPT4gZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nKGRhdGVGYWN0b3J5KHkpKSkpKSA6IG9mKG5ldyBTZXQ8SVNPODYwMURheVN0cmluZz4oKSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMuZWZmZWN0aXZlVGltZXpvbmVOb3JtYWwkKSxcbiAgICBtYXAoKFt4LCB0aW1lem9uZU5vcm1hbF0pID0+IHtcbiAgICAgIGlmICh4ICYmIHRpbWV6b25lTm9ybWFsKSB7XG4gICAgICAgIHggPSB7XG4gICAgICAgICAgZGF0ZVNjaGVkdWxlUmFuZ2U6IHtcbiAgICAgICAgICAgIC4uLnguZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgICAgICAgICBzdGFydDogdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZSh4LmRhdGVTY2hlZHVsZVJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICAgIGVuZDogdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZSh4LmRhdGVTY2hlZHVsZVJhbmdlLmVuZClcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lRGF0ZUJsb2NrRHVyYXRpb25TcGFuJDogT2JzZXJ2YWJsZTxEYXRlQmxvY2tEdXJhdGlvblNwYW48RGF0ZUJsb2NrPltdPiA9IHRoaXMuc2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBleHBhbmREYXRlU2NoZWR1bGVSYW5nZSh7IC4uLngsIGR1cmF0aW9uOiAxIH0pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG5leHRUb2dnbGVTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4+ID0gdGhpcy5oYXNDb25maWd1cmVkTWluTWF4UmFuZ2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UpID0+IHtcbiAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8TWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPj47XG5cbiAgICAgIGlmIChoYXNDb25maWd1cmVkTWluTWF4UmFuZ2UpIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUobWFwKCh4KSA9PiAoeCA/ICdub25lJyA6ICdhbGwnKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JzID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUobWFwKCh4KSA9PiAoeCA/ICdub25lJyA6IHVuZGVmaW5lZCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZVZhbHVlJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlV2l0aFRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZGF0ZVNjaGVkdWxlUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVTY2hlZHVsZVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVTY2hlZHVsZVJhbmdlVmFsdWUkID0gdGhpcy5jdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY2VsbENvbnRlbnRGYWN0b3J5JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNlbGxDb250ZW50RmFjdG9yeSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzQ3VzdG9taXplZCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC50b2dnbGVkSW5kZXhlcy5zaXplID4gMCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzVmlld1JlYWRvbmx5JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlzVmlld1JlYWRvbmx5KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLy8gTUFSSzogU3RhdGUgQ2hhbmdlc1xuICByZWFkb25seSBzZXRNaW5NYXhEYXRlUmFuZ2UgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKTtcbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFdlZWsgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKTtcbiAgcmVhZG9ubHkgc2V0RmlsdGVyID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aEZpbHRlcik7XG4gIHJlYWRvbmx5IHNldEV4Y2x1c2lvbnMgPSB0aGlzLnVwZGF0ZXIodXBkYXRlU3RhdGVXaXRoRXhjbHVzaW9ucyk7XG4gIHJlYWRvbmx5IHNldENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKTtcbiAgcmVhZG9ubHkgY2xlYXJGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHVuZGVmaW5lZCkpO1xuXG4gIHJlYWRvbmx5IHNldFRpbWV6b25lID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aFRpbWV6b25lVmFsdWUpO1xuICByZWFkb25seSBzZXRJbnB1dFJhbmdlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZSk7XG5cbiAgLy8gTk9URTogU2VsZWN0ZWQgZGF0ZXMgYXJlIE5PVCBzZWxlY3RlZCBpbmRleGVzLiBUaGV5IGFyZSB0aGUgaW50ZXJuYWwgc2VsZWN0ZWQgZGF0ZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgc2VsZWN0aW9uLlxuICByZWFkb25seSB0b2dnbGVTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdG9nZ2xlOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgdG9nZ2xlIH0pKTtcbiAgcmVhZG9ubHkgYWRkU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGFkZDogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IGFkZCB9KSk7XG4gIHJlYWRvbmx5IHJlbW92ZVNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByZW1vdmU6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlJbnB1dD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyByZW1vdmUgfSkpO1xuICByZWFkb25seSBzZXRTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2V0IH0pKTtcblxuICAvLyBOT1RFOiBTZWxlY3RlZCBpbmRleGVzIGFyZSB0aGUgdHlwaWNhbC9leHBlY3RlZCBpbmRleGVzIHRoYXQgYXJlIHNlbGVjdGVkIG9yIG5vdC5cbiAgcmVhZG9ubHkgc2V0U2VsZWN0ZWRJbmRleGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2V0LCBpbnZlcnRTZXRCZWhhdmlvcjogdHJ1ZSB9KSk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0QWxsRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZWxlY3RBbGw6IEFsbE9yTm9uZVNlbGVjdGlvbiA9ICdhbGwnKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2VsZWN0QWxsIH0pKTtcbiAgcmVhZG9ubHkgc2V0SW5pdGlhbFNlbGVjdGlvblN0YXRlID0gdGhpcy51cGRhdGVyKHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZSk7XG5cbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGVmYXVsdFNjaGVkdWxlRGF5cyk7XG4gIHJlYWRvbmx5IHNldFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcih1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKTtcbiAgcmVhZG9ubHkgc2V0QWxsb3dBbGxTY2hlZHVsZURheXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCBbRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLREFZLCBEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtFTkRdKSk7XG5cbiAgcmVhZG9ubHkgc2V0RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHZhbHVlOiBNYXliZTxEYXRlU2NoZWR1bGVSYW5nZT4pID0+IHVwZGF0ZVN0YXRlV2l0aERhdGVTY2hlZHVsZVJhbmdlVmFsdWUoc3RhdGUsIHZhbHVlKSk7XG4gIHJlYWRvbmx5IHNldENlbGxDb250ZW50RmFjdG9yeSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGNlbGxDb250ZW50RmFjdG9yeTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSkgPT4gKHsgLi4uc3RhdGUsIGNlbGxDb250ZW50RmFjdG9yeSB9KSk7XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgdGhlIHBhcmVudCB2aWV3IHRvIHByb3BvZ2F0ZSBhIHJlYWRvbmx5IHN0YXRlLlxuICAgKlxuICAgKiBTaG91bGQgdHlwaWNhbGx5IG5vdCBiZSB1c2VkIGJ5IHRoZSB1c2VyIGRpcmVjdGx5IHdpdGggdGhlIGludGVudGlvbiBvZiB0aGUgcGFyZW50IHN5bmNocm9uaXppbmcgdG8gdGhpcyBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNldFZpZXdSZWFkb25seVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgaXNWaWV3UmVhZG9ubHk6IGJvb2xlYW4pID0+ICh7IC4uLnN0YXRlLCBpc1ZpZXdSZWFkb25seSB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5pdGlhbFNlbGVjdGlvblN0YXRlOiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyB0b2dnbGVkSW5kZXhlcyB9ID0gc3RhdGU7XG5cbiAgaWYgKHRvZ2dsZWRJbmRleGVzLnNpemUgPT09IDAgJiYgaW5pdGlhbFNlbGVjdGlvblN0YXRlID09PSAnYWxsJykge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IHNlbGVjdEFsbDogaW5pdGlhbFNlbGVjdGlvblN0YXRlIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4uc3RhdGUsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIoY3VycmVudFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyOiBNYXliZTxib29sZWFuPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGxldCBzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlID0geyAuLi5jdXJyZW50U3RhdGUsIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyIH07XG5cbiAgaWYgKEJvb2xlYW4oY3VycmVudFN0YXRlLmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSAhPT0gQm9vbGVhbihjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcikpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwge30pOyAvLyByZWNhbGN1bGF0ZSBpZiBjaGFuZ2Ugb2NjdXJzIGFzIGl0IHdpbGwgYWZmZWN0IHRoZSBvdXRwdXQgdmFsdWVcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEV4Y2x1c2lvbnMoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRFeGNsdXNpb25zOiBNYXliZTxBcnJheU9yVmFsdWU8RGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2U+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGxldCBjb21wdXRlZEV4Y2x1c2lvbnM6IE1heWJlPERhdGVCbG9ja0luZGV4W10+O1xuXG4gIGlmIChpbnB1dEV4Y2x1c2lvbnMpIHtcbiAgICBjb25zdCB7IGluZGV4RmFjdG9yeSB9ID0gc3RhdGU7XG4gICAgY29uc3QgaW5kZXhBcnJheUZhY3RvcnkgPSBkYXRlVGltaW5nUmVsYXRpdmVJbmRleEFycmF5RmFjdG9yeShpbmRleEZhY3RvcnkpO1xuICAgIGNvbXB1dGVkRXhjbHVzaW9ucyA9IGluZGV4QXJyYXlGYWN0b3J5KGlucHV0RXhjbHVzaW9ucyk7XG4gIH1cblxuICBzdGF0ZSA9IHsgLi4uc3RhdGUsIGlucHV0RXhjbHVzaW9ucywgY29tcHV0ZWRFeGNsdXNpb25zIH07XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHN0YXRlLmZpbHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgbWluTWF4RGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgc3RhdGUgPSB7IC4uLnN0YXRlIH07XG5cbiAgaWYgKG1pbk1heERhdGVSYW5nZSAhPSBudWxsICYmICFpc0luZmluaXRlRGF0ZVJhbmdlKG1pbk1heERhdGVSYW5nZSkpIHtcbiAgICBzdGF0ZS5taW5NYXhEYXRlUmFuZ2UgPSB7XG4gICAgICBzdGFydDogbWluTWF4RGF0ZVJhbmdlLnN0YXJ0ICE9IG51bGwgPyBzdGFydE9mRGF5KG1pbk1heERhdGVSYW5nZS5zdGFydCkgOiB1bmRlZmluZWQsXG4gICAgICBlbmQ6IG1pbk1heERhdGVSYW5nZS5lbmQgIT0gbnVsbCA/IGVuZE9mRGF5KG1pbk1heERhdGVSYW5nZS5lbmQpIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgc3RhdGUubWluTWF4RGF0ZVJhbmdlO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZSwgc3RhdGUuZmlsdGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbnB1dEZpbHRlcjogTWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGNvbXB1dGVkRXhjbHVzaW9uczogZXhjbHVzaW9ucywgbWluTWF4RGF0ZVJhbmdlIH0gPSBzdGF0ZTtcblxuICBsZXQgaXNFbmFibGVkRmlsdGVyRGF5OiBNYXliZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj4gPSAoKSA9PiB0cnVlO1xuICBsZXQgZmlsdGVyOiBNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPiA9IG51bGw7XG5cbiAgLy8gY3JlYXRlIHRoZSBmaWx0ZXIgdXNpbmcgaW5wdXRGaWx0ZXIsIGV4Y2x1c2lvbnMsIGFuZCBtaW5NYXhEYXRlUmFuZ2VcbiAgaWYgKGlucHV0RmlsdGVyIHx8IGV4Y2x1c2lvbnM/Lmxlbmd0aCB8fCBtaW5NYXhEYXRlUmFuZ2UpIHtcbiAgICBsZXQgZW5hYmxlZEZpbHRlcjogRGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZztcblxuICAgIGlmIChpbnB1dEZpbHRlcikge1xuICAgICAgZmlsdGVyID0gY29weURhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWcoaW5wdXRGaWx0ZXIpOyAvLyBjb3B5IGZpbHRlclxuXG4gICAgICBpZiAoZXhjbHVzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGVuYWJsZWRGaWx0ZXIgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgIGV4OiB1bmlxdWUobWVyZ2VBcnJheXMoW2ZpbHRlci5leCwgZXhjbHVzaW9uc10pKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5hYmxlZEZpbHRlciA9IGZpbHRlcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZW5hYmxlZEZpbHRlciA9IHtcbiAgICAgICAgdzogJzg5JyxcbiAgICAgICAgZXg6IGV4Y2x1c2lvbnMgYXMgbnVtYmVyW11cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG1pbk1heERhdGVSYW5nZSkge1xuICAgICAgZW5hYmxlZEZpbHRlci5taW5NYXhEYXRlUmFuZ2UgPSBtaW5NYXhEYXRlUmFuZ2U7XG4gICAgICBlbmFibGVkRmlsdGVyLnNldFN0YXJ0QXNNaW5EYXRlID0gZmlsdGVyPy5zdGFydCA/IHRydWUgOiBmYWxzZTsgLy8gSWYgYSBzdGFydCBkYXRlIGlzIHNldCwgdGhlbiBpdCBiZWNvbWVzIHRoZSBmbG9vci5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgaW5wdXQgZmlsdGVyIGhhcyBhIHN0YXJ0IGRhdGUsIHVzZSB0aGF0IGFzIHRoZSByZWxhdGl2ZSBzdGFydCB0byBlbnN1cmUgaW5kZXhlcyBhcmUgY29tcGFyZWQgdGhlIHNhbWUsXG4gICAgICogb3RoZXJ3aXNlIHVzZSB0aGUgc3RhdGUncyBzdGFydC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHRoZSBpbmRleCBjYWxjdWxhdGlvbnMuXG4gICAgICovXG4gICAgZW5hYmxlZEZpbHRlci5zdGFydCA9IGlucHV0RmlsdGVyPy5zdGFydCA/PyBzdGF0ZS5zdGFydDtcblxuICAgIC8vIGNyZWF0ZSB0aGUgZmlsdGVyXG4gICAgaXNFbmFibGVkRmlsdGVyRGF5ID0gZGF0ZVNjaGVkdWxlRGF0ZUZpbHRlcihlbmFibGVkRmlsdGVyKTtcbiAgfVxuXG4gIHN0YXRlID0geyAuLi5zdGF0ZSwgZmlsdGVyLCBpc0VuYWJsZWRGaWx0ZXJEYXkgfTtcblxuICAvLyBGb3IgdGhlIHNhbWUgcmVhc29uIGFzIGFib3ZlLCB1c2UgdGhlIGZpbHRlcidzIHN0YXJ0IGRhdGUgYXMgdGhlIHJlbGF0aXZlIHN0YXJ0IGlmIGFwcGxpY2FibGUuXG4gIGlmIChmaWx0ZXIgJiYgZmlsdGVyLnN0YXJ0KSB7XG4gICAgY29uc3Qgc3RhcnQgPSBmaWx0ZXIuc3RhcnQ7XG4gICAgc3RhdGUuc3RhcnQgPSBzdGFydDtcbiAgICBzdGF0ZS5pbmRleEZhY3RvcnkgPSBkYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnkoeyBzdGFydCB9KTtcbiAgICBzdGF0ZS5pbmRleERheU9mV2VlayA9IGRhdGVCbG9ja0RheU9mV2Vla0ZhY3Rvcnkoc3RhcnQpO1xuICB9XG5cbiAgLy8gYXR0ZW1wdCB0byByZS1hcHBseSB0aGUgaW5pdGlhbCBzZWxlY3Rpb24gc3RhdGUgb25jZSBmaWx0ZXIgaXMgYXBwbGllZFxuICBpZiAoc3RhdGUuaW5pdGlhbFNlbGVjdGlvblN0YXRlKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUoc3RhdGUsIHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSk7XG4gIH1cblxuICAvLyByZS1jYWxjdWxhdGUgdGhlIHNlbGVjdGlvbiBnaXZlbiB0aGUgZmlsdGVyXG4gIGNvbnN0IHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSA9IHN0YXRlO1xuXG4gIGlmIChpbnB1dFN0YXJ0ICYmIGlucHV0RW5kKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkUmFuZ2Uoc3RhdGUsIHsgaW5wdXRTdGFydCwgaW5wdXRFbmQgfSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhUaW1lem9uZVZhbHVlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIHRpbWV6b25lOiBNYXliZTxUaW1lem9uZVN0cmluZz4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSB9ID0gc3RhdGU7XG5cbiAgY29uc3QgdGltZXpvbmVOb3JtYWwgPSB0aW1lem9uZSA/IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh7IHRpbWV6b25lIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmICh0aW1lem9uZU5vcm1hbCAmJiBjdXJyZW50U2VsZWN0aW9uVmFsdWUpIHtcbiAgICAvLyB1cGRhdGUgdGhlIHNlbGVjdGlvbiB2YWx1ZSB0byByZWZsZWN0IHRoZSB0aW1lem9uZSBjaGFuZ2VzLlxuXG4gICAgY29uc3QgeyBkYXRlU2NoZWR1bGVSYW5nZTogY3VycmVudERhdGVTY2hlZHVsZVJhbmdlIH0gPSBjdXJyZW50U2VsZWN0aW9uVmFsdWU7XG4gICAgY29uc3Qgc3RhcnQgPSB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZS5zdGFydCk7XG4gICAgY29uc3QgZW5kID0gdGltZXpvbmVOb3JtYWwudGFyZ2V0RGF0ZVRvU3lzdGVtRGF0ZShjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2UuZW5kKTtcblxuICAgIGNvbnN0IG5ld1JhbmdlOiBEYXRlU2NoZWR1bGVSYW5nZSA9IHtcbiAgICAgIC4uLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZS5kYXRlU2NoZWR1bGVSYW5nZSxcbiAgICAgIHN0YXJ0LFxuICAgICAgZW5kXG4gICAgfTtcblxuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhEYXRlU2NoZWR1bGVSYW5nZVZhbHVlKHsgLi4uc3RhdGUsIHRpbWV6b25lLCB0aW1lem9uZU5vcm1hbCB9LCBuZXdSYW5nZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uc3RhdGUsIHRpbWV6b25lLCB0aW1lem9uZU5vcm1hbCB9OyAvLyBubyBjaGFuZ2UgaW4gdmFsdWVcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPERhdGVTY2hlZHVsZVJhbmdlPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgdGltZXpvbmVOb3JtYWwsIGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSB9ID0gc3RhdGU7XG4gIGNvbnN0IGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZSA9IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZT8uZGF0ZVNjaGVkdWxlUmFuZ2U7IC8vIGN1cnJlbnQgcmFuZ2UgaXMgYWx3YXlzIGluIHN5c3RlbSB0aW1lXG5cbiAgaWYgKCFjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHN0YXRlKSAmJiB0aW1lem9uZU5vcm1hbCkge1xuICAgIC8vIFdoZW4gdXNpbmcgdGltZXpvbmVzLCBhbHdheXMgcmV0dXJuIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBkYXkuIElucHV0cyBhcmUgY29udmVydGVkIHRvIHRoZSBzeXN0ZW0gdGltZSBhbmQgdXNlZCBhcyB0aGUgc3RhcnQgb2YgdGhlIGRheS5cbiAgICAvLyBPdXRwdXRzIHJlbWFpbiBhY2N1cmF0ZS5cblxuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIGNoYW5nZSA9IHtcbiAgICAgICAgLi4uY2hhbmdlLFxuICAgICAgICBzdGFydDogc3RhcnRPZkRheSh0aW1lem9uZU5vcm1hbC5zeXN0ZW1EYXRlVG9UYXJnZXREYXRlKGNoYW5nZS5zdGFydCkpLFxuICAgICAgICBlbmQ6IHN0YXJ0T2ZEYXkodGltZXpvbmVOb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShjaGFuZ2UuZW5kKSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNTYW1lVmFsdWUgPSBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZShjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2UsIGNoYW5nZSk7XG5cbiAgaWYgKGlzU2FtZVZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9IGVsc2Uge1xuICAgIGlmIChjaGFuZ2UgIT0gbnVsbCkge1xuICAgICAgY29uc3QgbmV4dFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dFN0YXJ0OiBjaGFuZ2Uuc3RhcnQsIGlucHV0RW5kOiBjaGFuZ2UuZW5kLCB0b2dnbGVkSW5kZXhlczogbmV3IFNldChjaGFuZ2UuZXgpIH07XG4gICAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpLCBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2RlcyhjaGFuZ2UudyB8fCAnODknKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub1NlbGVjdGlvbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7IC8vIGNsZWFyIHNlbGVjdGlvbiwgcmV0YWluIGRpc2FibGVkIGRheXNcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREZWZhdWx0U2NoZWR1bGVEYXlzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogTWF5YmU8SXRlcmFibGU8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBkZWZhdWx0U2NoZWR1bGVEYXlzOiBjdXJyZW50RGVmYXVsdFNjaGVkdWxlRGF5cyB9ID0gc3RhdGU7XG4gIGNvbnN0IGRlZmF1bHRTY2hlZHVsZURheXMgPSBuZXcgU2V0KGNoYW5nZSA/PyBmdWxsV2Vla0RheVNjaGVkdWxlRGF5Q29kZXMoKSk7XG5cbiAgaWYgKGRhdGVTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQoZGVmYXVsdFNjaGVkdWxlRGF5cywgY3VycmVudERlZmF1bHRTY2hlZHVsZURheXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlOyAvLyBubyBjaGFuZ2VcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluYWxpemVVcGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCB7IC4uLnN0YXRlLCBkZWZhdWx0U2NoZWR1bGVEYXlzIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogTWF5YmU8SXRlcmFibGU8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBzY2hlZHVsZURheXM6IGN1cnJlbnRTY2hlZHVsZURheXMgfSA9IHN0YXRlO1xuICBjb25zdCBzY2hlZHVsZURheXMgPSBuZXcgU2V0KGNoYW5nZSA/PyBbXSk7XG5cbiAgbGV0IG5ld1NjaGVkdWxlRGF5czogU2V0PERhdGVTY2hlZHVsZURheUNvZGU+IHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBpZiAoY3VycmVudFNjaGVkdWxlRGF5cyAhPSBudWxsICYmIGNoYW5nZSAhPSBudWxsKSB7XG4gICAgaWYgKGRhdGVTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQoc2NoZWR1bGVEYXlzLCBjdXJyZW50U2NoZWR1bGVEYXlzKSkge1xuICAgICAgbmV3U2NoZWR1bGVEYXlzID0gdW5kZWZpbmVkOyAvL25vIGNoYW5nZVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTY2hlZHVsZURheXMgPSBzY2hlZHVsZURheXM7XG4gICAgfVxuICB9IGVsc2UgaWYgKGN1cnJlbnRTY2hlZHVsZURheXMgIT09IGNoYW5nZSkge1xuICAgIG5ld1NjaGVkdWxlRGF5cyA9IGNoYW5nZSA/IHNjaGVkdWxlRGF5cyA6IG51bGw7IC8vIHNldCB0aGUgbmV3IG9uZSwgb3IgY2xlYXIgaXRcbiAgfVxuXG4gIGlmIChuZXdTY2hlZHVsZURheXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluYWxpemVVcGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlLCB7IC4uLnN0YXRlLCBzY2hlZHVsZURheXM6IG5ld1NjaGVkdWxlRGF5cyA/PyB1bmRlZmluZWQgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplVXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhwcmV2aW91c1N0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgcHJldmlvdXNTY2hlZHVsZURheXMgPSBwcmV2aW91c1N0YXRlLmVmZmVjdGl2ZVNjaGVkdWxlRGF5cztcbiAgY29uc3QgbmV4dFNjaGVkdWxlRGF5cyA9IG5leHRTdGF0ZS5zY2hlZHVsZURheXMgPz8gbmV4dFN0YXRlLmRlZmF1bHRTY2hlZHVsZURheXM7XG5cbiAgaWYgKGRhdGVTY2hlZHVsZURheUNvZGVzQXJlU2V0c0VxdWl2YWxlbnQobmV4dFNjaGVkdWxlRGF5cywgcHJldmlvdXNTY2hlZHVsZURheXMpKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTsgLy8gdGhlIGRlZmF1bHQgb3IgaW5wdXQgc2NoZWR1bGUgY2hhbmdlZCBidXQgdGhlIHNjaGVkdWxlIGlzIHN0aWxsIHRoZSBzYW1lLCBzbyBubyBuZWVkIGZvciBhbiB1cGRhdGUuXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWZmZWN0aXZlU2NoZWR1bGVEYXlzID0gbmV3IFNldChzaW1wbGlmeURhdGVTY2hlZHVsZURheUNvZGVzKG5leHRTY2hlZHVsZURheXMpKTtcbiAgICBjb25zdCBhbGxvd2VkRGF5c09mV2VlayA9IGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQobmV4dFNjaGVkdWxlRGF5cyk7XG5cbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoe1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgLy8gdXBkYXRlIHRoZSBlZmZlY3RpdmUgc2NoZWR1bGUgZGF5cyBhbmQgYWxsb3dlZCBkYXlzIG9mIHdlZWtcbiAgICAgIGVmZmVjdGl2ZVNjaGVkdWxlRGF5cyxcbiAgICAgIGFsbG93ZWREYXlzT2ZXZWVrXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGVEYXRlc0NoYW5nZSB7XG4gIHJlc2V0PzogdHJ1ZTtcbiAgdG9nZ2xlPzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgYWRkPzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgcmVtb3ZlPzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgc2V0PzogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0PjtcbiAgc2VsZWN0QWxsPzogQWxsT3JOb25lU2VsZWN0aW9uO1xuICAvKipcbiAgICogSW52ZXJ0cyB0aGUgc2V0IGRhdGUgY2hhbmdpbmcgYmVoYXZpb3Igc28gdGhhdCB0aGUgc2V0IGlucHV0IGlzIHRyZWF0ZWQgYXMgaXRlbXMgdGhhdCBzaG91bGQgYmUgcmV0YWluZWQgaW5zdGVhZCBvZiBleGNsdWRlZC5cbiAgICpcbiAgICogSWdub3JlZCB3aGVuIHNldCBpcyBub3QgdXNlZC4gSWdub3JlZCBmb3Igc2VsZWN0QWxsLlxuICAgKi9cbiAgaW52ZXJ0U2V0QmVoYXZpb3I/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlRGF0ZXNDaGFuZ2UpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleEZhY3RvcnksIGluZGV4RGF5T2ZXZWVrLCBpbnB1dFN0YXJ0OiBjdXJyZW50SW5wdXRTdGFydCwgaW5wdXRFbmQ6IGN1cnJlbnRJbnB1dEVuZCwgbWluTWF4RGF0ZVJhbmdlLCBmaWx0ZXIgfSA9IHN0YXRlO1xuICBjb25zdCB7IHN0YXJ0OiBtaW5EYXRlLCBlbmQ6IG1heERhdGUgfSA9IGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2Uoc3RhdGUpO1xuICBsZXQgaW5wdXRTdGFydCA9IGN1cnJlbnRJbnB1dFN0YXJ0O1xuICBsZXQgaW5wdXRFbmQgPSBjdXJyZW50SW5wdXRFbmQ7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzZXQgb2YgaW5kZXhlcyB0aGF0IGFyZSBpbnRlcm5hbGx5IFwic2VsZWN0ZWRcIiBzbyB0aGF0IHRoZXkgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGlucHV0U3RhcnQvaW5wdXRFbmQgZGF0ZSByYW5nZS5cbiAgICpcbiAgICogRG8gbm90IGNvbmZ1c2UgdGhpcyB3aXRoIHRoZSBhY3R1YWwgaW5kZXhlcyB0aGF0IGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIGxldCB0b2dnbGVkSW5kZXhlczogU2V0PERhdGVCbG9ja0luZGV4PjtcblxuICBmdW5jdGlvbiBhc0luZGV4ZXMoaW5kZXhlczogSXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pik6IERhdGVCbG9ja0luZGV4W10ge1xuICAgIHJldHVybiBpdGVyYWJsZVRvQXJyYXkoaW5kZXhlcykubWFwKGluZGV4RmFjdG9yeSk7XG4gIH1cblxuICBpZiAoY2hhbmdlLnJlc2V0IHx8IGNoYW5nZS5zZWxlY3RBbGwgIT0gbnVsbCB8fCBjaGFuZ2Uuc2V0ICE9IG51bGwpIHtcbiAgICBsZXQgc2V0OiBNYXliZTxJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PiA9IGNoYW5nZS5zZXQgPz8gW107XG4gICAgY29uc3Qgc2VsZWN0QWxsOiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+ID0gY2hhbmdlLnJlc2V0ID09PSB0cnVlID8gc3RhdGUuaW5pdGlhbFNlbGVjdGlvblN0YXRlIDogY2hhbmdlLnNlbGVjdEFsbDtcblxuICAgIHN3aXRjaCAoc2VsZWN0QWxsKSB7XG4gICAgICBjYXNlICdhbGwnOlxuICAgICAgICBpZiAobWluRGF0ZSAhPSBudWxsICYmIG1heERhdGUgIT0gbnVsbCkge1xuICAgICAgICAgIGlucHV0U3RhcnQgPSBtaW5EYXRlO1xuICAgICAgICAgIGlucHV0RW5kID0gbWF4RGF0ZTtcbiAgICAgICAgICBzZXQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBpbnB1dFN0YXJ0ID0gbnVsbDtcbiAgICAgICAgaW5wdXRFbmQgPSBudWxsO1xuICAgICAgICBzZXQgPSBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KGFzSW5kZXhlcyhzZXQpKTtcblxuICAgIGlmIChjaGFuZ2UuaW52ZXJ0U2V0QmVoYXZpb3IgJiYgbWluRGF0ZSAmJiBtYXhEYXRlICYmICFzZWxlY3RBbGwpIHtcbiAgICAgIGNvbnN0IG1pbkluZGV4ID0gaW5kZXhGYWN0b3J5KG1pbkRhdGUpO1xuICAgICAgY29uc3QgbWF4SW5kZXggPSBpbmRleEZhY3RvcnkobWF4RGF0ZSk7XG5cbiAgICAgIGlucHV0U3RhcnQgPSBtaW5EYXRlO1xuICAgICAgaW5wdXRFbmQgPSBtYXhEYXRlO1xuICAgICAgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KHJhbmdlKG1pbkluZGV4LCBtYXhJbmRleCArIDEpLmZpbHRlcigoeCkgPT4gIXRvZ2dsZWRJbmRleGVzLmhhcyh4KSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0b2dnbGVkSW5kZXhlcyA9IG5ldyBTZXQoc3RhdGUudG9nZ2xlZEluZGV4ZXMpO1xuXG4gICAgaWYgKGNoYW5nZS50b2dnbGUpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRUb1RvZ2dsZSA9IGFzSW5kZXhlcyhjaGFuZ2UudG9nZ2xlKS5maWx0ZXIoKGkpID0+IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhpbmRleERheU9mV2VlayhpKSkpO1xuICAgICAgdG9nZ2xlSW5TZXQodG9nZ2xlZEluZGV4ZXMsIGFsbG93ZWRUb1RvZ2dsZSk7XG4gICAgfVxuXG4gICAgbGV0IGFkZFRvRXhjbHVzaW9uOiBNYXliZTxJdGVyYWJsZU9yVmFsdWU8RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+PjtcbiAgICBsZXQgcmVtb3ZlRnJvbUV4Y2x1c2lvbjogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0Pj47XG5cbiAgICBpZiAoY2hhbmdlLmFkZCkge1xuICAgICAgaWYgKGNoYW5nZS5pbnZlcnRTZXRCZWhhdmlvcikge1xuICAgICAgICBhZGRUb0V4Y2x1c2lvbiA9IGNoYW5nZS5hZGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVGcm9tRXhjbHVzaW9uID0gY2hhbmdlLmFkZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLnJlbW92ZSkge1xuICAgICAgaWYgKGNoYW5nZS5pbnZlcnRTZXRCZWhhdmlvcikge1xuICAgICAgICByZW1vdmVGcm9tRXhjbHVzaW9uID0gY2hhbmdlLnJlbW92ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZFRvRXhjbHVzaW9uID0gY2hhbmdlLnJlbW92ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWRkVG9FeGNsdXNpb24pIHtcbiAgICAgIHJlbW92ZUZyb21TZXQodG9nZ2xlZEluZGV4ZXMsIGFzSW5kZXhlcyhhZGRUb0V4Y2x1c2lvbikpO1xuICAgIH1cblxuICAgIGlmIChyZW1vdmVGcm9tRXhjbHVzaW9uKSB7XG4gICAgICBhZGRUb1NldCh0b2dnbGVkSW5kZXhlcywgYXNJbmRleGVzKHJlbW92ZUZyb21FeGNsdXNpb24pKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgdG9nZ2xlZEluZGV4ZXMgfTtcbiAgbmV4dFN0YXRlLmlzRW5hYmxlZERheSA9IGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG5cbiAgLy8gUmVjYWxjdWxhdGUgdGhlIHJhbmdlIGFuZCBzaW1wbGlmaWVkIHRvIGV4Y2x1c2lvbnNcbiAgY29uc3QgcmFuZ2VBbmRFeGNsdXNpb24gPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbihuZXh0U3RhdGUpO1xuXG4gIGlmIChyYW5nZUFuZEV4Y2x1c2lvbikge1xuICAgIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSh7IC4uLm5leHRTdGF0ZSwgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQocmFuZ2VBbmRFeGNsdXNpb24uZXhjbHVkZWQpLCBpbnB1dFN0YXJ0OiByYW5nZUFuZEV4Y2x1c2lvbi5zdGFydCwgaW5wdXRFbmQ6IHJhbmdlQW5kRXhjbHVzaW9uLmVuZCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBubyBzZWxlY3RlZCBkYXlzXG4gICAgcmV0dXJuIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoeyAuLi5zdGF0ZSwgdG9nZ2xlZEluZGV4ZXM6IG5ldyBTZXQoKSwgaW5wdXRTdGFydDogbnVsbCwgaW5wdXRFbmQ6IG51bGwgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY2hhbmdlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGlucHV0U3RhcnQ6IGN1cnJlbnRJbnB1dFN0YXJ0LCBpbnB1dEVuZDogY3VycmVudElucHV0RW5kLCBpbmRleEZhY3RvcnksIG1pbk1heERhdGVSYW5nZSB9ID0gc3RhdGU7XG4gIGNvbnN0IHsgc3RhcnQ6IG1pbkRhdGUsIGVuZDogbWF4RGF0ZSB9OiBQYXJ0aWFsPERhdGVSYW5nZT4gPSBtaW5NYXhEYXRlUmFuZ2UgPz8ge307XG5cbiAgY29uc3QgaW5wdXRTdGFydDogRGF0ZSA9IHN0YXJ0T2ZEYXkoY2hhbmdlLmlucHV0U3RhcnQpO1xuICBjb25zdCBpbnB1dEVuZDogRGF0ZSA9IGVuZE9mRGF5KGNoYW5nZS5pbnB1dEVuZCk7XG5cbiAgY29uc3QgaXNWYWxpZFJhbmdlID0gbWluRGF0ZSAhPSBudWxsIHx8IG1heERhdGUgIT0gbnVsbCA/IGlzRGF0ZUluRGF0ZVJhbmdlRnVuY3Rpb24oeyBzdGFydDogbWluRGF0ZSA/PyB1bmRlZmluZWQsIGVuZDogbWF4RGF0ZSA/PyB1bmRlZmluZWQgfSkgOiAoKSA9PiB0cnVlO1xuXG4gIGlmICghaXNWYWxpZFJhbmdlKGlucHV0U3RhcnQpIHx8ICFpc1ZhbGlkUmFuZ2UoaW5wdXRFbmQpIHx8IChpc1NhbWVEYXRlRGF5KGlucHV0U3RhcnQsIGN1cnJlbnRJbnB1dFN0YXJ0KSAmJiBpc1NhbWVEYXRlRGF5KGlucHV0RW5kLCBjdXJyZW50SW5wdXRFbmQpKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gaWYgbm8gY2hhbmdlLCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gIH1cblxuICAvLyByZXRhaW4gYWxsIGluZGV4ZXMgdGhhdCBhcmUgd2l0aGluIHRoZSBuZXcgcmFuZ2VcbiAgY29uc3QgbWluSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRTdGFydCk7XG4gIGNvbnN0IG1heEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0RW5kKSArIDE7XG5cbiAgY29uc3QgY3VycmVudEluZGV4ZXM6IERhdGVCbG9ja0luZGV4W10gPSBBcnJheS5mcm9tKHN0YXRlLnRvZ2dsZWRJbmRleGVzKTtcbiAgY29uc3QgaXNJbkN1cnJlbnRSYW5nZSA9IGlzSW5kZXhOdW1iZXJJbkluZGV4UmFuZ2VGdW5jdGlvbih7IG1pbkluZGV4LCBtYXhJbmRleCB9KTtcbiAgY29uc3QgZXhjbHVkZWRJbmRleGVzSW5OZXdSYW5nZSA9IGN1cnJlbnRJbmRleGVzLmZpbHRlcihpc0luQ3VycmVudFJhbmdlKTtcbiAgY29uc3QgdG9nZ2xlZEluZGV4ZXMgPSBuZXcgU2V0KGV4Y2x1ZGVkSW5kZXhlc0luTmV3UmFuZ2UpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHsgLi4uc3RhdGUsIHRvZ2dsZWRJbmRleGVzLCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9O1xuICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgbmV4dFN0YXRlLmlzRW5hYmxlZERheSA9IGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG4gIG5leHRTdGF0ZS5jdXJyZW50U2VsZWN0aW9uVmFsdWUgPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZShuZXh0U3RhdGUpO1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5SW5wdXQ+IHtcbiAgY29uc3QgeyBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhGYWN0b3J5LCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgaW5kZXhEYXlPZldlZWsgfSA9IHN0YXRlO1xuICBsZXQgaXNJblN0YXJ0QW5kRW5kUmFuZ2U6IElzRGF0ZVdpdGhpbkRhdGVCbG9ja1JhbmdlRnVuY3Rpb247XG5cbiAgaWYgKGlucHV0U3RhcnQgJiYgaW5wdXRFbmQpIHtcbiAgICBpc0luU3RhcnRBbmRFbmRSYW5nZSA9IGlzRGF0ZVdpdGhpbkRhdGVCbG9ja1JhbmdlRnVuY3Rpb24oeyBzdGFydDogc3RhdGUuc3RhcnQsIHJhbmdlOiB7IHN0YXJ0OiBpbnB1dFN0YXJ0LCBlbmQ6IGlucHV0RW5kIH0gfSk7XG4gIH0gZWxzZSB7XG4gICAgaXNJblN0YXJ0QW5kRW5kUmFuZ2UgPSAoKSA9PiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoaW5wdXQ6IERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeUlucHV0KSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXQpO1xuICAgIGNvbnN0IGRheU9mV2VlayA9IGluZGV4RGF5T2ZXZWVrKGluZGV4KTtcblxuICAgIGNvbnN0IGlzSW5TZWxlY3RlZFJhbmdlID0gaXNJblN0YXJ0QW5kRW5kUmFuZ2UoaW5kZXgpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBzdGF0ZS50b2dnbGVkSW5kZXhlcy5oYXMoaW5kZXgpO1xuICAgIGNvbnN0IGlzQWxsb3dlZERheU9mV2VlayA9IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhkYXlPZldlZWspO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gaXNBbGxvd2VkRGF5T2ZXZWVrICYmICgoaXNJblNlbGVjdGVkUmFuZ2UgJiYgIWlzU2VsZWN0ZWQpIHx8IChpc1NlbGVjdGVkICYmICFpc0luU2VsZWN0ZWRSYW5nZSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlPiB7XG4gIGNvbnN0IHsgaW5kZXhGYWN0b3J5LCBhbGxvd2VkRGF5c09mV2VlaywgZWZmZWN0aXZlU2NoZWR1bGVEYXlzLCBpbmRleERheU9mV2VlaywgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIsIGZpbHRlciB9ID0gc3RhdGU7XG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24oc3RhdGUpO1xuXG4gIGlmIChyYW5nZUFuZEV4Y2x1c2lvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IHN0YXJ0OiByYW5nZVN0YXJ0LCBlbmQ6IHJhbmdlRW5kLCBleGNsdWRlZDogYWxsRXhjbHVkZWQsIGRhdGVCbG9ja1JhbmdlIH0gPSByYW5nZUFuZEV4Y2x1c2lvbjtcbiAgbGV0IGZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2U6IERhdGVCbG9ja0luZGV4W10gPSBbXTtcbiAgbGV0IGluZGV4T2Zmc2V0ID0gZGF0ZUJsb2NrUmFuZ2UuaTtcblxuICBsZXQgc3RhcnQgPSByYW5nZVN0YXJ0O1xuICBsZXQgZW5kID0gcmFuZ2VFbmQ7XG5cbiAgLy8gSWYgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgaXMgdHJ1ZSwgdGhlbiB3ZSBuZWVkIHRvIG9mZnNldCB0aGUgdmFsdWVzIHRvIGJlIHJlbGF0aXZlIHRvIHRoYXQgc3RhcnQuXG4gIGlmIChjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAmJiBmaWx0ZXI/LnN0YXJ0KSB7XG4gICAgc3RhcnQgPSBmaWx0ZXIuc3RhcnQ7XG5cbiAgICBpZiAoZmlsdGVyPy5lbmQpIHtcbiAgICAgIGVuZCA9IGNvcHlIb3Vyc0FuZE1pbnV0ZXNGcm9tRGF0ZShlbmQsIGZpbHRlci5lbmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQgPSBpbmRleEZhY3RvcnkocmFuZ2VTdGFydCkgLSBpbmRleEZhY3Rvcnkoc3RhcnQpO1xuICAgIGZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2UgPSByYW5nZSgwLCBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0KTtcbiAgICBpbmRleE9mZnNldCA9IGluZGV4T2Zmc2V0IC0gZmlsdGVyU3RhcnRJbmRleE9mZnNldDtcbiAgfVxuXG4gIGNvbnN0IGV4Y2x1ZGVkID0gY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXJcbiAgICA/IGFsbEV4Y2x1ZGVkLmZpbHRlcigoeCkgPT4ge1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkSW5kZXggPSBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoeCkpOyAvLyA/Pz9cbiAgICAgICAgcmV0dXJuIGlzRXhjbHVkZWRJbmRleDtcbiAgICAgIH0pXG4gICAgOiBhbGxFeGNsdWRlZDtcblxuICBjb25zdCBvZmZzZXRFeGNsdWRlZDogRGF0ZUJsb2NrSW5kZXhbXSA9IGV4Y2x1ZGVkLm1hcCgoeCkgPT4geCAtIGluZGV4T2Zmc2V0KTsgLy8gc2V0IHRvIHRoZSBwcm9wZXIgb2Zmc2V0XG5cbiAgY29uc3QgZXggPSBbLi4uZmlsdGVyT2Zmc2V0RXhjbHVkZWRSYW5nZSwgLi4ub2Zmc2V0RXhjbHVkZWRdO1xuXG4gIGNvbnN0IHc6IERhdGVTY2hlZHVsZUVuY29kZWRXZWVrID0gZGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWsoZWZmZWN0aXZlU2NoZWR1bGVEYXlzKTtcbiAgY29uc3QgZDogRGF0ZUJsb2NrSW5kZXhbXSA9IFtdOyAvLyBcImluY2x1ZGVkXCIgYmxvY2tzIGFyZSBuZXZlciB1c2VkL2NhbGN1bGF0ZWQuXG5cbiAgLy8gQWx3YXlzIGVuc3VyZSB0aGUgZW5kIGlzIGFmdGVyIG9yIGVxdWFsIHRvIHRoZSBzdGFydC5cbiAgaWYgKGlzQmVmb3JlKGVuZCwgc3RhcnQpKSB7XG4gICAgZW5kID0gc3RhcnQ7IC8vIGVuZCBpcyBzdGFydFxuICB9XG5cbiAgY29uc3QgZGF0ZVNjaGVkdWxlUmFuZ2U6IERhdGVTY2hlZHVsZVJhbmdlID0ge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICB3LFxuICAgIGQsXG4gICAgZXhcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGRhdGVTY2hlZHVsZVJhbmdlLFxuICAgIG1pbk1heFJhbmdlOiB7IHN0YXJ0LCBlbmQgfVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbiBleHRlbmRzIERhdGVSYW5nZSB7XG4gIGRhdGVCbG9ja1JhbmdlOiBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZTtcbiAgZXhjbHVkZWQ6IERhdGVCbG9ja0luZGV4W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbihzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uPiB7XG4gIGNvbnN0IHsgaXNFbmFibGVkRGF5LCBpc0VuYWJsZWRGaWx0ZXJEYXkgfSA9IHN0YXRlO1xuICBjb25zdCBkYXRlRmFjdG9yeSA9IGRhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5KHN0YXRlKTtcbiAgY29uc3QgZGF0ZUJsb2NrUmFuZ2UgPSBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVCbG9ja1JhbmdlKHN0YXRlKTtcblxuICBpZiAoZGF0ZUJsb2NrUmFuZ2UgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsOyAvLyByZXR1cm5zIG51bGwgaWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICB9XG5cbiAgY29uc3Qgc3RhcnQgPSBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS5pKTtcbiAgY29uc3QgZW5kID0gZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UudG8pO1xuXG4gIGNvbnN0IGV4Y2x1ZGVkOiBEYXRlQmxvY2tJbmRleFtdID0gcmFuZ2UoZGF0ZUJsb2NrUmFuZ2UuaSwgZGF0ZUJsb2NrUmFuZ2UudG8gKyAxKS5maWx0ZXIoKHgpID0+IHtcbiAgICBjb25zdCBpc0V4Y2x1ZGVkSW5kZXggPSAhaXNFbmFibGVkRGF5KHgpIHx8ICFpc0VuYWJsZWRGaWx0ZXJEYXkoeCk7XG4gICAgcmV0dXJuIGlzRXhjbHVkZWRJbmRleDtcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0OiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24gPSB7XG4gICAgZGF0ZUJsb2NrUmFuZ2UsXG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIGV4Y2x1ZGVkXG4gIH07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPERhdGVSYW5nZT4ge1xuICBjb25zdCBkYXRlRmFjdG9yeSA9IGRhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5KHN0YXRlKTtcbiAgY29uc3QgZGF0ZUJsb2NrUmFuZ2UgPSBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVCbG9ja1JhbmdlKHN0YXRlKTtcbiAgY29uc3QgZGF0ZVJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+ID0gZGF0ZUJsb2NrUmFuZ2UgIT0gbnVsbCA/IHsgc3RhcnQ6IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLmkpLCBlbmQ6IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLnRvIGFzIG51bWJlcikgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGRhdGVSYW5nZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uRGF0ZUJsb2NrUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPERhdGVCbG9ja1JhbmdlV2l0aFJhbmdlPiB7XG4gIGNvbnN0IHsgYWxsb3dlZERheXNPZldlZWssIGluZGV4RmFjdG9yeSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIGluZGV4RGF5T2ZXZWVrLCBpc0VuYWJsZWREYXksIGlzRW5hYmxlZEZpbHRlckRheSB9ID0gc3RhdGU7XG4gIGNvbnN0IGVuYWJsZWRFeGNsdXNpb25JbmRleGVzID0gQXJyYXkuZnJvbShzdGF0ZS50b2dnbGVkSW5kZXhlcykuZmlsdGVyKChpKSA9PiBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoaSkpKTtcbiAgY29uc3QgbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMgPSBtaW5BbmRNYXhOdW1iZXIoZW5hYmxlZEV4Y2x1c2lvbkluZGV4ZXMpO1xuXG4gIGxldCBzdGFydFJhbmdlOiBNYXliZTxEYXRlQmxvY2tJbmRleD47XG4gIGxldCBlbmRSYW5nZTogTWF5YmU8RGF0ZUJsb2NrSW5kZXg+O1xuXG4gIGlmIChtaW5BbmRNYXhTZWxlY3RlZFZhbHVlcykge1xuICAgIHN0YXJ0UmFuZ2UgPSBtaW5BbmRNYXhTZWxlY3RlZFZhbHVlcy5taW47XG4gICAgZW5kUmFuZ2UgPSBtaW5BbmRNYXhTZWxlY3RlZFZhbHVlcy5tYXg7XG4gIH1cblxuICBpZiAoaW5wdXRTdGFydCAhPSBudWxsICYmIGlucHV0RW5kICE9IG51bGwpIHtcbiAgICBjb25zdCBpbnB1dFN0YXJ0SW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRTdGFydCk7XG4gICAgY29uc3QgaW5wdXRFbmRJbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dEVuZCk7XG5cbiAgICBzdGFydFJhbmdlID0gc3RhcnRSYW5nZSAhPSBudWxsID8gTWF0aC5taW4oaW5wdXRTdGFydEluZGV4LCBzdGFydFJhbmdlKSA6IGlucHV0U3RhcnRJbmRleDtcbiAgICBlbmRSYW5nZSA9IGVuZFJhbmdlICE9IG51bGwgPyBNYXRoLm1heChpbnB1dEVuZEluZGV4LCBlbmRSYW5nZSkgOiBpbnB1dEVuZEluZGV4O1xuICB9XG5cbiAgaWYgKHN0YXJ0UmFuZ2UgIT0gbnVsbCAmJiBlbmRSYW5nZSAhPSBudWxsKSB7XG4gICAgY29uc3Qgc2NhblN0YXJ0SW5kZXggPSBzdGFydFJhbmdlO1xuICAgIGNvbnN0IHNjYW5FbmRJbmRleCA9IGVuZFJhbmdlO1xuXG4gICAgLy8gY2xlYXIgc3RhcnQgYW5kIGVuZFxuICAgIHN0YXJ0UmFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgZW5kUmFuZ2UgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiB0aGUgbWluIGlzIGVxdWFsIHRvIHRoZSBzdGFydCBpbmRleCwgdGhlbiB3ZSBhcmUgaW4gdGhlIHJhbmdlIGFuZCBuZWVkIHRvIGl0ZXJhdGUgZGF0ZXMgdW50aWwgd2UgZmluZCBvbmUgdGhhdCBpcyBub3Qgc2VsZWN0ZWQvZXhjbHVkZWQuXG4gICAgZm9yIChsZXQgaSA9IHNjYW5TdGFydEluZGV4OyBpIDw9IHNjYW5FbmRJbmRleDsgaSArPSAxKSB7XG4gICAgICBpZiAoaXNFbmFibGVkRmlsdGVyRGF5KGkpICYmIGlzRW5hYmxlZERheShpKSkge1xuICAgICAgICBzdGFydFJhbmdlID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2FtZSB3aXRoIHRoZSBtYXhcbiAgICBmb3IgKGxldCBpID0gc2NhbkVuZEluZGV4OyBpID49IHNjYW5TdGFydEluZGV4OyBpIC09IDEpIHtcbiAgICAgIGlmIChpc0VuYWJsZWRGaWx0ZXJEYXkoaSkgJiYgaXNFbmFibGVkRGF5KGkpKSB7XG4gICAgICAgIGVuZFJhbmdlID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXJ0UmFuZ2UgIT0gbnVsbCAmJiBlbmRSYW5nZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgaTogc3RhcnRSYW5nZSwgdG86IGVuZFJhbmdlIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -174,7 +174,7 @@ class DbxCalendarScheduleSelectionStore extends ComponentStore {
174
174
  this.currentSelectionValue$ = this.state$.pipe(map((x) => x.currentSelectionValue), shareReplay(1));
175
175
  this.currentSelectionValueStart$ = this.currentSelectionValue$.pipe(map((x) => x === null || x === void 0 ? void 0 : x.dateScheduleRange.start), distinctUntilChanged(isSameDate), shareReplay(1));
176
176
  this.currentSelectionValueDateBlockTimingDateFactory$ = this.currentSelectionValueStart$.pipe(map((start) => (start ? dateBlockTimingDateFactory({ start }) : undefined)), shareReplay(1));
177
- this.currentSelectionValueDateBlockDurationSpan$ = this.currentSelectionValue$.pipe(map((x) => (x ? expandDateScheduleRange(x) : [])), shareReplay(1));
177
+ this.currentSelectionValueDateBlockDurationSpan$ = this.currentSelectionValue$.pipe(map((x) => (x ? expandDateScheduleRange(Object.assign(Object.assign({}, x), { duration: 1 })) : [])), shareReplay(1));
178
178
  this.selectionValueSelectedIndexes$ = this.currentSelectionValueDateBlockDurationSpan$.pipe(map((x) => new Set(x.map((y) => y.i))), distinctUntilHasDifferentValues(), shareReplay(1));
179
179
  this.selectionValueSelectedDates$ = this.currentSelectionValueDateBlockTimingDateFactory$.pipe(switchMap((dateFactory) => {
180
180
  return dateFactory ? this.selectionValueSelectedIndexes$.pipe(map((x) => mapValuesToSet(x, (y) => formatToISO8601DayString(dateFactory(y))))) : of(new Set());
@@ -189,7 +189,7 @@ class DbxCalendarScheduleSelectionStore extends ComponentStore {
189
189
  return x;
190
190
  }), distinctUntilChanged(), shareReplay(1));
191
191
  this.selectionValueWithTimezone$ = this.currentSelectionValueWithTimezone$.pipe(filterMaybe(), shareReplay(1));
192
- this.selectionValueWithTimezoneDateBlockDurationSpan$ = this.selectionValueWithTimezone$.pipe(map((x) => expandDateScheduleRange(x)), shareReplay(1));
192
+ this.selectionValueWithTimezoneDateBlockDurationSpan$ = this.selectionValueWithTimezone$.pipe(map((x) => expandDateScheduleRange(Object.assign(Object.assign({}, x), { duration: 1 }))), shareReplay(1));
193
193
  this.nextToggleSelection$ = this.hasConfiguredMinMaxRange$.pipe(switchMap((hasConfiguredMinMaxRange) => {
194
194
  let obs;
195
195
  if (hasConfiguredMinMaxRange) {