@dereekb/dbx-form 9.24.18 → 9.24.19
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.
- package/calendar/lib/calendar.schedule.selection.store.d.ts +16 -3
- package/calendar/lib/field/schedule/calendar.schedule.field.component.d.ts +7 -1
- package/esm2020/calendar/lib/calendar.schedule.selection.days.component.mjs +6 -4
- package/esm2020/calendar/lib/calendar.schedule.selection.range.component.mjs +3 -3
- package/esm2020/calendar/lib/calendar.schedule.selection.store.mjs +60 -19
- package/esm2020/calendar/lib/field/schedule/calendar.schedule.field.component.mjs +9 -2
- package/esm2020/calendar/lib/field/schedule/calendar.schedule.field.mjs +3 -2
- package/esm2020/lib/formly/field/value/date/datetime.field.component.mjs +3 -3
- package/esm2020/lib/formly/field/value/date/datetime.field.mjs +3 -1
- package/fesm2015/dereekb-dbx-form-calendar.mjs +75 -24
- package/fesm2015/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2015/dereekb-dbx-form.mjs +4 -4
- package/fesm2015/dereekb-dbx-form.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form-calendar.mjs +76 -24
- package/fesm2020/dereekb-dbx-form-calendar.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-form.mjs +4 -2
- package/fesm2020/dereekb-dbx-form.mjs.map +1 -1
- package/lib/extension/calendar/_calendar.scss +0 -7
- package/lib/formly/field/value/date/_date.scss +14 -0
- package/mapbox/package.json +4 -4
- package/package.json +4 -4
|
@@ -22,6 +22,10 @@ export interface CalendarScheduleSelectionState extends PartialCalendarScheduleS
|
|
|
22
22
|
* Does not affect state changes directly, but instead acts as a flag for the parent view to set and the consuming views to update on.
|
|
23
23
|
*/
|
|
24
24
|
isViewReadonly?: Maybe<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Set of the days of week that are allowed by default.
|
|
27
|
+
*/
|
|
28
|
+
defaultScheduleDays: Set<DateScheduleDayCode>;
|
|
25
29
|
/**
|
|
26
30
|
* Filters the days of the schedule to only allow selecting days in the schedule.
|
|
27
31
|
*
|
|
@@ -71,11 +75,15 @@ export interface CalendarScheduleSelectionState extends PartialCalendarScheduleS
|
|
|
71
75
|
*/
|
|
72
76
|
toggledIndexes: Set<DateBlockIndex>;
|
|
73
77
|
/**
|
|
74
|
-
* Days of the schedule that are allowed to be picked.
|
|
78
|
+
* Days of the schedule that are allowed to be picked. If not defined, defaults to defaultScheduleDays.
|
|
79
|
+
*/
|
|
80
|
+
scheduleDays?: Maybe<Set<DateScheduleDayCode>>;
|
|
81
|
+
/**
|
|
82
|
+
* The current DateScheduleDayCode value.
|
|
75
83
|
*/
|
|
76
|
-
|
|
84
|
+
effectiveScheduleDays: Set<DateScheduleDayCode>;
|
|
77
85
|
/**
|
|
78
|
-
* Set of the days of week that are allowed.
|
|
86
|
+
* Set of the days of week that are allowed. Derived from the current schedule days value.
|
|
79
87
|
*/
|
|
80
88
|
allowedDaysOfWeek: Set<DayOfWeek>;
|
|
81
89
|
/**
|
|
@@ -138,6 +146,7 @@ export declare class DbxCalendarScheduleSelectionStore extends ComponentStore<Ca
|
|
|
138
146
|
readonly computeSelectionResultRelativeToFilter$: Observable<Maybe<boolean>>;
|
|
139
147
|
readonly startBeingUsedFromFilter$: Observable<Maybe<boolean>>;
|
|
140
148
|
readonly dateRange$: Observable<DateRange>;
|
|
149
|
+
readonly allowedDaysOfWeek$: Observable<Set<DayOfWeek>>;
|
|
141
150
|
readonly scheduleDays$: Observable<Set<DateScheduleDayCode>>;
|
|
142
151
|
readonly currentTimezone$: Observable<Maybe<TimezoneString>>;
|
|
143
152
|
readonly effectiveTimezone$: Observable<Maybe<TimezoneString>>;
|
|
@@ -161,6 +170,7 @@ export declare class DbxCalendarScheduleSelectionStore extends ComponentStore<Ca
|
|
|
161
170
|
readonly isCustomized$: Observable<boolean>;
|
|
162
171
|
readonly isViewReadonly$: Observable<Maybe<boolean>>;
|
|
163
172
|
readonly setMinMaxDateRange: (() => void) | ((observableOrValue: Maybe<Partial<DateRange>> | Observable<Maybe<Partial<DateRange>>>) => import("rxjs").Subscription);
|
|
173
|
+
readonly setDefaultWeek: (() => void) | ((observableOrValue: Maybe<Partial<DateRange>> | Observable<Maybe<Partial<DateRange>>>) => import("rxjs").Subscription);
|
|
164
174
|
readonly setFilter: (() => void) | ((observableOrValue: Maybe<DateScheduleDateFilterConfig> | Observable<Maybe<DateScheduleDateFilterConfig>>) => import("rxjs").Subscription);
|
|
165
175
|
readonly setExclusions: (() => void) | ((observableOrValue: Maybe<ArrayOrValue<DateOrDateRangeOrDateBlockIndexOrDateBlockRange>> | Observable<Maybe<ArrayOrValue<DateOrDateRangeOrDateBlockIndexOrDateBlockRange>>>) => import("rxjs").Subscription);
|
|
166
176
|
readonly setComputeSelectionResultRelativeToFilter: (() => void) | ((observableOrValue: Maybe<boolean> | Observable<Maybe<boolean>>) => import("rxjs").Subscription);
|
|
@@ -174,6 +184,7 @@ export declare class DbxCalendarScheduleSelectionStore extends ComponentStore<Ca
|
|
|
174
184
|
readonly setSelectedIndexes: (observableOrValue: IterableOrValue<DateTimingRelativeIndexFactoryInput> | Observable<IterableOrValue<DateTimingRelativeIndexFactoryInput>>) => import("rxjs").Subscription;
|
|
175
185
|
readonly selectAllDates: (observableOrValue: AllOrNoneSelection | Observable<AllOrNoneSelection>) => import("rxjs").Subscription;
|
|
176
186
|
readonly setInitialSelectionState: (() => void) | ((observableOrValue: Maybe<AllOrNoneSelection> | Observable<Maybe<AllOrNoneSelection>>) => import("rxjs").Subscription);
|
|
187
|
+
readonly setDefaultScheduleDays: (() => void) | ((observableOrValue: Maybe<Iterable<DateScheduleDayCode>> | Observable<Maybe<Iterable<DateScheduleDayCode>>>) => import("rxjs").Subscription);
|
|
177
188
|
readonly setScheduleDays: (() => void) | ((observableOrValue: Maybe<Iterable<DateScheduleDayCode>> | Observable<Maybe<Iterable<DateScheduleDayCode>>>) => import("rxjs").Subscription);
|
|
178
189
|
readonly setAllowAllScheduleDays: () => void;
|
|
179
190
|
readonly setDateScheduleRangeValue: (() => void) | ((observableOrValue: Maybe<DateScheduleRange> | Observable<Maybe<DateScheduleRange>>) => import("rxjs").Subscription);
|
|
@@ -194,7 +205,9 @@ export declare function updateStateWithMinMaxDateRange(state: CalendarScheduleSe
|
|
|
194
205
|
export declare function updateStateWithFilter(state: CalendarScheduleSelectionState, inputFilter: Maybe<DateScheduleDateFilterConfig>): CalendarScheduleSelectionState;
|
|
195
206
|
export declare function updateStateWithTimezoneValue(state: CalendarScheduleSelectionState, timezone: Maybe<TimezoneString>): CalendarScheduleSelectionState;
|
|
196
207
|
export declare function updateStateWithDateScheduleRangeValue(state: CalendarScheduleSelectionState, change: Maybe<DateScheduleRange>): CalendarScheduleSelectionState;
|
|
208
|
+
export declare function updateStateWithChangedDefaultScheduleDays(state: CalendarScheduleSelectionState, change: Maybe<Iterable<DateScheduleDayCode>>): CalendarScheduleSelectionState;
|
|
197
209
|
export declare function updateStateWithChangedScheduleDays(state: CalendarScheduleSelectionState, change: Maybe<Iterable<DateScheduleDayCode>>): CalendarScheduleSelectionState;
|
|
210
|
+
export declare function finalizeUpdateStateWithChangedScheduleDays(previousState: CalendarScheduleSelectionState, nextState: CalendarScheduleSelectionState): CalendarScheduleSelectionState;
|
|
198
211
|
export interface CalendarScheduleSelectionStateDatesChange {
|
|
199
212
|
reset?: true;
|
|
200
213
|
toggle?: IterableOrValue<DateTimingRelativeIndexFactoryInput>;
|
|
@@ -5,7 +5,7 @@ import { FieldTypeConfig, FormlyFieldProps } from '@ngx-formly/core';
|
|
|
5
5
|
import { ArrayOrValue, Maybe } from '@dereekb/util';
|
|
6
6
|
import { FieldType } from '@ngx-formly/material';
|
|
7
7
|
import { ObservableOrValue } from '@dereekb/rxjs';
|
|
8
|
-
import { DateOrDateRangeOrDateBlockIndexOrDateBlockRange, DateRange, DateScheduleDateFilterConfig, TimezoneString } from '@dereekb/date';
|
|
8
|
+
import { DateOrDateRangeOrDateBlockIndexOrDateBlockRange, DateRange, DateScheduleDateFilterConfig, DateScheduleDayCode, TimezoneString } from '@dereekb/date';
|
|
9
9
|
import { CalendarScheduleSelectionState, DbxCalendarScheduleSelectionStore } from '../../calendar.schedule.selection.store';
|
|
10
10
|
import { MatFormFieldAppearance } from '@angular/material/form-field';
|
|
11
11
|
import { DbxScheduleSelectionCalendarDatePopupContentConfig } from '../../calendar.schedule.selection.dialog.component';
|
|
@@ -32,6 +32,10 @@ export interface DbxFormCalendarDateScheduleRangeFieldProps extends Pick<FormlyF
|
|
|
32
32
|
* (Optional) Timezone to use for the start date.
|
|
33
33
|
*/
|
|
34
34
|
timezone?: ObservableOrValue<Maybe<TimezoneString>>;
|
|
35
|
+
/**
|
|
36
|
+
* (Optional) Default schedule days to allow.
|
|
37
|
+
*/
|
|
38
|
+
defaultScheduleDays?: ObservableOrValue<Maybe<Iterable<DateScheduleDayCode>>>;
|
|
35
39
|
/**
|
|
36
40
|
* Optional min/max date range to filter on. Works in conjuction with the filter.
|
|
37
41
|
*/
|
|
@@ -61,6 +65,7 @@ export declare class DbxFormCalendarDateScheduleRangeFieldComponent<T extends Db
|
|
|
61
65
|
private _valueSub;
|
|
62
66
|
private _timezoneSub;
|
|
63
67
|
private _minMaxDateRangeSub;
|
|
68
|
+
private _defaultWeekSub;
|
|
64
69
|
private _filterSub;
|
|
65
70
|
private _exclusionsSub;
|
|
66
71
|
private _formControlObs;
|
|
@@ -76,6 +81,7 @@ export declare class DbxFormCalendarDateScheduleRangeFieldComponent<T extends Db
|
|
|
76
81
|
get openPickerOnTextClick(): boolean;
|
|
77
82
|
get allowCustomizeWithoutDateRange(): boolean;
|
|
78
83
|
get showCustomize(): boolean;
|
|
84
|
+
get defaultScheduleDays(): ObservableOrValue<Maybe<Iterable<DateScheduleDayCode>>>;
|
|
79
85
|
get minMaxDateRange(): ObservableOrValue<Maybe<Partial<DateRange>>>;
|
|
80
86
|
get filter(): ObservableOrValue<Maybe<DateScheduleDateFilterConfig>>;
|
|
81
87
|
get exclusions(): ObservableOrValue<Maybe<ArrayOrValue<DateOrDateRangeOrDateBlockIndexOrDateBlockRange>>>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
-
import { dateScheduleDayCodesFromEnabledDays, enabledDaysFromDateScheduleDayCodes } from '@dereekb/date';
|
|
2
|
+
import { dateScheduleDayCodesAreSetsEquivalent, dateScheduleDayCodesFromEnabledDays, enabledDaysFromDateScheduleDayCodes } from '@dereekb/date';
|
|
3
3
|
import { DbxCalendarStore } from '@dereekb/dbx-web/calendar';
|
|
4
|
-
import { setsAreEquivalent } from '@dereekb/util';
|
|
5
4
|
import { map, shareReplay, of } from 'rxjs';
|
|
6
5
|
import { DbxCalendarScheduleSelectionStore } from './calendar.schedule.selection.store';
|
|
7
6
|
import * as i0 from "@angular/core";
|
|
@@ -17,7 +16,10 @@ export class DbxScheduleSelectionCalendarDateDaysComponent {
|
|
|
17
16
|
this.template$ = this.dbxCalendarScheduleSelectionStore.scheduleDays$.pipe(map(enabledDaysFromDateScheduleDayCodes), shareReplay());
|
|
18
17
|
this.isFormModified = (value) => {
|
|
19
18
|
const newSetValue = new Set(dateScheduleDayCodesFromEnabledDays(value));
|
|
20
|
-
return this.dbxCalendarScheduleSelectionStore.scheduleDays$.pipe(map((currentSet) =>
|
|
19
|
+
return this.dbxCalendarScheduleSelectionStore.scheduleDays$.pipe(map((currentSet) => {
|
|
20
|
+
const result = !dateScheduleDayCodesAreSetsEquivalent(newSetValue, currentSet);
|
|
21
|
+
return result;
|
|
22
|
+
}));
|
|
21
23
|
};
|
|
22
24
|
this.updateScheduleDays = (value) => {
|
|
23
25
|
this.dbxCalendarScheduleSelectionStore.setScheduleDays(new Set(dateScheduleDayCodesFromEnabledDays(value)));
|
|
@@ -42,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
42
44
|
`
|
|
43
45
|
}]
|
|
44
46
|
}], ctorParameters: function () { return [{ type: i1.DbxCalendarStore }, { type: i2.DbxCalendarScheduleSelectionStore }]; } });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLmRheXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uZGF5cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsbUNBQW1DLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEosT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7O0FBVXhGLE1BQU0sT0FBTyw2Q0FBNkM7SUFheEQsWUFBcUIsZ0JBQWtDLEVBQVcsaUNBQW9FO1FBQWpILHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVyxzQ0FBaUMsR0FBakMsaUNBQWlDLENBQW1DO1FBWjdILGNBQVMsR0FBOEQsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUUxTCxtQkFBYyxHQUFzRSxDQUFDLEtBQW9ELEVBQUUsRUFBRTtZQUNwSixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzlELEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLHFDQUFxQyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDL0UsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUlPLHVCQUFrQixHQUF3RSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLENBQUMsbUNBQW1DLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVHLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUx1SSxDQUFDOzsySUFiL0gsNkNBQTZDOytIQUE3Qyw2Q0FBNkMsaUZBTjlDOzs7O0dBSVQ7NEZBRVUsNkNBQTZDO2tCQVJ6RCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQ0FBMkM7b0JBQ3JELFFBQVEsRUFBRTs7OztHQUlUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50LCBkYXRlU2NoZWR1bGVEYXlDb2Rlc0Zyb21FbmFibGVkRGF5cywgZW5hYmxlZERheXNGcm9tRGF0ZVNjaGVkdWxlRGF5Q29kZXMgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IEhhbmRsZUFjdGlvbkZ1bmN0aW9uIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgRGJ4Q2FsZW5kYXJTdG9yZSB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWIvY2FsZW5kYXInO1xuaW1wb3J0IHsgSXNNb2RpZmllZEZ1bmN0aW9uIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVEYXlzRm9ybVZhbHVlIH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uZGF5cy5mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5zdG9yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1kYXlzJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRheXNcIiBkYnhBY3Rpb24gZGJ4QWN0aW9uQXV0b1RyaWdnZXIgZGJ4QWN0aW9uRW5mb3JjZU1vZGlmaWVkIFtpbnN0YW50VHJpZ2dlcl09XCJ0cnVlXCIgW2RieEFjdGlvbkhhbmRsZXJdPVwidXBkYXRlU2NoZWR1bGVEYXlzXCI+XG4gICAgICA8ZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLWRheXMtZm9ybSBkYnhBY3Rpb25Gb3JtIFtkYnhGb3JtU291cmNlXT1cInRlbXBsYXRlJFwiIFtkYnhBY3Rpb25Gb3JtTW9kaWZpZWRdPVwiaXNGb3JtTW9kaWZpZWRcIj48L2RieC1zY2hlZHVsZS1zZWxlY3Rpb24tY2FsZW5kYXItZGF0ZS1kYXlzLWZvcm0+XG4gICAgPC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgRGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVEYXlzQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdGVtcGxhdGUkOiBPYnNlcnZhYmxlPERieFNjaGVkdWxlU2VsZWN0aW9uQ2FsZW5kYXJEYXRlRGF5c0Zvcm1WYWx1ZT4gPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zY2hlZHVsZURheXMkLnBpcGUobWFwKGVuYWJsZWREYXlzRnJvbURhdGVTY2hlZHVsZURheUNvZGVzKSwgc2hhcmVSZXBsYXkoKSk7XG5cbiAgcmVhZG9ubHkgaXNGb3JtTW9kaWZpZWQ6IElzTW9kaWZpZWRGdW5jdGlvbjxEYnhTY2hlZHVsZVNlbGVjdGlvbkNhbGVuZGFyRGF0ZURheXNGb3JtVmFsdWU+ID0gKHZhbHVlOiBEYnhTY2hlZHVsZVNlbGVjdGlvbkNhbGVuZGFyRGF0ZURheXNGb3JtVmFsdWUpID0+IHtcbiAgICBjb25zdCBuZXdTZXRWYWx1ZSA9IG5ldyBTZXQoZGF0ZVNjaGVkdWxlRGF5Q29kZXNGcm9tRW5hYmxlZERheXModmFsdWUpKTtcbiAgICByZXR1cm4gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuc2NoZWR1bGVEYXlzJC5waXBlKFxuICAgICAgbWFwKChjdXJyZW50U2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICFkYXRlU2NoZWR1bGVEYXlDb2Rlc0FyZVNldHNFcXVpdmFsZW50KG5ld1NldFZhbHVlLCBjdXJyZW50U2V0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYnhDYWxlbmRhclN0b3JlOiBEYnhDYWxlbmRhclN0b3JlLCByZWFkb25seSBkYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmU6IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSkge31cblxuICByZWFkb25seSB1cGRhdGVTY2hlZHVsZURheXM6IEhhbmRsZUFjdGlvbkZ1bmN0aW9uPERieFNjaGVkdWxlU2VsZWN0aW9uQ2FsZW5kYXJEYXRlRGF5c0Zvcm1WYWx1ZT4gPSAodmFsdWUpID0+IHtcbiAgICB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5zZXRTY2hlZHVsZURheXMobmV3IFNldChkYXRlU2NoZWR1bGVEYXlDb2Rlc0Zyb21FbmFibGVkRGF5cyh2YWx1ZSkpKTtcbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -154,10 +154,10 @@ export class DbxScheduleSelectionCalendarDateRangeComponent {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
DbxScheduleSelectionCalendarDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxScheduleSelectionCalendarDateRangeComponent, deps: [{ token: i1.DbxCalendarStore }, { token: i2.DbxCalendarScheduleSelectionStore }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
-
DbxScheduleSelectionCalendarDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxScheduleSelectionCalendarDateRangeComponent, selector: "dbx-schedule-selection-calendar-date-range", inputs: { openPickerOnTextClick: "openPickerOnTextClick", label: "label", hint: "hint", disabled: "disabled", showCustomize: "showCustomize", required: "required" }, viewQueries: [{ propertyName: "picker", first: true, predicate: ["picker"], descendants: true }], ngImport: i0, template: "<mat-form-field class=\"dbx-schedule-selection-calendar-date-range-field\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <div class=\"dbx-schedule-selection-calendar-date-range-field-content\">\n <!-- Primary Content -->\n <div class=\"dbx-flex\">\n <div *ngIf=\"showCustomize && (isCustomized$ | async)\" class=\"date-range-field-customized\">\n <span class=\"dbx-accent-bg date-range-field-customized-text\">Custom</span>\n </div>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-date-range-input (click)=\"clickedDateRangeInput()\" [required]=\"required$ | async\" [min]=\"minDate$ | async\" [max]=\"maxDate$ | async\" [formGroup]=\"range\" [rangePicker]=\"picker\">\n <input [errorStateMatcher]=\"errorStateMatcher\" matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input [errorStateMatcher]=\"errorStateMatcher\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n <span *ngIf=\"timezone$ | async\" class=\"dbx-flex-bar dbx-faint dbx-nowrap dbx-icon-spacer\">{{ timezone$ | async | timezoneAbbreviation: (timezoneReleventDate$ | async) }}</span>\n <div *ngIf=\"showCustomize\">\n <dbx-button-spacer></dbx-button-spacer>\n <ng-content select=\"[customizeButton]\"></ng-content>\n </div>\n <mat-date-range-picker #picker (opened)=\"pickerOpened()\" (closed)=\"pickerClosed()\"></mat-date-range-picker>\n </div>\n <!-- Custom Content -->\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n <mat-hint>{{ hint }}</mat-hint>\n</mat-form-field>\n", dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i7.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i7.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i7.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i7.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TimezoneAbbreviationPipe, name: "timezoneAbbreviation" }] });
|
|
157
|
+
DbxScheduleSelectionCalendarDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: DbxScheduleSelectionCalendarDateRangeComponent, selector: "dbx-schedule-selection-calendar-date-range", inputs: { openPickerOnTextClick: "openPickerOnTextClick", label: "label", hint: "hint", disabled: "disabled", showCustomize: "showCustomize", required: "required" }, viewQueries: [{ propertyName: "picker", first: true, predicate: ["picker"], descendants: true }], ngImport: i0, template: "<mat-form-field class=\"dbx-schedule-selection-calendar-date-range-field\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <div class=\"dbx-schedule-selection-calendar-date-range-field-content\">\n <!-- Primary Content -->\n <div class=\"dbx-flex\">\n <div *ngIf=\"showCustomize && (isCustomized$ | async)\" class=\"date-range-field-customized\">\n <span class=\"dbx-accent-bg date-range-field-customized-text\">Custom</span>\n </div>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-datepicker-toggle class=\"mat-datepicker-button-highlight\" matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-date-range-input (click)=\"clickedDateRangeInput()\" [required]=\"required$ | async\" [min]=\"minDate$ | async\" [max]=\"maxDate$ | async\" [formGroup]=\"range\" [rangePicker]=\"picker\">\n <input [errorStateMatcher]=\"errorStateMatcher\" matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input [errorStateMatcher]=\"errorStateMatcher\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n <span *ngIf=\"timezone$ | async\" class=\"dbx-flex-bar dbx-faint dbx-nowrap dbx-icon-spacer\">{{ timezone$ | async | timezoneAbbreviation: (timezoneReleventDate$ | async) }}</span>\n <div *ngIf=\"showCustomize\">\n <dbx-button-spacer></dbx-button-spacer>\n <ng-content select=\"[customizeButton]\"></ng-content>\n </div>\n <mat-date-range-picker #picker (opened)=\"pickerOpened()\" (closed)=\"pickerClosed()\"></mat-date-range-picker>\n </div>\n <!-- Custom Content -->\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n <mat-hint>{{ hint }}</mat-hint>\n</mat-form-field>\n", dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.DbxButtonSpacerDirective, selector: "dbx-button-spacer,[dbxButtonSpacer]" }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i7.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i7.MatStartDate, selector: "input[matStartDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i7.MatEndDate, selector: "input[matEndDate]", inputs: ["errorStateMatcher"], outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i7.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TimezoneAbbreviationPipe, name: "timezoneAbbreviation" }] });
|
|
158
158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxScheduleSelectionCalendarDateRangeComponent, decorators: [{
|
|
159
159
|
type: Component,
|
|
160
|
-
args: [{ selector: 'dbx-schedule-selection-calendar-date-range', template: "<mat-form-field class=\"dbx-schedule-selection-calendar-date-range-field\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <div class=\"dbx-schedule-selection-calendar-date-range-field-content\">\n <!-- Primary Content -->\n <div class=\"dbx-flex\">\n <div *ngIf=\"showCustomize && (isCustomized$ | async)\" class=\"date-range-field-customized\">\n <span class=\"dbx-accent-bg date-range-field-customized-text\">Custom</span>\n </div>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-date-range-input (click)=\"clickedDateRangeInput()\" [required]=\"required$ | async\" [min]=\"minDate$ | async\" [max]=\"maxDate$ | async\" [formGroup]=\"range\" [rangePicker]=\"picker\">\n <input [errorStateMatcher]=\"errorStateMatcher\" matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input [errorStateMatcher]=\"errorStateMatcher\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n <span *ngIf=\"timezone$ | async\" class=\"dbx-flex-bar dbx-faint dbx-nowrap dbx-icon-spacer\">{{ timezone$ | async | timezoneAbbreviation: (timezoneReleventDate$ | async) }}</span>\n <div *ngIf=\"showCustomize\">\n <dbx-button-spacer></dbx-button-spacer>\n <ng-content select=\"[customizeButton]\"></ng-content>\n </div>\n <mat-date-range-picker #picker (opened)=\"pickerOpened()\" (closed)=\"pickerClosed()\"></mat-date-range-picker>\n </div>\n <!-- Custom Content -->\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n <mat-hint>{{ hint }}</mat-hint>\n</mat-form-field>\n" }]
|
|
160
|
+
args: [{ selector: 'dbx-schedule-selection-calendar-date-range', template: "<mat-form-field class=\"dbx-schedule-selection-calendar-date-range-field\">\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\n <div class=\"dbx-schedule-selection-calendar-date-range-field-content\">\n <!-- Primary Content -->\n <div class=\"dbx-flex\">\n <div *ngIf=\"showCustomize && (isCustomized$ | async)\" class=\"date-range-field-customized\">\n <span class=\"dbx-accent-bg date-range-field-customized-text\">Custom</span>\n </div>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-datepicker-toggle class=\"mat-datepicker-button-highlight\" matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <dbx-button-spacer></dbx-button-spacer>\n <mat-date-range-input (click)=\"clickedDateRangeInput()\" [required]=\"required$ | async\" [min]=\"minDate$ | async\" [max]=\"maxDate$ | async\" [formGroup]=\"range\" [rangePicker]=\"picker\">\n <input [errorStateMatcher]=\"errorStateMatcher\" matStartDate formControlName=\"start\" placeholder=\"Start date\" />\n <input [errorStateMatcher]=\"errorStateMatcher\" matEndDate formControlName=\"end\" placeholder=\"End date\" />\n </mat-date-range-input>\n <span *ngIf=\"timezone$ | async\" class=\"dbx-flex-bar dbx-faint dbx-nowrap dbx-icon-spacer\">{{ timezone$ | async | timezoneAbbreviation: (timezoneReleventDate$ | async) }}</span>\n <div *ngIf=\"showCustomize\">\n <dbx-button-spacer></dbx-button-spacer>\n <ng-content select=\"[customizeButton]\"></ng-content>\n </div>\n <mat-date-range-picker #picker (opened)=\"pickerOpened()\" (closed)=\"pickerClosed()\"></mat-date-range-picker>\n </div>\n <!-- Custom Content -->\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n <mat-error *ngIf=\"currentErrorMessage$ | async\">{{ currentErrorMessage$ | async }}</mat-error>\n <mat-hint>{{ hint }}</mat-hint>\n</mat-form-field>\n" }]
|
|
161
161
|
}], ctorParameters: function () { return [{ type: i1.DbxCalendarStore }, { type: i2.DbxCalendarScheduleSelectionStore }, { type: undefined, decorators: [{
|
|
162
162
|
type: Inject,
|
|
163
163
|
args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
|
|
@@ -177,4 +177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
177
177
|
}], required: [{
|
|
178
178
|
type: Input
|
|
179
179
|
}] } });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzSSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBOEIsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7OztBQVdsRSxNQUFNLE9BQU8sOENBQThDO0lBNkZ6RCxZQUFxQixnQkFBa0MsRUFBVyxpQ0FB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QVEsQ0FBQyxRQUFpQjtRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7NElBaExVLDhDQUE4QyxtR0E2RnVGLDhCQUE4QjtnSUE3Rm5LLDhDQUE4QywwVkNyQjNELHMwREE4QkE7NEZEVGEsOENBQThDO2tCQUoxRCxTQUFTOytCQUNFLDRDQUE0Qzs7MEJBZ0dtRixNQUFNOzJCQUFDLDhCQUE4Qjs0Q0F0RjlLLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFJTixNQUFNO3NCQURMLFNBQVM7dUJBQUMsUUFBUTtnQkFJbkIsS0FBSztzQkFESixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJRixRQUFRO3NCQURYLEtBQUs7Z0JBVU4sYUFBYTtzQkFEWixLQUFLO2dCQWlJRixRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb25PYmplY3QgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUnO1xuaW1wb3J0IHsgRGJ4Q2FsZW5kYXJTdG9yZSB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWIvY2FsZW5kYXInO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBCZWhhdmlvclN1YmplY3QsIHN0YXJ0V2l0aCwgT2JzZXJ2YWJsZSwgb2YsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzU2FtZURhdGVEYXkgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXREYXRlUmFuZ2VQaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcblxuaW50ZXJmYWNlIFJhbmdlVmFsdWUge1xuICBzdGFydD86IE1heWJlPERhdGU+O1xuICBlbmQ/OiBNYXliZTxEYXRlPjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5yYW5nZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVSYW5nZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSByZXF1aXJlZCQgPSB0aGlzLl9yZXF1aXJlZC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgdGltZXpvbmUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuY3VycmVudFRpbWV6b25lJDtcblxuICBASW5wdXQoKVxuICBvcGVuUGlja2VyT25UZXh0Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicpXG4gIHBpY2tlciE6IE1hdERhdGVSYW5nZVBpY2tlcjxEYXRlPjtcblxuICBASW5wdXQoKVxuICBsYWJlbD86IE1heWJlPHN0cmluZz4gPSAnRW50ZXIgYSBkYXRlIHJhbmdlJztcblxuICBASW5wdXQoKVxuICBoaW50PzogTWF5YmU8c3RyaW5nPjtcblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+KSB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICB0aGlzLnJhbmdlLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYW5nZS5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBzaG93Q3VzdG9taXplID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfcGlja2VyT3BlbmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3N5bmNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHJlYWRvbmx5IHJhbmdlID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlciA9IHtcbiAgICBpc0Vycm9yU3RhdGU6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsLCBmb3JtKSA9PiB7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCBjb250cm9sLnRvdWNoZWQpKSB8fCAoY29udHJvbC50b3VjaGVkICYmIHRoaXMucmFuZ2UuaW52YWxpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlYWRvbmx5IG1pbkRhdGUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUubWluRGF0ZSQ7XG4gIHJlYWRvbmx5IG1heERhdGUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUubWF4RGF0ZSQ7XG4gIHJlYWRvbmx5IHRpbWV6b25lUmVsZXZlbnREYXRlJCA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnREYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKChjdXJyZW50RGF0ZVJhbmdlKSA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudERhdGVSYW5nZSA/IGN1cnJlbnREYXRlUmFuZ2Uuc3RhcnQgPz8gY3VycmVudERhdGVSYW5nZS5lbmQgOiB1bmRlZmluZWQgPz8gbmV3IERhdGUoKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzQ3VzdG9taXplZCQgPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5pc0N1c3RvbWl6ZWQkO1xuICByZWFkb25seSBjdXJyZW50RXJyb3JNZXNzYWdlJCA9IHRoaXMucmFuZ2Uuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4geCA9PT0gJ0lOVkFMSUQnIHx8IHggPT09ICdWQUxJRCcpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRFcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHggPT09ICdJTlZBTElEJykge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMucmFuZ2UuY29udHJvbHM7XG5cbiAgICAgICAgaWYgKHRoaXMucmFuZ2UuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0RhdGUgcmFuZ2UgaXMgcmVxdWlyZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Lmhhc0Vycm9yKCdtYXRTdGFydERhdGVJbnZhbGlkJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0ludmFsaWQgc3RhcnQgZGF0ZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNaW4nKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnU3RhcnQgZGF0ZSBpcyB0b28gZWFybHknO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Lmhhc0Vycm9yKCdtYXREYXRlcGlja2VyTWF4JykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ1N0YXJ0IGRhdGUgaXMgdG9vIGxhdGUnO1xuICAgICAgICB9IGVsc2UgaWYgKGVuZC5oYXNFcnJvcignbWF0U3RhcnREYXRlSW52YWxpZCcpKSB7XG4gICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdJbnZhbGlkIGVuZCBkYXRlJztcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNaW4nKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnRW5kIGRhdGUgaXMgdG9vIGVhcmx5JztcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNYXgnKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnRW5kIGRhdGUgaXMgdG9vIGxhdGUnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50RXJyb3JNZXNzYWdlO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyT3BlbmVkJCA9IHRoaXMuX3BpY2tlck9wZW5lZC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYnhDYWxlbmRhclN0b3JlOiBEYnhDYWxlbmRhclN0b3JlLCByZWFkb25seSBkYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmU6IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSwgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpIHJlYWRvbmx5IG1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zOiBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucykge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zeW5jU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnRJbnB1dFJhbmdlJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMucmFuZ2Uuc2V0VmFsdWUoe1xuICAgICAgICBzdGFydDogeD8uaW5wdXRTdGFydCA/PyBudWxsLFxuICAgICAgICBlbmQ6IHg/LmlucHV0RW5kID8/IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5fcGlja2VyT3BlbmVkXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKChvcGVuZWQpID0+IHtcbiAgICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPFJhbmdlVmFsdWU+O1xuXG4gICAgICAgICAgaWYgKG9wZW5lZCkge1xuICAgICAgICAgICAgb2JzID0gb2Yoe30pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnMgPSB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnJhbmdlLnZhbHVlKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9icztcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcigoeCkgPT4gQm9vbGVhbih4LnN0YXJ0ICYmIHguZW5kKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlRGF5KGEuc3RhcnQsIGIuc3RhcnQpICYmIGlzU2FtZURhdGVEYXkoYS5lbmQsIGIuZW5kKSksXG4gICAgICAgIHRocm90dGxlVGltZSgxMDAsIHVuZGVmaW5lZCwgeyB0cmFpbGluZzogdHJ1ZSB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICBpZiAoeC5zdGFydCAmJiB4LmVuZCkge1xuICAgICAgICAgIHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldElucHV0UmFuZ2UoeyBpbnB1dFN0YXJ0OiB4LnN0YXJ0LCBpbnB1dEVuZDogeC5lbmQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gYWRkIGEgcmVxdWlyZWQgdmFsaWRhdG9yIHdoZW4gbmVlZGVkXG4gICAgdGhpcy5fcmVxdWlyZWRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5fcmVxdWlyZWQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0geFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLnN0YXJ0IHx8ICFyYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICA6IFtdO1xuXG4gICAgICB0aGlzLnJhbmdlLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXF1aXJlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3BpY2tlck9wZW5lZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3JlcXVpcmVkU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9zeW5jU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl92YWx1ZVN1Yi5kZXN0cm95KCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkLnZhbHVlO1xuICB9XG5cbiAgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQubmV4dChyZXF1aXJlZCk7XG4gIH1cblxuICBjbGlja2VkRGF0ZVJhbmdlSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMub3BlblBpY2tlck9uVGV4dENsaWNrKSB7XG4gICAgICB0aGlzLnBpY2tlci5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgcGlja2VyT3BlbmVkKCkge1xuICAgIHRoaXMuX3BpY2tlck9wZW5lZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcGlja2VyQ2xvc2VkKCkge1xuICAgIHRoaXMuX3BpY2tlck9wZW5lZC5uZXh0KGZhbHNlKTtcbiAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlLWZpZWxkXCI+XG4gIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9tYXQtbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtcmFuZ2UtZmllbGQtY29udGVudFwiPlxuICAgIDwhLS0gUHJpbWFyeSBDb250ZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkYngtZmxleFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dDdXN0b21pemUgJiYgKGlzQ3VzdG9taXplZCQgfCBhc3luYylcIiBjbGFzcz1cImRhdGUtcmFuZ2UtZmllbGQtY3VzdG9taXplZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRieC1hY2NlbnQtYmcgZGF0ZS1yYW5nZS1maWVsZC1jdXN0b21pemVkLXRleHRcIj5DdXN0b208L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXI+PC9kYngtYnV0dG9uLXNwYWNlcj5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCAoY2xpY2spPVwiY2xpY2tlZERhdGVSYW5nZUlucHV0KClcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWQkIHwgYXN5bmNcIiBbbWluXT1cIm1pbkRhdGUkIHwgYXN5bmNcIiBbbWF4XT1cIm1heERhdGUkIHwgYXN5bmNcIiBbZm9ybUdyb3VwXT1cInJhbmdlXCIgW3JhbmdlUGlja2VyXT1cInBpY2tlclwiPlxuICAgICAgICA8aW5wdXQgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yU3RhdGVNYXRjaGVyXCIgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCIgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgLz5cbiAgICAgICAgPGlucHV0IFtlcnJvclN0YXRlTWF0Y2hlcl09XCJlcnJvclN0YXRlTWF0Y2hlclwiIG1hdEVuZERhdGUgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCIgcGxhY2Vob2xkZXI9XCJFbmQgZGF0ZVwiIC8+XG4gICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICAgICAgPHNwYW4gKm5nSWY9XCJ0aW1lem9uZSQgfCBhc3luY1wiIGNsYXNzPVwiZGJ4LWZsZXgtYmFyIGRieC1mYWludCBkYngtbm93cmFwIGRieC1pY29uLXNwYWNlclwiPnt7IHRpbWV6b25lJCB8IGFzeW5jIHwgdGltZXpvbmVBYmJyZXZpYXRpb246ICh0aW1lem9uZVJlbGV2ZW50RGF0ZSQgfCBhc3luYykgfX08L3NwYW4+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0N1c3RvbWl6ZVwiPlxuICAgICAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXI+PC9kYngtYnV0dG9uLXNwYWNlcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2N1c3RvbWl6ZUJ1dHRvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlciAob3BlbmVkKT1cInBpY2tlck9wZW5lZCgpXCIgKGNsb3NlZCk9XCJwaWNrZXJDbG9zZWQoKVwiPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQ3VzdG9tIENvbnRlbnQgLS0+XG4gICAgPGRpdj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJjdXJyZW50RXJyb3JNZXNzYWdlJCB8IGFzeW5jXCI+e3sgY3VycmVudEVycm9yTWVzc2FnZSQgfCBhc3luYyB9fTwvbWF0LWVycm9yPlxuICA8bWF0LWhpbnQ+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG48L21hdC1mb3JtLWZpZWxkPlxuIl19
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL2NhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXIuc2NoZWR1bGUuc2VsZWN0aW9uLnJhbmdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzSSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBOEIsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7OztBQVdsRSxNQUFNLE9BQU8sOENBQThDO0lBNkZ6RCxZQUFxQixnQkFBa0MsRUFBVyxpQ0FBb0UsRUFBbUQsMEJBQXNEO1FBQTFOLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVyxzQ0FBaUMsR0FBakMsaUNBQWlDLENBQW1DO1FBQW1ELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUE1RnZPLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUUvQyxjQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxjQUFTLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGdCQUFnQixDQUFDO1FBRzdFLDBCQUFxQixHQUFZLElBQUksQ0FBQztRQU10QyxVQUFLLEdBQW1CLG9CQUFvQixDQUFDO1FBZTdDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRWQsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVwRCxpQkFBWSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN4QyxhQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFFcEMsVUFBSyxHQUFHLElBQUksU0FBUyxDQUFDO1lBQzdCLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBYyxJQUFJLENBQUM7WUFDekMsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFjLElBQUksQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFFTSxzQkFBaUIsR0FBc0I7WUFDOUMsWUFBWSxFQUFFLENBQUMsT0FBK0IsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDdEQsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMzRztxQkFBTTtvQkFDTCxPQUFPLEtBQUssQ0FBQztpQkFDZDtZQUNILENBQUM7U0FDRixDQUFDO1FBRU8sYUFBUSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUM7UUFDM0QsYUFBUSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUM7UUFDM0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDNUYsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN2QixPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyRyxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLGtCQUFhLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGFBQWEsQ0FBQztRQUNyRSx5QkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsSUFBSSxtQkFBdUMsQ0FBQztZQUU1QyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBRTNDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ25DLG1CQUFtQixHQUFHLHdCQUF3QixDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRTtvQkFDaEQsbUJBQW1CLEdBQUcsb0JBQW9CLENBQUM7aUJBQzVDO3FCQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO29CQUM3QyxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztpQkFDakQ7cUJBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7b0JBQzdDLG1CQUFtQixHQUFHLHdCQUF3QixDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsRUFBRTtvQkFDOUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7aUJBQzFDO3FCQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO29CQUMzQyxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQztpQkFDL0M7cUJBQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7b0JBQzNDLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDO2lCQUM5QzthQUNGO1lBRUQsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUVPLGtCQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV1TCxDQUFDO0lBM0VuUCxJQUNJLFFBQVEsQ0FBQyxRQUF3QjtRQUNuQyxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdEI7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBc0VELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDckcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQ2xCLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxJQUFJLElBQUk7Z0JBQzVCLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxJQUFJLElBQUk7YUFDekIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYTthQUM3QyxJQUFJLENBQ0gsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxHQUEyQixDQUFDO1lBRWhDLElBQUksTUFBTSxFQUFFO2dCQUNWLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDakU7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ3hDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUM5RixZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNqRDthQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7YUFDaEc7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVMLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sVUFBVSxHQUFHLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQztvQkFDRSxDQUFDLE9BQXdCLEVBQUUsRUFBRTt3QkFDM0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQzt3QkFFNUIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFOzRCQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO3lCQUMzQjt3QkFFRCxPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO2lCQUNGO2dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFUCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFpQjtRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7NElBaExVLDhDQUE4QyxtR0E2RnVGLDhCQUE4QjtnSUE3Rm5LLDhDQUE4QywwVkNyQjNELGczREE4QkE7NEZEVGEsOENBQThDO2tCQUoxRCxTQUFTOytCQUNFLDRDQUE0Qzs7MEJBZ0dtRixNQUFNOzJCQUFDLDhCQUE4Qjs0Q0F0RjlLLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFJTixNQUFNO3NCQURMLFNBQVM7dUJBQUMsUUFBUTtnQkFJbkIsS0FBSztzQkFESixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJRixRQUFRO3NCQURYLEtBQUs7Z0JBVU4sYUFBYTtzQkFEWixLQUFLO2dCQWlJRixRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb25PYmplY3QgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi9jYWxlbmRhci5zY2hlZHVsZS5zZWxlY3Rpb24uc3RvcmUnO1xuaW1wb3J0IHsgRGJ4Q2FsZW5kYXJTdG9yZSB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWIvY2FsZW5kYXInO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF5YmUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBCZWhhdmlvclN1YmplY3QsIHN0YXJ0V2l0aCwgT2JzZXJ2YWJsZSwgb2YsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzU2FtZURhdGVEYXkgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXREYXRlUmFuZ2VQaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcblxuaW50ZXJmYWNlIFJhbmdlVmFsdWUge1xuICBzdGFydD86IE1heWJlPERhdGU+O1xuICBlbmQ/OiBNYXliZTxEYXRlPjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLnNjaGVkdWxlLnNlbGVjdGlvbi5yYW5nZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4U2NoZWR1bGVTZWxlY3Rpb25DYWxlbmRhckRhdGVSYW5nZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSByZXF1aXJlZCQgPSB0aGlzLl9yZXF1aXJlZC5hc09ic2VydmFibGUoKTtcbiAgcmVhZG9ubHkgdGltZXpvbmUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUuY3VycmVudFRpbWV6b25lJDtcblxuICBASW5wdXQoKVxuICBvcGVuUGlja2VyT25UZXh0Q2xpY2s6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGQoJ3BpY2tlcicpXG4gIHBpY2tlciE6IE1hdERhdGVSYW5nZVBpY2tlcjxEYXRlPjtcblxuICBASW5wdXQoKVxuICBsYWJlbD86IE1heWJlPHN0cmluZz4gPSAnRW50ZXIgYSBkYXRlIHJhbmdlJztcblxuICBASW5wdXQoKVxuICBoaW50PzogTWF5YmU8c3RyaW5nPjtcblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+KSB7XG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICB0aGlzLnJhbmdlLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYW5nZS5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBzaG93Q3VzdG9taXplID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfcGlja2VyT3BlbmVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3N5bmNTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHJlYWRvbmx5IHJhbmdlID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlciA9IHtcbiAgICBpc0Vycm9yU3RhdGU6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsLCBmb3JtKSA9PiB7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCBjb250cm9sLnRvdWNoZWQpKSB8fCAoY29udHJvbC50b3VjaGVkICYmIHRoaXMucmFuZ2UuaW52YWxpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlYWRvbmx5IG1pbkRhdGUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUubWluRGF0ZSQ7XG4gIHJlYWRvbmx5IG1heERhdGUkID0gdGhpcy5kYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmUubWF4RGF0ZSQ7XG4gIHJlYWRvbmx5IHRpbWV6b25lUmVsZXZlbnREYXRlJCA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnREYXRlUmFuZ2UkLnBpcGUoXG4gICAgbWFwKChjdXJyZW50RGF0ZVJhbmdlKSA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudERhdGVSYW5nZSA/IGN1cnJlbnREYXRlUmFuZ2Uuc3RhcnQgPz8gY3VycmVudERhdGVSYW5nZS5lbmQgOiB1bmRlZmluZWQgPz8gbmV3IERhdGUoKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzQ3VzdG9taXplZCQgPSB0aGlzLmRieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZS5pc0N1c3RvbWl6ZWQkO1xuICByZWFkb25seSBjdXJyZW50RXJyb3JNZXNzYWdlJCA9IHRoaXMucmFuZ2Uuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4geCA9PT0gJ0lOVkFMSUQnIHx8IHggPT09ICdWQUxJRCcpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRFcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHggPT09ICdJTlZBTElEJykge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMucmFuZ2UuY29udHJvbHM7XG5cbiAgICAgICAgaWYgKHRoaXMucmFuZ2UuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0RhdGUgcmFuZ2UgaXMgcmVxdWlyZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Lmhhc0Vycm9yKCdtYXRTdGFydERhdGVJbnZhbGlkJykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ0ludmFsaWQgc3RhcnQgZGF0ZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNaW4nKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnU3RhcnQgZGF0ZSBpcyB0b28gZWFybHknO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Lmhhc0Vycm9yKCdtYXREYXRlcGlja2VyTWF4JykpIHtcbiAgICAgICAgICBjdXJyZW50RXJyb3JNZXNzYWdlID0gJ1N0YXJ0IGRhdGUgaXMgdG9vIGxhdGUnO1xuICAgICAgICB9IGVsc2UgaWYgKGVuZC5oYXNFcnJvcignbWF0U3RhcnREYXRlSW52YWxpZCcpKSB7XG4gICAgICAgICAgY3VycmVudEVycm9yTWVzc2FnZSA9ICdJbnZhbGlkIGVuZCBkYXRlJztcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNaW4nKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnRW5kIGRhdGUgaXMgdG9vIGVhcmx5JztcbiAgICAgICAgfSBlbHNlIGlmIChlbmQuaGFzRXJyb3IoJ21hdERhdGVwaWNrZXJNYXgnKSkge1xuICAgICAgICAgIGN1cnJlbnRFcnJvck1lc3NhZ2UgPSAnRW5kIGRhdGUgaXMgdG9vIGxhdGUnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50RXJyb3JNZXNzYWdlO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyT3BlbmVkJCA9IHRoaXMuX3BpY2tlck9wZW5lZC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBkYnhDYWxlbmRhclN0b3JlOiBEYnhDYWxlbmRhclN0b3JlLCByZWFkb25seSBkYnhDYWxlbmRhclNjaGVkdWxlU2VsZWN0aW9uU3RvcmU6IERieENhbGVuZGFyU2NoZWR1bGVTZWxlY3Rpb25TdG9yZSwgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpIHJlYWRvbmx5IG1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zOiBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucykge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zeW5jU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLmN1cnJlbnRJbnB1dFJhbmdlJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMucmFuZ2Uuc2V0VmFsdWUoe1xuICAgICAgICBzdGFydDogeD8uaW5wdXRTdGFydCA/PyBudWxsLFxuICAgICAgICBlbmQ6IHg/LmlucHV0RW5kID8/IG51bGxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5fcGlja2VyT3BlbmVkXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKChvcGVuZWQpID0+IHtcbiAgICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPFJhbmdlVmFsdWU+O1xuXG4gICAgICAgICAgaWYgKG9wZW5lZCkge1xuICAgICAgICAgICAgb2JzID0gb2Yoe30pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnMgPSB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnJhbmdlLnZhbHVlKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9icztcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcigoeCkgPT4gQm9vbGVhbih4LnN0YXJ0ICYmIHguZW5kKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBpc1NhbWVEYXRlRGF5KGEuc3RhcnQsIGIuc3RhcnQpICYmIGlzU2FtZURhdGVEYXkoYS5lbmQsIGIuZW5kKSksXG4gICAgICAgIHRocm90dGxlVGltZSgxMDAsIHVuZGVmaW5lZCwgeyB0cmFpbGluZzogdHJ1ZSB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICBpZiAoeC5zdGFydCAmJiB4LmVuZCkge1xuICAgICAgICAgIHRoaXMuZGJ4Q2FsZW5kYXJTY2hlZHVsZVNlbGVjdGlvblN0b3JlLnNldElucHV0UmFuZ2UoeyBpbnB1dFN0YXJ0OiB4LnN0YXJ0LCBpbnB1dEVuZDogeC5lbmQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gYWRkIGEgcmVxdWlyZWQgdmFsaWRhdG9yIHdoZW4gbmVlZGVkXG4gICAgdGhpcy5fcmVxdWlyZWRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5fcmVxdWlyZWQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0geFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgICAgIGlmICghcmFuZ2UgfHwgIXJhbmdlLnN0YXJ0IHx8ICFyYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICA6IFtdO1xuXG4gICAgICB0aGlzLnJhbmdlLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXF1aXJlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3BpY2tlck9wZW5lZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3JlcXVpcmVkU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9zeW5jU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl92YWx1ZVN1Yi5kZXN0cm95KCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkLnZhbHVlO1xuICB9XG5cbiAgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQubmV4dChyZXF1aXJlZCk7XG4gIH1cblxuICBjbGlja2VkRGF0ZVJhbmdlSW5wdXQoKSB7XG4gICAgaWYgKHRoaXMub3BlblBpY2tlck9uVGV4dENsaWNrKSB7XG4gICAgICB0aGlzLnBpY2tlci5vcGVuKCk7XG4gICAgfVxuICB9XG5cbiAgcGlja2VyT3BlbmVkKCkge1xuICAgIHRoaXMuX3BpY2tlck9wZW5lZC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcGlja2VyQ2xvc2VkKCkge1xuICAgIHRoaXMuX3BpY2tlck9wZW5lZC5uZXh0KGZhbHNlKTtcbiAgfVxufVxuIiwiPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LXNjaGVkdWxlLXNlbGVjdGlvbi1jYWxlbmRhci1kYXRlLXJhbmdlLWZpZWxkXCI+XG4gIDxtYXQtbGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9tYXQtbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJkYngtc2NoZWR1bGUtc2VsZWN0aW9uLWNhbGVuZGFyLWRhdGUtcmFuZ2UtZmllbGQtY29udGVudFwiPlxuICAgIDwhLS0gUHJpbWFyeSBDb250ZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkYngtZmxleFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dDdXN0b21pemUgJiYgKGlzQ3VzdG9taXplZCQgfCBhc3luYylcIiBjbGFzcz1cImRhdGUtcmFuZ2UtZmllbGQtY3VzdG9taXplZFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRieC1hY2NlbnQtYmcgZGF0ZS1yYW5nZS1maWVsZC1jdXN0b21pemVkLXRleHRcIj5DdXN0b208L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkYngtYnV0dG9uLXNwYWNlcj48L2RieC1idXR0b24tc3BhY2VyPlxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBjbGFzcz1cIm1hdC1kYXRlcGlja2VyLWJ1dHRvbi1oaWdobGlnaHRcIiBtYXRJY29uU3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXI+PC9kYngtYnV0dG9uLXNwYWNlcj5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCAoY2xpY2spPVwiY2xpY2tlZERhdGVSYW5nZUlucHV0KClcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWQkIHwgYXN5bmNcIiBbbWluXT1cIm1pbkRhdGUkIHwgYXN5bmNcIiBbbWF4XT1cIm1heERhdGUkIHwgYXN5bmNcIiBbZm9ybUdyb3VwXT1cInJhbmdlXCIgW3JhbmdlUGlja2VyXT1cInBpY2tlclwiPlxuICAgICAgICA8aW5wdXQgW2Vycm9yU3RhdGVNYXRjaGVyXT1cImVycm9yU3RhdGVNYXRjaGVyXCIgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCIgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgLz5cbiAgICAgICAgPGlucHV0IFtlcnJvclN0YXRlTWF0Y2hlcl09XCJlcnJvclN0YXRlTWF0Y2hlclwiIG1hdEVuZERhdGUgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCIgcGxhY2Vob2xkZXI9XCJFbmQgZGF0ZVwiIC8+XG4gICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICAgICAgPHNwYW4gKm5nSWY9XCJ0aW1lem9uZSQgfCBhc3luY1wiIGNsYXNzPVwiZGJ4LWZsZXgtYmFyIGRieC1mYWludCBkYngtbm93cmFwIGRieC1pY29uLXNwYWNlclwiPnt7IHRpbWV6b25lJCB8IGFzeW5jIHwgdGltZXpvbmVBYmJyZXZpYXRpb246ICh0aW1lem9uZVJlbGV2ZW50RGF0ZSQgfCBhc3luYykgfX08L3NwYW4+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0N1c3RvbWl6ZVwiPlxuICAgICAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXI+PC9kYngtYnV0dG9uLXNwYWNlcj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2N1c3RvbWl6ZUJ1dHRvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlciAob3BlbmVkKT1cInBpY2tlck9wZW5lZCgpXCIgKGNsb3NlZCk9XCJwaWNrZXJDbG9zZWQoKVwiPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQ3VzdG9tIENvbnRlbnQgLS0+XG4gICAgPGRpdj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJjdXJyZW50RXJyb3JNZXNzYWdlJCB8IGFzeW5jXCI+e3sgY3VycmVudEVycm9yTWVzc2FnZSQgfCBhc3luYyB9fTwvbWF0LWVycm9yPlxuICA8bWF0LWhpbnQ+e3sgaGludCB9fTwvbWF0LWhpbnQ+XG48L21hdC1mb3JtLWZpZWxkPlxuIl19
|