@dereekb/dbx-form 9.23.22 → 9.23.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.
@@ -1,10 +1,10 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { dateBlockDayOfWeekFactory, dateBlockTimingDateFactory, dateScheduleDateFilter, copyDateScheduleDateFilterConfig, DateScheduleDayCode, dateScheduleEncodedWeek, dateTimingRelativeIndexFactory, expandDateScheduleDayCodes, expandDateScheduleDayCodesToDayOfWeekSet, findMaxDate, findMinDate, isDateInDateRangeFunction, isDateWithinDateBlockRangeFunction, isSameDate, isSameDateDay, isSameDateRange, isSameDateScheduleRange, dateTimingRelativeIndexArrayFactory, isInfiniteDateRange, copyHoursAndMinutesFromDate } from '@dereekb/date';
2
+ import { dateBlockDayOfWeekFactory, dateBlockTimingDateFactory, dateScheduleDateFilter, copyDateScheduleDateFilterConfig, DateScheduleDayCode, dateScheduleEncodedWeek, dateTimingRelativeIndexFactory, expandDateScheduleDayCodes, expandDateScheduleDayCodesToDayOfWeekSet, findMaxDate, findMinDate, isDateInDateRangeFunction, isDateWithinDateBlockRangeFunction, isSameDate, isSameDateDay, isSameDateRange, isSameDateScheduleRange, dateTimingRelativeIndexArrayFactory, isInfiniteDateRange, copyHoursAndMinutesFromDate, dateTimezoneUtcNormal } from '@dereekb/date';
3
3
  import { filterMaybe } from '@dereekb/rxjs';
4
4
  import { iterableToArray, addToSet, toggleInSet, isIndexNumberInIndexRangeFunction, minAndMaxNumber, setsAreEquivalent, range, unique, mergeArrays } from '@dereekb/util';
5
5
  import { ComponentStore } from '@ngrx/component-store';
6
6
  import { startOfDay, endOfDay, isBefore } from 'date-fns';
7
- import { distinctUntilChanged, map, shareReplay, switchMap, tap, first } from 'rxjs';
7
+ import { distinctUntilChanged, map, shareReplay, switchMap, tap, first, combineLatestWith } from 'rxjs';
8
8
  import { defaultCalendarScheduleSelectionCellContentFactory } from './calendar.schedule.selection';
9
9
  import * as i0 from "@angular/core";
10
10
  export function initialCalendarScheduleSelectionState() {
@@ -38,6 +38,9 @@ export function calendarScheduleMinAndMaxDateRange(x) {
38
38
  end: calendarScheduleMaxDate(x) || undefined
39
39
  };
40
40
  }
41
+ export function calendarScheduleStartBeingUsedFromFilter(x) {
42
+ return x.computeSelectionResultRelativeToFilter && x.filter?.start != null;
43
+ }
41
44
  export class DbxCalendarScheduleSelectionStore extends ComponentStore {
42
45
  constructor() {
43
46
  super(initialCalendarScheduleSelectionState());
@@ -69,10 +72,27 @@ export class DbxCalendarScheduleSelectionStore extends ComponentStore {
69
72
  this.isEnabledDayFunction$ = this.state$.pipe(map((x) => x.isEnabledDay), shareReplay(1));
70
73
  this.currentDateRange$ = this.state$.pipe(map(computeCalendarScheduleSelectionRange), distinctUntilChanged((a, b) => isSameDateRange(a, b)), shareReplay(1));
71
74
  this.computeSelectionResultRelativeToFilter$ = this.state$.pipe(map((x) => x.computeSelectionResultRelativeToFilter), shareReplay(1));
72
- this.startBeingUsedFromFilter$ = this.state$.pipe(map((x) => x.computeSelectionResultRelativeToFilter && x.filter?.start != null), shareReplay(1));
75
+ this.startBeingUsedFromFilter$ = this.state$.pipe(
76
+ //
77
+ map(calendarScheduleStartBeingUsedFromFilter), distinctUntilChanged(), shareReplay(1));
73
78
  this.dateRange$ = this.currentDateRange$.pipe(filterMaybe(), shareReplay(1));
74
79
  this.scheduleDays$ = this.state$.pipe(map((x) => x.scheduleDays), distinctUntilChanged(setsAreEquivalent), shareReplay(1));
80
+ this.currentTimezone$ = this.state$.pipe(map((x) => x.timezone), distinctUntilChanged(), shareReplay(1));
81
+ this.effectiveTimezone$ = this.state$.pipe(map((x) => (!calendarScheduleStartBeingUsedFromFilter(x) && x.timezone ? x.timezone : undefined)), distinctUntilChanged(), shareReplay(1));
82
+ this.effectiveTimezoneNormal$ = this.state$.pipe(map((x) => (!calendarScheduleStartBeingUsedFromFilter(x) && x.timezoneNormal ? x.timezoneNormal : undefined)), distinctUntilChanged(), shareReplay(1));
75
83
  this.currentSelectionValue$ = this.state$.pipe(map((x) => x.currentSelectionValue), shareReplay(1));
84
+ this.currentSelectionValueWithTimezone$ = this.currentSelectionValue$.pipe(combineLatestWith(this.effectiveTimezoneNormal$), map(([x, timezoneNormal]) => {
85
+ if (x && timezoneNormal) {
86
+ x = {
87
+ dateScheduleRange: {
88
+ ...x.dateScheduleRange,
89
+ start: timezoneNormal.targetDateToSystemDate(x.dateScheduleRange.start),
90
+ end: timezoneNormal.targetDateToSystemDate(x.dateScheduleRange.end)
91
+ }
92
+ };
93
+ }
94
+ return x;
95
+ }), distinctUntilChanged(), shareReplay(1));
76
96
  this.nextToggleSelection$ = this.hasConfiguredMinMaxRange$.pipe(switchMap((hasConfiguredMinMaxRange) => {
77
97
  let obs;
78
98
  if (hasConfiguredMinMaxRange) {
@@ -83,8 +103,8 @@ export class DbxCalendarScheduleSelectionStore extends ComponentStore {
83
103
  }
84
104
  return obs;
85
105
  }), shareReplay(1));
86
- this.selectionValue$ = this.currentSelectionValue$.pipe(filterMaybe(), shareReplay(1));
87
- this.currentDateScheduleRangeValue$ = this.currentSelectionValue$.pipe(map((x) => x?.dateScheduleRange), distinctUntilChanged(isSameDateScheduleRange), shareReplay(1));
106
+ this.selectionValue$ = this.currentSelectionValueWithTimezone$.pipe(filterMaybe(), shareReplay(1));
107
+ this.currentDateScheduleRangeValue$ = this.currentSelectionValueWithTimezone$.pipe(map((x) => x?.dateScheduleRange), distinctUntilChanged(isSameDateScheduleRange), shareReplay(1));
88
108
  this.dateScheduleRangeValue$ = this.currentDateScheduleRangeValue$.pipe(filterMaybe(), shareReplay(1));
89
109
  this.cellContentFactory$ = this.state$.pipe(map((x) => x.cellContentFactory), distinctUntilChanged(), shareReplay(1));
90
110
  this.isCustomized$ = this.state$.pipe(map((x) => x.selectedIndexes.size > 0), distinctUntilChanged(), shareReplay(1));
@@ -94,7 +114,7 @@ export class DbxCalendarScheduleSelectionStore extends ComponentStore {
94
114
  this.setExclusions = this.updater((state, exclusions) => updateStateWithExclusions(state, exclusions));
95
115
  this.setComputeSelectionResultRelativeToFilter = this.updater((state, computeSelectionResultRelativeToFilter) => updateStateWithComputeSelectionResultRelativeToFilter(state, computeSelectionResultRelativeToFilter));
96
116
  this.clearFilter = this.updater((state) => updateStateWithFilter(state, undefined));
97
- this.setTimezone = this.updater((state, timezone) => ({ ...state, timezone }));
117
+ this.setTimezone = this.updater((state, timezone) => ({ ...state, timezone, timezoneNormal: timezone ? dateTimezoneUtcNormal({ timezone }) : undefined }));
98
118
  this.setInputRange = this.updater((state, range) => updateStateWithChangedRange(state, range));
99
119
  this.toggleSelectedDates = this.updater((state, toggle) => updateStateWithChangedDates(state, { toggle }));
100
120
  this.addSelectedDates = this.updater((state, add) => updateStateWithChangedDates(state, { add }));
@@ -207,14 +227,32 @@ export function updateStateWithFilter(state, inputFilter) {
207
227
  return state;
208
228
  }
209
229
  export function updateStateWithDateScheduleRangeValue(state, change) {
210
- const isSameValue = isSameDateScheduleRange(state.currentSelectionValue?.dateScheduleRange, change);
230
+ const { timezoneNormal } = state;
231
+ let currentDateScheduleRange = state.currentSelectionValue?.dateScheduleRange;
232
+ if (!calendarScheduleStartBeingUsedFromFilter(state) && timezoneNormal) {
233
+ if (change) {
234
+ change = {
235
+ ...change,
236
+ start: timezoneNormal.systemDateToTargetDate(change.start),
237
+ end: timezoneNormal.systemDateToTargetDate(change.end)
238
+ };
239
+ }
240
+ if (currentDateScheduleRange) {
241
+ currentDateScheduleRange = {
242
+ ...currentDateScheduleRange,
243
+ start: timezoneNormal.targetDateToSystemDate(currentDateScheduleRange.start),
244
+ end: timezoneNormal.targetDateToSystemDate(currentDateScheduleRange.end)
245
+ };
246
+ }
247
+ }
248
+ const isSameValue = isSameDateScheduleRange(currentDateScheduleRange, change);
211
249
  if (isSameValue) {
212
250
  return state;
213
251
  }
214
252
  else {
215
253
  if (change != null) {
216
254
  const nextState = { ...state, inputStart: change.start, inputEnd: change.end, selectedIndexes: new Set(change.ex) };
217
- return updateStateWithChangedScheduleDays(finalizeNewCalendarScheduleSelectionState(nextState), expandDateScheduleDayCodes(change.w));
255
+ return updateStateWithChangedScheduleDays(finalizeNewCalendarScheduleSelectionState(nextState), expandDateScheduleDayCodes(change.w || '89'));
218
256
  }
219
257
  else {
220
258
  return noSelectionCalendarScheduleSelectionState(state); // clear selection, retain disabled days
@@ -449,4 +487,4 @@ export function computeCalendarScheduleSelectionDateBlockRange(state) {
449
487
  return undefined;
450
488
  }
451
489
  }
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwseUJBQXlCLEVBR3pCLDBCQUEwQixFQUcxQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBRWhDLG1CQUFtQixFQUNuQix1QkFBdUIsRUFJdkIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQix3Q0FBd0MsRUFDeEMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsa0NBQWtDLEVBQ2xDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQTRELGVBQWUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFZLGVBQWUsRUFBRSxpQkFBaUIsRUFBYSxLQUFLLEVBQXNCLE1BQU0sRUFBRSxXQUFXLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQzVTLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQVksVUFBVSxFQUFFLFFBQVEsRUFBd0IsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFGLE9BQU8sRUFBYyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFpQixTQUFTLEVBQU0sR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwSCxPQUFPLEVB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QUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO0tBQ2pGO0lBRUQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7UUFDMUMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUU5QixzQkFBc0I7UUFDdEIsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixRQUFRLEdBQUcsU0FBUyxDQUFDO1FBRXJCLDhJQUE4STtRQUM5SSxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLElBQUksWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTTthQUNQO1NBQ0Y7UUFFRCxvQkFBb0I7UUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RELElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE1BQU07YUFDUDtTQUNGO0tBQ0Y7SUFFRCxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtRQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7S0FDeEM7U0FBTTtRQUNMLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIGRhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIERhdGVCbG9ja0luZGV4LFxuICBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZSxcbiAgZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnksXG4gIERhdGVPckRhdGVCbG9ja0luZGV4LFxuICBEYXRlUmFuZ2UsXG4gIGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIsXG4gIGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXlDb2RlLFxuICBkYXRlU2NoZWR1bGVFbmNvZGVkV2VlayxcbiAgRGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWssXG4gIERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSxcbiAgZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXMsXG4gIGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQsXG4gIGZpbmRNYXhEYXRlLFxuICBmaW5kTWluRGF0ZSxcbiAgaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbixcbiAgSXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNTYW1lRGF0ZSxcbiAgaXNTYW1lRGF0ZURheSxcbiAgaXNTYW1lRGF0ZVJhbmdlLFxuICBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2UsXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4QXJyYXlGYWN0b3J5LFxuICBpc0luZmluaXRlRGF0ZVJhbmdlLFxuICBjb3B5SG91cnNBbmRNaW51dGVzRnJvbURhdGVcbn0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBmaWx0ZXJNYXliZSwgc3dpdGNoTWFwVG9EZWZhdWx0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBNYXliZSwgVGltZXpvbmVTdHJpbmcsIERlY2lzaW9uRnVuY3Rpb24sIEl0ZXJhYmxlT3JWYWx1ZSwgaXRlcmFibGVUb0FycmF5LCBhZGRUb1NldCwgdG9nZ2xlSW5TZXQsIGlzSW5kZXhOdW1iZXJJbkluZGV4UmFuZ2VGdW5jdGlvbiwgTWF5YmVNYXAsIG1pbkFuZE1heE51bWJlciwgc2V0c0FyZUVxdWl2YWxlbnQsIERheU9mV2VlaywgcmFuZ2UsIEFsbE9yTm9uZVNlbGVjdGlvbiwgdW5pcXVlLCBtZXJnZUFycmF5cywgQXJyYXlPclZhbHVlLCBvYmplY3RIYXNOb0tleXMgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IGFkZFllYXJzLCBzdGFydE9mRGF5LCBlbmRPZkRheSwgc3RhcnRPZlllYXIsIGlzQWZ0ZXIsIGlzQmVmb3JlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIGNvbWJpbmVMYXRlc3QsIHN3aXRjaE1hcCwgb2YsIHRhcCwgZmlyc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnksIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZSwgZGVmYXVsdENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnkgfSBmcm9tICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIElucHV0IFN0YXJ0IERhdGVcbiAgICovXG4gIGlucHV0U3RhcnQ6IERhdGU7XG4gIC8qKlxuICAgKiBJbnB1dCBFbmQgRGF0ZVxuICAgKi9cbiAgaW5wdXRFbmQ6IERhdGU7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UgPSBQYXJ0aWFsPE1heWJlTWFwPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSBleHRlbmRzIFBhcnRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2Uge1xuICAvKipcbiAgICogRmlsdGVycyB0aGUgZGF5cyBvZiB0aGUgc2NoZWR1bGUgdG8gb25seSBhbGxvdyBzZWxlY3RpbmcgZGF5cyBpbiB0aGUgc2NoZWR1bGUuXG4gICAqL1xuICBmaWx0ZXI/OiBNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZXhjbHVzaW9ucyB0aGF0IG1heSBub3QgYmUgZGVmaW5lZCB3aXRoaW4gdGhlIGZpbHRlci5cbiAgICovXG4gIGlucHV0RXhjbHVzaW9ucz86IE1heWJlPEFycmF5T3JWYWx1ZTxEYXRlT3JEYXRlUmFuZ2VPckRhdGVCbG9ja0luZGV4T3JEYXRlQmxvY2tSYW5nZT4+O1xuICAvKipcbiAgICogVGhlIGNvbXB1dGVkIGV4Y2x1c2lvbnMgZ2l2ZW4gdGhlIGlucHV0IGV4Y2x1c2lvbnMuXG4gICAqL1xuICBjb21wdXRlZEV4Y2x1c2lvbnM/OiBNYXliZTxEYXRlQmxvY2tJbmRleFtdPjtcbiAgLyoqXG4gICAqIFRoZSBtaW4vbWF4IGRhdGUgcmFuZ2UuIFVzZWQgZm9yIHJlc3RyaWN0aW5nIHRoZSBtaW4vbWF4IHZhbHVlLiBXb3JrcyB3aXRoIHRoZSBmaWx0ZXIuIFRoZSBncmVhdGVyL2xlc3NlciBvZiB0aGUgc3RhcnQvZW5kIGRhdGVzIGFyZSB1c2VkIGlmIGJvdGggYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgbWluTWF4RGF0ZVJhbmdlPzogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFN0YXJ0IGRhdGUuIElzIHVwZGF0ZWQgYXMgdGhlIGlucHV0U3RhcnQgaXMgbW9kaWZpZWQgb3IgZmlsdGVyIGlzIHByb3ZpZGVkIHRoYXQgcHJvdmlkZXMgdGhlIHN0YXJ0IGRhdGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRvZGF5IGFuZCB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIHN0YXJ0OiBEYXRlO1xuICAvKipcbiAgICogRGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5XG4gICAqL1xuICBpbmRleEZhY3Rvcnk6IERhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeTtcbiAgLyoqXG4gICAqIEFycmF5IG9mIG1hbnVhbGx5IHNlbGVjdGVkIGRhdGVzLlxuICAgKlxuICAgKiBWYWx1ZXMgdGhhdCBleGlzdCBvdXRzaWRlIG9mIHRoZSBcImlucHV0XCIgcmFuZ2UgYXJlIGNvbnNpZGVyZWQgdG9nZ2xlZCBvbiwgd2hpbGUgdGhvc2VcbiAgICogdGhhdCBhcmUgc2VsZWN0ZWQgd2l0aGluIHRoZSByYW5nZSBhcmUgY29uc2lkZXJlZCB0b2dnbGVkIG9mZi5cbiAgICpcbiAgICogSWYgZGF0ZXMgYXJlIHNlbGVjdGVkLCBhbmQgdGhlbiBhIHJhbmdlIGlzIHNlbGVjdGVkLCB0aGVuIHRob3NlIGRhdGVzIHdpdGhpbiB0aGUgcmFuZ2UgdGhhdCBmYWxsXG4gICAqIHdpdGhpbiB0aGUgcmFuZ2UgYXJlIGNsZWFyZWQgZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIFRoZXNlIGluZGV4ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBkYXRlLlxuICAgKi9cbiAgc2VsZWN0ZWRJbmRleGVzOiBTZXQ8RGF0ZUJsb2NrSW5kZXg+O1xuICAvKipcbiAgICogRGF5cyBvZiB0aGUgc2NoZWR1bGUgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBwaWNrZWQuXG4gICAqL1xuICBzY2hlZHVsZURheXM6IFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPjtcbiAgLyoqXG4gICAqIFNldCBvZiB0aGUgZGF5cyBvZiB3ZWVrIHRoYXQgYXJlIGFsbG93ZWQuXG4gICAqL1xuICBhbGxvd2VkRGF5c09mV2VlazogU2V0PERheU9mV2Vlaz47XG4gIC8qKlxuICAgKlxuICAgKi9cbiAgaW5kZXhEYXlPZldlZWs6IERhdGVCbG9ja0RheU9mV2Vla0ZhY3Rvcnk7XG4gIC8qKlxuICAgKiBEZWNpc2lvbiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGlzIGVuYWJsZWQgZ2l2ZW4gdGhlIGN1cnJlbnQgZmlsdGVyLlxuICAgKi9cbiAgaXNFbmFibGVkRmlsdGVyRGF5OiBEZWNpc2lvbkZ1bmN0aW9uPERhdGVPckRhdGVCbG9ja0luZGV4PjtcbiAgLyoqXG4gICAqIERlY2lzaW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB0YWtlIHRoZSBjdXJyZW50IGZpbHRlciBpbnRvIGFjY291bnQuXG4gICAqL1xuICBpc0VuYWJsZWREYXk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+O1xuICAvKipcbiAgICogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeSBmb3IgdGhlIHZpZXcuXG4gICAqL1xuICBjZWxsQ29udGVudEZhY3Rvcnk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3Rvcnk7XG4gIC8qKlxuICAgKiBDdXJyZW50IHNlbGVjdGlvbiB2YWx1ZS5cbiAgICovXG4gIGN1cnJlbnRTZWxlY3Rpb25WYWx1ZT86IE1heWJlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIGZpbHRlciBhcyB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBpbnN0ZWFkIG9mIG9wdGltaXppbmcgZm9yIHRoZSBjdXJyZW50IGluZGV4LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI/OiBNYXliZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHNlbGVjdGlvbiBzdGF0ZSB3aGVuIHRoZSBjYWxlbmRhciBpcyByZXNldC5cbiAgICovXG4gIGluaXRpYWxTZWxlY3Rpb25TdGF0ZT86IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKCk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHNjaGVkdWxlRGF5cyA9IG5ldyBTZXQoW0RhdGVTY2hlZHVsZURheUNvZGUuV0VFS0RBWSwgRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLRU5EXSk7XG4gIGNvbnN0IGFsbG93ZWREYXlzT2ZXZWVrID0gZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXNUb0RheU9mV2Vla1NldChBcnJheS5mcm9tKHNjaGVkdWxlRGF5cykpO1xuICBjb25zdCBzdGFydCA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoKSk7XG4gIGNvbnN0IGluZGV4RmFjdG9yeSA9IGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSh7IHN0YXJ0IH0pO1xuICBjb25zdCBpbmRleERheU9mV2VlayA9IGRhdGVCbG9ja0RheU9mV2Vla0ZhY3Rvcnkoc3RhcnQpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQsXG4gICAgaW5kZXhGYWN0b3J5LFxuICAgIHNlbGVjdGVkSW5kZXhlczogbmV3IFNldCgpLFxuICAgIHNjaGVkdWxlRGF5cyxcbiAgICBhbGxvd2VkRGF5c09mV2VlayxcbiAgICBpbmRleERheU9mV2VlayxcbiAgICBpc0VuYWJsZWRGaWx0ZXJEYXk6ICgpID0+IHRydWUsXG4gICAgaXNFbmFibGVkRGF5OiAoKSA9PiBmYWxzZSxcbiAgICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogdHJ1ZSxcbiAgICBjZWxsQ29udGVudEZhY3Rvcnk6IGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluRGF0ZSh4OiBQaWNrPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgJ2ZpbHRlcicgfCAnbWluTWF4RGF0ZVJhbmdlJz4pOiBNYXliZTxEYXRlPiB7XG4gIHJldHVybiBmaW5kTWF4RGF0ZShbeC5maWx0ZXI/LnN0YXJ0LCB4Lm1pbk1heERhdGVSYW5nZT8uc3RhcnRdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IE1heWJlPERhdGU+IHtcbiAgcmV0dXJuIGZpbmRNaW5EYXRlKFt4LmZpbHRlcj8uZW5kLCB4Lm1pbk1heERhdGVSYW5nZT8uZW5kXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlTWluQW5kTWF4RGF0ZVJhbmdlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IFBhcnRpYWw8RGF0ZVJhbmdlPiB7XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGNhbGVuZGFyU2NoZWR1bGVNaW5EYXRlKHgpIHx8IHVuZGVmaW5lZCxcbiAgICBlbmQ6IGNhbGVuZGFyU2NoZWR1bGVNYXhEYXRlKHgpIHx8IHVuZGVmaW5lZFxuICB9O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGluaXRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoKSk7XG4gIH1cblxuICAvLyBNQVJLOlxuICByZWFkb25seSB0b2dnbGVTZWxlY3Rpb24gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLm5leHRUb2dnbGVTZWxlY3Rpb24kLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBmaWx0ZXJNYXliZSgpLFxuICAgICAgICAgIHRhcCgoeCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxEYXRlcyh4KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gTUFSSzogQWNjZXNzb3JzXG4gIHJlYWRvbmx5IGZpbHRlciQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5maWx0ZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW5NYXhEYXRlUmFuZ2UkID0gdGhpcy5zdGF0ZSQucGlwZShtYXAoY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVSYW5nZSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBtaW5EYXRlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uc3RhcnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIHJlYWRvbmx5IG1heERhdGUkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5lbmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geCAhPSBudWxsICYmIHguc3RhcnQgIT0gbnVsbCAmJiB4LmVuZCAhPSBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRTdGFydCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pbnB1dFN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0RW5kJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlucHV0RW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRJbnB1dFJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pID0+ICh7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZShhLmlucHV0U3RhcnQsIGIuaW5wdXRTdGFydCkgJiYgaXNTYW1lRGF0ZShhLmlucHV0RW5kLCBiLmlucHV0RW5kKSksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeC5pbnB1dFN0YXJ0ICYmIHguaW5wdXRFbmQpIHtcbiAgICAgICAgcmV0dXJuIHggYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0UmFuZ2UkOiBPYnNlcnZhYmxlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4gPSB0aGlzLmN1cnJlbnRJbnB1dFJhbmdlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzZWxlY3RlZERhdGVzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZUJsb2NrSW5kZXg+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnNlbGVjdGVkSW5kZXhlcyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzRW5hYmxlZEZpbHRlckRheUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVPckRhdGVCbG9ja0luZGV4Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc0VuYWJsZWRGaWx0ZXJEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkRGF5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlzRW5hYmxlZERheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50RGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlUmFuZ2UoYSwgYikpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIkOiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlciQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgJiYgeC5maWx0ZXI/LnN0YXJ0ICE9IG51bGwpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxEYXRlUmFuZ2U+ID0gdGhpcy5jdXJyZW50RGF0ZVJhbmdlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzY2hlZHVsZURheXMkOiBPYnNlcnZhYmxlPFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5zY2hlZHVsZURheXMpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHNldHNBcmVFcXVpdmFsZW50KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jdXJyZW50U2VsZWN0aW9uVmFsdWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbmV4dFRvZ2dsZVNlbGVjdGlvbiQ6IE9ic2VydmFibGU8TWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPj4gPSB0aGlzLmhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+PjtcblxuICAgICAgaWYgKGhhc0NvbmZpZ3VyZWRNaW5NYXhSYW5nZSkge1xuICAgICAgICBvYnMgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShtYXAoKHgpID0+IChCb29sZWFuKHgpID8gJ25vbmUnIDogJ2FsbCcpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnMgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSQucGlwZShtYXAoKHgpID0+IChCb29sZWFuKHgpID8gJ25vbmUnIDogdW5kZWZpbmVkKSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JzO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0aW9uVmFsdWUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZVZhbHVlJCA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZGF0ZVNjaGVkdWxlUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVTY2hlZHVsZVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVTY2hlZHVsZVJhbmdlVmFsdWUkID0gdGhpcy5jdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY2VsbENvbnRlbnRGYWN0b3J5JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNlbGxDb250ZW50RmFjdG9yeSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzQ3VzdG9taXplZCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5zZWxlY3RlZEluZGV4ZXMuc2l6ZSA+IDApLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyBNQVJLOiBTdGF0ZSBDaGFuZ2VzXG4gIHJlYWRvbmx5IHNldE1pbk1heERhdGVSYW5nZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGZpbHRlcjogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4gdXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKHN0YXRlLCBmaWx0ZXIpKTtcbiAgcmVhZG9ubHkgc2V0RmlsdGVyID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZmlsdGVyOiBNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPikgPT4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCBmaWx0ZXIpKTtcbiAgcmVhZG9ubHkgc2V0RXhjbHVzaW9ucyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGV4Y2x1c2lvbnM6IE1heWJlPEFycmF5T3JWYWx1ZTxEYXRlT3JEYXRlUmFuZ2VPckRhdGVCbG9ja0luZGV4T3JEYXRlQmxvY2tSYW5nZT4+KSA9PiB1cGRhdGVTdGF0ZVdpdGhFeGNsdXNpb25zKHN0YXRlLCBleGNsdXNpb25zKSk7XG4gIHJlYWRvbmx5IHNldENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI6IE1heWJlPGJvb2xlYW4+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcihzdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpKTtcbiAgcmVhZG9ubHkgY2xlYXJGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlKSA9PiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHVuZGVmaW5lZCkpO1xuXG4gIHJlYWRvbmx5IHNldFRpbWV6b25lID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdGltZXpvbmU6IE1heWJlPFRpbWV6b25lU3RyaW5nPikgPT4gKHsgLi4uc3RhdGUsIHRpbWV6b25lIH0pKTtcbiAgcmVhZG9ubHkgc2V0SW5wdXRSYW5nZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJhbmdlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UpID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZShzdGF0ZSwgcmFuZ2UpKTtcblxuICByZWFkb25seSB0b2dnbGVTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdG9nZ2xlOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgdG9nZ2xlIH0pKTtcbiAgcmVhZG9ubHkgYWRkU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGFkZDogSXRlcmFibGVPclZhbHVlPERhdGVPckRhdGVCbG9ja0luZGV4PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IGFkZCB9KSk7XG4gIHJlYWRvbmx5IHJlbW92ZVNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByZW1vdmU6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlT3JEYXRlQmxvY2tJbmRleD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyByZW1vdmUgfSkpO1xuICByZWFkb25seSBzZXRTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2V0IH0pKTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZWxlY3RBbGw6IEFsbE9yTm9uZVNlbGVjdGlvbiA9ICdhbGwnKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2VsZWN0QWxsIH0pKTtcbiAgcmVhZG9ubHkgc2V0SW5pdGlhbFNlbGVjdGlvblN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgaW5pdGlhbFNlbGVjdGlvblN0YXRlOiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+KSA9PiB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUoc3RhdGUsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSkpO1xuXG4gIHJlYWRvbmx5IHNldFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHNjaGVkdWxlRGF5czogSXRlcmFibGU8RGF0ZVNjaGVkdWxlRGF5Q29kZT4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoc3RhdGUsIHNjaGVkdWxlRGF5cykpO1xuICByZWFkb25seSBzZXRBbGxvd0FsbFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoc3RhdGUsIG51bGwpKTtcblxuICByZWFkb25seSBzZXREYXRlU2NoZWR1bGVSYW5nZVZhbHVlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdmFsdWU6IE1heWJlPERhdGVTY2hlZHVsZVJhbmdlPikgPT4gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZShzdGF0ZSwgdmFsdWUpKTtcbiAgcmVhZG9ubHkgc2V0Q2VsbENvbnRlbnRGYWN0b3J5ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY2VsbENvbnRlbnRGYWN0b3J5OiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5KSA9PiAoeyAuLi5zdGF0ZSwgY2VsbENvbnRlbnRGYWN0b3J5IH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbml0aWFsU2VsZWN0aW9uU3RhdGU6IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHNlbGVjdGVkSW5kZXhlcyB9ID0gc3RhdGU7XG5cbiAgaWYgKHNlbGVjdGVkSW5kZXhlcy5zaXplID09PSAwICYmIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSA9PT0gJ2FsbCcpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBzZWxlY3RBbGw6IGluaXRpYWxTZWxlY3Rpb25TdGF0ZSB9KTtcbiAgfVxuXG4gIHJldHVybiB7IC4uLnN0YXRlLCBpbml0aWFsU2VsZWN0aW9uU3RhdGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKGN1cnJlbnRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogTWF5YmU8Ym9vbGVhbj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBsZXQgc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSA9IHsgLi4uY3VycmVudFN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciB9O1xuXG4gIGlmIChCb29sZWFuKGN1cnJlbnRTdGF0ZS5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcikgIT09IEJvb2xlYW4oY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHt9KTsgLy8gcmVjYWxjdWxhdGUgaWYgY2hhbmdlIG9jY3VycyBhcyBpdCB3aWxsIGFmZmVjdCB0aGUgb3V0cHV0IHZhbHVlXG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhFeGNsdXNpb25zKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGlucHV0RXhjbHVzaW9uczogTWF5YmU8QXJyYXlPclZhbHVlPERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlPj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBsZXQgY29tcHV0ZWRFeGNsdXNpb25zOiBNYXliZTxEYXRlQmxvY2tJbmRleFtdPjtcblxuICBpZiAoaW5wdXRFeGNsdXNpb25zKSB7XG4gICAgY29uc3QgeyBpbmRleEZhY3RvcnkgfSA9IHN0YXRlO1xuICAgIGNvbnN0IGluZGV4QXJyYXlGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhBcnJheUZhY3RvcnkoaW5kZXhGYWN0b3J5KTtcbiAgICBjb21wdXRlZEV4Y2x1c2lvbnMgPSBpbmRleEFycmF5RmFjdG9yeShpbnB1dEV4Y2x1c2lvbnMpO1xuICB9XG5cbiAgc3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dEV4Y2x1c2lvbnMsIGNvbXB1dGVkRXhjbHVzaW9ucyB9O1xuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCBzdGF0ZS5maWx0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG1pbk1heERhdGVSYW5nZTogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIHN0YXRlID0geyAuLi5zdGF0ZSB9O1xuXG4gIGlmIChtaW5NYXhEYXRlUmFuZ2UgIT0gbnVsbCAmJiAhaXNJbmZpbml0ZURhdGVSYW5nZShtaW5NYXhEYXRlUmFuZ2UpKSB7XG4gICAgc3RhdGUubWluTWF4RGF0ZVJhbmdlID0ge1xuICAgICAgc3RhcnQ6IG1pbk1heERhdGVSYW5nZS5zdGFydCAhPSBudWxsID8gc3RhcnRPZkRheShtaW5NYXhEYXRlUmFuZ2Uuc3RhcnQpIDogdW5kZWZpbmVkLFxuICAgICAgZW5kOiBtaW5NYXhEYXRlUmFuZ2UuZW5kICE9IG51bGwgPyBlbmRPZkRheShtaW5NYXhEYXRlUmFuZ2UuZW5kKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIHN0YXRlLm1pbk1heERhdGVSYW5nZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHN0YXRlLmZpbHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRGaWx0ZXI6IE1heWJlPERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBjb21wdXRlZEV4Y2x1c2lvbnM6IGV4Y2x1c2lvbnMsIG1pbk1heERhdGVSYW5nZSB9ID0gc3RhdGU7XG5cbiAgbGV0IGlzRW5hYmxlZEZpbHRlckRheTogTWF5YmU8RGVjaXNpb25GdW5jdGlvbjxEYXRlT3JEYXRlQmxvY2tJbmRleD4+ID0gKCkgPT4gdHJ1ZTtcbiAgbGV0IGZpbHRlcjogTWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4gPSBudWxsO1xuXG4gIC8vIGNyZWF0ZSB0aGUgZmlsdGVyIHVzaW5nIGlucHV0RmlsdGVyLCBleGNsdXNpb25zLCBhbmQgbWluTWF4RGF0ZVJhbmdlXG4gIGlmIChpbnB1dEZpbHRlciB8fCBleGNsdXNpb25zPy5sZW5ndGggfHwgbWluTWF4RGF0ZVJhbmdlKSB7XG4gICAgbGV0IGVuYWJsZWRGaWx0ZXI6IERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc7XG5cbiAgICBpZiAoaW5wdXRGaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnKGlucHV0RmlsdGVyKTsgLy8gY29weSBmaWx0ZXJcblxuICAgICAgaWYgKGV4Y2x1c2lvbnM/Lmxlbmd0aCkge1xuICAgICAgICBlbmFibGVkRmlsdGVyID0ge1xuICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICBleDogdW5pcXVlKG1lcmdlQXJyYXlzKFtmaWx0ZXIuZXgsIGV4Y2x1c2lvbnNdKSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuYWJsZWRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuYWJsZWRGaWx0ZXIgPSB7XG4gICAgICAgIHc6ICc4OScsXG4gICAgICAgIGV4OiBleGNsdXNpb25zIGFzIG51bWJlcltdXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtaW5NYXhEYXRlUmFuZ2UpIHtcbiAgICAgIGVuYWJsZWRGaWx0ZXIubWluTWF4RGF0ZVJhbmdlID0gbWluTWF4RGF0ZVJhbmdlO1xuICAgICAgZW5hYmxlZEZpbHRlci5zZXRTdGFydEFzTWluRGF0ZSA9IEJvb2xlYW4oZmlsdGVyPy5zdGFydCkgPyB0cnVlIDogZmFsc2U7IC8vIElmIGEgc3RhcnQgZGF0ZSBpcyBzZXQsIHRoZW4gaXQgYmVjb21lcyB0aGUgZmxvb3IuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGlucHV0IGZpbHRlciBoYXMgYSBzdGFydCBkYXRlLCB1c2UgdGhhdCBhcyB0aGUgcmVsYXRpdmUgc3RhcnQgdG8gZW5zdXJlIGluZGV4ZXMgYXJlIGNvbXBhcmVkIHRoZSBzYW1lLFxuICAgICAqIG90aGVyd2lzZSB1c2UgdGhlIHN0YXRlJ3Mgc3RhcnQuIFRoaXMgaXMgaW1wb3J0YW50IGZvciB0aGUgaW5kZXggY2FsY3VsYXRpb25zLlxuICAgICAqL1xuICAgIGVuYWJsZWRGaWx0ZXIuc3RhcnQgPSBpbnB1dEZpbHRlcj8uc3RhcnQgPz8gc3RhdGUuc3RhcnQ7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGZpbHRlclxuICAgIGlzRW5hYmxlZEZpbHRlckRheSA9IGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIoZW5hYmxlZEZpbHRlcik7XG4gIH1cblxuICBzdGF0ZSA9IHsgLi4uc3RhdGUsIGZpbHRlciwgaXNFbmFibGVkRmlsdGVyRGF5IH07XG5cbiAgLy8gRm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZSwgdXNlIHRoZSBmaWx0ZXIncyBzdGFydCBkYXRlIGFzIHRoZSByZWxhdGl2ZSBzdGFydCBpZiBhcHBsaWNhYmxlLlxuICBpZiAoZmlsdGVyICYmIGZpbHRlci5zdGFydCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gZmlsdGVyLnN0YXJ0O1xuICAgIHN0YXRlLnN0YXJ0ID0gc3RhcnQ7XG4gICAgc3RhdGUuaW5kZXhGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KHsgc3RhcnQgfSk7XG4gICAgc3RhdGUuaW5kZXhEYXlPZldlZWsgPSBkYXRlQmxvY2tEYXlPZldlZWtGYWN0b3J5KHN0YXJ0KTtcbiAgfVxuXG4gIC8vIGF0dGVtcHQgdG8gcmUtYXBwbHkgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHN0YXRlIG9uY2UgZmlsdGVyIGlzIGFwcGxpZWRcbiAgaWYgKHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoSW5pdGlhbFNlbGVjdGlvblN0YXRlKHN0YXRlLCBzdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUpO1xuICB9XG5cbiAgLy8gcmUtY2FsY3VsYXRlIHRoZSBzZWxlY3Rpb24gZ2l2ZW4gdGhlIGZpbHRlclxuICBjb25zdCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0gPSBzdGF0ZTtcblxuICBpZiAoaW5wdXRTdGFydCAmJiBpbnB1dEVuZCkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKHN0YXRlLCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPERhdGVTY2hlZHVsZVJhbmdlPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IGlzU2FtZVZhbHVlID0gaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2Uoc3RhdGUuY3VycmVudFNlbGVjdGlvblZhbHVlPy5kYXRlU2NoZWR1bGVSYW5nZSwgY2hhbmdlKTtcblxuICBpZiAoaXNTYW1lVmFsdWUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGNoYW5nZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBuZXh0U3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSA9IHsgLi4uc3RhdGUsIGlucHV0U3RhcnQ6IGNoYW5nZS5zdGFydCwgaW5wdXRFbmQ6IGNoYW5nZS5lbmQsIHNlbGVjdGVkSW5kZXhlczogbmV3IFNldChjaGFuZ2UuZXgpIH07XG4gICAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpLCBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2RlcyhjaGFuZ2UudykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9TZWxlY3Rpb25DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGUpOyAvLyBjbGVhciBzZWxlY3Rpb24sIHJldGFpbiBkaXNhYmxlZCBkYXlzXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogTWF5YmU8SXRlcmFibGU8RGF0ZVNjaGVkdWxlRGF5Q29kZT4+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBzY2hlZHVsZURheXM6IGN1cnJlbnRTY2hlZHVsZURheXMgfSA9IHN0YXRlO1xuICBjb25zdCBzY2hlZHVsZURheXMgPSBuZXcgU2V0KGNoYW5nZSB8fCBbRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLREFZLCBEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtFTkRdKTtcblxuICBpZiAoc2V0c0FyZUVxdWl2YWxlbnQoY3VycmVudFNjaGVkdWxlRGF5cywgc2NoZWR1bGVEYXlzKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gbm8gY2hhbmdlXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYWxsb3dlZERheXNPZldlZWsgPSBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2Rlc1RvRGF5T2ZXZWVrU2V0KEFycmF5LmZyb20oc2NoZWR1bGVEYXlzKSk7XG4gICAgY29uc3QgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSwgc2NoZWR1bGVEYXlzLCBhbGxvd2VkRGF5c09mV2VlayB9O1xuICAgIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlRGF0ZXNDaGFuZ2Uge1xuICByZXNldD86IHRydWU7XG4gIHRvZ2dsZT86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlT3JEYXRlQmxvY2tJbmRleD47XG4gIGFkZD86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlT3JEYXRlQmxvY2tJbmRleD47XG4gIHJlbW92ZT86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlT3JEYXRlQmxvY2tJbmRleD47XG4gIHNldD86IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlT3JEYXRlQmxvY2tJbmRleD47XG4gIHNlbGVjdEFsbD86IEFsbE9yTm9uZVNlbGVjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZURhdGVzQ2hhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBpbmRleEZhY3RvcnksIGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleERheU9mV2VlaywgaW5wdXRTdGFydDogY3VycmVudElucHV0U3RhcnQsIGlucHV0RW5kOiBjdXJyZW50SW5wdXRFbmQsIG1pbk1heERhdGVSYW5nZSB9ID0gc3RhdGU7XG4gIGNvbnN0IHsgc3RhcnQ6IG1pbkRhdGUsIGVuZDogbWF4RGF0ZSB9ID0gY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZShzdGF0ZSk7XG4gIGxldCBpbnB1dFN0YXJ0ID0gY3VycmVudElucHV0U3RhcnQ7XG4gIGxldCBpbnB1dEVuZCA9IGN1cnJlbnRJbnB1dEVuZDtcblxuICBsZXQgc2VsZWN0ZWRJbmRleGVzOiBTZXQ8RGF0ZUJsb2NrSW5kZXg+O1xuXG4gIGlmIChjaGFuZ2UucmVzZXQgfHwgY2hhbmdlLnNlbGVjdEFsbCAhPSBudWxsIHx8IGNoYW5nZS5zZXQpIHtcbiAgICBsZXQgc2V0OiBNYXliZTxJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+PiA9IGNoYW5nZS5zZXQgPz8gW107XG4gICAgbGV0IHNlbGVjdEFsbDogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPiA9IGNoYW5nZS5yZXNldCA9PT0gdHJ1ZSA/IHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSA6IGNoYW5nZS5zZWxlY3RBbGw7XG5cbiAgICBzd2l0Y2ggKHNlbGVjdEFsbCkge1xuICAgICAgY2FzZSAnYWxsJzpcbiAgICAgICAgaWYgKG1pbkRhdGUgIT0gbnVsbCAmJiBtYXhEYXRlICE9IG51bGwpIHtcbiAgICAgICAgICBpbnB1dFN0YXJ0ID0gbWluRGF0ZTtcbiAgICAgICAgICBpbnB1dEVuZCA9IG1heERhdGU7XG4gICAgICAgICAgc2V0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgaW5wdXRTdGFydCA9IG51bGw7XG4gICAgICAgIGlucHV0RW5kID0gbnVsbDtcbiAgICAgICAgc2V0ID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHNlbGVjdGVkSW5kZXhlcyA9IG5ldyBTZXQoaXRlcmFibGVUb0FycmF5KHNldCkubWFwKGluZGV4RmFjdG9yeSkpO1xuICB9IGVsc2Uge1xuICAgIHNlbGVjdGVkSW5kZXhlcyA9IG5ldyBTZXQoc3RhdGUuc2VsZWN0ZWRJbmRleGVzKTtcblxuICAgIGlmIChjaGFuZ2UudG9nZ2xlKSB7XG4gICAgICBjb25zdCBhbGxvd2VkVG9Ub2dnbGUgPSBpdGVyYWJsZVRvQXJyYXkoY2hhbmdlLnRvZ2dsZSlcbiAgICAgICAgLm1hcChpbmRleEZhY3RvcnkpXG4gICAgICAgIC5maWx0ZXIoKGkpID0+IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhpbmRleERheU9mV2VlayhpKSkpO1xuICAgICAgdG9nZ2xlSW5TZXQoc2VsZWN0ZWRJbmRleGVzLCBhbGxvd2VkVG9Ub2dnbGUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UuYWRkKSB7XG4gICAgICBhZGRUb1NldChzZWxlY3RlZEluZGV4ZXMsIGl0ZXJhYmxlVG9BcnJheShjaGFuZ2UuYWRkKS5tYXAoaW5kZXhGYWN0b3J5KSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZS5yZW1vdmUpIHtcbiAgICAgIGFkZFRvU2V0KHNlbGVjdGVkSW5kZXhlcywgaXRlcmFibGVUb0FycmF5KGNoYW5nZS5yZW1vdmUpLm1hcChpbmRleEZhY3RvcnkpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgc2VsZWN0ZWRJbmRleGVzIH07XG4gIG5leHRTdGF0ZS5pc0VuYWJsZWREYXkgPSBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xuXG4gIC8vIFJlY2FsY3VsYXRlIHRoZSByYW5nZSBhbmQgc2ltcGxpZmllZCB0byBleGNsdXNpb25zXG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24obmV4dFN0YXRlKTtcblxuICBpZiAocmFuZ2VBbmRFeGNsdXNpb24pIHtcbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoeyAuLi5uZXh0U3RhdGUsIHNlbGVjdGVkSW5kZXhlczogbmV3IFNldChyYW5nZUFuZEV4Y2x1c2lvbi5leGNsdWRlZCksIGlucHV0U3RhcnQ6IHJhbmdlQW5kRXhjbHVzaW9uLnN0YXJ0LCBpbnB1dEVuZDogcmFuZ2VBbmRFeGNsdXNpb24uZW5kIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG5vIHNlbGVjdGVkIGRheXNcbiAgICByZXR1cm4gbm9TZWxlY3Rpb25DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9TZWxlY3Rpb25DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSh7IC4uLnN0YXRlLCBzZWxlY3RlZEluZGV4ZXM6IG5ldyBTZXQoKSwgaW5wdXRTdGFydDogbnVsbCwgaW5wdXRFbmQ6IG51bGwgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY2hhbmdlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IGlucHV0U3RhcnQ6IGN1cnJlbnRJbnB1dFN0YXJ0LCBpbnB1dEVuZDogY3VycmVudElucHV0RW5kLCBpbmRleEZhY3RvcnksIG1pbk1heERhdGVSYW5nZSB9ID0gc3RhdGU7XG4gIGNvbnN0IHsgc3RhcnQ6IG1pbkRhdGUsIGVuZDogbWF4RGF0ZSB9OiBQYXJ0aWFsPERhdGVSYW5nZT4gPSBtaW5NYXhEYXRlUmFuZ2UgPz8ge307XG5cbiAgbGV0IGlucHV0U3RhcnQ6IERhdGUgPSBzdGFydE9mRGF5KGNoYW5nZS5pbnB1dFN0YXJ0KTtcbiAgbGV0IGlucHV0RW5kOiBEYXRlID0gZW5kT2ZEYXkoY2hhbmdlLmlucHV0RW5kKTtcblxuICBjb25zdCBpc1ZhbGlkUmFuZ2UgPSBtaW5EYXRlICE9IG51bGwgfHwgbWF4RGF0ZSAhPSBudWxsID8gaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbih7IHN0YXJ0OiBtaW5EYXRlID8/IHVuZGVmaW5lZCwgZW5kOiBtYXhEYXRlID8/IHVuZGVmaW5lZCB9KSA6ICgpID0+IHRydWU7XG5cbiAgaWYgKCFpc1ZhbGlkUmFuZ2UoaW5wdXRTdGFydCkgfHwgIWlzVmFsaWRSYW5nZShpbnB1dEVuZCkgfHwgKGlzU2FtZURhdGVEYXkoaW5wdXRTdGFydCwgY3VycmVudElucHV0U3RhcnQpICYmIGlzU2FtZURhdGVEYXkoaW5wdXRFbmQsIGN1cnJlbnRJbnB1dEVuZCkpKSB7XG4gICAgcmV0dXJuIHN0YXRlOyAvLyBpZiBubyBjaGFuZ2UsIHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cbiAgfVxuXG4gIC8vIHJldGFpbiBhbGwgaW5kZXhlcyB0aGF0IGFyZSB3aXRoaW4gdGhlIG5ldyByYW5nZVxuICBjb25zdCBtaW5JbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dFN0YXJ0KTtcbiAgY29uc3QgbWF4SW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRFbmQpICsgMTtcblxuICBjb25zdCBjdXJyZW50SW5kZXhlczogRGF0ZUJsb2NrSW5kZXhbXSA9IEFycmF5LmZyb20oc3RhdGUuc2VsZWN0ZWRJbmRleGVzKTtcbiAgY29uc3QgaXNJbkN1cnJlbnRSYW5nZSA9IGlzSW5kZXhOdW1iZXJJbkluZGV4UmFuZ2VGdW5jdGlvbih7IG1pbkluZGV4LCBtYXhJbmRleCB9KTtcbiAgY29uc3QgZXhjbHVkZWRJbmRleGVzSW5OZXdSYW5nZSA9IGN1cnJlbnRJbmRleGVzLmZpbHRlcihpc0luQ3VycmVudFJhbmdlKTtcbiAgY29uc3Qgc2VsZWN0ZWRJbmRleGVzID0gbmV3IFNldChleGNsdWRlZEluZGV4ZXNJbk5ld1JhbmdlKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7IC4uLnN0YXRlLCBzZWxlY3RlZEluZGV4ZXMsIGlucHV0U3RhcnQsIGlucHV0RW5kIH07XG4gIHJldHVybiBmaW5hbGl6ZU5ld0NhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBuZXh0U3RhdGUuaXNFbmFibGVkRGF5ID0gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcbiAgbmV4dFN0YXRlLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSA9IGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblZhbHVlKG5leHRTdGF0ZSk7XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuYWJsZWREYXlJbkNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogRGVjaXNpb25GdW5jdGlvbjxEYXRlT3JEYXRlQmxvY2tJbmRleD4ge1xuICBjb25zdCB7IGluZGV4RmFjdG9yeSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIGluZGV4RGF5T2ZXZWVrLCBhbGxvd2VkRGF5c09mV2VlayB9ID0gc3RhdGU7XG5cbiAgbGV0IGlzSW5TdGFydEFuZEVuZFJhbmdlOiBJc0RhdGVXaXRoaW5EYXRlQmxvY2tSYW5nZUZ1bmN0aW9uO1xuXG4gIGlmIChpbnB1dFN0YXJ0ICYmIGlucHV0RW5kKSB7XG4gICAgaXNJblN0YXJ0QW5kRW5kUmFuZ2UgPSBpc0RhdGVXaXRoaW5EYXRlQmxvY2tSYW5nZUZ1bmN0aW9uKHsgc3RhcnQ6IHN0YXRlLnN0YXJ0LCByYW5nZTogeyBzdGFydDogaW5wdXRTdGFydCwgZW5kOiBpbnB1dEVuZCB9IH0pO1xuICB9IGVsc2Uge1xuICAgIGlzSW5TdGFydEFuZEVuZFJhbmdlID0gKCkgPT4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gKGlucHV0OiBEYXRlT3JEYXRlQmxvY2tJbmRleCkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0KTtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBpbmRleERheU9mV2VlayhpbmRleCk7XG5cbiAgICBjb25zdCBpc0luU2VsZWN0ZWRSYW5nZSA9IGlzSW5TdGFydEFuZEVuZFJhbmdlKGlucHV0KTtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gc3RhdGUuc2VsZWN0ZWRJbmRleGVzLmhhcyhpbmRleCk7XG4gICAgY29uc3QgaXNBbGxvd2VkRGF5T2ZXZWVrID0gYWxsb3dlZERheXNPZldlZWsuaGFzKGRheU9mV2Vlayk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBpc0FsbG93ZWREYXlPZldlZWsgJiYgKChpc0luU2VsZWN0ZWRSYW5nZSAmJiAhaXNTZWxlY3RlZCkgfHwgKGlzU2VsZWN0ZWQgJiYgIWlzSW5TZWxlY3RlZFJhbmdlKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblZhbHVlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWU+IHtcbiAgY29uc3QgeyBpbmRleEZhY3RvcnksIHNjaGVkdWxlRGF5cywgYWxsb3dlZERheXNPZldlZWssIGluZGV4RGF5T2ZXZWVrLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciwgZmlsdGVyIH0gPSBzdGF0ZTtcbiAgY29uc3QgcmFuZ2VBbmRFeGNsdXNpb24gPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbihzdGF0ZSk7XG5cbiAgaWYgKHJhbmdlQW5kRXhjbHVzaW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsgc3RhcnQ6IHJhbmdlU3RhcnQsIGVuZDogcmFuZ2VFbmQsIGV4Y2x1ZGVkOiBhbGxFeGNsdWRlZCwgZGF0ZUJsb2NrUmFuZ2UgfSA9IHJhbmdlQW5kRXhjbHVzaW9uO1xuICBsZXQgZmlsdGVyT2Zmc2V0RXhjbHVkZWRSYW5nZTogRGF0ZUJsb2NrSW5kZXhbXSA9IFtdO1xuICBsZXQgaW5kZXhPZmZzZXQgPSBkYXRlQmxvY2tSYW5nZS5pO1xuXG4gIGxldCBzdGFydCA9IHJhbmdlU3RhcnQ7XG4gIGxldCBlbmQgPSByYW5nZUVuZDtcblxuICAvLyBJZiBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciBpcyB0cnVlLCB0aGVuIHdlIG5lZWQgdG8gb2Zmc2V0IHRoZSB2YWx1ZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhhdCBzdGFydC5cbiAgaWYgKGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyICYmIGZpbHRlcj8uc3RhcnQpIHtcbiAgICBzdGFydCA9IGZpbHRlci5zdGFydDtcblxuICAgIGlmIChmaWx0ZXI/LmVuZCkge1xuICAgICAgZW5kID0gY29weUhvdXJzQW5kTWludXRlc0Zyb21EYXRlKGVuZCwgZmlsdGVyLmVuZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyU3RhcnRJbmRleE9mZnNldCA9IGluZGV4RmFjdG9yeShyYW5nZVN0YXJ0KSAtIGluZGV4RmFjdG9yeShzdGFydCk7XG4gICAgZmlsdGVyT2Zmc2V0RXhjbHVkZWRSYW5nZSA9IHJhbmdlKDAsIGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQpO1xuICAgIGluZGV4T2Zmc2V0ID0gaW5kZXhPZmZzZXQgLSBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0O1xuICB9XG5cbiAgY29uc3QgZXhjbHVkZWQgPSBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlclxuICAgID8gYWxsRXhjbHVkZWQuZmlsdGVyKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzRXhjbHVkZWRJbmRleCA9IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhpbmRleERheU9mV2Vlayh4KSk7IC8vID8/P1xuICAgICAgICByZXR1cm4gaXNFeGNsdWRlZEluZGV4O1xuICAgICAgfSlcbiAgICA6IGFsbEV4Y2x1ZGVkO1xuXG4gIGNvbnN0IG9mZnNldEV4Y2x1ZGVkOiBEYXRlQmxvY2tJbmRleFtdID0gZXhjbHVkZWQubWFwKCh4KSA9PiB4IC0gaW5kZXhPZmZzZXQpOyAvLyBzZXQgdG8gdGhlIHByb3BlciBvZmZzZXRcblxuICBjb25zdCBleCA9IFsuLi5maWx0ZXJPZmZzZXRFeGNsdWRlZFJhbmdlLCAuLi5vZmZzZXRFeGNsdWRlZF07XG5cbiAgY29uc3QgdzogRGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWsgPSBkYXRlU2NoZWR1bGVFbmNvZGVkV2VlayhzY2hlZHVsZURheXMpO1xuICBjb25zdCBkOiBEYXRlQmxvY2tJbmRleFtdID0gW107IC8vIFwiaW5jbHVkZWRcIiBibG9ja3MgYXJlIG5ldmVyIHVzZWQvY2FsY3VsYXRlZC5cblxuICAvLyBBbHdheXMgZW5zdXJlIHRoZSBlbmQgaXMgYWZ0ZXIgb3IgZXF1YWwgdG8gdGhlIHN0YXJ0LlxuICBpZiAoaXNCZWZvcmUoZW5kLCBzdGFydCkpIHtcbiAgICBlbmQgPSBzdGFydDsgLy8gZW5kIGlzIHN0YXJ0XG4gIH1cblxuICBjb25zdCBkYXRlU2NoZWR1bGVSYW5nZTogRGF0ZVNjaGVkdWxlUmFuZ2UgPSB7XG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIHcsXG4gICAgZCxcbiAgICBleFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZGF0ZVNjaGVkdWxlUmFuZ2UsXG4gICAgbWluTWF4UmFuZ2U6IHsgc3RhcnQsIGVuZCB9XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uIGV4dGVuZHMgRGF0ZVJhbmdlIHtcbiAgZGF0ZUJsb2NrUmFuZ2U6IERhdGVCbG9ja1JhbmdlV2l0aFJhbmdlO1xuICBleGNsdWRlZDogRGF0ZUJsb2NrSW5kZXhbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24+IHtcbiAgY29uc3QgeyBpc0VuYWJsZWREYXksIGlzRW5hYmxlZEZpbHRlckRheSB9ID0gc3RhdGU7XG4gIGNvbnN0IGRhdGVGYWN0b3J5ID0gZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3Rvcnkoc3RhdGUpO1xuICBjb25zdCBkYXRlQmxvY2tSYW5nZSA9IGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uRGF0ZUJsb2NrUmFuZ2Uoc3RhdGUpO1xuXG4gIGlmIChkYXRlQmxvY2tSYW5nZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIHJldHVybnMgbnVsbCBpZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQuXG4gIH1cblxuICBjb25zdCBzdGFydCA9IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLmkpO1xuICBjb25zdCBlbmQgPSBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS50byk7XG5cbiAgY29uc3QgZXhjbHVkZWQ6IERhdGVCbG9ja0luZGV4W10gPSByYW5nZShkYXRlQmxvY2tSYW5nZS5pLCBkYXRlQmxvY2tSYW5nZS50byArIDEpLmZpbHRlcigoeCkgPT4ge1xuICAgIGNvbnN0IGlzRXhjbHVkZWRJbmRleCA9ICFpc0VuYWJsZWREYXkoeCkgfHwgIWlzRW5hYmxlZEZpbHRlckRheSh4KTtcbiAgICByZXR1cm4gaXNFeGNsdWRlZEluZGV4O1xuICB9KTtcblxuICBjb25zdCByZXN1bHQ6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbiA9IHtcbiAgICBkYXRlQmxvY2tSYW5nZSxcbiAgICBzdGFydCxcbiAgICBlbmQsXG4gICAgZXhjbHVkZWRcbiAgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8RGF0ZVJhbmdlPiB7XG4gIGNvbnN0IGRhdGVGYWN0b3J5ID0gZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3Rvcnkoc3RhdGUpO1xuICBjb25zdCBkYXRlQmxvY2tSYW5nZSA9IGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uRGF0ZUJsb2NrUmFuZ2Uoc3RhdGUpO1xuICBjb25zdCBkYXRlUmFuZ2U6IE1heWJlPERhdGVSYW5nZT4gPSBkYXRlQmxvY2tSYW5nZSAhPSBudWxsID8geyBzdGFydDogZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UuaSksIGVuZDogZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UudG8gYXMgbnVtYmVyKSB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gZGF0ZVJhbmdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25EYXRlQmxvY2tSYW5nZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8RGF0ZUJsb2NrUmFuZ2VXaXRoUmFuZ2U+IHtcbiAgY29uc3QgeyBpbmRleEZhY3RvcnksIGlucHV0U3RhcnQsIGlucHV0RW5kLCBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhEYXlPZldlZWssIGlzRW5hYmxlZERheSwgaXNFbmFibGVkRmlsdGVyRGF5IH0gPSBzdGF0ZTtcbiAgY29uc3QgZW5hYmxlZFNlbGVjdGVkSW5kZXhlcyA9IEFycmF5LmZyb20oc3RhdGUuc2VsZWN0ZWRJbmRleGVzKS5maWx0ZXIoKGkpID0+IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhpbmRleERheU9mV2VlayhpKSkpO1xuICBjb25zdCBtaW5BbmRNYXhTZWxlY3RlZFZhbHVlcyA9IG1pbkFuZE1heE51bWJlcihlbmFibGVkU2VsZWN0ZWRJbmRleGVzKTtcblxuICBsZXQgc3RhcnRSYW5nZTogTWF5YmU8RGF0ZUJsb2NrSW5kZXg+O1xuICBsZXQgZW5kUmFuZ2U6IE1heWJlPERhdGVCbG9ja0luZGV4PjtcblxuICBpZiAobWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICBzdGFydFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWluO1xuICAgIGVuZFJhbmdlID0gbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMubWF4O1xuICB9XG5cbiAgaWYgKGlucHV0U3RhcnQgIT0gbnVsbCAmJiBpbnB1dEVuZCAhPSBudWxsKSB7XG4gICAgY29uc3QgaW5wdXRTdGFydEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0U3RhcnQpO1xuICAgIGNvbnN0IGlucHV0RW5kSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRFbmQpO1xuXG4gICAgc3RhcnRSYW5nZSA9IHN0YXJ0UmFuZ2UgIT0gbnVsbCA/IE1hdGgubWluKGlucHV0U3RhcnRJbmRleCwgc3RhcnRSYW5nZSkgOiBpbnB1dFN0YXJ0SW5kZXg7XG4gICAgZW5kUmFuZ2UgPSBlbmRSYW5nZSAhPSBudWxsID8gTWF0aC5tYXgoaW5wdXRFbmRJbmRleCwgZW5kUmFuZ2UpIDogaW5wdXRFbmRJbmRleDtcbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIGNvbnN0IHNjYW5TdGFydEluZGV4ID0gc3RhcnRSYW5nZTtcbiAgICBjb25zdCBzY2FuRW5kSW5kZXggPSBlbmRSYW5nZTtcblxuICAgIC8vIGNsZWFyIHN0YXJ0IGFuZCBlbmRcbiAgICBzdGFydFJhbmdlID0gdW5kZWZpbmVkO1xuICAgIGVuZFJhbmdlID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIG1pbiBpcyBlcXVhbCB0byB0aGUgc3RhcnQgaW5kZXgsIHRoZW4gd2UgYXJlIGluIHRoZSByYW5nZSBhbmQgbmVlZCB0byBpdGVyYXRlIGRhdGVzIHVudGlsIHdlIGZpbmQgb25lIHRoYXQgaXMgbm90IHNlbGVjdGVkL2V4Y2x1ZGVkLlxuICAgIGZvciAobGV0IGkgPSBzY2FuU3RhcnRJbmRleDsgaSA8PSBzY2FuRW5kSW5kZXg7IGkgKz0gMSkge1xuICAgICAgaWYgKGlzRW5hYmxlZEZpbHRlckRheShpKSAmJiBpc0VuYWJsZWREYXkoaSkpIHtcbiAgICAgICAgc3RhcnRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNhbWUgd2l0aCB0aGUgbWF4XG4gICAgZm9yIChsZXQgaSA9IHNjYW5FbmRJbmRleDsgaSA+PSBzY2FuU3RhcnRJbmRleDsgaSAtPSAxKSB7XG4gICAgICBpZiAoaXNFbmFibGVkRmlsdGVyRGF5KGkpICYmIGlzRW5hYmxlZERheShpKSkge1xuICAgICAgICBlbmRSYW5nZSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydFJhbmdlICE9IG51bGwgJiYgZW5kUmFuZ2UgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGk6IHN0YXJ0UmFuZ2UsIHRvOiBlbmRSYW5nZSB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
490
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwseUJBQXlCLEVBR3pCLDBCQUEwQixFQUcxQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBRWhDLG1CQUFtQixFQUNuQix1QkFBdUIsRUFJdkIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQix3Q0FBd0MsRUFDeEMsV0FBVyxFQUNYLFdBQVcsRUFDWCx5QkFBeUIsRUFFekIsa0NBQWtDLEVBQ2xDLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUNmLHVCQUF1QixFQUV2QixtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFFdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUE0RCxlQUFlLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxpQ0FBaUMsRUFBWSxlQUFlLEVBQUUsaUJBQWlCLEVBQWEsS0FBSyxFQUFzQixNQUFNLEVBQUUsV0FBVyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUM1UyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFZLFVBQVUsRUFBRSxRQUFRLEVBQXdCLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxRixPQUFPLEVBQWMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBaUIsU0FBUyxFQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFB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IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIGRhdGVCbG9ja0RheU9mV2Vla0ZhY3RvcnksXG4gIERhdGVCbG9ja0luZGV4LFxuICBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZSxcbiAgZGF0ZUJsb2NrVGltaW5nRGF0ZUZhY3RvcnksXG4gIERhdGVPckRhdGVCbG9ja0luZGV4LFxuICBEYXRlUmFuZ2UsXG4gIGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIsXG4gIGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLFxuICBEYXRlU2NoZWR1bGVEYXlDb2RlLFxuICBkYXRlU2NoZWR1bGVFbmNvZGVkV2VlayxcbiAgRGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWssXG4gIERhdGVTY2hlZHVsZVJhbmdlLFxuICBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnksXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4RmFjdG9yeSxcbiAgZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXMsXG4gIGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzVG9EYXlPZldlZWtTZXQsXG4gIGZpbmRNYXhEYXRlLFxuICBmaW5kTWluRGF0ZSxcbiAgaXNEYXRlSW5EYXRlUmFuZ2VGdW5jdGlvbixcbiAgSXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbixcbiAgaXNTYW1lRGF0ZSxcbiAgaXNTYW1lRGF0ZURheSxcbiAgaXNTYW1lRGF0ZVJhbmdlLFxuICBpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSxcbiAgRGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2UsXG4gIGRhdGVUaW1pbmdSZWxhdGl2ZUluZGV4QXJyYXlGYWN0b3J5LFxuICBpc0luZmluaXRlRGF0ZVJhbmdlLFxuICBjb3B5SG91cnNBbmRNaW51dGVzRnJvbURhdGUsXG4gIGRhdGVUaW1lem9uZVV0Y05vcm1hbCxcbiAgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2Vcbn0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBmaWx0ZXJNYXliZSwgc3dpdGNoTWFwVG9EZWZhdWx0IH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBNYXliZSwgVGltZXpvbmVTdHJpbmcsIERlY2lzaW9uRnVuY3Rpb24sIEl0ZXJhYmxlT3JWYWx1ZSwgaXRlcmFibGVUb0FycmF5LCBhZGRUb1NldCwgdG9nZ2xlSW5TZXQsIGlzSW5kZXhOdW1iZXJJbkluZGV4UmFuZ2VGdW5jdGlvbiwgTWF5YmVNYXAsIG1pbkFuZE1heE51bWJlciwgc2V0c0FyZUVxdWl2YWxlbnQsIERheU9mV2VlaywgcmFuZ2UsIEFsbE9yTm9uZVNlbGVjdGlvbiwgdW5pcXVlLCBtZXJnZUFycmF5cywgQXJyYXlPclZhbHVlLCBvYmplY3RIYXNOb0tleXMgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IGFkZFllYXJzLCBzdGFydE9mRGF5LCBlbmRPZkRheSwgc3RhcnRPZlllYXIsIGlzQWZ0ZXIsIGlzQmVmb3JlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIGNvbWJpbmVMYXRlc3QsIHN3aXRjaE1hcCwgb2YsIHRhcCwgZmlyc3QsIGNvbWJpbmVMYXRlc3RXaXRoIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5LCBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWUsIGRlZmF1bHRDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5IH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZSB7XG4gIC8qKlxuICAgKiBJbnB1dCBTdGFydCBEYXRlXG4gICAqL1xuICBpbnB1dFN0YXJ0OiBEYXRlO1xuICAvKipcbiAgICogSW5wdXQgRW5kIERhdGVcbiAgICovXG4gIGlucHV0RW5kOiBEYXRlO1xufVxuXG5leHBvcnQgdHlwZSBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlID0gUGFydGlhbDxNYXliZU1hcDxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUgZXh0ZW5kcyBQYXJ0aWFsQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlIHtcbiAgLyoqXG4gICAqIEZpbHRlcnMgdGhlIGRheXMgb2YgdGhlIHNjaGVkdWxlIHRvIG9ubHkgYWxsb3cgc2VsZWN0aW5nIGRheXMgaW4gdGhlIHNjaGVkdWxlLlxuICAgKlxuICAgKiBJZiBmaWx0ZXIuc3RhcnQgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIHRpbWV6b25lIGlzIGlnbm9yZWQsIGlmIG9uZSBpcyBwcmVzZW50LlxuICAgKi9cbiAgZmlsdGVyPzogTWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz47XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGV4Y2x1c2lvbnMgdGhhdCBtYXkgbm90IGJlIGRlZmluZWQgd2l0aGluIHRoZSBmaWx0ZXIuXG4gICAqL1xuICBpbnB1dEV4Y2x1c2lvbnM/OiBNYXliZTxBcnJheU9yVmFsdWU8RGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFRoZSBjb21wdXRlZCBleGNsdXNpb25zIGdpdmVuIHRoZSBpbnB1dCBleGNsdXNpb25zLlxuICAgKi9cbiAgY29tcHV0ZWRFeGNsdXNpb25zPzogTWF5YmU8RGF0ZUJsb2NrSW5kZXhbXT47XG4gIC8qKlxuICAgKiBUaGUgbWluL21heCBkYXRlIHJhbmdlLiBVc2VkIGZvciByZXN0cmljdGluZyB0aGUgbWluL21heCB2YWx1ZS4gV29ya3Mgd2l0aCB0aGUgZmlsdGVyLiBUaGUgZ3JlYXRlci9sZXNzZXIgb2YgdGhlIHN0YXJ0L2VuZCBkYXRlcyBhcmUgdXNlZCBpZiBib3RoIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIG1pbk1heERhdGVSYW5nZT86IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj47XG4gIC8qKlxuICAgKiBTdGFydCBkYXRlLiBJcyB1cGRhdGVkIGFzIHRoZSBpbnB1dFN0YXJ0IGlzIG1vZGlmaWVkIG9yIGZpbHRlciBpcyBwcm92aWRlZCB0aGF0IHByb3ZpZGVzIHRoZSBzdGFydCBkYXRlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0b2RheSBhbmQgdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICBzdGFydDogRGF0ZTtcbiAgLyoqXG4gICAqIFRpbWV6b25lIHRvIHVzZS4gT25seUluZmx1ZW5jZXMgdGhlIG91dHB1dCBzdGFydCBkYXRlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxUaW1lem9uZVN0cmluZz47XG4gIC8qKlxuICAgKiBDdXJyZW50IHRpbWV6b25lIG5vcm1hbCB3aXRoIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgdGltZXpvbmVOb3JtYWw/OiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT47XG4gIC8qKlxuICAgKiBEYXRlVGltaW5nUmVsYXRpdmVJbmRleEZhY3RvcnlcbiAgICovXG4gIGluZGV4RmFjdG9yeTogRGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5O1xuICAvKipcbiAgICogQXJyYXkgb2YgbWFudWFsbHkgc2VsZWN0ZWQgZGF0ZXMuXG4gICAqXG4gICAqIFZhbHVlcyB0aGF0IGV4aXN0IG91dHNpZGUgb2YgdGhlIFwiaW5wdXRcIiByYW5nZSBhcmUgY29uc2lkZXJlZCB0b2dnbGVkIG9uLCB3aGlsZSB0aG9zZVxuICAgKiB0aGF0IGFyZSBzZWxlY3RlZCB3aXRoaW4gdGhlIHJhbmdlIGFyZSBjb25zaWRlcmVkIHRvZ2dsZWQgb2ZmLlxuICAgKlxuICAgKiBJZiBkYXRlcyBhcmUgc2VsZWN0ZWQsIGFuZCB0aGVuIGEgcmFuZ2UgaXMgc2VsZWN0ZWQsIHRoZW4gdGhvc2UgZGF0ZXMgd2l0aGluIHRoZSByYW5nZSB0aGF0IGZhbGxcbiAgICogd2l0aGluIHRoZSByYW5nZSBhcmUgY2xlYXJlZCBmcm9tIHNlbGVjdGlvbi5cbiAgICpcbiAgICogVGhlc2UgaW5kZXhlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IGRhdGUuXG4gICAqL1xuICBzZWxlY3RlZEluZGV4ZXM6IFNldDxEYXRlQmxvY2tJbmRleD47XG4gIC8qKlxuICAgKiBEYXlzIG9mIHRoZSBzY2hlZHVsZSB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHBpY2tlZC5cbiAgICovXG4gIHNjaGVkdWxlRGF5czogU2V0PERhdGVTY2hlZHVsZURheUNvZGU+O1xuICAvKipcbiAgICogU2V0IG9mIHRoZSBkYXlzIG9mIHdlZWsgdGhhdCBhcmUgYWxsb3dlZC5cbiAgICovXG4gIGFsbG93ZWREYXlzT2ZXZWVrOiBTZXQ8RGF5T2ZXZWVrPjtcbiAgLyoqXG4gICAqXG4gICAqL1xuICBpbmRleERheU9mV2VlazogRGF0ZUJsb2NrRGF5T2ZXZWVrRmFjdG9yeTtcbiAgLyoqXG4gICAqIERlY2lzaW9uIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgaXMgZW5hYmxlZCBnaXZlbiB0aGUgY3VycmVudCBmaWx0ZXIuXG4gICAqL1xuICBpc0VuYWJsZWRGaWx0ZXJEYXk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+O1xuICAvKipcbiAgICogRGVjaXNpb24gZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRha2UgdGhlIGN1cnJlbnQgZmlsdGVyIGludG8gYWNjb3VudC5cbiAgICovXG4gIGlzRW5hYmxlZERheTogRGVjaXNpb25GdW5jdGlvbjxEYXRlT3JEYXRlQmxvY2tJbmRleD47XG4gIC8qKlxuICAgKiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5IGZvciB0aGUgdmlldy5cbiAgICovXG4gIGNlbGxDb250ZW50RmFjdG9yeTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkNlbGxDb250ZW50RmFjdG9yeTtcbiAgLyoqXG4gICAqIEN1cnJlbnQgc2VsZWN0aW9uIHZhbHVlLlxuICAgKi9cbiAgY3VycmVudFNlbGVjdGlvblZhbHVlPzogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHVzZSB0aGUgZmlsdGVyIGFzIHRoZSBzdGFydCBhbmQgZW5kIHJhbmdlIGluc3RlYWQgb2Ygb3B0aW1pemluZyBmb3IgdGhlIGN1cnJlbnQgaW5kZXguXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcj86IE1heWJlPGJvb2xlYW4+O1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgc2VsZWN0aW9uIHN0YXRlIHdoZW4gdGhlIGNhbGVuZGFyIGlzIHJlc2V0LlxuICAgKi9cbiAgaW5pdGlhbFNlbGVjdGlvblN0YXRlPzogTWF5YmU8QWxsT3JOb25lU2VsZWN0aW9uPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3Qgc2NoZWR1bGVEYXlzID0gbmV3IFNldChbRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLREFZLCBEYXRlU2NoZWR1bGVEYXlDb2RlLldFRUtFTkRdKTtcbiAgY29uc3QgYWxsb3dlZERheXNPZldlZWsgPSBleHBhbmREYXRlU2NoZWR1bGVEYXlDb2Rlc1RvRGF5T2ZXZWVrU2V0KEFycmF5LmZyb20oc2NoZWR1bGVEYXlzKSk7XG4gIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZkRheShuZXcgRGF0ZSgpKTtcbiAgY29uc3QgaW5kZXhGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KHsgc3RhcnQgfSk7XG4gIGNvbnN0IGluZGV4RGF5T2ZXZWVrID0gZGF0ZUJsb2NrRGF5T2ZXZWVrRmFjdG9yeShzdGFydCk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydCxcbiAgICBpbmRleEZhY3RvcnksXG4gICAgc2VsZWN0ZWRJbmRleGVzOiBuZXcgU2V0KCksXG4gICAgc2NoZWR1bGVEYXlzLFxuICAgIGFsbG93ZWREYXlzT2ZXZWVrLFxuICAgIGluZGV4RGF5T2ZXZWVrLFxuICAgIGlzRW5hYmxlZEZpbHRlckRheTogKCkgPT4gdHJ1ZSxcbiAgICBpc0VuYWJsZWREYXk6ICgpID0+IGZhbHNlLFxuICAgIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyOiB0cnVlLFxuICAgIGNlbGxDb250ZW50RmFjdG9yeTogZGVmYXVsdENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25DZWxsQ29udGVudEZhY3RvcnlcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNaW5EYXRlKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdtaW5NYXhEYXRlUmFuZ2UnPik6IE1heWJlPERhdGU+IHtcbiAgcmV0dXJuIGZpbmRNYXhEYXRlKFt4LmZpbHRlcj8uc3RhcnQsIHgubWluTWF4RGF0ZVJhbmdlPy5zdGFydF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXJTY2hlZHVsZU1heERhdGUoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogTWF5YmU8RGF0ZT4ge1xuICByZXR1cm4gZmluZE1pbkRhdGUoW3guZmlsdGVyPy5lbmQsIHgubWluTWF4RGF0ZVJhbmdlPy5lbmRdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2UoeDogUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdmaWx0ZXInIHwgJ21pbk1heERhdGVSYW5nZSc+KTogUGFydGlhbDxEYXRlUmFuZ2U+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydDogY2FsZW5kYXJTY2hlZHVsZU1pbkRhdGUoeCkgfHwgdW5kZWZpbmVkLFxuICAgIGVuZDogY2FsZW5kYXJTY2hlZHVsZU1heERhdGUoeCkgfHwgdW5kZWZpbmVkXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHg6IFBpY2s8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCAnZmlsdGVyJyB8ICdjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcic+KSB7XG4gIHJldHVybiB4LmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyICYmIHguZmlsdGVyPy5zdGFydCAhPSBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGluaXRpYWxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoKSk7XG4gIH1cblxuICAvLyBNQVJLOlxuICByZWFkb25seSB0b2dnbGVTZWxlY3Rpb24gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8dm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLm5leHRUb2dnbGVTZWxlY3Rpb24kLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBmaWx0ZXJNYXliZSgpLFxuICAgICAgICAgIHRhcCgoeCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxEYXRlcyh4KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gTUFSSzogQWNjZXNzb3JzXG4gIHJlYWRvbmx5IGZpbHRlciQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5maWx0ZXIpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW5NYXhEYXRlUmFuZ2UkID0gdGhpcy5zdGF0ZSQucGlwZShtYXAoY2FsZW5kYXJTY2hlZHVsZU1pbkFuZE1heERhdGVSYW5nZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVSYW5nZSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBtaW5EYXRlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uc3RhcnQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIHJlYWRvbmx5IG1heERhdGUkID0gdGhpcy5taW5NYXhEYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5lbmQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlJCA9IHRoaXMubWluTWF4RGF0ZVJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geCAhPSBudWxsICYmIHguc3RhcnQgIT0gbnVsbCAmJiB4LmVuZCAhPSBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRTdGFydCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pbnB1dFN0YXJ0KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0RW5kJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlucHV0RW5kKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRJbnB1dFJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pID0+ICh7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gaXNTYW1lRGF0ZShhLmlucHV0U3RhcnQsIGIuaW5wdXRTdGFydCkgJiYgaXNTYW1lRGF0ZShhLmlucHV0RW5kLCBiLmlucHV0RW5kKSksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeC5pbnB1dFN0YXJ0ICYmIHguaW5wdXRFbmQpIHtcbiAgICAgICAgcmV0dXJuIHggYXMgQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0UmFuZ2UkOiBPYnNlcnZhYmxlPENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25JbnB1dERhdGVSYW5nZT4gPSB0aGlzLmN1cnJlbnRJbnB1dFJhbmdlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzZWxlY3RlZERhdGVzJDogT2JzZXJ2YWJsZTxTZXQ8RGF0ZUJsb2NrSW5kZXg+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnNlbGVjdGVkSW5kZXhlcyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzRW5hYmxlZEZpbHRlckRheUZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGVPckRhdGVCbG9ja0luZGV4Pj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5pc0VuYWJsZWRGaWx0ZXJEYXkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkRGF5RnVuY3Rpb24kOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmlzRW5hYmxlZERheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50RGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlUmFuZ2UoYSwgYikpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIkOiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0YXJ0QmVpbmdVc2VkRnJvbUZpbHRlciQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4+ID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICAvL1xuICAgIG1hcChjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVJhbmdlJDogT2JzZXJ2YWJsZTxEYXRlUmFuZ2U+ID0gdGhpcy5jdXJyZW50RGF0ZVJhbmdlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzY2hlZHVsZURheXMkOiBPYnNlcnZhYmxlPFNldDxEYXRlU2NoZWR1bGVEYXlDb2RlPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5zY2hlZHVsZURheXMpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHNldHNBcmVFcXVpdmFsZW50KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRUaW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+PiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnRpbWV6b25lKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZWZmZWN0aXZlVGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKCFjYWxlbmRhclNjaGVkdWxlU3RhcnRCZWluZ1VzZWRGcm9tRmlsdGVyKHgpICYmIHgudGltZXpvbmUgPyB4LnRpbWV6b25lIDogdW5kZWZpbmVkKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVmZmVjdGl2ZVRpbWV6b25lTm9ybWFsJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoIWNhbGVuZGFyU2NoZWR1bGVTdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIoeCkgJiYgeC50aW1lem9uZU5vcm1hbCA/IHgudGltZXpvbmVOb3JtYWwgOiB1bmRlZmluZWQpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY3VycmVudFNlbGVjdGlvblZhbHVlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmN1cnJlbnRTZWxlY3Rpb25WYWx1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWUkLnBpcGUoXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy5lZmZlY3RpdmVUaW1lem9uZU5vcm1hbCQpLFxuICAgIG1hcCgoW3gsIHRpbWV6b25lTm9ybWFsXSkgPT4ge1xuICAgICAgaWYgKHggJiYgdGltZXpvbmVOb3JtYWwpIHtcbiAgICAgICAgeCA9IHtcbiAgICAgICAgICBkYXRlU2NoZWR1bGVSYW5nZToge1xuICAgICAgICAgICAgLi4ueC5kYXRlU2NoZWR1bGVSYW5nZSxcbiAgICAgICAgICAgIHN0YXJ0OiB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKHguZGF0ZVNjaGVkdWxlUmFuZ2Uuc3RhcnQpLFxuICAgICAgICAgICAgZW5kOiB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKHguZGF0ZVNjaGVkdWxlUmFuZ2UuZW5kKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBuZXh0VG9nZ2xlU2VsZWN0aW9uJDogT2JzZXJ2YWJsZTxNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+PiA9IHRoaXMuaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlKSA9PiB7XG4gICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4+O1xuXG4gICAgICBpZiAoaGFzQ29uZmlndXJlZE1pbk1heFJhbmdlKSB7XG4gICAgICAgIG9icyA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKG1hcCgoeCkgPT4gKEJvb2xlYW4oeCkgPyAnbm9uZScgOiAnYWxsJykpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IHRoaXMuY3VycmVudFNlbGVjdGlvblZhbHVlJC5waXBlKG1hcCgoeCkgPT4gKEJvb2xlYW4oeCkgPyAnbm9uZScgOiB1bmRlZmluZWQpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnM7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25WYWx1ZSQgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb25WYWx1ZVdpdGhUaW1lem9uZSQucGlwZShmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERhdGVTY2hlZHVsZVJhbmdlVmFsdWUkID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uVmFsdWVXaXRoVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Py5kYXRlU2NoZWR1bGVSYW5nZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSQgPSB0aGlzLmN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZVZhbHVlJC5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBjZWxsQ29udGVudEZhY3RvcnkkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY2VsbENvbnRlbnRGYWN0b3J5KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNDdXN0b21pemVkJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnNlbGVjdGVkSW5kZXhlcy5zaXplID4gMCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcmVhZG9ubHkgc2V0TWluTWF4RGF0ZVJhbmdlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZmlsdGVyOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSA9PiB1cGRhdGVTdGF0ZVdpdGhNaW5NYXhEYXRlUmFuZ2Uoc3RhdGUsIGZpbHRlcikpO1xuICByZWFkb25seSBzZXRGaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBmaWx0ZXI6IE1heWJlPERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+KSA9PiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIGZpbHRlcikpO1xuICByZWFkb25seSBzZXRFeGNsdXNpb25zID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgZXhjbHVzaW9uczogTWF5YmU8QXJyYXlPclZhbHVlPERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlPj4pID0+IHVwZGF0ZVN0YXRlV2l0aEV4Y2x1c2lvbnMoc3RhdGUsIGV4Y2x1c2lvbnMpKTtcbiAgcmVhZG9ubHkgc2V0Q29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogTWF5YmU8Ym9vbGVhbj4pID0+IHVwZGF0ZVN0YXRlV2l0aENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKHN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcikpO1xuICByZWFkb25seSBjbGVhckZpbHRlciA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHVwZGF0ZVN0YXRlV2l0aEZpbHRlcihzdGF0ZSwgdW5kZWZpbmVkKSk7XG5cbiAgcmVhZG9ubHkgc2V0VGltZXpvbmUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCB0aW1lem9uZTogTWF5YmU8VGltZXpvbmVTdHJpbmc+KSA9PiAoeyAuLi5zdGF0ZSwgdGltZXpvbmUsIHRpbWV6b25lTm9ybWFsOiB0aW1lem9uZSA/IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh7IHRpbWV6b25lIH0pIDogdW5kZWZpbmVkIH0pKTtcbiAgcmVhZG9ubHkgc2V0SW5wdXRSYW5nZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJhbmdlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uSW5wdXREYXRlUmFuZ2UpID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRSYW5nZShzdGF0ZSwgcmFuZ2UpKTtcblxuICByZWFkb25seSB0b2dnbGVTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdG9nZ2xlOiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgdG9nZ2xlIH0pKTtcbiAgcmVhZG9ubHkgYWRkU2VsZWN0ZWREYXRlcyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIGFkZDogSXRlcmFibGVPclZhbHVlPERhdGVPckRhdGVCbG9ja0luZGV4PikgPT4gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZERhdGVzKHN0YXRlLCB7IGFkZCB9KSk7XG4gIHJlYWRvbmx5IHJlbW92ZVNlbGVjdGVkRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCByZW1vdmU6IEl0ZXJhYmxlT3JWYWx1ZTxEYXRlT3JEYXRlQmxvY2tJbmRleD4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyByZW1vdmUgfSkpO1xuICByZWFkb25seSBzZXRTZWxlY3RlZERhdGVzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgc2V0OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+KSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2V0IH0pKTtcbiAgcmVhZG9ubHkgc2VsZWN0QWxsRGF0ZXMgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBzZWxlY3RBbGw6IEFsbE9yTm9uZVNlbGVjdGlvbiA9ICdhbGwnKSA9PiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHsgc2VsZWN0QWxsIH0pKTtcbiAgcmVhZG9ubHkgc2V0SW5pdGlhbFNlbGVjdGlvblN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgaW5pdGlhbFNlbGVjdGlvblN0YXRlOiBNYXliZTxBbGxPck5vbmVTZWxlY3Rpb24+KSA9PiB1cGRhdGVTdGF0ZVdpdGhJbml0aWFsU2VsZWN0aW9uU3RhdGUoc3RhdGUsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSkpO1xuXG4gIHJlYWRvbmx5IHNldFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHNjaGVkdWxlRGF5czogSXRlcmFibGU8RGF0ZVNjaGVkdWxlRGF5Q29kZT4pID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoc3RhdGUsIHNjaGVkdWxlRGF5cykpO1xuICByZWFkb25seSBzZXRBbGxvd0FsbFNjaGVkdWxlRGF5cyA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWRTY2hlZHVsZURheXMoc3RhdGUsIG51bGwpKTtcblxuICByZWFkb25seSBzZXREYXRlU2NoZWR1bGVSYW5nZVZhbHVlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdmFsdWU6IE1heWJlPERhdGVTY2hlZHVsZVJhbmdlPikgPT4gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZShzdGF0ZSwgdmFsdWUpKTtcbiAgcmVhZG9ubHkgc2V0Q2VsbENvbnRlbnRGYWN0b3J5ID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgY2VsbENvbnRlbnRGYWN0b3J5OiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uQ2VsbENvbnRlbnRGYWN0b3J5KSA9PiAoeyAuLi5zdGF0ZSwgY2VsbENvbnRlbnRGYWN0b3J5IH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aEluaXRpYWxTZWxlY3Rpb25TdGF0ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBpbml0aWFsU2VsZWN0aW9uU3RhdGU6IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCB7IHNlbGVjdGVkSW5kZXhlcyB9ID0gc3RhdGU7XG5cbiAgaWYgKHNlbGVjdGVkSW5kZXhlcy5zaXplID09PSAwICYmIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSA9PT0gJ2FsbCcpIHtcbiAgICBzdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aENoYW5nZWREYXRlcyhzdGF0ZSwgeyBzZWxlY3RBbGw6IGluaXRpYWxTZWxlY3Rpb25TdGF0ZSB9KTtcbiAgfVxuXG4gIHJldHVybiB7IC4uLnN0YXRlLCBpbml0aWFsU2VsZWN0aW9uU3RhdGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aENvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKGN1cnJlbnRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcjogTWF5YmU8Ym9vbGVhbj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBsZXQgc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSA9IHsgLi4uY3VycmVudFN0YXRlLCBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciB9O1xuXG4gIGlmIChCb29sZWFuKGN1cnJlbnRTdGF0ZS5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcikgIT09IEJvb2xlYW4oY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIpKSB7XG4gICAgc3RhdGUgPSB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGUsIHt9KTsgLy8gcmVjYWxjdWxhdGUgaWYgY2hhbmdlIG9jY3VycyBhcyBpdCB3aWxsIGFmZmVjdCB0aGUgb3V0cHV0IHZhbHVlXG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhFeGNsdXNpb25zKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGlucHV0RXhjbHVzaW9uczogTWF5YmU8QXJyYXlPclZhbHVlPERhdGVPckRhdGVSYW5nZU9yRGF0ZUJsb2NrSW5kZXhPckRhdGVCbG9ja1JhbmdlPj4pOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICBsZXQgY29tcHV0ZWRFeGNsdXNpb25zOiBNYXliZTxEYXRlQmxvY2tJbmRleFtdPjtcblxuICBpZiAoaW5wdXRFeGNsdXNpb25zKSB7XG4gICAgY29uc3QgeyBpbmRleEZhY3RvcnkgfSA9IHN0YXRlO1xuICAgIGNvbnN0IGluZGV4QXJyYXlGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhBcnJheUZhY3RvcnkoaW5kZXhGYWN0b3J5KTtcbiAgICBjb21wdXRlZEV4Y2x1c2lvbnMgPSBpbmRleEFycmF5RmFjdG9yeShpbnB1dEV4Y2x1c2lvbnMpO1xuICB9XG5cbiAgc3RhdGUgPSB7IC4uLnN0YXRlLCBpbnB1dEV4Y2x1c2lvbnMsIGNvbXB1dGVkRXhjbHVzaW9ucyB9O1xuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoRmlsdGVyKHN0YXRlLCBzdGF0ZS5maWx0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTWluTWF4RGF0ZVJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIG1pbk1heERhdGVSYW5nZTogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIHN0YXRlID0geyAuLi5zdGF0ZSB9O1xuXG4gIGlmIChtaW5NYXhEYXRlUmFuZ2UgIT0gbnVsbCAmJiAhaXNJbmZpbml0ZURhdGVSYW5nZShtaW5NYXhEYXRlUmFuZ2UpKSB7XG4gICAgc3RhdGUubWluTWF4RGF0ZVJhbmdlID0ge1xuICAgICAgc3RhcnQ6IG1pbk1heERhdGVSYW5nZS5zdGFydCAhPSBudWxsID8gc3RhcnRPZkRheShtaW5NYXhEYXRlUmFuZ2Uuc3RhcnQpIDogdW5kZWZpbmVkLFxuICAgICAgZW5kOiBtaW5NYXhEYXRlUmFuZ2UuZW5kICE9IG51bGwgPyBlbmRPZkRheShtaW5NYXhEYXRlUmFuZ2UuZW5kKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIHN0YXRlLm1pbk1heERhdGVSYW5nZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGUsIHN0YXRlLmZpbHRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhGaWx0ZXIoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgaW5wdXRGaWx0ZXI6IE1heWJlPERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc+KTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBjb21wdXRlZEV4Y2x1c2lvbnM6IGV4Y2x1c2lvbnMsIG1pbk1heERhdGVSYW5nZSB9ID0gc3RhdGU7XG5cbiAgbGV0IGlzRW5hYmxlZEZpbHRlckRheTogTWF5YmU8RGVjaXNpb25GdW5jdGlvbjxEYXRlT3JEYXRlQmxvY2tJbmRleD4+ID0gKCkgPT4gdHJ1ZTtcbiAgbGV0IGZpbHRlcjogTWF5YmU8RGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZz4gPSBudWxsO1xuXG4gIC8vIGNyZWF0ZSB0aGUgZmlsdGVyIHVzaW5nIGlucHV0RmlsdGVyLCBleGNsdXNpb25zLCBhbmQgbWluTWF4RGF0ZVJhbmdlXG4gIGlmIChpbnB1dEZpbHRlciB8fCBleGNsdXNpb25zPy5sZW5ndGggfHwgbWluTWF4RGF0ZVJhbmdlKSB7XG4gICAgbGV0IGVuYWJsZWRGaWx0ZXI6IERhdGVTY2hlZHVsZURhdGVGaWx0ZXJDb25maWc7XG5cbiAgICBpZiAoaW5wdXRGaWx0ZXIpIHtcbiAgICAgIGZpbHRlciA9IGNvcHlEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnKGlucHV0RmlsdGVyKTsgLy8gY29weSBmaWx0ZXJcblxuICAgICAgaWYgKGV4Y2x1c2lvbnM/Lmxlbmd0aCkge1xuICAgICAgICBlbmFibGVkRmlsdGVyID0ge1xuICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICBleDogdW5pcXVlKG1lcmdlQXJyYXlzKFtmaWx0ZXIuZXgsIGV4Y2x1c2lvbnNdKSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuYWJsZWRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuYWJsZWRGaWx0ZXIgPSB7XG4gICAgICAgIHc6ICc4OScsXG4gICAgICAgIGV4OiBleGNsdXNpb25zIGFzIG51bWJlcltdXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChtaW5NYXhEYXRlUmFuZ2UpIHtcbiAgICAgIGVuYWJsZWRGaWx0ZXIubWluTWF4RGF0ZVJhbmdlID0gbWluTWF4RGF0ZVJhbmdlO1xuICAgICAgZW5hYmxlZEZpbHRlci5zZXRTdGFydEFzTWluRGF0ZSA9IEJvb2xlYW4oZmlsdGVyPy5zdGFydCkgPyB0cnVlIDogZmFsc2U7IC8vIElmIGEgc3RhcnQgZGF0ZSBpcyBzZXQsIHRoZW4gaXQgYmVjb21lcyB0aGUgZmxvb3IuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGlucHV0IGZpbHRlciBoYXMgYSBzdGFydCBkYXRlLCB1c2UgdGhhdCBhcyB0aGUgcmVsYXRpdmUgc3RhcnQgdG8gZW5zdXJlIGluZGV4ZXMgYXJlIGNvbXBhcmVkIHRoZSBzYW1lLFxuICAgICAqIG90aGVyd2lzZSB1c2UgdGhlIHN0YXRlJ3Mgc3RhcnQuIFRoaXMgaXMgaW1wb3J0YW50IGZvciB0aGUgaW5kZXggY2FsY3VsYXRpb25zLlxuICAgICAqL1xuICAgIGVuYWJsZWRGaWx0ZXIuc3RhcnQgPSBpbnB1dEZpbHRlcj8uc3RhcnQgPz8gc3RhdGUuc3RhcnQ7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGZpbHRlclxuICAgIGlzRW5hYmxlZEZpbHRlckRheSA9IGRhdGVTY2hlZHVsZURhdGVGaWx0ZXIoZW5hYmxlZEZpbHRlcik7XG4gIH1cblxuICBzdGF0ZSA9IHsgLi4uc3RhdGUsIGZpbHRlciwgaXNFbmFibGVkRmlsdGVyRGF5IH07XG5cbiAgLy8gRm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZSwgdXNlIHRoZSBmaWx0ZXIncyBzdGFydCBkYXRlIGFzIHRoZSByZWxhdGl2ZSBzdGFydCBpZiBhcHBsaWNhYmxlLlxuICBpZiAoZmlsdGVyICYmIGZpbHRlci5zdGFydCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gZmlsdGVyLnN0YXJ0O1xuICAgIHN0YXRlLnN0YXJ0ID0gc3RhcnQ7XG4gICAgc3RhdGUuaW5kZXhGYWN0b3J5ID0gZGF0ZVRpbWluZ1JlbGF0aXZlSW5kZXhGYWN0b3J5KHsgc3RhcnQgfSk7XG4gICAgc3RhdGUuaW5kZXhEYXlPZldlZWsgPSBkYXRlQmxvY2tEYXlPZldlZWtGYWN0b3J5KHN0YXJ0KTtcbiAgfVxuXG4gIC8vIGF0dGVtcHQgdG8gcmUtYXBwbHkgdGhlIGluaXRpYWwgc2VsZWN0aW9uIHN0YXRlIG9uY2UgZmlsdGVyIGlzIGFwcGxpZWRcbiAgaWYgKHN0YXRlLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoSW5pdGlhbFNlbGVjdGlvblN0YXRlKHN0YXRlLCBzdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUpO1xuICB9XG5cbiAgLy8gcmUtY2FsY3VsYXRlIHRoZSBzZWxlY3Rpb24gZ2l2ZW4gdGhlIGZpbHRlclxuICBjb25zdCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0gPSBzdGF0ZTtcblxuICBpZiAoaW5wdXRTdGFydCAmJiBpbnB1dEVuZCkge1xuICAgIHN0YXRlID0gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKHN0YXRlLCB7IGlucHV0U3RhcnQsIGlucHV0RW5kIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoRGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPERhdGVTY2hlZHVsZVJhbmdlPik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgdGltZXpvbmVOb3JtYWwgfSA9IHN0YXRlO1xuICBsZXQgY3VycmVudERhdGVTY2hlZHVsZVJhbmdlID0gc3RhdGUuY3VycmVudFNlbGVjdGlvblZhbHVlPy5kYXRlU2NoZWR1bGVSYW5nZTtcblxuICBpZiAoIWNhbGVuZGFyU2NoZWR1bGVTdGFydEJlaW5nVXNlZEZyb21GaWx0ZXIoc3RhdGUpICYmIHRpbWV6b25lTm9ybWFsKSB7XG4gICAgaWYgKGNoYW5nZSkge1xuICAgICAgY2hhbmdlID0ge1xuICAgICAgICAuLi5jaGFuZ2UsXG4gICAgICAgIHN0YXJ0OiB0aW1lem9uZU5vcm1hbC5zeXN0ZW1EYXRlVG9UYXJnZXREYXRlKGNoYW5nZS5zdGFydCksXG4gICAgICAgIGVuZDogdGltZXpvbmVOb3JtYWwuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShjaGFuZ2UuZW5kKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudERhdGVTY2hlZHVsZVJhbmdlKSB7XG4gICAgICBjdXJyZW50RGF0ZVNjaGVkdWxlUmFuZ2UgPSB7XG4gICAgICAgIC4uLmN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZSxcbiAgICAgICAgc3RhcnQ6IHRpbWV6b25lTm9ybWFsLnRhcmdldERhdGVUb1N5c3RlbURhdGUoY3VycmVudERhdGVTY2hlZHVsZVJhbmdlLnN0YXJ0KSxcbiAgICAgICAgZW5kOiB0aW1lem9uZU5vcm1hbC50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKGN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZS5lbmQpXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGlzU2FtZVZhbHVlID0gaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UoY3VycmVudERhdGVTY2hlZHVsZVJhbmdlLCBjaGFuZ2UpO1xuXG4gIGlmIChpc1NhbWVWYWx1ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY2hhbmdlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydDogY2hhbmdlLnN0YXJ0LCBpbnB1dEVuZDogY2hhbmdlLmVuZCwgc2VsZWN0ZWRJbmRleGVzOiBuZXcgU2V0KGNoYW5nZS5leCkgfTtcbiAgICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkU2NoZWR1bGVEYXlzKGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSksIGV4cGFuZERhdGVTY2hlZHVsZURheUNvZGVzKGNoYW5nZS53IHx8ICc4OScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHN0YXRlKTsgLy8gY2xlYXIgc2VsZWN0aW9uLCByZXRhaW4gZGlzYWJsZWQgZGF5c1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFNjaGVkdWxlRGF5cyhzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlLCBjaGFuZ2U6IE1heWJlPEl0ZXJhYmxlPERhdGVTY2hlZHVsZURheUNvZGU+Pik6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgc2NoZWR1bGVEYXlzOiBjdXJyZW50U2NoZWR1bGVEYXlzIH0gPSBzdGF0ZTtcbiAgY29uc3Qgc2NoZWR1bGVEYXlzID0gbmV3IFNldChjaGFuZ2UgfHwgW0RhdGVTY2hlZHVsZURheUNvZGUuV0VFS0RBWSwgRGF0ZVNjaGVkdWxlRGF5Q29kZS5XRUVLRU5EXSk7XG5cbiAgaWYgKHNldHNBcmVFcXVpdmFsZW50KGN1cnJlbnRTY2hlZHVsZURheXMsIHNjaGVkdWxlRGF5cykpIHtcbiAgICByZXR1cm4gc3RhdGU7IC8vIG5vIGNoYW5nZVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGFsbG93ZWREYXlzT2ZXZWVrID0gZXhwYW5kRGF0ZVNjaGVkdWxlRGF5Q29kZXNUb0RheU9mV2Vla1NldChBcnJheS5mcm9tKHNjaGVkdWxlRGF5cykpO1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHsgLi4uc3RhdGUsIHNjaGVkdWxlRGF5cywgYWxsb3dlZERheXNPZldlZWsgfTtcbiAgICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZURhdGVzQ2hhbmdlIHtcbiAgcmVzZXQ/OiB0cnVlO1xuICB0b2dnbGU/OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+O1xuICBhZGQ/OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+O1xuICByZW1vdmU/OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+O1xuICBzZXQ/OiBJdGVyYWJsZU9yVmFsdWU8RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+O1xuICBzZWxlY3RBbGw/OiBBbGxPck5vbmVTZWxlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZVdpdGhDaGFuZ2VkRGF0ZXMoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgY2hhbmdlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGVEYXRlc0NoYW5nZSk6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSB7XG4gIGNvbnN0IHsgaW5kZXhGYWN0b3J5LCBhbGxvd2VkRGF5c09mV2VlaywgaW5kZXhEYXlPZldlZWssIGlucHV0U3RhcnQ6IGN1cnJlbnRJbnB1dFN0YXJ0LCBpbnB1dEVuZDogY3VycmVudElucHV0RW5kLCBtaW5NYXhEYXRlUmFuZ2UgfSA9IHN0YXRlO1xuICBjb25zdCB7IHN0YXJ0OiBtaW5EYXRlLCBlbmQ6IG1heERhdGUgfSA9IGNhbGVuZGFyU2NoZWR1bGVNaW5BbmRNYXhEYXRlUmFuZ2Uoc3RhdGUpO1xuICBsZXQgaW5wdXRTdGFydCA9IGN1cnJlbnRJbnB1dFN0YXJ0O1xuICBsZXQgaW5wdXRFbmQgPSBjdXJyZW50SW5wdXRFbmQ7XG5cbiAgbGV0IHNlbGVjdGVkSW5kZXhlczogU2V0PERhdGVCbG9ja0luZGV4PjtcblxuICBpZiAoY2hhbmdlLnJlc2V0IHx8IGNoYW5nZS5zZWxlY3RBbGwgIT0gbnVsbCB8fCBjaGFuZ2Uuc2V0KSB7XG4gICAgbGV0IHNldDogTWF5YmU8SXRlcmFibGVPclZhbHVlPERhdGVPckRhdGVCbG9ja0luZGV4Pj4gPSBjaGFuZ2Uuc2V0ID8/IFtdO1xuICAgIGxldCBzZWxlY3RBbGw6IE1heWJlPEFsbE9yTm9uZVNlbGVjdGlvbj4gPSBjaGFuZ2UucmVzZXQgPT09IHRydWUgPyBzdGF0ZS5pbml0aWFsU2VsZWN0aW9uU3RhdGUgOiBjaGFuZ2Uuc2VsZWN0QWxsO1xuXG4gICAgc3dpdGNoIChzZWxlY3RBbGwpIHtcbiAgICAgIGNhc2UgJ2FsbCc6XG4gICAgICAgIGlmIChtaW5EYXRlICE9IG51bGwgJiYgbWF4RGF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgaW5wdXRTdGFydCA9IG1pbkRhdGU7XG4gICAgICAgICAgaW5wdXRFbmQgPSBtYXhEYXRlO1xuICAgICAgICAgIHNldCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIGlucHV0U3RhcnQgPSBudWxsO1xuICAgICAgICBpbnB1dEVuZCA9IG51bGw7XG4gICAgICAgIHNldCA9IFtdO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzZWxlY3RlZEluZGV4ZXMgPSBuZXcgU2V0KGl0ZXJhYmxlVG9BcnJheShzZXQpLm1hcChpbmRleEZhY3RvcnkpKTtcbiAgfSBlbHNlIHtcbiAgICBzZWxlY3RlZEluZGV4ZXMgPSBuZXcgU2V0KHN0YXRlLnNlbGVjdGVkSW5kZXhlcyk7XG5cbiAgICBpZiAoY2hhbmdlLnRvZ2dsZSkge1xuICAgICAgY29uc3QgYWxsb3dlZFRvVG9nZ2xlID0gaXRlcmFibGVUb0FycmF5KGNoYW5nZS50b2dnbGUpXG4gICAgICAgIC5tYXAoaW5kZXhGYWN0b3J5KVxuICAgICAgICAuZmlsdGVyKChpKSA9PiBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoaSkpKTtcbiAgICAgIHRvZ2dsZUluU2V0KHNlbGVjdGVkSW5kZXhlcywgYWxsb3dlZFRvVG9nZ2xlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLmFkZCkge1xuICAgICAgYWRkVG9TZXQoc2VsZWN0ZWRJbmRleGVzLCBpdGVyYWJsZVRvQXJyYXkoY2hhbmdlLmFkZCkubWFwKGluZGV4RmFjdG9yeSkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UucmVtb3ZlKSB7XG4gICAgICBhZGRUb1NldChzZWxlY3RlZEluZGV4ZXMsIGl0ZXJhYmxlVG9BcnJheShjaGFuZ2UucmVtb3ZlKS5tYXAoaW5kZXhGYWN0b3J5KSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSwgaW5wdXRTdGFydCwgaW5wdXRFbmQsIHNlbGVjdGVkSW5kZXhlcyB9O1xuICBuZXh0U3RhdGUuaXNFbmFibGVkRGF5ID0gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcblxuICAvLyBSZWNhbGN1bGF0ZSB0aGUgcmFuZ2UgYW5kIHNpbXBsaWZpZWQgdG8gZXhjbHVzaW9uc1xuICBjb25zdCByYW5nZUFuZEV4Y2x1c2lvbiA9IGNvbXB1dGVTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uKG5leHRTdGF0ZSk7XG5cbiAgaWYgKHJhbmdlQW5kRXhjbHVzaW9uKSB7XG4gICAgcmV0dXJuIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHsgLi4ubmV4dFN0YXRlLCBzZWxlY3RlZEluZGV4ZXM6IG5ldyBTZXQocmFuZ2VBbmRFeGNsdXNpb24uZXhjbHVkZWQpLCBpbnB1dFN0YXJ0OiByYW5nZUFuZEV4Y2x1c2lvbi5zdGFydCwgaW5wdXRFbmQ6IHJhbmdlQW5kRXhjbHVzaW9uLmVuZCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBubyBzZWxlY3RlZCBkYXlzXG4gICAgcmV0dXJuIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vU2VsZWN0aW9uQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUpOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUge1xuICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoeyAuLi5zdGF0ZSwgc2VsZWN0ZWRJbmRleGVzOiBuZXcgU2V0KCksIGlucHV0U3RhcnQ6IG51bGwsIGlucHV0RW5kOiBudWxsIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoQ2hhbmdlZFJhbmdlKHN0YXRlOiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsIGNoYW5nZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbklucHV0RGF0ZVJhbmdlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3QgeyBpbnB1dFN0YXJ0OiBjdXJyZW50SW5wdXRTdGFydCwgaW5wdXRFbmQ6IGN1cnJlbnRJbnB1dEVuZCwgaW5kZXhGYWN0b3J5LCBtaW5NYXhEYXRlUmFuZ2UgfSA9IHN0YXRlO1xuICBjb25zdCB7IHN0YXJ0OiBtaW5EYXRlLCBlbmQ6IG1heERhdGUgfTogUGFydGlhbDxEYXRlUmFuZ2U+ID0gbWluTWF4RGF0ZVJhbmdlID8/IHt9O1xuXG4gIGxldCBpbnB1dFN0YXJ0OiBEYXRlID0gc3RhcnRPZkRheShjaGFuZ2UuaW5wdXRTdGFydCk7XG4gIGxldCBpbnB1dEVuZDogRGF0ZSA9IGVuZE9mRGF5KGNoYW5nZS5pbnB1dEVuZCk7XG5cbiAgY29uc3QgaXNWYWxpZFJhbmdlID0gbWluRGF0ZSAhPSBudWxsIHx8IG1heERhdGUgIT0gbnVsbCA/IGlzRGF0ZUluRGF0ZVJhbmdlRnVuY3Rpb24oeyBzdGFydDogbWluRGF0ZSA/PyB1bmRlZmluZWQsIGVuZDogbWF4RGF0ZSA/PyB1bmRlZmluZWQgfSkgOiAoKSA9PiB0cnVlO1xuXG4gIGlmICghaXNWYWxpZFJhbmdlKGlucHV0U3RhcnQpIHx8ICFpc1ZhbGlkUmFuZ2UoaW5wdXRFbmQpIHx8IChpc1NhbWVEYXRlRGF5KGlucHV0U3RhcnQsIGN1cnJlbnRJbnB1dFN0YXJ0KSAmJiBpc1NhbWVEYXRlRGF5KGlucHV0RW5kLCBjdXJyZW50SW5wdXRFbmQpKSkge1xuICAgIHJldHVybiBzdGF0ZTsgLy8gaWYgbm8gY2hhbmdlLCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gIH1cblxuICAvLyByZXRhaW4gYWxsIGluZGV4ZXMgdGhhdCBhcmUgd2l0aGluIHRoZSBuZXcgcmFuZ2VcbiAgY29uc3QgbWluSW5kZXggPSBpbmRleEZhY3RvcnkoaW5wdXRTdGFydCk7XG4gIGNvbnN0IG1heEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0RW5kKSArIDE7XG5cbiAgY29uc3QgY3VycmVudEluZGV4ZXM6IERhdGVCbG9ja0luZGV4W10gPSBBcnJheS5mcm9tKHN0YXRlLnNlbGVjdGVkSW5kZXhlcyk7XG4gIGNvbnN0IGlzSW5DdXJyZW50UmFuZ2UgPSBpc0luZGV4TnVtYmVySW5JbmRleFJhbmdlRnVuY3Rpb24oeyBtaW5JbmRleCwgbWF4SW5kZXggfSk7XG4gIGNvbnN0IGV4Y2x1ZGVkSW5kZXhlc0luTmV3UmFuZ2UgPSBjdXJyZW50SW5kZXhlcy5maWx0ZXIoaXNJbkN1cnJlbnRSYW5nZSk7XG4gIGNvbnN0IHNlbGVjdGVkSW5kZXhlcyA9IG5ldyBTZXQoZXhjbHVkZWRJbmRleGVzSW5OZXdSYW5nZSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0geyAuLi5zdGF0ZSwgc2VsZWN0ZWRJbmRleGVzLCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCB9O1xuICByZXR1cm4gZmluYWxpemVOZXdDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUobmV4dFN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplTmV3Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlIHtcbiAgbmV4dFN0YXRlLmlzRW5hYmxlZERheSA9IGlzRW5hYmxlZERheUluQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKG5leHRTdGF0ZSk7XG4gIG5leHRTdGF0ZS5jdXJyZW50U2VsZWN0aW9uVmFsdWUgPSBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZShuZXh0U3RhdGUpO1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmFibGVkRGF5SW5DYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IERlY2lzaW9uRnVuY3Rpb248RGF0ZU9yRGF0ZUJsb2NrSW5kZXg+IHtcbiAgY29uc3QgeyBpbmRleEZhY3RvcnksIGlucHV0U3RhcnQsIGlucHV0RW5kLCBpbmRleERheU9mV2VlaywgYWxsb3dlZERheXNPZldlZWsgfSA9IHN0YXRlO1xuXG4gIGxldCBpc0luU3RhcnRBbmRFbmRSYW5nZTogSXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbjtcblxuICBpZiAoaW5wdXRTdGFydCAmJiBpbnB1dEVuZCkge1xuICAgIGlzSW5TdGFydEFuZEVuZFJhbmdlID0gaXNEYXRlV2l0aGluRGF0ZUJsb2NrUmFuZ2VGdW5jdGlvbih7IHN0YXJ0OiBzdGF0ZS5zdGFydCwgcmFuZ2U6IHsgc3RhcnQ6IGlucHV0U3RhcnQsIGVuZDogaW5wdXRFbmQgfSB9KTtcbiAgfSBlbHNlIHtcbiAgICBpc0luU3RhcnRBbmRFbmRSYW5nZSA9ICgpID0+IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChpbnB1dDogRGF0ZU9yRGF0ZUJsb2NrSW5kZXgpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dCk7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gaW5kZXhEYXlPZldlZWsoaW5kZXgpO1xuXG4gICAgY29uc3QgaXNJblNlbGVjdGVkUmFuZ2UgPSBpc0luU3RhcnRBbmRFbmRSYW5nZShpbnB1dCk7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHN0YXRlLnNlbGVjdGVkSW5kZXhlcy5oYXMoaW5kZXgpO1xuICAgIGNvbnN0IGlzQWxsb3dlZERheU9mV2VlayA9IGFsbG93ZWREYXlzT2ZXZWVrLmhhcyhkYXlPZldlZWspO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gaXNBbGxvd2VkRGF5T2ZXZWVrICYmICgoaXNJblNlbGVjdGVkUmFuZ2UgJiYgIWlzU2VsZWN0ZWQpIHx8IChpc1NlbGVjdGVkICYmICFpc0luU2VsZWN0ZWRSYW5nZSkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25WYWx1ZShzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblZhbHVlPiB7XG4gIGNvbnN0IHsgaW5kZXhGYWN0b3J5LCBzY2hlZHVsZURheXMsIGFsbG93ZWREYXlzT2ZXZWVrLCBpbmRleERheU9mV2VlaywgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIsIGZpbHRlciB9ID0gc3RhdGU7XG4gIGNvbnN0IHJhbmdlQW5kRXhjbHVzaW9uID0gY29tcHV0ZVNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24oc3RhdGUpO1xuXG4gIGlmIChyYW5nZUFuZEV4Y2x1c2lvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IHN0YXJ0OiByYW5nZVN0YXJ0LCBlbmQ6IHJhbmdlRW5kLCBleGNsdWRlZDogYWxsRXhjbHVkZWQsIGRhdGVCbG9ja1JhbmdlIH0gPSByYW5nZUFuZEV4Y2x1c2lvbjtcbiAgbGV0IGZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2U6IERhdGVCbG9ja0luZGV4W10gPSBbXTtcbiAgbGV0IGluZGV4T2Zmc2V0ID0gZGF0ZUJsb2NrUmFuZ2UuaTtcblxuICBsZXQgc3RhcnQgPSByYW5nZVN0YXJ0O1xuICBsZXQgZW5kID0gcmFuZ2VFbmQ7XG5cbiAgLy8gSWYgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgaXMgdHJ1ZSwgdGhlbiB3ZSBuZWVkIHRvIG9mZnNldCB0aGUgdmFsdWVzIHRvIGJlIHJlbGF0aXZlIHRvIHRoYXQgc3RhcnQuXG4gIGlmIChjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAmJiBmaWx0ZXI/LnN0YXJ0KSB7XG4gICAgc3RhcnQgPSBmaWx0ZXIuc3RhcnQ7XG5cbiAgICBpZiAoZmlsdGVyPy5lbmQpIHtcbiAgICAgIGVuZCA9IGNvcHlIb3Vyc0FuZE1pbnV0ZXNGcm9tRGF0ZShlbmQsIGZpbHRlci5lbmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlclN0YXJ0SW5kZXhPZmZzZXQgPSBpbmRleEZhY3RvcnkocmFuZ2VTdGFydCkgLSBpbmRleEZhY3Rvcnkoc3RhcnQpO1xuICAgIGZpbHRlck9mZnNldEV4Y2x1ZGVkUmFuZ2UgPSByYW5nZSgwLCBmaWx0ZXJTdGFydEluZGV4T2Zmc2V0KTtcbiAgICBpbmRleE9mZnNldCA9IGluZGV4T2Zmc2V0IC0gZmlsdGVyU3RhcnRJbmRleE9mZnNldDtcbiAgfVxuXG4gIGNvbnN0IGV4Y2x1ZGVkID0gY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXJcbiAgICA/IGFsbEV4Y2x1ZGVkLmZpbHRlcigoeCkgPT4ge1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkSW5kZXggPSBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoeCkpOyAvLyA/Pz9cbiAgICAgICAgcmV0dXJuIGlzRXhjbHVkZWRJbmRleDtcbiAgICAgIH0pXG4gICAgOiBhbGxFeGNsdWRlZDtcblxuICBjb25zdCBvZmZzZXRFeGNsdWRlZDogRGF0ZUJsb2NrSW5kZXhbXSA9IGV4Y2x1ZGVkLm1hcCgoeCkgPT4geCAtIGluZGV4T2Zmc2V0KTsgLy8gc2V0IHRvIHRoZSBwcm9wZXIgb2Zmc2V0XG5cbiAgY29uc3QgZXggPSBbLi4uZmlsdGVyT2Zmc2V0RXhjbHVkZWRSYW5nZSwgLi4ub2Zmc2V0RXhjbHVkZWRdO1xuXG4gIGNvbnN0IHc6IERhdGVTY2hlZHVsZUVuY29kZWRXZWVrID0gZGF0ZVNjaGVkdWxlRW5jb2RlZFdlZWsoc2NoZWR1bGVEYXlzKTtcbiAgY29uc3QgZDogRGF0ZUJsb2NrSW5kZXhbXSA9IFtdOyAvLyBcImluY2x1ZGVkXCIgYmxvY2tzIGFyZSBuZXZlciB1c2VkL2NhbGN1bGF0ZWQuXG5cbiAgLy8gQWx3YXlzIGVuc3VyZSB0aGUgZW5kIGlzIGFmdGVyIG9yIGVxdWFsIHRvIHRoZSBzdGFydC5cbiAgaWYgKGlzQmVmb3JlKGVuZCwgc3RhcnQpKSB7XG4gICAgZW5kID0gc3RhcnQ7IC8vIGVuZCBpcyBzdGFydFxuICB9XG5cbiAgY29uc3QgZGF0ZVNjaGVkdWxlUmFuZ2U6IERhdGVTY2hlZHVsZVJhbmdlID0ge1xuICAgIHN0YXJ0LFxuICAgIGVuZCxcbiAgICB3LFxuICAgIGQsXG4gICAgZXhcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGRhdGVTY2hlZHVsZVJhbmdlLFxuICAgIG1pbk1heFJhbmdlOiB7IHN0YXJ0LCBlbmQgfVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbiBleHRlbmRzIERhdGVSYW5nZSB7XG4gIGRhdGVCbG9ja1JhbmdlOiBEYXRlQmxvY2tSYW5nZVdpdGhSYW5nZTtcbiAgZXhjbHVkZWQ6IERhdGVCbG9ja0luZGV4W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU2NoZWR1bGVTZWxlY3Rpb25SYW5nZUFuZEV4Y2x1c2lvbihzdGF0ZTogQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0YXRlKTogTWF5YmU8Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblJhbmdlQW5kRXhjbHVzaW9uPiB7XG4gIGNvbnN0IHsgaXNFbmFibGVkRGF5LCBpc0VuYWJsZWRGaWx0ZXJEYXkgfSA9IHN0YXRlO1xuICBjb25zdCBkYXRlRmFjdG9yeSA9IGRhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5KHN0YXRlKTtcbiAgY29uc3QgZGF0ZUJsb2NrUmFuZ2UgPSBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVCbG9ja1JhbmdlKHN0YXRlKTtcblxuICBpZiAoZGF0ZUJsb2NrUmFuZ2UgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsOyAvLyByZXR1cm5zIG51bGwgaWYgbm8gaXRlbXMgYXJlIHNlbGVjdGVkLlxuICB9XG5cbiAgY29uc3Qgc3RhcnQgPSBkYXRlRmFjdG9yeShkYXRlQmxvY2tSYW5nZS5pKTtcbiAgY29uc3QgZW5kID0gZGF0ZUZhY3RvcnkoZGF0ZUJsb2NrUmFuZ2UudG8pO1xuXG4gIGNvbnN0IGV4Y2x1ZGVkOiBEYXRlQmxvY2tJbmRleFtdID0gcmFuZ2UoZGF0ZUJsb2NrUmFuZ2UuaSwgZGF0ZUJsb2NrUmFuZ2UudG8gKyAxKS5maWx0ZXIoKHgpID0+IHtcbiAgICBjb25zdCBpc0V4Y2x1ZGVkSW5kZXggPSAhaXNFbmFibGVkRGF5KHgpIHx8ICFpc0VuYWJsZWRGaWx0ZXJEYXkoeCk7XG4gICAgcmV0dXJuIGlzRXhjbHVkZWRJbmRleDtcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0OiBDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2VBbmRFeGNsdXNpb24gPSB7XG4gICAgZGF0ZUJsb2NrUmFuZ2UsXG4gICAgc3RhcnQsXG4gICAgZW5kLFxuICAgIGV4Y2x1ZGVkXG4gIH07XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPERhdGVSYW5nZT4ge1xuICBjb25zdCBkYXRlRmFjdG9yeSA9IGRhdGVCbG9ja1RpbWluZ0RhdGVGYWN0b3J5KHN0YXRlKTtcbiAgY29uc3QgZGF0ZUJsb2NrUmFuZ2UgPSBjb21wdXRlQ2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvbkRhdGVCbG9ja1JhbmdlKHN0YXRlKTtcbiAgY29uc3QgZGF0ZVJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+ID0gZGF0ZUJsb2NrUmFuZ2UgIT0gbnVsbCA/IHsgc3RhcnQ6IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLmkpLCBlbmQ6IGRhdGVGYWN0b3J5KGRhdGVCbG9ja1JhbmdlLnRvIGFzIG51bWJlcikgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGRhdGVSYW5nZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uRGF0ZUJsb2NrUmFuZ2Uoc3RhdGU6IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSk6IE1heWJlPERhdGVCbG9ja1JhbmdlV2l0aFJhbmdlPiB7XG4gIGNvbnN0IHsgaW5kZXhGYWN0b3J5LCBpbnB1dFN0YXJ0LCBpbnB1dEVuZCwgYWxsb3dlZERheXNPZldlZWssIGluZGV4RGF5T2ZXZWVrLCBpc0VuYWJsZWREYXksIGlzRW5hYmxlZEZpbHRlckRheSB9ID0gc3RhdGU7XG4gIGNvbnN0IGVuYWJsZWRTZWxlY3RlZEluZGV4ZXMgPSBBcnJheS5mcm9tKHN0YXRlLnNlbGVjdGVkSW5kZXhlcykuZmlsdGVyKChpKSA9PiBhbGxvd2VkRGF5c09mV2Vlay5oYXMoaW5kZXhEYXlPZldlZWsoaSkpKTtcbiAgY29uc3QgbWluQW5kTWF4U2VsZWN0ZWRWYWx1ZXMgPSBtaW5BbmRNYXhOdW1iZXIoZW5hYmxlZFNlbGVjdGVkSW5kZXhlcyk7XG5cbiAgbGV0IHN0YXJ0UmFuZ2U6IE1heWJlPERhdGVCbG9ja0luZGV4PjtcbiAgbGV0IGVuZFJhbmdlOiBNYXliZTxEYXRlQmxvY2tJbmRleD47XG5cbiAgaWYgKG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzKSB7XG4gICAgc3RhcnRSYW5nZSA9IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzLm1pbjtcbiAgICBlbmRSYW5nZSA9IG1pbkFuZE1heFNlbGVjdGVkVmFsdWVzLm1heDtcbiAgfVxuXG4gIGlmIChpbnB1dFN0YXJ0ICE9IG51bGwgJiYgaW5wdXRFbmQgIT0gbnVsbCkge1xuICAgIGNvbnN0IGlucHV0U3RhcnRJbmRleCA9IGluZGV4RmFjdG9yeShpbnB1dFN0YXJ0KTtcbiAgICBjb25zdCBpbnB1dEVuZEluZGV4ID0gaW5kZXhGYWN0b3J5KGlucHV0RW5kKTtcblxuICAgIHN0YXJ0UmFuZ2UgPSBzdGFydFJhbmdlICE9IG51bGwgPyBNYXRoLm1pbihpbnB1dFN0YXJ0SW5kZXgsIHN0YXJ0UmFuZ2UpIDogaW5wdXRTdGFydEluZGV4O1xuICAgIGVuZFJhbmdlID0gZW5kUmFuZ2UgIT0gbnVsbCA/IE1hdGgubWF4KGlucHV0RW5kSW5kZXgsIGVuZFJhbmdlKSA6IGlucHV0RW5kSW5kZXg7XG4gIH1cblxuICBpZiAoc3RhcnRSYW5nZSAhPSBudWxsICYmIGVuZFJhbmdlICE9IG51bGwpIHtcbiAgICBjb25zdCBzY2FuU3RhcnRJbmRleCA9IHN0YXJ0UmFuZ2U7XG4gICAgY29uc3Qgc2NhbkVuZEluZGV4ID0gZW5kUmFuZ2U7XG5cbiAgICAvLyBjbGVhciBzdGFydCBhbmQgZW5kXG4gICAgc3RhcnRSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICBlbmRSYW5nZSA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGlmIHRoZSBtaW4gaXMgZXF1YWwgdG8gdGhlIHN0YXJ0IGluZGV4LCB0aGVuIHdlIGFyZSBpbiB0aGUgcmFuZ2UgYW5kIG5lZWQgdG8gaXRlcmF0ZSBkYXRlcyB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0IGlzIG5vdCBzZWxlY3RlZC9leGNsdWRlZC5cbiAgICBmb3IgKGxldCBpID0gc2NhblN0YXJ0SW5kZXg7IGkgPD0gc2NhbkVuZEluZGV4OyBpICs9IDEpIHtcbiAgICAgIGlmIChpc0VuYWJsZWRGaWx0ZXJEYXkoaSkgJiYgaXNFbmFibGVkRGF5KGkpKSB7XG4gICAgICAgIHN0YXJ0UmFuZ2UgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzYW1lIHdpdGggdGhlIG1heFxuICAgIGZvciAobGV0IGkgPSBzY2FuRW5kSW5kZXg7IGkgPj0gc2NhblN0YXJ0SW5kZXg7IGkgLT0gMSkge1xuICAgICAgaWYgKGlzRW5hYmxlZEZpbHRlckRheShpKSAmJiBpc0VuYWJsZWREYXkoaSkpIHtcbiAgICAgICAgZW5kUmFuZ2UgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhcnRSYW5nZSAhPSBudWxsICYmIGVuZFJhbmdlICE9IG51bGwpIHtcbiAgICByZXR1cm4geyBpOiBzdGFydFJhbmdlLCB0bzogZW5kUmFuZ2UgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -19,6 +19,7 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
19
19
  this.ngZone = ngZone;
20
20
  this._syncSub = new SubscriptionObject();
21
21
  this._valueSub = new SubscriptionObject();
22
+ this._timezoneSub = new SubscriptionObject();
22
23
  this._minMaxDateRangeSub = new SubscriptionObject();
23
24
  this._filterSub = new SubscriptionObject();
24
25
  this._exclusionsSub = new SubscriptionObject();
@@ -53,6 +54,9 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
53
54
  get exclusions() {
54
55
  return this.props.exclusions;
55
56
  }
57
+ get timezone() {
58
+ return this.props.timezone;
59
+ }
56
60
  get initialSelectionState() {
57
61
  return this.props.initialSelectionState;
58
62
  }
@@ -67,7 +71,7 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
67
71
  this._valueSub.subscription = this.dbxCalendarScheduleSelectionStore.currentDateScheduleRangeValue$.subscribe((x) => {
68
72
  this.formControl.setValue(x);
69
73
  });
70
- const { minMaxDateRange, filter, exclusions } = this;
74
+ const { timezone, minMaxDateRange, filter, exclusions } = this;
71
75
  if (filter != null) {
72
76
  this._filterSub.subscription = this.dbxCalendarScheduleSelectionStore.setFilter(asObservable(filter));
73
77
  }
@@ -77,6 +81,9 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
77
81
  if (exclusions != null) {
78
82
  this._exclusionsSub.subscription = this.dbxCalendarScheduleSelectionStore.setExclusions(asObservable(exclusions));
79
83
  }
84
+ if (timezone != null) {
85
+ this.dbxCalendarScheduleSelectionStore.setTimezone(asObservable(this.timezone));
86
+ }
80
87
  if (this.initialSelectionState !== undefined) {
81
88
  this.dbxCalendarScheduleSelectionStore.setInitialSelectionState(this.initialSelectionState);
82
89
  }
@@ -89,6 +96,7 @@ export class DbxFormCalendarDateScheduleRangeFieldComponent extends FieldType {
89
96
  this._syncSub.destroy();
90
97
  this._valueSub.destroy();
91
98
  this._filterSub.destroy();
99
+ this._timezoneSub.destroy();
92
100
  this._minMaxDateRangeSub.destroy();
93
101
  this._exclusionsSub.destroy();
94
102
  this._formControlObs.complete();
@@ -117,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
117
125
  }], ctorParameters: function () { return [{ type: i1.CompactContextStore, decorators: [{
118
126
  type: Optional
119
127
  }] }, { type: i2.DbxCalendarScheduleSelectionStore }, { type: i0.NgZone }]; } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9maWVsZC9zY2hlZHVsZS9jYWxlbmRhci5zY2hlZHVsZS5maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBNEcsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEssT0FBTyxFQUFrQyxpQ0FBaUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzVILE9BQU8sRUFBRSwwREFBMEQsRUFBRSxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7QUF3QjdILE1BQU0sT0FBTyw4Q0FBa0osU0FBUSxTQUE2QjtJQWVsTSxZQUFpQyxPQUE0QixFQUFXLGlDQUFvRSxFQUFXLE1BQWM7UUFDbkssS0FBSyxFQUFFLENBQUM7UUFEdUIsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFBVyxzQ0FBaUMsR0FBakMsaUNBQWlDLENBQW1DO1FBQVcsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWQ3SixhQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLGtC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RjlDLENBQUMsMERBQTBELEVBQUUsQ0FBQyxpREFQL0Q7Ozs7OztHQU1UOzRGQUdVLDhDQUE4QztrQkFWMUQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUU7Ozs7OztHQU1UO29CQUNELFNBQVMsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLENBQUM7aUJBQzFFOzswQkFnQmMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcGFjdENvbnRleHRTdG9yZSB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlQ29uZmlnLCBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBBbGxPck5vbmVTZWxlY3Rpb24sIEFycmF5T3JWYWx1ZSwgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIFN1YnNjcmlwdGlvbiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXJNYXliZSwgT2JzZXJ2YWJsZU9yVmFsdWUsIFN1YnNjcmlwdGlvbk9iamVjdCwgYXNPYnNlcnZhYmxlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYXRlQmxvY2tJbmRleCwgRGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2UsIERhdGVSYW5nZSwgRGF0ZVNjaGVkdWxlRGF0ZUZpbHRlckNvbmZpZywgaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlJztcbmltcG9ydCB7IHByb3ZpZGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmVJZlBhcmVudElzVW5hdmFpbGFibGUgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUucHJvdmlkZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzIGV4dGVuZHMgUGljazxGb3JtbHlGaWVsZFByb3BzLCAnbGFiZWwnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdyZWFkb25seScgfCAncmVxdWlyZWQnPiwgUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcicgfCAnaW5pdGlhbFNlbGVjdGlvblN0YXRlJz4ge1xuICBhcHBlYXJhbmNlPzogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgaGlkZUN1c3RvbWl6ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBtaW4vbWF4IGRhdGUgcmFuZ2UgdG8gZmlsdGVyIG9uLiBXb3JrcyBpbiBjb25qdWN0aW9uIHdpdGggdGhlIGZpbHRlci5cbiAgICovXG4gIG1pbk1heERhdGVSYW5nZT86IE9ic2VydmFibGVPclZhbHVlPE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4+O1xuICBmaWx0ZXI/OiBPYnNlcnZhYmxlT3JWYWx1ZTxNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPj47XG4gIGV4Y2x1c2lvbnM/OiBPYnNlcnZhYmxlT3JWYWx1ZTxNYXliZTxBcnJheU9yVmFsdWU8RGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2U+Pj47XG59XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWZpZWxkXCI+XG4gICAgICA8ZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlIFtzaG93Q3VzdG9taXplXT1cInNob3dDdXN0b21pemVcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwiaXNSZWFkb25seU9yRGlzYWJsZWRcIiBbbGFiZWxdPVwibGFiZWxcIiBbaGludF09XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICA8ZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRpYWxvZy1idXR0b24gY3VzdG9taXplQnV0dG9uPjwvZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRpYWxvZy1idXR0b24+XG4gICAgICA8L2RieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1yYW5nZT5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZUlmUGFyZW50SXNVbmF2YWlsYWJsZSgpXVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkQ29tcG9uZW50PFQgZXh0ZW5kcyBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkUHJvcHMgPSBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkUHJvcHM+IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxUPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N5bmNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9taW5NYXhEYXRlUmFuZ2VTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2ZpbHRlclN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfZXhjbHVzaW9uc1N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9mb3JtQ29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wkID0gdGhpcy5fZm9ybUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSB2YWx1ZSQgPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgoY29udHJvbC52YWx1ZSkpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHJlYWRvbmx5IGNvbXBhY3Q6IENvbXBhY3RDb250ZXh0U3RvcmUsIHJlYWRvbmx5IGRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZTogRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLCByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgZm9ybUdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLmtleSBhcyBzdHJpbmc7XG4gIH1cblxuICBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBnZXQgbGFiZWwoKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM/LmxhYmVsO1xuICB9XG5cbiAgZ2V0IGRlc2NyaXB0aW9uKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGlzUmVhZG9ubHlPckRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnJlYWRvbmx5IHx8IHRoaXMuZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgc2hvd0N1c3RvbWl6ZSgpIHtcbiAgICByZXR1cm4gIXRoaXMucHJvcHMuaGlkZUN1c3RvbWl6ZTtcbiAgfVxuXG4gIGdldCBtaW5NYXhEYXRlUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubWluTWF4RGF0ZVJhbmdlO1xuICB9XG5cbiAgZ2V0IGZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5maWx0ZXI7XG4gIH1cblxuICBnZXQgZXhjbHVzaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5leGNsdXNpb25zO1xuICB9XG5cbiAgZ2V0IGluaXRpYWxTZWxlY3Rpb25TdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5pbml0aWFsU2VsZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXI7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5uZXh0KHRoaXMuZm9ybUNvbnRyb2wpO1xuXG4gICAgdGhpcy5fc3luY1N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVTY2hlZHVsZVJhbmdlKSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXREYXRlU2NoZWR1bGVSYW5nZVZhbHVlKHgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuY3VycmVudERhdGVTY2hlZHVsZVJhbmdlVmFsdWUkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgbWluTWF4RGF0ZVJhbmdlLCBmaWx0ZXIsIGV4Y2x1c2lvbnMgfSA9IHRoaXM7XG5cbiAgICBpZiAoZmlsdGVyICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX2ZpbHRlclN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRGaWx0ZXIoYXNPYnNlcnZhYmxlKGZpbHRlcikpIGFzIFN1YnNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBpZiAobWluTWF4RGF0ZVJhbmdlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX21pbk1heERhdGVSYW5nZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRNaW5NYXhEYXRlUmFuZ2UoYXNPYnNlcnZhYmxlKG1pbk1heERhdGVSYW5nZSkpIGFzIFN1YnNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZXhjbHVzaW9ucyAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9leGNsdXNpb25zU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldEV4Y2x1c2lvbnMoYXNPYnNlcnZhYmxlKGV4Y2x1c2lvbnMpKSBhcyBTdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5pdGlhbFNlbGVjdGlvblN0YXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldEluaXRpYWxTZWxlY3Rpb25TdGF0ZSh0aGlzLmluaXRpYWxTZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0Q29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIodGhpcy5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zeW5jU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl92YWx1ZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fZmlsdGVyU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9taW5NYXhEYXRlUmFuZ2VTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2V4Y2x1c2lvbnNTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9maWVsZC9zY2hlZHVsZS9jYWxlbmRhci5zY2hlZHVsZS5maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQUUsWUFBWSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQTRILHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xMLE9BQU8sRUFBa0MsaUNBQWlDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM1SCxPQUFPLEVBQUUsMERBQTBELEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7O0FBNEI3SCxNQUFNLE9BQU8sOENBQWtKLFNBQVEsU0FBNkI7SUFnQmxNLFlBQWlDLE9BQTRCLEVBQVcsaUNBQW9FLEVBQVcsTUFBYztRQUNuSyxLQUFLLEVBQUUsQ0FBQztRQUR1QixZQUFPLEdBQVAsT0FBTyxDQUFxQjtRQUFXLHNDQUFpQyxHQUFqQyxpQ0FBaUMsQ0FBbUM7UUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBZjdKLGFBQVEsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsY0FBUyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUNyQyxpQkFBWSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN4Qyx3QkFBbUIsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsZUFBVSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUUxQyxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUF5QixTQUFTLENBQUMsQ0FBQztRQUN4RSxpQkFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFeEQsV0FBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUMzRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUlGLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBYSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksc0NBQXNDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQztJQUMzRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDM0csSUFBSSxDQUFDLGlDQUFpQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLDhCQUE4QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xILElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztRQUUvRCxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQWlCLENBQUM7U0FDdkg7UUFFRCxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFpQixDQUFDO1NBQ2xKO1FBRUQsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFpQixDQUFDO1NBQ25JO1FBRUQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2pGO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssU0FBUyxFQUFFO1lBQzVDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUM3RjtRQUVELElBQUksSUFBSSxDQUFDLHNDQUFzQyxJQUFJLElBQUksRUFBRTtZQUN2RCxJQUFJLENBQUMsaUNBQWlDLENBQUMseUNBQXlDLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDL0g7SUFDSCxDQUFDO0lBRVEsV0FBVztRQUNsQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7OzRJQW5IVSw4Q0FBOEM7Z0lBQTlDLDhDQUE4Qyx1Q0FGOUMsQ0FBQywwREFBMEQsRUFBRSxDQUFDLGlEQVAvRDs7Ozs7O0dBTVQ7NEZBR1UsOENBQThDO2tCQVYxRCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7Ozs7O0dBTVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsMERBQTBELEVBQUUsQ0FBQztpQkFDMUU7OzBCQWlCYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21wYWN0Q29udGV4dFN0b3JlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE5nWm9uZSwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEFsbE9yTm9uZVNlbGVjdGlvbiwgQXJyYXlPclZhbHVlLCBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgU3Vic2NyaXB0aW9uLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlck1heWJlLCBPYnNlcnZhYmxlT3JWYWx1ZSwgU3Vic2NyaXB0aW9uT2JqZWN0LCBhc09ic2VydmFibGUsIGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IERhdGVCbG9ja0luZGV4LCBEYXRlT3JEYXRlUmFuZ2VPckRhdGVCbG9ja0luZGV4T3JEYXRlQmxvY2tSYW5nZSwgRGF0ZVJhbmdlLCBEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnLCBUaW1lem9uZVN0cmluZywgaXNTYW1lRGF0ZVNjaGVkdWxlUmFuZ2UgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdGF0ZSwgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnN0b3JlJztcbmltcG9ydCB7IHByb3ZpZGVDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmVJZlBhcmVudElzVW5hdmFpbGFibGUgfSBmcm9tICcuLi8uLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUucHJvdmlkZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzIGV4dGVuZHMgUGljazxGb3JtbHlGaWVsZFByb3BzLCAnbGFiZWwnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdyZWFkb25seScgfCAncmVxdWlyZWQnPiwgUGljazxDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RhdGUsICdjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcicgfCAnaW5pdGlhbFNlbGVjdGlvblN0YXRlJz4ge1xuICBhcHBlYXJhbmNlPzogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgaGlkZUN1c3RvbWl6ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRpbWV6b25lIHRvIHVzZSBmb3IgdGhlIHN0YXJ0IGRhdGUuXG4gICAqL1xuICB0aW1lem9uZT86IE9ic2VydmFibGVPclZhbHVlPE1heWJlPFRpbWV6b25lU3RyaW5nPj47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBtaW4vbWF4IGRhdGUgcmFuZ2UgdG8gZmlsdGVyIG9uLiBXb3JrcyBpbiBjb25qdWN0aW9uIHdpdGggdGhlIGZpbHRlci5cbiAgICovXG4gIG1pbk1heERhdGVSYW5nZT86IE9ic2VydmFibGVPclZhbHVlPE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4+O1xuICBmaWx0ZXI/OiBPYnNlcnZhYmxlT3JWYWx1ZTxNYXliZTxEYXRlU2NoZWR1bGVEYXRlRmlsdGVyQ29uZmlnPj47XG4gIGV4Y2x1c2lvbnM/OiBPYnNlcnZhYmxlT3JWYWx1ZTxNYXliZTxBcnJheU9yVmFsdWU8RGF0ZU9yRGF0ZVJhbmdlT3JEYXRlQmxvY2tJbmRleE9yRGF0ZUJsb2NrUmFuZ2U+Pj47XG59XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWZpZWxkXCI+XG4gICAgICA8ZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlIFtzaG93Q3VzdG9taXplXT1cInNob3dDdXN0b21pemVcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbZGlzYWJsZWRdPVwiaXNSZWFkb25seU9yRGlzYWJsZWRcIiBbbGFiZWxdPVwibGFiZWxcIiBbaGludF09XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICA8ZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRpYWxvZy1idXR0b24gY3VzdG9taXplQnV0dG9uPjwvZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRpYWxvZy1idXR0b24+XG4gICAgICA8L2RieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1yYW5nZT5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZUNhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZUlmUGFyZW50SXNVbmF2YWlsYWJsZSgpXVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkQ29tcG9uZW50PFQgZXh0ZW5kcyBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkUHJvcHMgPSBEYnhGb3JtQ2FsZW5kYXJEYXRlU2NoZWR1bGVSYW5nZUZpZWxkUHJvcHM+IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxUPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N5bmNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF90aW1lem9uZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfbWluTWF4RGF0ZVJhbmdlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9maWx0ZXJTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2V4Y2x1c2lvbnNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2xPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEFic3RyYWN0Q29udHJvbD4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGZvcm1Db250cm9sJCA9IHRoaXMuX2Zvcm1Db250cm9sT2JzLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgdmFsdWUkID0gdGhpcy5mb3JtQ29udHJvbCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGNvbnRyb2wpID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKGNvbnRyb2wudmFsdWUpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSByZWFkb25seSBjb21wYWN0OiBDb21wYWN0Q29udGV4dFN0b3JlLCByZWFkb25seSBkYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmU6IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSwgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IGZvcm1Hcm91cE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5rZXkgYXMgc3RyaW5nO1xuICB9XG5cbiAgZ2V0IGZvcm1Hcm91cCgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm0gYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0IGxhYmVsKCk6IE1heWJlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzPy5sYWJlbDtcbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBpc1JlYWRvbmx5T3JEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IHNob3dDdXN0b21pemUoKSB7XG4gICAgcmV0dXJuICF0aGlzLnByb3BzLmhpZGVDdXN0b21pemU7XG4gIH1cblxuICBnZXQgbWluTWF4RGF0ZVJhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLm1pbk1heERhdGVSYW5nZTtcbiAgfVxuXG4gIGdldCBmaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmlsdGVyO1xuICB9XG5cbiAgZ2V0IGV4Y2x1c2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZXhjbHVzaW9ucztcbiAgfVxuXG4gIGdldCB0aW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lem9uZTtcbiAgfVxuXG4gIGdldCBpbml0aWFsU2VsZWN0aW9uU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuaW5pdGlhbFNlbGVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMubmV4dCh0aGlzLmZvcm1Db250cm9sKTtcblxuICAgIHRoaXMuX3N5bmNTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlU2NoZWR1bGVSYW5nZSkpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0RGF0ZVNjaGVkdWxlUmFuZ2VWYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnREYXRlU2NoZWR1bGVSYW5nZVZhbHVlJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoeCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHRpbWV6b25lLCBtaW5NYXhEYXRlUmFuZ2UsIGZpbHRlciwgZXhjbHVzaW9ucyB9ID0gdGhpcztcblxuICAgIGlmIChmaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZmlsdGVyU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldEZpbHRlcihhc09ic2VydmFibGUoZmlsdGVyKSkgYXMgU3Vic2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGlmIChtaW5NYXhEYXRlUmFuZ2UgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fbWluTWF4RGF0ZVJhbmdlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldE1pbk1heERhdGVSYW5nZShhc09ic2VydmFibGUobWluTWF4RGF0ZVJhbmdlKSkgYXMgU3Vic2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGlmIChleGNsdXNpb25zICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX2V4Y2x1c2lvbnNTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0RXhjbHVzaW9ucyhhc09ic2VydmFibGUoZXhjbHVzaW9ucykpIGFzIFN1YnNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGltZXpvbmUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0VGltZXpvbmUoYXNPYnNlcnZhYmxlKHRoaXMudGltZXpvbmUpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsU2VsZWN0aW9uU3RhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2V0SW5pdGlhbFNlbGVjdGlvblN0YXRlKHRoaXMuaW5pdGlhbFNlbGVjdGlvblN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlciAhPSBudWxsKSB7XG4gICAgICB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRDb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcih0aGlzLmNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX3N5bmNTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3ZhbHVlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9maWx0ZXJTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3RpbWV6b25lU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9taW5NYXhEYXRlUmFuZ2VTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2V4Y2x1c2lvbnNTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { formlyField, propsAndConfigForFieldConfig } from '@dereekb/dbx-form';
2
2
  export function dateScheduleRangeField(config = {}) {
3
- const { key = 'schedule', filter, initialSelectionState, computeSelectionResultRelativeToFilter, exclusions, minMaxDateRange } = config;
3
+ const { key = 'schedule', filter, timezone, initialSelectionState, computeSelectionResultRelativeToFilter, exclusions, minMaxDateRange } = config;
4
4
  const fieldConfig = {
5
5
  ...formlyField({
6
6
  key,
@@ -9,6 +9,7 @@ export function dateScheduleRangeField(config = {}) {
9
9
  label: config.label ?? 'Schedule',
10
10
  minMaxDateRange,
11
11
  filter,
12
+ timezone,
12
13
  computeSelectionResultRelativeToFilter,
13
14
  initialSelectionState,
14
15
  exclusions
@@ -17,4 +18,4 @@ export function dateScheduleRangeField(config = {}) {
17
18
  };
18
19
  return fieldConfig;
19
20
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9jYWxlbmRhci9zcmMvbGliL2ZpZWxkL3NjaGVkdWxlL2NhbGVuZGFyLnNjaGVkdWxlLmZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUMsV0FBVyxFQUFzQiw0QkFBNEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTXZJLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxTQUF1QyxFQUFFO0lBQzlFLE1BQU0sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3hJLE1BQU0sV0FBVyxHQUFzQjtRQUNyQyxHQUFHLFdBQVcsQ0FBQztZQUNiLEdBQUc7WUFDSCxJQUFJLEVBQUUscUJBQXFCO1lBQzNCLEdBQUcsNEJBQTRCLENBQUMsTUFBTSxFQUFFO2dCQUN0QyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxVQUFVO2dCQUNqQyxlQUFlO2dCQUNmLE1BQU07Z0JBQ04sc0NBQXNDO2dCQUN0QyxxQkFBcUI7Z0JBQ3JCLFVBQVU7YUFDWCxDQUFDO1NBQ0gsQ0FBQztLQUNILENBQUM7SUFFRixPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRpb25GaWVsZENvbmZpZywgRmllbGRDb25maWcsIGZvcm1seUZpZWxkLCBMYWJlbGVkRmllbGRDb25maWcsIHByb3BzQW5kQ29uZmlnRm9yRmllbGRDb25maWcgfSBmcm9tICdAZGVyZWVrYi9kYngtZm9ybSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzIH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5maWVsZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVTY2hlZHVsZVJhbmdlRmllbGRDb25maWcgZXh0ZW5kcyBPbWl0PExhYmVsZWRGaWVsZENvbmZpZywgJ2tleScgfCAncGxhY2Vob2xkZXInPiwgRGVzY3JpcHRpb25GaWVsZENvbmZpZywgUGFydGlhbDxGaWVsZENvbmZpZz4sIERieEZvcm1DYWxlbmRhckRhdGVTY2hlZHVsZVJhbmdlRmllbGRQcm9wcyB7fVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZChjb25maWc6IERhdGVTY2hlZHVsZVJhbmdlRmllbGRDb25maWcgPSB7fSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgY29uc3QgeyBrZXkgPSAnc2NoZWR1bGUnLCBmaWx0ZXIsIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSwgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIsIGV4Y2x1c2lvbnMsIG1pbk1heERhdGVSYW5nZSB9ID0gY29uZmlnO1xuICBjb25zdCBmaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgLi4uZm9ybWx5RmllbGQoe1xuICAgICAga2V5LFxuICAgICAgdHlwZTogJ2RhdGUtc2NoZWR1bGUtcmFuZ2UnLFxuICAgICAgLi4ucHJvcHNBbmRDb25maWdGb3JGaWVsZENvbmZpZyhjb25maWcsIHtcbiAgICAgICAgbGFiZWw6IGNvbmZpZy5sYWJlbCA/PyAnU2NoZWR1bGUnLFxuICAgICAgICBtaW5NYXhEYXRlUmFuZ2UsXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgY29tcHV0ZVNlbGVjdGlvblJlc3VsdFJlbGF0aXZlVG9GaWx0ZXIsXG4gICAgICAgIGluaXRpYWxTZWxlY3Rpb25TdGF0ZSxcbiAgICAgICAgZXhjbHVzaW9uc1xuICAgICAgfSlcbiAgICB9KVxuICB9O1xuXG4gIHJldHVybiBmaWVsZENvbmZpZztcbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9jYWxlbmRhci9zcmMvbGliL2ZpZWxkL3NjaGVkdWxlL2NhbGVuZGFyLnNjaGVkdWxlLmZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUMsV0FBVyxFQUFzQiw0QkFBNEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTXZJLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxTQUF1QyxFQUFFO0lBQzlFLE1BQU0sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsc0NBQXNDLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNsSixNQUFNLFdBQVcsR0FBc0I7UUFDckMsR0FBRyxXQUFXLENBQUM7WUFDYixHQUFHO1lBQ0gsSUFBSSxFQUFFLHFCQUFxQjtZQUMzQixHQUFHLDRCQUE0QixDQUFDLE1BQU0sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksVUFBVTtnQkFDakMsZUFBZTtnQkFDZixNQUFNO2dCQUNOLFFBQVE7Z0JBQ1Isc0NBQXNDO2dCQUN0QyxxQkFBcUI7Z0JBQ3JCLFVBQVU7YUFDWCxDQUFDO1NBQ0gsQ0FBQztLQUNILENBQUM7SUFFRixPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRpb25GaWVsZENvbmZpZywgRmllbGRDb25maWcsIGZvcm1seUZpZWxkLCBMYWJlbGVkRmllbGRDb25maWcsIHByb3BzQW5kQ29uZmlnRm9yRmllbGRDb25maWcgfSBmcm9tICdAZGVyZWVrYi9kYngtZm9ybSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRGJ4Rm9ybUNhbGVuZGFyRGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZFByb3BzIH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5maWVsZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVTY2hlZHVsZVJhbmdlRmllbGRDb25maWcgZXh0ZW5kcyBPbWl0PExhYmVsZWRGaWVsZENvbmZpZywgJ2tleScgfCAncGxhY2Vob2xkZXInPiwgRGVzY3JpcHRpb25GaWVsZENvbmZpZywgUGFydGlhbDxGaWVsZENvbmZpZz4sIERieEZvcm1DYWxlbmRhckRhdGVTY2hlZHVsZVJhbmdlRmllbGRQcm9wcyB7fVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVNjaGVkdWxlUmFuZ2VGaWVsZChjb25maWc6IERhdGVTY2hlZHVsZVJhbmdlRmllbGRDb25maWcgPSB7fSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgY29uc3QgeyBrZXkgPSAnc2NoZWR1bGUnLCBmaWx0ZXIsIHRpbWV6b25lLCBpbml0aWFsU2VsZWN0aW9uU3RhdGUsIGNvbXB1dGVTZWxlY3Rpb25SZXN1bHRSZWxhdGl2ZVRvRmlsdGVyLCBleGNsdXNpb25zLCBtaW5NYXhEYXRlUmFuZ2UgfSA9IGNvbmZpZztcbiAgY29uc3QgZmllbGRDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgIC4uLmZvcm1seUZpZWxkKHtcbiAgICAgIGtleSxcbiAgICAgIHR5cGU6ICdkYXRlLXNjaGVkdWxlLXJhbmdlJyxcbiAgICAgIC4uLnByb3BzQW5kQ29uZmlnRm9yRmllbGRDb25maWcoY29uZmlnLCB7XG4gICAgICAgIGxhYmVsOiBjb25maWcubGFiZWwgPz8gJ1NjaGVkdWxlJyxcbiAgICAgICAgbWluTWF4RGF0ZVJhbmdlLFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHRpbWV6b25lLFxuICAgICAgICBjb21wdXRlU2VsZWN0aW9uUmVzdWx0UmVsYXRpdmVUb0ZpbHRlcixcbiAgICAgICAgaW5pdGlhbFNlbGVjdGlvblN0YXRlLFxuICAgICAgICBleGNsdXNpb25zXG4gICAgICB9KVxuICAgIH0pXG4gIH07XG5cbiAgcmV0dXJuIGZpZWxkQ29uZmlnO1xufVxuIl19