@elderbyte/ngx-starter 18.9.0 → 18.11.0
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/esm2022/lib/common/time/public_api.mjs +3 -1
- package/esm2022/lib/common/time/temporal-plain-date-interval.mjs +34 -0
- package/esm2022/lib/common/time/temporal-util.mjs +187 -0
- package/esm2022/lib/components/errors/error-util.mjs +2 -2
- package/esm2022/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +13 -4
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker-binding.directive.mjs +45 -0
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker-toggle/elder-interval-picker-toggle.component.mjs +203 -0
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.component.mjs +269 -0
- package/esm2022/lib/components/time/elder-interval-picker/elder-interval-picker.service.mjs +703 -0
- package/esm2022/lib/components/time/elder-time.module.mjs +22 -2
- package/fesm2022/elderbyte-ngx-starter.mjs +1791 -376
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/time/public_api.d.ts +2 -0
- package/lib/common/time/temporal-plain-date-interval.d.ts +15 -0
- package/lib/common/time/temporal-util.d.ts +34 -0
- package/lib/components/time/elder-interval-input/elder-interval-input.component.d.ts +4 -1
- package/lib/components/time/elder-interval-picker/elder-interval-picker-binding.directive.d.ts +30 -0
- package/lib/components/time/elder-interval-picker/elder-interval-picker-toggle/elder-interval-picker-toggle.component.d.ts +48 -0
- package/lib/components/time/elder-interval-picker/elder-interval-picker.component.d.ts +73 -0
- package/lib/components/time/elder-interval-picker/elder-interval-picker.service.d.ts +130 -0
- package/lib/components/time/elder-time.module.d.ts +8 -2
- package/package.json +4 -2
- package/src/assets/i18n/de.json +137 -0
- package/src/assets/i18n/en.json +123 -0
- package/src/lib/components/time/elder-interval-picker/elder-interval-picker.component.scss +36 -0
|
@@ -3,4 +3,6 @@ export * from './interval';
|
|
|
3
3
|
export * from './interval-coerce';
|
|
4
4
|
export * from './time-util';
|
|
5
5
|
export * from './date-util';
|
|
6
|
-
|
|
6
|
+
export * from './temporal-util';
|
|
7
|
+
export * from './temporal-plain-date-interval';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbW1vbi90aW1lL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5leHBvcnQgKiBmcm9tICcuL3BlcmlvZC1kdXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVydmFsJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJ2YWwtY29lcmNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGltZS11dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS11dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vdGVtcG9yYWwtdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3RlbXBvcmFsLXBsYWluLWRhdGUtaW50ZXJ2YWwnO1xuIl19
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export class TemporalPlainDateInterval {
|
|
2
|
+
constructor(start, end) {
|
|
3
|
+
this.start = start;
|
|
4
|
+
this.end = end;
|
|
5
|
+
}
|
|
6
|
+
shiftDays(days) {
|
|
7
|
+
return new TemporalPlainDateInterval(this.start.add({ days }), this.end.add({ days }));
|
|
8
|
+
}
|
|
9
|
+
shiftMonths(months) {
|
|
10
|
+
return new TemporalPlainDateInterval(this.start.add({ months }), this.end.add({ months }));
|
|
11
|
+
}
|
|
12
|
+
shiftYears(years) {
|
|
13
|
+
return new TemporalPlainDateInterval(this.start.add({ years }), this.end.add({ years }));
|
|
14
|
+
}
|
|
15
|
+
toString() {
|
|
16
|
+
return `${this.start.toString()} - ${this.end.toString()} (duration: ${this.getDurationInDays()} days)`;
|
|
17
|
+
}
|
|
18
|
+
getDuration() {
|
|
19
|
+
return this.start.until(this.end);
|
|
20
|
+
}
|
|
21
|
+
getDurationInDays() {
|
|
22
|
+
return this.getDuration().days;
|
|
23
|
+
}
|
|
24
|
+
getDurationInWeeks() {
|
|
25
|
+
return this.getDurationInDays() / 7;
|
|
26
|
+
}
|
|
27
|
+
getDurationInMonths() {
|
|
28
|
+
return this.getDuration().months;
|
|
29
|
+
}
|
|
30
|
+
getDurationInYears() {
|
|
31
|
+
return this.getDuration().years;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG9yYWwtcGxhaW4tZGF0ZS1pbnRlcnZhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbW1vbi90aW1lL3RlbXBvcmFsLXBsYWluLWRhdGUtaW50ZXJ2YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLHlCQUF5QjtJQUlsQyxZQUFZLEtBQXlCLEVBQUUsR0FBdUI7UUFDNUQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFZO1FBQ3BCLE9BQU8sSUFBSSx5QkFBeUIsQ0FDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQ3ZCLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWM7UUFDeEIsT0FBTyxJQUFJLHlCQUF5QixDQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN0QixPQUFPLElBQUkseUJBQXlCLENBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxlQUFlLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUM7SUFDMUcsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcG9yYWwgfSBmcm9tICdAanMtdGVtcG9yYWwvcG9seWZpbGwnO1xuXG5leHBvcnQgY2xhc3MgVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCB7XG4gICAgc3RhcnQ6IFRlbXBvcmFsLlBsYWluRGF0ZTtcbiAgICBlbmQ6IFRlbXBvcmFsLlBsYWluRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKHN0YXJ0OiBUZW1wb3JhbC5QbGFpbkRhdGUsIGVuZDogVGVtcG9yYWwuUGxhaW5EYXRlKSB7XG4gICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB9XG5cbiAgICBzaGlmdERheXMoZGF5czogbnVtYmVyKTogVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCB7XG4gICAgICByZXR1cm4gbmV3IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwoXG4gICAgICAgIHRoaXMuc3RhcnQuYWRkKHsgZGF5cyB9KSxcbiAgICAgICAgdGhpcy5lbmQuYWRkKHsgZGF5cyB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzaGlmdE1vbnRocyhtb250aHM6IG51bWJlcik6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgICAgcmV0dXJuIG5ldyBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsKFxuICAgICAgICB0aGlzLnN0YXJ0LmFkZCh7IG1vbnRocyB9KSxcbiAgICAgICAgdGhpcy5lbmQuYWRkKHsgbW9udGhzIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHNoaWZ0WWVhcnMoeWVhcnM6IG51bWJlcik6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgICAgcmV0dXJuIG5ldyBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsKFxuICAgICAgICB0aGlzLnN0YXJ0LmFkZCh7IHllYXJzIH0pLFxuICAgICAgICB0aGlzLmVuZC5hZGQoeyB5ZWFycyB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGAke3RoaXMuc3RhcnQudG9TdHJpbmcoKX0gLSAke3RoaXMuZW5kLnRvU3RyaW5nKCl9IChkdXJhdGlvbjogJHt0aGlzLmdldER1cmF0aW9uSW5EYXlzKCl9IGRheXMpYDtcbiAgICB9XG5cbiAgICBnZXREdXJhdGlvbigpOiBUZW1wb3JhbC5EdXJhdGlvbiB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydC51bnRpbCh0aGlzLmVuZCk7XG4gICAgfVxuXG4gICAgZ2V0RHVyYXRpb25JbkRheXMoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLmdldER1cmF0aW9uKCkuZGF5cztcbiAgICB9XG5cbiAgICBnZXREdXJhdGlvbkluV2Vla3MoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLmdldER1cmF0aW9uSW5EYXlzKCkgLyA3O1xuICAgIH1cblxuICAgIGdldER1cmF0aW9uSW5Nb250aHMoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLmdldER1cmF0aW9uKCkubW9udGhzO1xuICAgIH1cblxuICAgIGdldER1cmF0aW9uSW5ZZWFycygpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHVyYXRpb24oKS55ZWFycztcbiAgICB9XG4gIH1cbiJdfQ==
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { Temporal } from '@js-temporal/polyfill';
|
|
2
|
+
import { TemporalPlainDateInterval } from './temporal-plain-date-interval';
|
|
3
|
+
export class TemporalUtil {
|
|
4
|
+
static getJSDateFromPlainDateTime(date) {
|
|
5
|
+
if (date instanceof Temporal.PlainDateTime) {
|
|
6
|
+
return new Date(date.year, date.month - 1, date.day, date.hour, date.minute, date.second, date.millisecond);
|
|
7
|
+
}
|
|
8
|
+
return new Date(date.year, date.month - 1, date.day);
|
|
9
|
+
}
|
|
10
|
+
static getPlainDateTimeFromJSDate(date) {
|
|
11
|
+
const instant = Temporal.Instant.fromEpochMilliseconds(date.getTime());
|
|
12
|
+
const dateTimeIso = instant.toZonedDateTimeISO(Temporal.Now.timeZoneId());
|
|
13
|
+
return Temporal.PlainDateTime.from(dateTimeIso);
|
|
14
|
+
}
|
|
15
|
+
static getPlainDateTimeFromPlainDateAndPlainTime(date, time) {
|
|
16
|
+
return Temporal.PlainDateTime.from({
|
|
17
|
+
year: date.year,
|
|
18
|
+
month: date.month,
|
|
19
|
+
day: date.day,
|
|
20
|
+
hour: time.hour,
|
|
21
|
+
minute: time.minute,
|
|
22
|
+
second: time.second,
|
|
23
|
+
millisecond: time.millisecond,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static isFirstDayOfWeek(date) {
|
|
27
|
+
return date.dayOfWeek === 1;
|
|
28
|
+
}
|
|
29
|
+
static getPlainDateFromJSDate(date) {
|
|
30
|
+
return this.createTemporalLocalizedDateFromTimestamp(date.getTime());
|
|
31
|
+
}
|
|
32
|
+
static getPlainTimeFromJSDate(date) {
|
|
33
|
+
const instant = Temporal.Instant.fromEpochMilliseconds(date.getTime());
|
|
34
|
+
const dateTimeIso = instant.toZonedDateTimeISO(Temporal.Now.timeZoneId());
|
|
35
|
+
return Temporal.PlainTime.from(dateTimeIso);
|
|
36
|
+
}
|
|
37
|
+
static getPlainDateTimeFromString(dateString) {
|
|
38
|
+
let jsDate = null;
|
|
39
|
+
try {
|
|
40
|
+
jsDate = new Date(dateString);
|
|
41
|
+
if (typeof jsDate !== 'object' || jsDate.constructor.name !== 'Date') {
|
|
42
|
+
throw new Error('Invalid date string');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
console.warn('Invalid date string', dateString);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return this.getPlainDateTimeFromJSDate(jsDate);
|
|
50
|
+
}
|
|
51
|
+
static getHtmlTimeStringFromPlainTime(time) {
|
|
52
|
+
if (!time) {
|
|
53
|
+
return '00:00:00';
|
|
54
|
+
}
|
|
55
|
+
return (time.hour.toString().padStart(2, '0') +
|
|
56
|
+
':' +
|
|
57
|
+
time.minute.toString().padStart(2, '0') +
|
|
58
|
+
':' +
|
|
59
|
+
time.second.toString().padStart(2, '0'));
|
|
60
|
+
}
|
|
61
|
+
static getQuarterForDate(date = TemporalUtil.getDateTodayLocalized()) {
|
|
62
|
+
return Math.floor((date.month - 1) / 3) + 1;
|
|
63
|
+
}
|
|
64
|
+
static getCurrentDay(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
65
|
+
const today = referenceDate;
|
|
66
|
+
const tomorrow = today.add({ days: 1 });
|
|
67
|
+
return new TemporalPlainDateInterval(today, tomorrow);
|
|
68
|
+
}
|
|
69
|
+
static getYesterday(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
70
|
+
const yesterday = referenceDate.subtract({ days: 1 });
|
|
71
|
+
return new TemporalPlainDateInterval(yesterday, referenceDate);
|
|
72
|
+
}
|
|
73
|
+
static getLastSevenDays(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
74
|
+
return new TemporalPlainDateInterval(referenceDate.subtract({ days: 7 }), referenceDate);
|
|
75
|
+
}
|
|
76
|
+
static getLastThirtyDays(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
77
|
+
return new TemporalPlainDateInterval(referenceDate.subtract({ days: 30 }), referenceDate);
|
|
78
|
+
}
|
|
79
|
+
static getCurrentWeek(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
80
|
+
const startOfWeek = referenceDate.subtract({
|
|
81
|
+
days: referenceDate.dayOfWeek - 1,
|
|
82
|
+
});
|
|
83
|
+
const endOfWeek = startOfWeek.add({ days: 7 });
|
|
84
|
+
return new TemporalPlainDateInterval(startOfWeek, endOfWeek);
|
|
85
|
+
}
|
|
86
|
+
static getCurrentMonth(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
87
|
+
const startOfMonth = referenceDate.subtract({
|
|
88
|
+
days: referenceDate.day - 1,
|
|
89
|
+
});
|
|
90
|
+
const endOfMonth = startOfMonth.add({ months: 1 });
|
|
91
|
+
return new TemporalPlainDateInterval(startOfMonth, endOfMonth);
|
|
92
|
+
}
|
|
93
|
+
static getCurrentQuarter(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
94
|
+
const quarter = Math.floor((referenceDate.month - 1) / 3);
|
|
95
|
+
const startOfQuarter = referenceDate.subtract({
|
|
96
|
+
months: referenceDate.month - 1 - quarter * 3,
|
|
97
|
+
days: referenceDate.day - 1,
|
|
98
|
+
});
|
|
99
|
+
const endOfQuarter = startOfQuarter.add({ months: 3 });
|
|
100
|
+
return new TemporalPlainDateInterval(startOfQuarter, endOfQuarter);
|
|
101
|
+
}
|
|
102
|
+
static getPreviousQuarter(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
103
|
+
return TemporalUtil.getCurrentQuarter(referenceDate).shiftMonths(-3);
|
|
104
|
+
}
|
|
105
|
+
static getCurrentYear(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
106
|
+
const startOfYear = referenceDate.subtract({
|
|
107
|
+
days: referenceDate.dayOfYear - 1,
|
|
108
|
+
});
|
|
109
|
+
const endOfYear = startOfYear.add({ years: 1 });
|
|
110
|
+
return new TemporalPlainDateInterval(startOfYear, endOfYear);
|
|
111
|
+
}
|
|
112
|
+
static getPreviousYear(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
113
|
+
return TemporalUtil.getCurrentYear(referenceDate).shiftYears(-1);
|
|
114
|
+
}
|
|
115
|
+
static getNextYear(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
116
|
+
return TemporalUtil.getCurrentYear(referenceDate).shiftYears(1);
|
|
117
|
+
}
|
|
118
|
+
static getLast365Days(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
119
|
+
return new TemporalPlainDateInterval(referenceDate.subtract({ days: 365 }), referenceDate);
|
|
120
|
+
}
|
|
121
|
+
static getLast90Days(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
122
|
+
return new TemporalPlainDateInterval(referenceDate.subtract({ days: 90 }), referenceDate);
|
|
123
|
+
}
|
|
124
|
+
static getPreviousMonth(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
125
|
+
return TemporalUtil.getCurrentMonth(referenceDate).shiftMonths(-1);
|
|
126
|
+
}
|
|
127
|
+
static getNextMonth(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
128
|
+
return TemporalUtil.getCurrentMonth(referenceDate).shiftMonths(1);
|
|
129
|
+
}
|
|
130
|
+
static getPreviousWeek(referenceDate = TemporalUtil.getDateTodayLocalized()) {
|
|
131
|
+
return TemporalUtil.getCurrentWeek(referenceDate).shiftDays(-7);
|
|
132
|
+
}
|
|
133
|
+
static getDateTodayLocalized() {
|
|
134
|
+
return this.createTemporalLocalizedDateFromTimestamp(Date.now());
|
|
135
|
+
}
|
|
136
|
+
static createTemporalLocalizedDateFromTimestamp(timestamp) {
|
|
137
|
+
const instant = Temporal.Instant.fromEpochMilliseconds(timestamp);
|
|
138
|
+
const dateTimeIso = instant.toZonedDateTimeISO(Temporal.Now.timeZoneId());
|
|
139
|
+
const date = Temporal.PlainDate.from(dateTimeIso);
|
|
140
|
+
return date;
|
|
141
|
+
}
|
|
142
|
+
static getHtmlDateString(date) {
|
|
143
|
+
if (!date) {
|
|
144
|
+
return '';
|
|
145
|
+
}
|
|
146
|
+
return (date.year +
|
|
147
|
+
'-' +
|
|
148
|
+
date.month.toString().padStart(2, '0') +
|
|
149
|
+
'-' +
|
|
150
|
+
date.day.toString().padStart(2, '0'));
|
|
151
|
+
}
|
|
152
|
+
static getPlainDateFromHtmlDateString(dateString) {
|
|
153
|
+
if (!dateString) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const dateArr = dateString.split('-');
|
|
157
|
+
if (dateArr.length !== 3) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
return Temporal.PlainDate.from({
|
|
161
|
+
year: parseInt(dateArr[0]),
|
|
162
|
+
month: parseInt(dateArr[1]),
|
|
163
|
+
day: parseInt(dateArr[2]),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
static getPlainTimeFromHtmlTimeString(timeString) {
|
|
167
|
+
if (!timeString) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
const timeArr = timeString.split(':');
|
|
171
|
+
if (timeArr.length !== 2 && timeArr.length !== 3) {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
if (timeArr.length === 2) {
|
|
175
|
+
return Temporal.PlainTime.from({
|
|
176
|
+
hour: parseInt(timeArr[0]),
|
|
177
|
+
minute: parseInt(timeArr[1]),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return Temporal.PlainTime.from({
|
|
181
|
+
hour: parseInt(timeArr[0]),
|
|
182
|
+
minute: parseInt(timeArr[1]),
|
|
183
|
+
second: parseInt(timeArr[2]),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG9yYWwtdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbW1vbi90aW1lL3RlbXBvcmFsLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNFLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLE1BQU0sQ0FBQywwQkFBMEIsQ0FDL0IsSUFBaUQ7UUFFakQsSUFBSSxJQUFJLFlBQVksUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNDLE9BQU8sSUFBSSxJQUFJLENBQ2IsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFDZCxJQUFJLENBQUMsR0FBRyxFQUNSLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFDLDBCQUEwQixDQUFDLElBQVU7UUFDMUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FB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S0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFHLENBQUM7WUFDMUIsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDN0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBvcmFsIH0gZnJvbSAnQGpzLXRlbXBvcmFsL3BvbHlmaWxsJztcbmltcG9ydCB7IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwgfSBmcm9tICcuL3RlbXBvcmFsLXBsYWluLWRhdGUtaW50ZXJ2YWwnO1xuXG5leHBvcnQgY2xhc3MgVGVtcG9yYWxVdGlsIHtcbiAgc3RhdGljIGdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKFxuICAgIGRhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSB8IFRlbXBvcmFsLlBsYWluRGF0ZVRpbWVcbiAgKTogRGF0ZSB7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICAgIGRhdGUueWVhcixcbiAgICAgICAgZGF0ZS5tb250aCAtIDEsXG4gICAgICAgIGRhdGUuZGF5LFxuICAgICAgICBkYXRlLmhvdXIsXG4gICAgICAgIGRhdGUubWludXRlLFxuICAgICAgICBkYXRlLnNlY29uZCxcbiAgICAgICAgZGF0ZS5taWxsaXNlY29uZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQbGFpbkRhdGVUaW1lRnJvbUpTRGF0ZShkYXRlOiBEYXRlKTogVGVtcG9yYWwuUGxhaW5EYXRlVGltZSB7XG4gICAgY29uc3QgaW5zdGFudCA9IFRlbXBvcmFsLkluc3RhbnQuZnJvbUVwb2NoTWlsbGlzZWNvbmRzKGRhdGUuZ2V0VGltZSgpKTtcbiAgICBjb25zdCBkYXRlVGltZUlzbyA9IGluc3RhbnQudG9ab25lZERhdGVUaW1lSVNPKFRlbXBvcmFsLk5vdy50aW1lWm9uZUlkKCkpO1xuICAgIHJldHVybiBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lLmZyb20oZGF0ZVRpbWVJc28pO1xuICB9XG5cbiAgc3RhdGljIGdldFBsYWluRGF0ZVRpbWVGcm9tUGxhaW5EYXRlQW5kUGxhaW5UaW1lKFxuICAgIGRhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSxcbiAgICB0aW1lOiBUZW1wb3JhbC5QbGFpblRpbWVcbiAgKTogVGVtcG9yYWwuUGxhaW5EYXRlVGltZSB7XG4gICAgcmV0dXJuIFRlbXBvcmFsLlBsYWluRGF0ZVRpbWUuZnJvbSh7XG4gICAgICB5ZWFyOiBkYXRlLnllYXIsXG4gICAgICBtb250aDogZGF0ZS5tb250aCxcbiAgICAgIGRheTogZGF0ZS5kYXksXG4gICAgICBob3VyOiB0aW1lLmhvdXIsXG4gICAgICBtaW51dGU6IHRpbWUubWludXRlLFxuICAgICAgc2Vjb25kOiB0aW1lLnNlY29uZCxcbiAgICAgIG1pbGxpc2Vjb25kOiB0aW1lLm1pbGxpc2Vjb25kLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGlzRmlyc3REYXlPZldlZWsoXG4gICAgZGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlIHwgVGVtcG9yYWwuUGxhaW5EYXRlVGltZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZS5kYXlPZldlZWsgPT09IDE7XG4gIH1cblxuICBzdGF0aWMgZ2V0UGxhaW5EYXRlRnJvbUpTRGF0ZShkYXRlOiBEYXRlKTogVGVtcG9yYWwuUGxhaW5EYXRlIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUZW1wb3JhbExvY2FsaXplZERhdGVGcm9tVGltZXN0YW1wKGRhdGUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQbGFpblRpbWVGcm9tSlNEYXRlKGRhdGU6IERhdGUpOiBUZW1wb3JhbC5QbGFpblRpbWUge1xuICAgIGNvbnN0IGluc3RhbnQgPSBUZW1wb3JhbC5JbnN0YW50LmZyb21FcG9jaE1pbGxpc2Vjb25kcyhkYXRlLmdldFRpbWUoKSk7XG4gICAgY29uc3QgZGF0ZVRpbWVJc28gPSBpbnN0YW50LnRvWm9uZWREYXRlVGltZUlTTyhUZW1wb3JhbC5Ob3cudGltZVpvbmVJZCgpKTtcbiAgICByZXR1cm4gVGVtcG9yYWwuUGxhaW5UaW1lLmZyb20oZGF0ZVRpbWVJc28pO1xuICB9XG5cbiAgc3RhdGljIGdldFBsYWluRGF0ZVRpbWVGcm9tU3RyaW5nKFxuICAgIGRhdGVTdHJpbmc6IHN0cmluZ1xuICApOiBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lIHtcbiAgICBsZXQganNEYXRlOiBEYXRlID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAganNEYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICBpZiAodHlwZW9mIGpzRGF0ZSAhPT0gJ29iamVjdCcgfHwganNEYXRlLmNvbnN0cnVjdG9yLm5hbWUgIT09ICdEYXRlJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0ZSBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZGF0ZSBzdHJpbmcnLCBkYXRlU3RyaW5nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFBsYWluRGF0ZVRpbWVGcm9tSlNEYXRlKGpzRGF0ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0SHRtbFRpbWVTdHJpbmdGcm9tUGxhaW5UaW1lKFxuICAgIHRpbWU6IFRlbXBvcmFsLlBsYWluVGltZSB8IFRlbXBvcmFsLlBsYWluRGF0ZVRpbWVcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIXRpbWUpIHtcbiAgICAgIHJldHVybiAnMDA6MDA6MDAnO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgdGltZS5ob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAnOicgK1xuICAgICAgdGltZS5taW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICc6JyArXG4gICAgICB0aW1lLnNlY29uZC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGdldFF1YXJ0ZXJGb3JEYXRlKFxuICAgIGRhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmZsb29yKChkYXRlLm1vbnRoIC0gMSkgLyAzKSArIDE7XG4gIH1cblxuICBzdGF0aWMgZ2V0Q3VycmVudERheShcbiAgICByZWZlcmVuY2VEYXRlOiBUZW1wb3JhbC5QbGFpbkRhdGUgPSBUZW1wb3JhbFV0aWwuZ2V0RGF0ZVRvZGF5TG9jYWxpemVkKClcbiAgKTogVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCB7XG4gICAgY29uc3QgdG9kYXkgPSByZWZlcmVuY2VEYXRlO1xuICAgIGNvbnN0IHRvbW9ycm93ID0gdG9kYXkuYWRkKHsgZGF5czogMSB9KTtcbiAgICByZXR1cm4gbmV3IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwodG9kYXksIHRvbW9ycm93KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRZZXN0ZXJkYXkoXG4gICAgcmVmZXJlbmNlRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlID0gVGVtcG9yYWxVdGlsLmdldERhdGVUb2RheUxvY2FsaXplZCgpXG4gICk6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgIGNvbnN0IHllc3RlcmRheSA9IHJlZmVyZW5jZURhdGUuc3VidHJhY3QoeyBkYXlzOiAxIH0pO1xuICAgIHJldHVybiBuZXcgVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCh5ZXN0ZXJkYXksIHJlZmVyZW5jZURhdGUpO1xuICB9XG5cbiAgc3RhdGljIGdldExhc3RTZXZlbkRheXMoXG4gICAgcmVmZXJlbmNlRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlID0gVGVtcG9yYWxVdGlsLmdldERhdGVUb2RheUxvY2FsaXplZCgpXG4gICk6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgIHJldHVybiBuZXcgVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbChcbiAgICAgIHJlZmVyZW5jZURhdGUuc3VidHJhY3QoeyBkYXlzOiA3IH0pLFxuICAgICAgcmVmZXJlbmNlRGF0ZVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TGFzdFRoaXJ0eURheXMoXG4gICAgcmVmZXJlbmNlRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlID0gVGVtcG9yYWxVdGlsLmdldERhdGVUb2RheUxvY2FsaXplZCgpXG4gICk6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgIHJldHVybiBuZXcgVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbChcbiAgICAgIHJlZmVyZW5jZURhdGUuc3VidHJhY3QoeyBkYXlzOiAzMCB9KSxcbiAgICAgIHJlZmVyZW5jZURhdGVcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGdldEN1cnJlbnRXZWVrKFxuICAgIHJlZmVyZW5jZURhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHtcbiAgICBjb25zdCBzdGFydE9mV2VlayA9IHJlZmVyZW5jZURhdGUuc3VidHJhY3Qoe1xuICAgICAgZGF5czogcmVmZXJlbmNlRGF0ZS5kYXlPZldlZWsgLSAxLFxuICAgIH0pO1xuICAgIGNvbnN0IGVuZE9mV2VlayA9IHN0YXJ0T2ZXZWVrLmFkZCh7IGRheXM6IDcgfSk7XG4gICAgcmV0dXJuIG5ldyBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsKHN0YXJ0T2ZXZWVrLCBlbmRPZldlZWspO1xuICB9XG5cbiAgc3RhdGljIGdldEN1cnJlbnRNb250aChcbiAgICByZWZlcmVuY2VEYXRlOiBUZW1wb3JhbC5QbGFpbkRhdGUgPSBUZW1wb3JhbFV0aWwuZ2V0RGF0ZVRvZGF5TG9jYWxpemVkKClcbiAgKTogVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCB7XG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gcmVmZXJlbmNlRGF0ZS5zdWJ0cmFjdCh7XG4gICAgICBkYXlzOiByZWZlcmVuY2VEYXRlLmRheSAtIDEsXG4gICAgfSk7XG4gICAgY29uc3QgZW5kT2ZNb250aCA9IHN0YXJ0T2ZNb250aC5hZGQoeyBtb250aHM6IDEgfSk7XG4gICAgcmV0dXJuIG5ldyBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsKHN0YXJ0T2ZNb250aCwgZW5kT2ZNb250aCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0Q3VycmVudFF1YXJ0ZXIoXG4gICAgcmVmZXJlbmNlRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlID0gVGVtcG9yYWxVdGlsLmdldERhdGVUb2RheUxvY2FsaXplZCgpXG4gICk6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmZsb29yKChyZWZlcmVuY2VEYXRlLm1vbnRoIC0gMSkgLyAzKTtcbiAgICBjb25zdCBzdGFydE9mUXVhcnRlciA9IHJlZmVyZW5jZURhdGUuc3VidHJhY3Qoe1xuICAgICAgbW9udGhzOiByZWZlcmVuY2VEYXRlLm1vbnRoIC0gMSAtIHF1YXJ0ZXIgKiAzLFxuICAgICAgZGF5czogcmVmZXJlbmNlRGF0ZS5kYXkgLSAxLFxuICAgIH0pO1xuICAgIGNvbnN0IGVuZE9mUXVhcnRlciA9IHN0YXJ0T2ZRdWFydGVyLmFkZCh7IG1vbnRoczogMyB9KTtcbiAgICByZXR1cm4gbmV3IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwoc3RhcnRPZlF1YXJ0ZXIsIGVuZE9mUXVhcnRlcik7XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJldmlvdXNRdWFydGVyKFxuICAgIHJlZmVyZW5jZURhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEN1cnJlbnRRdWFydGVyKHJlZmVyZW5jZURhdGUpLnNoaWZ0TW9udGhzKC0zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDdXJyZW50WWVhcihcbiAgICByZWZlcmVuY2VEYXRlOiBUZW1wb3JhbC5QbGFpbkRhdGUgPSBUZW1wb3JhbFV0aWwuZ2V0RGF0ZVRvZGF5TG9jYWxpemVkKClcbiAgKTogVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbCB7XG4gICAgY29uc3Qgc3RhcnRPZlllYXIgPSByZWZlcmVuY2VEYXRlLnN1YnRyYWN0KHtcbiAgICAgIGRheXM6IHJlZmVyZW5jZURhdGUuZGF5T2ZZZWFyIC0gMSxcbiAgICB9KTtcbiAgICBjb25zdCBlbmRPZlllYXIgPSBzdGFydE9mWWVhci5hZGQoeyB5ZWFyczogMSB9KTtcbiAgICByZXR1cm4gbmV3IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwoc3RhcnRPZlllYXIsIGVuZE9mWWVhcik7XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJldmlvdXNZZWFyKFxuICAgIHJlZmVyZW5jZURhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEN1cnJlbnRZZWFyKHJlZmVyZW5jZURhdGUpLnNoaWZ0WWVhcnMoLTEpO1xuICB9XG5cbiAgc3RhdGljIGdldE5leHRZZWFyKFxuICAgIHJlZmVyZW5jZURhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEN1cnJlbnRZZWFyKHJlZmVyZW5jZURhdGUpLnNoaWZ0WWVhcnMoMSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TGFzdDM2NURheXMoXG4gICAgcmVmZXJlbmNlRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlID0gVGVtcG9yYWxVdGlsLmdldERhdGVUb2RheUxvY2FsaXplZCgpXG4gICk6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgIHJldHVybiBuZXcgVGVtcG9yYWxQbGFpbkRhdGVJbnRlcnZhbChcbiAgICAgIHJlZmVyZW5jZURhdGUuc3VidHJhY3QoeyBkYXlzOiAzNjUgfSksXG4gICAgICByZWZlcmVuY2VEYXRlXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMYXN0OTBEYXlzKFxuICAgIHJlZmVyZW5jZURhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHtcbiAgICByZXR1cm4gbmV3IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwoXG4gICAgICByZWZlcmVuY2VEYXRlLnN1YnRyYWN0KHsgZGF5czogOTAgfSksXG4gICAgICByZWZlcmVuY2VEYXRlXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcmV2aW91c01vbnRoKFxuICAgIHJlZmVyZW5jZURhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEN1cnJlbnRNb250aChyZWZlcmVuY2VEYXRlKS5zaGlmdE1vbnRocygtMSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TmV4dE1vbnRoKFxuICAgIHJlZmVyZW5jZURhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXREYXRlVG9kYXlMb2NhbGl6ZWQoKVxuICApOiBUZW1wb3JhbFBsYWluRGF0ZUludGVydmFsIHtcbiAgICByZXR1cm4gVGVtcG9yYWxVdGlsLmdldEN1cnJlbnRNb250aChyZWZlcmVuY2VEYXRlKS5zaGlmdE1vbnRocygxKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcmV2aW91c1dlZWsoXG4gICAgcmVmZXJlbmNlRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlID0gVGVtcG9yYWxVdGlsLmdldERhdGVUb2RheUxvY2FsaXplZCgpXG4gICk6IFRlbXBvcmFsUGxhaW5EYXRlSW50ZXJ2YWwge1xuICAgIHJldHVybiBUZW1wb3JhbFV0aWwuZ2V0Q3VycmVudFdlZWsocmVmZXJlbmNlRGF0ZSkuc2hpZnREYXlzKC03KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREYXRlVG9kYXlMb2NhbGl6ZWQoKTogVGVtcG9yYWwuUGxhaW5EYXRlIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUZW1wb3JhbExvY2FsaXplZERhdGVGcm9tVGltZXN0YW1wKERhdGUubm93KCkpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRlbXBvcmFsTG9jYWxpemVkRGF0ZUZyb21UaW1lc3RhbXAoXG4gICAgdGltZXN0YW1wOiBudW1iZXJcbiAgKTogVGVtcG9yYWwuUGxhaW5EYXRlIHtcbiAgICBjb25zdCBpbnN0YW50ID0gVGVtcG9yYWwuSW5zdGFudC5mcm9tRXBvY2hNaWxsaXNlY29uZHModGltZXN0YW1wKTtcbiAgICBjb25zdCBkYXRlVGltZUlzbyA9IGluc3RhbnQudG9ab25lZERhdGVUaW1lSVNPKFRlbXBvcmFsLk5vdy50aW1lWm9uZUlkKCkpO1xuICAgIGNvbnN0IGRhdGUgPSBUZW1wb3JhbC5QbGFpbkRhdGUuZnJvbShkYXRlVGltZUlzbyk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBzdGF0aWMgZ2V0SHRtbERhdGVTdHJpbmcoXG4gICAgZGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlIHwgVGVtcG9yYWwuUGxhaW5EYXRlVGltZVxuICApOiBzdHJpbmcge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgZGF0ZS55ZWFyICtcbiAgICAgICctJyArXG4gICAgICBkYXRlLm1vbnRoLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAnLScgK1xuICAgICAgZGF0ZS5kYXkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQbGFpbkRhdGVGcm9tSHRtbERhdGVTdHJpbmcoXG4gICAgZGF0ZVN0cmluZzogc3RyaW5nXG4gICk6IFRlbXBvcmFsLlBsYWluRGF0ZSB7XG4gICAgaWYgKCFkYXRlU3RyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZGF0ZUFyciA9IGRhdGVTdHJpbmcuc3BsaXQoJy0nKTtcbiAgICBpZiAoZGF0ZUFyci5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gVGVtcG9yYWwuUGxhaW5EYXRlLmZyb20oe1xuICAgICAgeWVhcjogcGFyc2VJbnQoZGF0ZUFyclswXSksXG4gICAgICBtb250aDogcGFyc2VJbnQoZGF0ZUFyclsxXSksXG4gICAgICBkYXk6IHBhcnNlSW50KGRhdGVBcnJbMl0pLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldFBsYWluVGltZUZyb21IdG1sVGltZVN0cmluZyhcbiAgICB0aW1lU3RyaW5nOiBzdHJpbmdcbiAgKTogVGVtcG9yYWwuUGxhaW5UaW1lIHtcbiAgICBpZiAoIXRpbWVTdHJpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0aW1lQXJyID0gdGltZVN0cmluZy5zcGxpdCgnOicpO1xuICAgIGlmICh0aW1lQXJyLmxlbmd0aCAhPT0gMiAmJiB0aW1lQXJyLmxlbmd0aCAhPT0gMykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYoIHRpbWVBcnIubGVuZ3RoID09PSAyICkge1xuICAgICAgcmV0dXJuIFRlbXBvcmFsLlBsYWluVGltZS5mcm9tKHtcbiAgICAgICAgaG91cjogcGFyc2VJbnQodGltZUFyclswXSksXG4gICAgICAgIG1pbnV0ZTogcGFyc2VJbnQodGltZUFyclsxXSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gVGVtcG9yYWwuUGxhaW5UaW1lLmZyb20oe1xuICAgICAgaG91cjogcGFyc2VJbnQodGltZUFyclswXSksXG4gICAgICBtaW51dGU6IHBhcnNlSW50KHRpbWVBcnJbMV0pLFxuICAgICAgc2Vjb25kOiBwYXJzZUludCh0aW1lQXJyWzJdKSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -65,7 +65,7 @@ export class ErrorUtil {
|
|
|
65
65
|
if (errorDetail.message) {
|
|
66
66
|
detail += errorDetail.message;
|
|
67
67
|
}
|
|
68
|
-
title =
|
|
68
|
+
title = `${errorDetail?.error ?? 'Error'}: ${errorDetail?.type ?? 'Unknown Exception'}`;
|
|
69
69
|
return {
|
|
70
70
|
title: title,
|
|
71
71
|
detail: detail,
|
|
@@ -91,4 +91,4 @@ export class ErrorUtil {
|
|
|
91
91
|
return error;
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZXJyb3JzL2Vycm9yLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR25ELE1BQU0sT0FBTyxTQUFTO0lBRXBCOzs7O2dGQUk0RTthQUVwRCxXQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV0RTs7OztnRkFJNEU7SUFFckUsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEtBQVU7UUFDM0MsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDbEMsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUMsQ0FBQztRQUMxRSxDQUFDO2FBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxPQUFPLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sRUFBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQztRQUNwRixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVwRSxNQUFNLENBQUMsMEJBQTBCLENBQUMsUUFBMkI7UUFDbkUsSUFBSSxNQUF1QixDQUFDO1FBQzVCLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLE1BQU0sR0FBRyxTQUFTLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE1BQU0sR0FBRztnQkFDUCxLQUFLLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQzFCLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2FBQ3JDLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxLQUFzQjtRQUVoRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTztnQkFDTCxLQUFLLEVBQUUsT0FBTztnQkFDZCxNQUFNLEVBQUUsS0FBSztnQkFDYixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1FBQ0osQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDakIsTUFBTSxXQUFXLEdBQUcsS0FBNkIsQ0FBQztZQUVsRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFFaEIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQyxDQUFDO1lBRUQsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ2hDLENBQUM7WUFFRCxLQUFLLEdBQUcsR0FBRyxXQUFXLEVBQUUsS0FBSyxJQUFJLE9BQU8sS0FBSyxXQUFXLEVBQUUsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFFeEYsT0FBTztnQkFDTCxLQUFLLEVBQUUsS0FBSztnQkFDWixNQUFNLEVBQUUsTUFBTTtnQkFDZCxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7YUFDbEMsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBc0I7UUFDaEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixJQUFLLEtBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQztvQkFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx5REFBeUQsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDcEYsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJU3RhbmRhcmRFcnJvckRldGFpbH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycy9zdGFuZGFyZC1lcnJvci1kZXRhaWwnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0V4Y2VwdGlvbkRldGFpbH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycy9leGNlcHRpb24tZGV0YWlsJztcblxuZXhwb3J0IGNsYXNzIEVycm9yVXRpbCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Vycm9yVXRpbCcpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzdGF0aWMgYnVpbGRFeGNlcHRpb25EZXRhaWwoZXJyb3I6IGFueSk6IEV4Y2VwdGlvbkRldGFpbCB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBFcnJvclV0aWwuaHR0cEVycm9yVG9FeGNlcHRpb25EZXRhaWwoZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIHt0aXRsZTogJ0Vycm9yJywgZGV0YWlsOiBlcnJvci5tZXNzYWdlLCBzdGFja3RyYWNlOiBlcnJvci5zdGFja307XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gRXJyb3JVdGlsLnN0cmluZ09yT2JqVG9FeGNlcHRpb25EZXRhaWwoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci50cmFjZSgnVW5rbm93biBFcnJvciBmb3JtYXQuIFN0cmluZ2lmeWluZyBlcnJvciAuLi4nLCBlcnJvcik7XG4gICAgICByZXR1cm4ge3RpdGxlOiAnVW5rbm93biBFcnJvcicsIGRldGFpbDogZXJyb3IsIHN0YWNrdHJhY2U6IEpTT04uc3RyaW5naWZ5KGVycm9yKX07XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBzdGF0aWMgaHR0cEVycm9yVG9FeGNlcHRpb25EZXRhaWwocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogRXhjZXB0aW9uRGV0YWlsIHtcbiAgICBsZXQgZGV0YWlsOiBFeGNlcHRpb25EZXRhaWw7XG4gICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICBkZXRhaWwgPSBFcnJvclV0aWwuc3RyaW5nT3JPYmpUb0V4Y2VwdGlvbkRldGFpbChyZXNwb25zZS5lcnJvcik7XG4gICAgfVxuICAgIGlmICghZGV0YWlsIHx8ICFkZXRhaWwuZGV0YWlsKSB7XG4gICAgICBkZXRhaWwgPSB7XG4gICAgICAgIHRpdGxlOiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBkZXRhaWw6IHJlc3BvbnNlLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrdHJhY2U6IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGRldGFpbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHN0cmluZ09yT2JqVG9FeGNlcHRpb25EZXRhaWwodmFsdWU6IHN0cmluZyB8IG9iamVjdCk6IEV4Y2VwdGlvbkRldGFpbCB7XG5cbiAgICBjb25zdCBlcnJvciA9IEVycm9yVXRpbC50cnlQYXJzZUpzb24odmFsdWUpO1xuXG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiAnRXJyb3InLFxuICAgICAgICBkZXRhaWw6IGVycm9yLFxuICAgICAgICBzdGFja3RyYWNlOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yRGV0YWlsID0gZXJyb3IgYXMgSVN0YW5kYXJkRXJyb3JEZXRhaWw7XG5cbiAgICAgIGxldCB0aXRsZSA9ICcnO1xuICAgICAgbGV0IGRldGFpbCA9ICcnO1xuXG4gICAgICBpZiAoZXJyb3JEZXRhaWwudHlwZSkge1xuICAgICAgICBkZXRhaWwgKz0gZXJyb3JEZXRhaWwudHlwZSArICc6ICc7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvckRldGFpbC5tZXNzYWdlKSB7XG4gICAgICAgIGRldGFpbCArPSBlcnJvckRldGFpbC5tZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICB0aXRsZSA9IGAke2Vycm9yRGV0YWlsPy5lcnJvciA/PyAnRXJyb3InfTogJHtlcnJvckRldGFpbD8udHlwZSA/PyAnVW5rbm93biBFeGNlcHRpb24nfWA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgZGV0YWlsOiBkZXRhaWwsXG4gICAgICAgIHN0YWNrdHJhY2U6IEpTT04uc3RyaW5naWZ5KGVycm9yKVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdHJ5UGFyc2VKc29uKGVycm9yOiBvYmplY3QgfCBzdHJpbmcpOiBvYmplY3QgfCBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIHN0cmluZykuc3RhcnRzV2l0aCgneycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoJ0Vycm9yIHN0cmluZyBzZWVtcyB0byBiZSBKU09OLiBUcnlpbmcgdG8gcGFyc2UgSlNPTiAuLi4nLCBlcnJvcik7XG4gICAgICAgICAgZXJyb3IgPSBKU09OLnBhcnNlKGVycm9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKCdGYWlsZWQgdG8gcGFyc2UgZXJyb3Igc3RyaW5nIHRvIEpTT04nLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuXG59XG4iXX0=
|
|
@@ -41,6 +41,7 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
|
|
|
41
41
|
**************************************************************************/
|
|
42
42
|
this.logger = LoggerFactory.getLogger(this.constructor.name);
|
|
43
43
|
this._mode = 'date-time-range';
|
|
44
|
+
this._isDefaultDatePickerDisabled = false;
|
|
44
45
|
this.zone = ZoneId.systemDefault();
|
|
45
46
|
this.controlType = this._mode;
|
|
46
47
|
this.interval$ = this.value$.pipe(map(value => coerceInterval(value)));
|
|
@@ -69,6 +70,12 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
|
|
|
69
70
|
get mode() {
|
|
70
71
|
return this._mode;
|
|
71
72
|
}
|
|
73
|
+
set isDefaultDatePickerDisabled(hide) {
|
|
74
|
+
this._isDefaultDatePickerDisabled = coerceBooleanProperty(hide);
|
|
75
|
+
}
|
|
76
|
+
get isDefaultDatePickerDisabled() {
|
|
77
|
+
return this._isDefaultDatePickerDisabled;
|
|
78
|
+
}
|
|
72
79
|
get isoValueChange() {
|
|
73
80
|
return this.valueChange.pipe(map(value => coerceIntervalIsoStr(value)));
|
|
74
81
|
}
|
|
@@ -179,9 +186,9 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
|
|
|
179
186
|
}
|
|
180
187
|
}
|
|
181
188
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ElderIntervalInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.FocusMonitor }, { token: i2.TranslateService }, { token: i3.NgControl, optional: true, self: true }, { token: i4.DateAdapter }, { token: MAT_DATE_LOCALE }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
182
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ElderIntervalInputComponent, isStandalone: true, selector: "elder-interval-input", inputs: { zone: "zone", valueAsIsoStr: "valueAsIsoStr", mode: "mode", isoValue: "isoValue" }, outputs: { isoValueChange: "isoValueChange" }, providers: [
|
|
189
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ElderIntervalInputComponent, isStandalone: true, selector: "elder-interval-input", inputs: { zone: "zone", valueAsIsoStr: "valueAsIsoStr", mode: "mode", isDefaultDatePickerDisabled: "isDefaultDatePickerDisabled", isoValue: "isoValue" }, outputs: { isoValueChange: "isoValueChange" }, providers: [
|
|
183
190
|
{ provide: MatFormFieldControl, useExisting: ElderIntervalInputComponent },
|
|
184
|
-
], usesInheritance: true, ngImport: i0, template: "@switch (mode) {\n\n @case ('date-time-range') {\n <div class=\"layout-row\">\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n <span class=\"mat-date-range-input-separator flex-none\">\u2013</span>\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.end\"\n (valueUpdated)=\"onEndChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-date-time-input>\n </div>\n }\n @case ('day-time-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n\n <!-- [name]=\"name + '-day-start'\" -->\n <elder-date-time-input\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onDayTimeStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n\n <!-- [name]=\"name + '-day-end'\" -->\n <elder-local-time-input\n [value]=\"endTime$ | async\"\n (valueUpdated)=\"onDayTimeEndTimeChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-local-time-input>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n
|
|
191
|
+
], usesInheritance: true, ngImport: i0, template: "@switch (mode) {\n\n @case ('date-time-range') {\n <div class=\"layout-row\">\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n <span class=\"mat-date-range-input-separator flex-none\">\u2013</span>\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.end\"\n (valueUpdated)=\"onEndChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-date-time-input>\n </div>\n }\n @case ('day-time-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n\n <!-- [name]=\"name + '-day-start'\" -->\n <elder-date-time-input\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onDayTimeStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n\n <!-- [name]=\"name + '-day-end'\" -->\n <elder-local-time-input\n [value]=\"endTime$ | async\"\n (valueUpdated)=\"onDayTimeEndTimeChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-local-time-input>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n <mat-date-range-input\n class=\"mdc-text-field__input\"\n [rangePicker]=\"picker\"\n [disabled]=\"!!disabled\"\n >\n <input matStartDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"startDate$ | async\" name=\"date-range.start\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur'}\"\n (ngModelChange)=\"onStartDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n >\n <input matEndDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"endDate$ | async\" name=\"date-range.end\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur'}\"\n (ngModelChange)=\"onEndDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n >\n </mat-date-range-input>\n\n @if(!isDefaultDatePickerDisabled){\n <mat-datepicker-toggle class=\"elder-control-icon-button\"\n [disabled]=\"isLocked\"\n [for]=\"picker\">\n <mat-icon matDatepickerToggleIcon>calendar_month</mat-icon>\n </mat-datepicker-toggle>\n }\n <mat-date-range-picker #picker></mat-date-range-picker>\n </div>\n }\n\n @case ('single-day') {\n <div class=\"layout-row elder-flex-control\">\n\n <!-- [name]=\"name\" -->\n <elder-local-date-input class=\"flex\" center\n [value]=\"startLocalDate$ | async\"\n (valueUpdated)=\"onSingleDayDateChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '')\"\n ></elder-local-date-input>\n </div>\n }\n}\n\n\n\n\n\n\n", styles: [".elder-flex-interval-control{flex:1 1 auto;overflow:hidden}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ElderDateTimeInputComponent, selector: "elder-date-time-input", inputs: ["center", "isoValue"], outputs: ["isoValueChange"] }, { kind: "component", type: ElderLocalTimeInputComponent, selector: "elder-local-time-input", inputs: ["isoValue"], outputs: ["isoValueChange"] }, { kind: "component", type: MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: ElderLocalDateInputComponent, selector: "elder-local-date-input", inputs: ["zone", "autoDatePicker", "arrows", "today", "center", "datePickerTouchUi", "allowNull", "datePickerEnabled", "isoValue", "dateValue", "isoDateValue"], outputs: ["blurred", "valueUpdatedBlur", "isoValueChange", "dateValueChange", "isoDateValueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
185
192
|
}
|
|
186
193
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ElderIntervalInputComponent, decorators: [{
|
|
187
194
|
type: Component,
|
|
@@ -191,7 +198,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
191
198
|
ElderDateTimeInputComponent, ElderLocalTimeInputComponent,
|
|
192
199
|
MatDateRangeInput, MatStartDate,
|
|
193
200
|
MatEndDate, MatDatepickerToggle, MatIcon, MatDatepickerToggleIcon, MatDateRangePicker,
|
|
194
|
-
ElderLocalDateInputComponent], template: "@switch (mode) {\n\n @case ('date-time-range') {\n <div class=\"layout-row\">\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n <span class=\"mat-date-range-input-separator flex-none\">\u2013</span>\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.end\"\n (valueUpdated)=\"onEndChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-date-time-input>\n </div>\n }\n @case ('day-time-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n\n <!-- [name]=\"name + '-day-start'\" -->\n <elder-date-time-input\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onDayTimeStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n\n <!-- [name]=\"name + '-day-end'\" -->\n <elder-local-time-input\n [value]=\"endTime$ | async\"\n (valueUpdated)=\"onDayTimeEndTimeChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-local-time-input>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n
|
|
201
|
+
ElderLocalDateInputComponent], template: "@switch (mode) {\n\n @case ('date-time-range') {\n <div class=\"layout-row\">\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n <span class=\"mat-date-range-input-separator flex-none\">\u2013</span>\n <elder-date-time-input class=\"flex\" center\n [value]=\"(interval$ | async)?.end\"\n (valueUpdated)=\"onEndChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-date-time-input>\n </div>\n }\n @case ('day-time-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n\n <!-- [name]=\"name + '-day-start'\" -->\n <elder-date-time-input\n [value]=\"(interval$ | async)?.start\"\n (valueUpdated)=\"onDayTimeStartChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.from' | translate)\"\n ></elder-date-time-input>\n\n <!-- [name]=\"name + '-day-end'\" -->\n <elder-local-time-input\n [value]=\"endTime$ | async\"\n (valueUpdated)=\"onDayTimeEndTimeChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '') + ' ' + ('interval.to' | translate)\"\n ></elder-local-time-input>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"layout-row gap-xs elder-flex-interval-control\">\n <mat-date-range-input\n class=\"mdc-text-field__input\"\n [rangePicker]=\"picker\"\n [disabled]=\"!!disabled\"\n >\n <input matStartDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"startDate$ | async\" name=\"date-range.start\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur'}\"\n (ngModelChange)=\"onStartDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n >\n <input matEndDate\n [placeholder]=\"dateformat\"\n [ngModel]=\"endDate$ | async\" name=\"date-range.end\"\n [ngModelOptions]=\"{ standalone: true, updateOn: 'blur'}\"\n (ngModelChange)=\"onEndDateChanged($event)\"\n [readonly]=\"readonly\"\n [disabled]=\"!!disabled\"\n >\n </mat-date-range-input>\n\n @if(!isDefaultDatePickerDisabled){\n <mat-datepicker-toggle class=\"elder-control-icon-button\"\n [disabled]=\"isLocked\"\n [for]=\"picker\">\n <mat-icon matDatepickerToggleIcon>calendar_month</mat-icon>\n </mat-datepicker-toggle>\n }\n <mat-date-range-picker #picker></mat-date-range-picker>\n </div>\n }\n\n @case ('single-day') {\n <div class=\"layout-row elder-flex-control\">\n\n <!-- [name]=\"name\" -->\n <elder-local-date-input class=\"flex\" center\n [value]=\"startLocalDate$ | async\"\n (valueUpdated)=\"onSingleDayDateChanged($event)\"\n [required]=\"required\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [placeholder]=\"(placeholder || '')\"\n ></elder-local-date-input>\n </div>\n }\n}\n\n\n\n\n\n\n", styles: [".elder-flex-interval-control{flex:1 1 auto;overflow:hidden}\n"] }]
|
|
195
202
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.FocusMonitor }, { type: i2.TranslateService }, { type: i3.NgControl, decorators: [{
|
|
196
203
|
type: Optional
|
|
197
204
|
}, {
|
|
@@ -205,9 +212,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
205
212
|
type: Input
|
|
206
213
|
}], mode: [{
|
|
207
214
|
type: Input
|
|
215
|
+
}], isDefaultDatePickerDisabled: [{
|
|
216
|
+
type: Input
|
|
208
217
|
}], isoValueChange: [{
|
|
209
218
|
type: Output
|
|
210
219
|
}], isoValue: [{
|
|
211
220
|
type: Input
|
|
212
221
|
}] } });
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItaW50ZXJ2YWwtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy90aW1lL2VsZGVyLWludGVydmFsLWlucHV0L2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvdGltZS9lbGRlci1pbnRlcnZhbC1pbnB1dC9lbGRlci1pbnRlcnZhbC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFpQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFFeEcsT0FBTyxFQUFtQixlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQVksV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENB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QUFtQixFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBQztTQUN6RSxpREMzRUgsODlIQXVHQSxrSEQxQlksU0FBUyw2Q0FBRSxlQUFlLDJGQUFFLFdBQVcsK21CQUMvQywyQkFBMkIsK0hBQUUsNEJBQTRCLHNIQUN6RCxpQkFBaUIsZ09BQUUsWUFBWSxzR0FDL0IsVUFBVSxvR0FBRSxtQkFBbUIsNktBQUUsT0FBTywySUFBRSx1QkFBdUIsc0VBQUUsa0JBQWtCLG9HQUNyRiw0QkFBNEI7OzJGQUVuQiwyQkFBMkI7a0JBZnZDLFNBQVM7K0JBQ0Usc0JBQXNCLG1CQUdmLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyw2QkFBNkIsRUFBQztxQkFDekUsY0FDVyxJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVc7d0JBQy9DLDJCQUEyQixFQUFFLDRCQUE0Qjt3QkFDekQsaUJBQWlCLEVBQUUsWUFBWTt3QkFDL0IsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0I7d0JBQ3JGLDRCQUE0QixDQUFDOzswQkF5QzVCLFFBQVE7OzBCQUFJLElBQUk7OzBCQUVoQixNQUFNOzJCQUFDLGVBQWU7eUNBNUJsQixJQUFJO3NCQURWLEtBQUs7Z0JBc0VLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBVUssSUFBSTtzQkFEZCxLQUFLO2dCQVdLLGNBQWM7c0JBRHhCLE1BQU07Z0JBUUksUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJbnRlcnZhbCwgSXNvSW50ZXJ2YWxTdHJ9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90aW1lL2ludGVydmFsJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5zdGFudCwgTG9jYWxEYXRlLCBMb2NhbFRpbWUsIFpvbmVJZH0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5pbXBvcnQge0VsZGVyRm9ybUZpZWxkQ29udHJvbEJhc2V9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9mb3Jtcy9lbGRlci1mb3JtLWZpZWxkLWNvbnRyb2wtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtGb2N1c01vbml0b3J9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZSwgVHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sLCBGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRDb250cm9sfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7VGltZVV0aWx9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90aW1lL3RpbWUtdXRpbCc7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9MT0NBTEV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtMb2NhbGVEYXRlRm9ybWF0c30gZnJvbSAnLi4vZGF0ZS1mb3JtYXRzL2xvY2FsZS1kYXRlLWZvcm1hdHMnO1xuaW1wb3J0IHtFbGRlckxvY2FsRGF0ZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9lbGRlci1sb2NhbC1kYXRlLWlucHV0L2VsZGVyLWxvY2FsLWRhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7TWF0SWNvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge1xuICBNYXREYXRlUmFuZ2VJbnB1dCxcbiAgTWF0U3RhcnREYXRlLFxuICBNYXRFbmREYXRlLFxuICBNYXREYXRlcGlja2VyVG9nZ2xlLFxuICBNYXREYXRlcGlja2VyVG9nZ2xlSWNvbixcbiAgTWF0RGF0ZVJhbmdlUGlja2VyXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtFbGRlckxvY2FsVGltZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9lbGRlci1sb2NhbC10aW1lLWlucHV0L2VsZGVyLWxvY2FsLXRpbWUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7RWxkZXJEYXRlVGltZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9lbGRlci1kYXRlLXRpbWUtaW5wdXQvZWxkZXItZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQge0FzeW5jUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge2NvZXJjZUludGVydmFsLCBjb2VyY2VJbnRlcnZhbElzb1N0cn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3RpbWUvaW50ZXJ2YWwtY29lcmNlJztcblxuZXhwb3J0IHR5cGUgSW50ZXJ2YWxJbnB1dE1vZGUgPVxuXG4vKipcbiAqIFN1cHBvcnRzIHRoZSBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgKGZ1bGwpIGRheTpcbiAqIDEyLjEyLjIwMjBcbiAqL1xuICAnc2luZ2xlLWRheScgfFxuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBhIHRpbWUgaW50ZXJ2YWwgaW4gYSBkYXk6XG4gICAqIDEyLjEyLjIwMjAgMTM6MDAgLSAxODowMFxuICAgKi9cbiAgJ2RheS10aW1lLXJhbmdlJyB8XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRzIGEgZGF0ZSBpbnRlcnZhbCB3aXRob3V0IHRpbWVcbiAgICogMTIuMTIuMjAyMCAtIDIyLjA2LjIwMjFcbiAgICovXG4gICdkYXRlLXJhbmdlJyB8XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRzIGEgZGF0ZS10aW1lIHRvIGRhdGUtdGltZSBpbnRlcnZhbFxuICAgKiAxMi4xMi4yMDIwIDg6MDAgLSAyMi4wNi4yMDIxIDE3OjAwXG4gICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgYXMgaXQgc3VwcG9ydHMgdGhlIG1vc3QgZGV0YWlsZWQgaW5wdXQuXG4gICAqL1xuICAnZGF0ZS10aW1lLXJhbmdlJ1xuICA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLWludGVydmFsLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxkZXItaW50ZXJ2YWwtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRWxkZXJJbnRlcnZhbElucHV0Q29tcG9uZW50fSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3Jtc01vZHVsZSxcbiAgICBFbGRlckRhdGVUaW1lSW5wdXRDb21wb25lbnQsIEVsZGVyTG9jYWxUaW1lSW5wdXRDb21wb25lbnQsXG4gICAgTWF0RGF0ZVJhbmdlSW5wdXQsIE1hdFN0YXJ0RGF0ZSxcbiAgICBNYXRFbmREYXRlLCBNYXREYXRlcGlja2VyVG9nZ2xlLCBNYXRJY29uLCBNYXREYXRlcGlja2VyVG9nZ2xlSWNvbiwgTWF0RGF0ZVJhbmdlUGlja2VyLFxuICAgIEVsZGVyTG9jYWxEYXRlSW5wdXRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVySW50ZXJ2YWxJbnB1dENvbXBvbmVudCBleHRlbmRzIEVsZGVyRm9ybUZpZWxkQ29udHJvbEJhc2U8SW50ZXJ2YWwgfCBJc29JbnRlcnZhbFN0cj4ge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9tb2RlOiBJbnRlcnZhbElucHV0TW9kZSA9ICdkYXRlLXRpbWUtcmFuZ2UnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b25lID0gWm9uZUlkLnN5c3RlbURlZmF1bHQoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW5kVGltZSQ6IE9ic2VydmFibGU8TG9jYWxUaW1lPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhcnRMb2NhbERhdGUkOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT47XG4gIHB1YmxpYyByZWFkb25seSBlbmRMb2NhbERhdGUkOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT47XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXJ0RGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT47XG4gIHB1YmxpYyByZWFkb25seSBlbmREYXRlJDogT2JzZXJ2YWJsZTxEYXRlPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGF0ZWZvcm1hdDogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcnZhbCQ6IE9ic2VydmFibGU8SW50ZXJ2YWw+O1xuICBwcml2YXRlIF92YWx1ZUFzSXNvU3RyOiBib29sZWFuO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgem9uZTogTmdab25lLFxuICAgIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgY3VzdG9tRGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+LFxuICAgIEBJbmplY3QoTUFUX0RBVEVfTE9DQUxFKSBtYXREYXRlTG9jYWxlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBob3N0UmVmLFxuICAgICAgJ2ludGVydmFsLWlucHV0JywgLy8gPT4gbWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtaW50ZXJ2YWwtaW5wdXRcbiAgICAgIGZvY3VzTW9uaXRvcixcbiAgICAgIHRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICBuZ0NvbnRyb2xcbiAgICApO1xuXG4gICAgdGhpcy5jb250cm9sVHlwZSA9IHRoaXMuX21vZGU7XG4gICAgdGhpcy5pbnRlcnZhbCQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgbWFwKHZhbHVlID0+IGNvZXJjZUludGVydmFsKHZhbHVlKSlcbiAgICApO1xuXG4gICAgdGhpcy5lbmRUaW1lJCA9IHRoaXMuaW50ZXJ2YWwkLnBpcGUoXG4gICAgICBtYXAoaW50ZXJ2YWwgPT4gaW50ZXJ2YWw/LmVuZCA/IExvY2FsVGltZS5mcm9tKGludGVydmFsLmVuZC5hdFpvbmUodGhpcy56b25lKSkgOiBudWxsKVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXJ0TG9jYWxEYXRlJCA9IHRoaXMuaW50ZXJ2YWwkLnBpcGUoXG4gICAgICBtYXAoaW50ZXJ2YWwgPT4gaW50ZXJ2YWw/LnN0YXJ0ID8gTG9jYWxEYXRlLmZyb20oaW50ZXJ2YWwuc3RhcnQuYXRab25lKHRoaXMuem9uZSkpIDogbnVsbClcbiAgICApO1xuXG4gICAgdGhpcy5lbmRMb2NhbERhdGUkID0gdGhpcy5pbnRlcnZhbCQucGlwZShcbiAgICAgIG1hcChpbnRlcnZhbCA9PiBpbnRlcnZhbD8uZW5kID8gTG9jYWxEYXRlLmZyb20oaW50ZXJ2YWwuZW5kLmF0Wm9uZSh0aGlzLnpvbmUpKSA6IG51bGwpXG4gICAgKTtcblxuICAgIHRoaXMuc3RhcnREYXRlJCA9IHRoaXMubWFwSWdub3JlRXJyb3JPYnNlcnZhYmxlKHRoaXMuc3RhcnRMb2NhbERhdGUkLCAoZDogTG9jYWxEYXRlKSA9PiBUaW1lVXRpbC5sb2NhbERhdGVUb0RhdGUoZCkpO1xuICAgIHRoaXMuZW5kRGF0ZSQgPSB0aGlzLm1hcElnbm9yZUVycm9yT2JzZXJ2YWJsZSh0aGlzLmVuZExvY2FsRGF0ZSQsIChkOiBMb2NhbERhdGUpID0+IFRpbWVVdGlsLmxvY2FsRGF0ZVRvRGF0ZShkKSk7XG5cbiAgICB0aGlzLmRhdGVmb3JtYXQgPSBMb2NhbGVEYXRlRm9ybWF0cy5nZXRGb3JtYXRzT2ZMb2NhbGUobWF0RGF0ZUxvY2FsZSlbMF0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZUFzSXNvU3RyKGVuYWJsZWQ6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3ZhbHVlQXNJc29TdHIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoZW5hYmxlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlQXNJc29TdHIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlQXNJc29TdHI7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1vZGUobW9kZTogSW50ZXJ2YWxJbnB1dE1vZGUpIHtcbiAgICB0aGlzLl9tb2RlID0gbW9kZTtcbiAgICB0aGlzLmNvbnRyb2xUeXBlID0gbW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBJbnRlcnZhbElucHV0TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGU7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIGdldCBpc29WYWx1ZUNoYW5nZSgpOiBPYnNlcnZhYmxlPElzb0ludGVydmFsU3RyIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQ2hhbmdlLnBpcGUoXG4gICAgICBtYXAodmFsdWUgPT4gY29lcmNlSW50ZXJ2YWxJc29TdHIodmFsdWUpKVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzb1ZhbHVlKHZhbHVlOiBJc29JbnRlcnZhbFN0ciB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgPyB0aGlzLmNvZXJjZVZhbHVlKHZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVydmFsKCk6IEludGVydmFsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29lcmNlSW50ZXJ2YWwodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gIHB1YmxpYyBmb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIud2FybignZm9jdXMoKSBub3QgeWV0IHN1cHBvcnRlZCEnKTtcbiAgICAvLyB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5mb2N1cyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ2JsdXIoKSBub3QgeWV0IHN1cHBvcnRlZCEnKTtcbiAgICAvLyB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5ibHVyKCk7XG4gIH1cblxuICBwdWJsaWMgb25EYXlUaW1lU3RhcnRDaGFuZ2VkKHN0YXJ0OiBJbnN0YW50KSB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHRoaXMuaW5zdGFudEF0RW5kT2ZEYXkoc3RhcnQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRheVRpbWVFbmRUaW1lQ2hhbmdlZChlbmRUaW1lOiBMb2NhbFRpbWUpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuaW50ZXJ2YWwuc3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5pbnN0YW50V2l0aFRpbWUoc3RhcnQsIGVuZFRpbWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICAhZW5kLmlzQWZ0ZXIoc3RhcnQpID8gdGhpcy5pbnN0YW50QXRFbmRPZkRheShzdGFydCkgOiBlbmRcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uU3RhcnRDaGFuZ2VkKHN0YXJ0OiBJbnN0YW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwuZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVuZENoYW5nZWQoZW5kOiBJbnN0YW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgdGhpcy5pbnRlcnZhbC5zdGFydCxcbiAgICAgICAgZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0YXJ0RGF0ZUNoYW5nZWQodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMudG9Mb2NhbERhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHRoaXMubG9jYWxEYXRlVG9JbnN0YW50KGRhdGUpLFxuICAgICAgICB0aGlzLmludGVydmFsPy5lbmRcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRW5kRGF0ZUNoYW5nZWQodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMudG9Mb2NhbERhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHRoaXMuaW50ZXJ2YWw/LnN0YXJ0LFxuICAgICAgICB0aGlzLmxvY2FsRGF0ZVRvSW5zdGFudChkYXRlKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25TaW5nbGVEYXlEYXRlQ2hhbmdlZChkYXRlOiBMb2NhbERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvZXJjZWRWYWx1ZShcbiAgICAgIEludGVydmFsLm9mRGF5KGRhdGUsIHRoaXMuem9uZSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgdmFsdWU6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5jb2VyY2VWYWx1ZSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YW50QXRTdGFydE9mRGF5Tm93KCk6IEluc3RhbnQge1xuICAgIHJldHVybiBMb2NhbERhdGUubm93KCkuYXRTdGFydE9mRGF5KCkuYXRab25lKHRoaXMuem9uZSkudG9JbnN0YW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbnRBdEVuZE9mRGF5KGluc3RhbnQ6IEluc3RhbnQpOiBJbnN0YW50IHtcbiAgICByZXR1cm4gTG9jYWxEYXRlLm9mSW5zdGFudChpbnN0YW50KS5hdFN0YXJ0T2ZEYXkoKS5wbHVzRGF5cygxKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9jYWxEYXRlVG9JbnN0YW50KGRhdGU6IExvY2FsRGF0ZSk6IEluc3RhbnQgfCB1bmRlZmluZWQge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZS5hdFN0YXJ0T2ZEYXkoKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsdWVzRXF1YWxzKFxuICAgIGE6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsLFxuICAgIGI6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFJbnRlcnZhbCA9IGNvZXJjZUludGVydmFsKGEpO1xuICAgIGNvbnN0IGJJbnRlcnZhbCA9IGNvZXJjZUludGVydmFsKGIpO1xuICAgIHJldHVybiAoYUludGVydmFsICYmIGJJbnRlcnZhbClcbiAgICAgID8gYUludGVydmFsLmVxdWFscyhiSW50ZXJ2YWwpXG4gICAgICA6IGFJbnRlcnZhbCA9PT0gYkludGVydmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YW50V2l0aFRpbWUoaW5zdGFudDogSW5zdGFudCwgdGltZTogTG9jYWxUaW1lKTogSW5zdGFudCB7XG4gICAgcmV0dXJuIGluc3RhbnRcbiAgICAgIC5hdFpvbmUodGhpcy56b25lKVxuICAgICAgLndpdGhIb3VyKHRpbWUuaG91cigpKVxuICAgICAgLndpdGhNaW51dGUodGltZS5taW51dGUoKSlcbiAgICAgIC50b0luc3RhbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9Mb2NhbERhdGUodmFsdWU6IERhdGUpOiBMb2NhbERhdGUgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZhbHVlID8gVGltZVV0aWwuZGF0ZVRvTG9jYWxEYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gYXBwbHkgdmFsdWUgdG8gZGF0ZVZhbHVlOiAnICsgdmFsdWUsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcElnbm9yZUVycm9yT2JzZXJ2YWJsZTxUPihcbiAgICBkYXRlOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT4sXG4gICAgY29udmVyc2lvbkZuOiAoZDogTG9jYWxEYXRlKSA9PiBUXG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gZGF0ZS5waXBlKFxuICAgICAgbWFwKGxvY2FsRGF0ZSA9PiBsb2NhbERhdGUgPyBjb252ZXJzaW9uRm4obG9jYWxEYXRlKSA6IG51bGwpLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgbG9jYWwgZGF0ZSEnLCBlcnIpO1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvZXJjZVZhbHVlKFxuICAgIHZhbHVlOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbFxuICApOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lzb1N0cikge1xuICAgICAgcmV0dXJuIGNvZXJjZUludGVydmFsSXNvU3RyKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvZXJjZUludGVydmFsKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBzd2l0Y2ggKG1vZGUpIHtcblxuICBAY2FzZSAoJ2RhdGUtdGltZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvd1wiPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dCBjbGFzcz1cImZsZXhcIiBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIihpbnRlcnZhbCQgfCBhc3luYyk/LnN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvblN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvciBmbGV4LW5vbmVcIj7igJM8L3NwYW4+XG4gICAgICA8ZWxkZXItZGF0ZS10aW1lLWlucHV0IGNsYXNzPVwiZmxleFwiIGNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkVuZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIocGxhY2Vob2xkZXIgfHwgJycpICsgJyAnICsgKCdpbnRlcnZhbC50bycgfCB0cmFuc2xhdGUpXCJcbiAgICAgID48L2VsZGVyLWRhdGUtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuICBAY2FzZSAoJ2RheS10aW1lLXJhbmdlJykge1xuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcm93IGdhcC14cyBlbGRlci1mbGV4LWludGVydmFsLWNvbnRyb2xcIj5cblxuICAgICAgPCEtLSAgW25hbWVdPVwibmFtZSArICctZGF5LXN0YXJ0J1wiIC0tPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dFxuICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uc3RhcnRcIlxuICAgICAgICAodmFsdWVVcGRhdGVkKT1cIm9uRGF5VGltZVN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG5cbiAgICAgIDwhLS0gW25hbWVdPVwibmFtZSArICctZGF5LWVuZCdcIiAtLT5cbiAgICAgIDxlbGRlci1sb2NhbC10aW1lLWlucHV0XG4gICAgICAgIFt2YWx1ZV09XCJlbmRUaW1lJCB8IGFzeW5jXCJcbiAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkRheVRpbWVFbmRUaW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLnRvJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgPjwvZWxkZXItbG9jYWwtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBjYXNlICgnZGF0ZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBnYXAteHMgZWxkZXItZmxleC1pbnRlcnZhbC1jb250cm9sXCI+XG5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgICBjbGFzcz1cIm1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAgIFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0YXJ0RGF0ZSQgfCBhc3luY1wiIG5hbWU9XCJkYXRlLXJhbmdlLnN0YXJ0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUsIHVwZGF0ZU9uOiAnYmx1cid9XCJcbiAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RhcnREYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGVcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImVuZERhdGUkIHwgYXN5bmNcIiBuYW1lPVwiZGF0ZS1yYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdibHVyJ31cIlxuICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FbmREYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIGNsYXNzPVwiZWxkZXItY29udHJvbC1pY29uLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwicGlja2VyXCI+XG4gICAgICAgIDxtYXQtaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbj5jYWxlbmRhcl9tb250aDwvbWF0LWljb24+XG4gICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBjYXNlICgnc2luZ2xlLWRheScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBlbGRlci1mbGV4LWNvbnRyb2xcIj5cblxuICAgICAgPCEtLSBbbmFtZV09XCJuYW1lXCIgLS0+XG4gICAgICA8ZWxkZXItbG9jYWwtZGF0ZS1pbnB1dCBjbGFzcz1cImZsZXhcIiBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydExvY2FsRGF0ZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVVcGRhdGVkKT1cIm9uU2luZ2xlRGF5RGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKHBsYWNlaG9sZGVyIHx8ICcnKVwiXG4gICAgICA+PC9lbGRlci1sb2NhbC1kYXRlLWlucHV0PlxuICAgIDwvZGl2PlxuICB9XG59XG5cblxuXG5cblxuXG4iXX0=
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItaW50ZXJ2YWwtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy90aW1lL2VsZGVyLWludGVydmFsLWlucHV0L2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvdGltZS9lbGRlci1pbnRlcnZhbC1pbnB1dC9lbGRlci1pbnRlcnZhbC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFpQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFFeEcsT0FBTyxFQUFtQixlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQVksV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENB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dGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7SW50ZXJ2YWwsIElzb0ludGVydmFsU3RyfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdGltZS9pbnRlcnZhbCc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0luc3RhbnQsIExvY2FsRGF0ZSwgTG9jYWxUaW1lLCBab25lSWR9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHtFbGRlckZvcm1GaWVsZENvbnRyb2xCYXNlfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZm9ybXMvZWxkZXItZm9ybS1maWVsZC1jb250cm9sLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7Rm9jdXNNb25pdG9yfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge05nQ29udHJvbCwgRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge1RpbWVVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdGltZS90aW1lLXV0aWwnO1xuaW1wb3J0IHtEYXRlQWRhcHRlciwgTUFUX0RBVEVfTE9DQUxFfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7TG9jYWxlRGF0ZUZvcm1hdHN9IGZyb20gJy4uL2RhdGUtZm9ybWF0cy9sb2NhbGUtZGF0ZS1mb3JtYXRzJztcbmltcG9ydCB7RWxkZXJMb2NhbERhdGVJbnB1dENvbXBvbmVudH0gZnJvbSAnLi4vZWxkZXItbG9jYWwtZGF0ZS1pbnB1dC9lbGRlci1sb2NhbC1kYXRlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQge01hdEljb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtcbiAgTWF0RGF0ZVJhbmdlSW5wdXQsXG4gIE1hdFN0YXJ0RGF0ZSxcbiAgTWF0RW5kRGF0ZSxcbiAgTWF0RGF0ZXBpY2tlclRvZ2dsZSxcbiAgTWF0RGF0ZXBpY2tlclRvZ2dsZUljb24sXG4gIE1hdERhdGVSYW5nZVBpY2tlclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7RWxkZXJMb2NhbFRpbWVJbnB1dENvbXBvbmVudH0gZnJvbSAnLi4vZWxkZXItbG9jYWwtdGltZS1pbnB1dC9lbGRlci1sb2NhbC10aW1lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQge0VsZGVyRGF0ZVRpbWVJbnB1dENvbXBvbmVudH0gZnJvbSAnLi4vZWxkZXItZGF0ZS10aW1lLWlucHV0L2VsZGVyLWRhdGUtdGltZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtjb2VyY2VJbnRlcnZhbCwgY29lcmNlSW50ZXJ2YWxJc29TdHJ9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90aW1lL2ludGVydmFsLWNvZXJjZSc7XG5cbmV4cG9ydCB0eXBlIEludGVydmFsSW5wdXRNb2RlID1cblxuLyoqXG4gKiBTdXBwb3J0cyB0aGUgc2VsZWN0aW9uIG9mIGEgc2luZ2xlIChmdWxsKSBkYXk6XG4gKiAxMi4xMi4yMDIwXG4gKi9cbiAgJ3NpbmdsZS1kYXknIHxcblxuICAvKipcbiAgICogU3VwcG9ydHMgYSB0aW1lIGludGVydmFsIGluIGEgZGF5OlxuICAgKiAxMi4xMi4yMDIwIDEzOjAwIC0gMTg6MDBcbiAgICovXG4gICdkYXktdGltZS1yYW5nZScgfFxuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBhIGRhdGUgaW50ZXJ2YWwgd2l0aG91dCB0aW1lXG4gICAqIDEyLjEyLjIwMjAgLSAyMi4wNi4yMDIxXG4gICAqL1xuICAnZGF0ZS1yYW5nZScgfFxuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBhIGRhdGUtdGltZSB0byBkYXRlLXRpbWUgaW50ZXJ2YWxcbiAgICogMTIuMTIuMjAyMCA4OjAwIC0gMjIuMDYuMjAyMSAxNzowMFxuICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGFzIGl0IHN1cHBvcnRzIHRoZSBtb3N0IGRldGFpbGVkIGlucHV0LlxuICAgKi9cbiAgJ2RhdGUtdGltZS1yYW5nZSdcbiAgO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbGRlci1pbnRlcnZhbC1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1pbnRlcnZhbC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEVsZGVySW50ZXJ2YWxJbnB1dENvbXBvbmVudH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBc3luY1BpcGUsIFRyYW5zbGF0ZU1vZHVsZSwgRm9ybXNNb2R1bGUsXG4gICAgRWxkZXJEYXRlVGltZUlucHV0Q29tcG9uZW50LCBFbGRlckxvY2FsVGltZUlucHV0Q29tcG9uZW50LFxuICAgIE1hdERhdGVSYW5nZUlucHV0LCBNYXRTdGFydERhdGUsXG4gICAgTWF0RW5kRGF0ZSwgTWF0RGF0ZXBpY2tlclRvZ2dsZSwgTWF0SWNvbiwgTWF0RGF0ZXBpY2tlclRvZ2dsZUljb24sIE1hdERhdGVSYW5nZVBpY2tlcixcbiAgICBFbGRlckxvY2FsRGF0ZUlucHV0Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlckludGVydmFsSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBFbGRlckZvcm1GaWVsZENvbnRyb2xCYXNlPEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHI+IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG5cbiAgcHJpdmF0ZSBfbW9kZTogSW50ZXJ2YWxJbnB1dE1vZGUgPSAnZGF0ZS10aW1lLXJhbmdlJztcbiAgcHJpdmF0ZSBfaXNEZWZhdWx0RGF0ZVBpY2tlckRpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHpvbmUgPSBab25lSWQuc3lzdGVtRGVmYXVsdCgpO1xuXG4gIHB1YmxpYyByZWFkb25seSBlbmRUaW1lJDogT2JzZXJ2YWJsZTxMb2NhbFRpbWU+O1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGFydExvY2FsRGF0ZSQ6IE9ic2VydmFibGU8TG9jYWxEYXRlPjtcbiAgcHVibGljIHJlYWRvbmx5IGVuZExvY2FsRGF0ZSQ6IE9ic2VydmFibGU8TG9jYWxEYXRlPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhcnREYXRlJDogT2JzZXJ2YWJsZTxEYXRlPjtcbiAgcHVibGljIHJlYWRvbmx5IGVuZERhdGUkOiBPYnNlcnZhYmxlPERhdGU+O1xuXG4gIHB1YmxpYyByZWFkb25seSBkYXRlZm9ybWF0OiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGludGVydmFsJDogT2JzZXJ2YWJsZTxJbnRlcnZhbD47XG4gIHByaXZhdGUgX3ZhbHVlQXNJc29TdHI6IGJvb2xlYW47XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdFJlZjogRWxlbWVudFJlZixcbiAgICB6b25lOiBOZ1pvbmUsXG4gICAgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBjdXN0b21EYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT4sXG4gICAgQEluamVjdChNQVRfREFURV9MT0NBTEUpIG1hdERhdGVMb2NhbGU6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGhvc3RSZWYsXG4gICAgICAnaW50ZXJ2YWwtaW5wdXQnLCAvLyA9PiBtYXQtbWRjLWZvcm0tZmllbGQtdHlwZS1pbnRlcnZhbC1pbnB1dFxuICAgICAgZm9jdXNNb25pdG9yLFxuICAgICAgdHJhbnNsYXRlU2VydmljZSxcbiAgICAgIG5nQ29udHJvbFxuICAgICk7XG5cbiAgICB0aGlzLmNvbnRyb2xUeXBlID0gdGhpcy5fbW9kZTtcbiAgICB0aGlzLmludGVydmFsJCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICBtYXAodmFsdWUgPT4gY29lcmNlSW50ZXJ2YWwodmFsdWUpKVxuICAgICk7XG5cbiAgICB0aGlzLmVuZFRpbWUkID0gdGhpcy5pbnRlcnZhbCQucGlwZShcbiAgICAgIG1hcChpbnRlcnZhbCA9PiBpbnRlcnZhbD8uZW5kID8gTG9jYWxUaW1lLmZyb20oaW50ZXJ2YWwuZW5kLmF0Wm9uZSh0aGlzLnpvbmUpKSA6IG51bGwpXG4gICAgKTtcblxuICAgIHRoaXMuc3RhcnRMb2NhbERhdGUkID0gdGhpcy5pbnRlcnZhbCQucGlwZShcbiAgICAgIG1hcChpbnRlcnZhbCA9PiBpbnRlcnZhbD8uc3RhcnQgPyBMb2NhbERhdGUuZnJvbShpbnRlcnZhbC5zdGFydC5hdFpvbmUodGhpcy56b25lKSkgOiBudWxsKVxuICAgICk7XG5cbiAgICB0aGlzLmVuZExvY2FsRGF0ZSQgPSB0aGlzLmludGVydmFsJC5waXBlKFxuICAgICAgbWFwKGludGVydmFsID0+IGludGVydmFsPy5lbmQgPyBMb2NhbERhdGUuZnJvbShpbnRlcnZhbC5lbmQuYXRab25lKHRoaXMuem9uZSkpIDogbnVsbClcbiAgICApO1xuXG4gICAgdGhpcy5zdGFydERhdGUkID0gdGhpcy5tYXBJZ25vcmVFcnJvck9ic2VydmFibGUodGhpcy5zdGFydExvY2FsRGF0ZSQsIChkOiBMb2NhbERhdGUpID0+IFRpbWVVdGlsLmxvY2FsRGF0ZVRvRGF0ZShkKSk7XG4gICAgdGhpcy5lbmREYXRlJCA9IHRoaXMubWFwSWdub3JlRXJyb3JPYnNlcnZhYmxlKHRoaXMuZW5kTG9jYWxEYXRlJCwgKGQ6IExvY2FsRGF0ZSkgPT4gVGltZVV0aWwubG9jYWxEYXRlVG9EYXRlKGQpKTtcblxuICAgIHRoaXMuZGF0ZWZvcm1hdCA9IExvY2FsZURhdGVGb3JtYXRzLmdldEZvcm1hdHNPZkxvY2FsZShtYXREYXRlTG9jYWxlKVswXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZhbHVlQXNJc29TdHIoZW5hYmxlZDogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fdmFsdWVBc0lzb1N0ciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShlbmFibGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWVBc0lzb1N0cigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVBc0lzb1N0cjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbW9kZShtb2RlOiBJbnRlcnZhbElucHV0TW9kZSkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuY29udHJvbFR5cGUgPSBtb2RlO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlKCk6IEludGVydmFsSW5wdXRNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNEZWZhdWx0RGF0ZVBpY2tlckRpc2FibGVkKGhpZGU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2lzRGVmYXVsdERhdGVQaWNrZXJEaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShoaWRlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNEZWZhdWx0RGF0ZVBpY2tlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0RlZmF1bHREYXRlUGlja2VyRGlzYWJsZWQ7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIGdldCBpc29WYWx1ZUNoYW5nZSgpOiBPYnNlcnZhYmxlPElzb0ludGVydmFsU3RyIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQ2hhbmdlLnBpcGUoXG4gICAgICBtYXAodmFsdWUgPT4gY29lcmNlSW50ZXJ2YWxJc29TdHIodmFsdWUpKVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzb1ZhbHVlKHZhbHVlOiBJc29JbnRlcnZhbFN0ciB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgPyB0aGlzLmNvZXJjZVZhbHVlKHZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVydmFsKCk6IEludGVydmFsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29lcmNlSW50ZXJ2YWwodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gIHB1YmxpYyBmb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIud2FybignZm9jdXMoKSBub3QgeWV0IHN1cHBvcnRlZCEnKTtcbiAgICAvLyB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5mb2N1cyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ2JsdXIoKSBub3QgeWV0IHN1cHBvcnRlZCEnKTtcbiAgICAvLyB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5ibHVyKCk7XG4gIH1cblxuICBwdWJsaWMgb25EYXlUaW1lU3RhcnRDaGFuZ2VkKHN0YXJ0OiBJbnN0YW50KSB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHRoaXMuaW5zdGFudEF0RW5kT2ZEYXkoc3RhcnQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRheVRpbWVFbmRUaW1lQ2hhbmdlZChlbmRUaW1lOiBMb2NhbFRpbWUpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuaW50ZXJ2YWwuc3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5pbnN0YW50V2l0aFRpbWUoc3RhcnQsIGVuZFRpbWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICAhZW5kLmlzQWZ0ZXIoc3RhcnQpID8gdGhpcy5pbnN0YW50QXRFbmRPZkRheShzdGFydCkgOiBlbmRcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uU3RhcnRDaGFuZ2VkKHN0YXJ0OiBJbnN0YW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwuZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVuZENoYW5nZWQoZW5kOiBJbnN0YW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgdGhpcy5pbnRlcnZhbC5zdGFydCxcbiAgICAgICAgZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0YXJ0RGF0ZUNoYW5nZWQodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMudG9Mb2NhbERhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHRoaXMubG9jYWxEYXRlVG9JbnN0YW50KGRhdGUpLFxuICAgICAgICB0aGlzLmludGVydmFsPy5lbmRcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRW5kRGF0ZUNoYW5nZWQodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMudG9Mb2NhbERhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHRoaXMuaW50ZXJ2YWw/LnN0YXJ0LFxuICAgICAgICB0aGlzLmxvY2FsRGF0ZVRvSW5zdGFudChkYXRlKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25TaW5nbGVEYXlEYXRlQ2hhbmdlZChkYXRlOiBMb2NhbERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvZXJjZWRWYWx1ZShcbiAgICAgIEludGVydmFsLm9mRGF5KGRhdGUsIHRoaXMuem9uZSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgdmFsdWU6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5jb2VyY2VWYWx1ZSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YW50QXRTdGFydE9mRGF5Tm93KCk6IEluc3RhbnQge1xuICAgIHJldHVybiBMb2NhbERhdGUubm93KCkuYXRTdGFydE9mRGF5KCkuYXRab25lKHRoaXMuem9uZSkudG9JbnN0YW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbnRBdEVuZE9mRGF5KGluc3RhbnQ6IEluc3RhbnQpOiBJbnN0YW50IHtcbiAgICByZXR1cm4gTG9jYWxEYXRlLm9mSW5zdGFudChpbnN0YW50KS5hdFN0YXJ0T2ZEYXkoKS5wbHVzRGF5cygxKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9jYWxEYXRlVG9JbnN0YW50KGRhdGU6IExvY2FsRGF0ZSk6IEluc3RhbnQgfCB1bmRlZmluZWQge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZS5hdFN0YXJ0T2ZEYXkoKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsdWVzRXF1YWxzKFxuICAgIGE6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsLFxuICAgIGI6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFJbnRlcnZhbCA9IGNvZXJjZUludGVydmFsKGEpO1xuICAgIGNvbnN0IGJJbnRlcnZhbCA9IGNvZXJjZUludGVydmFsKGIpO1xuICAgIHJldHVybiAoYUludGVydmFsICYmIGJJbnRlcnZhbClcbiAgICAgID8gYUludGVydmFsLmVxdWFscyhiSW50ZXJ2YWwpXG4gICAgICA6IGFJbnRlcnZhbCA9PT0gYkludGVydmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YW50V2l0aFRpbWUoaW5zdGFudDogSW5zdGFudCwgdGltZTogTG9jYWxUaW1lKTogSW5zdGFudCB7XG4gICAgcmV0dXJuIGluc3RhbnRcbiAgICAgIC5hdFpvbmUodGhpcy56b25lKVxuICAgICAgLndpdGhIb3VyKHRpbWUuaG91cigpKVxuICAgICAgLndpdGhNaW51dGUodGltZS5taW51dGUoKSlcbiAgICAgIC50b0luc3RhbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9Mb2NhbERhdGUodmFsdWU6IERhdGUpOiBMb2NhbERhdGUgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZhbHVlID8gVGltZVV0aWwuZGF0ZVRvTG9jYWxEYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gYXBwbHkgdmFsdWUgdG8gZGF0ZVZhbHVlOiAnICsgdmFsdWUsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcElnbm9yZUVycm9yT2JzZXJ2YWJsZTxUPihcbiAgICBkYXRlOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT4sXG4gICAgY29udmVyc2lvbkZuOiAoZDogTG9jYWxEYXRlKSA9PiBUXG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gZGF0ZS5waXBlKFxuICAgICAgbWFwKGxvY2FsRGF0ZSA9PiBsb2NhbERhdGUgPyBjb252ZXJzaW9uRm4obG9jYWxEYXRlKSA6IG51bGwpLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgbG9jYWwgZGF0ZSEnLCBlcnIpO1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvZXJjZVZhbHVlKFxuICAgIHZhbHVlOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbFxuICApOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lzb1N0cikge1xuICAgICAgcmV0dXJuIGNvZXJjZUludGVydmFsSXNvU3RyKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvZXJjZUludGVydmFsKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBzd2l0Y2ggKG1vZGUpIHtcblxuICBAY2FzZSAoJ2RhdGUtdGltZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvd1wiPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dCBjbGFzcz1cImZsZXhcIiBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIihpbnRlcnZhbCQgfCBhc3luYyk/LnN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvblN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvciBmbGV4LW5vbmVcIj7igJM8L3NwYW4+XG4gICAgICA8ZWxkZXItZGF0ZS10aW1lLWlucHV0IGNsYXNzPVwiZmxleFwiIGNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkVuZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIocGxhY2Vob2xkZXIgfHwgJycpICsgJyAnICsgKCdpbnRlcnZhbC50bycgfCB0cmFuc2xhdGUpXCJcbiAgICAgID48L2VsZGVyLWRhdGUtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuICBAY2FzZSAoJ2RheS10aW1lLXJhbmdlJykge1xuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcm93IGdhcC14cyBlbGRlci1mbGV4LWludGVydmFsLWNvbnRyb2xcIj5cblxuICAgICAgPCEtLSAgW25hbWVdPVwibmFtZSArICctZGF5LXN0YXJ0J1wiIC0tPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dFxuICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uc3RhcnRcIlxuICAgICAgICAodmFsdWVVcGRhdGVkKT1cIm9uRGF5VGltZVN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG5cbiAgICAgIDwhLS0gW25hbWVdPVwibmFtZSArICctZGF5LWVuZCdcIiAtLT5cbiAgICAgIDxlbGRlci1sb2NhbC10aW1lLWlucHV0XG4gICAgICAgIFt2YWx1ZV09XCJlbmRUaW1lJCB8IGFzeW5jXCJcbiAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkRheVRpbWVFbmRUaW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLnRvJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgPjwvZWxkZXItbG9jYWwtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBjYXNlICgnZGF0ZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBnYXAteHMgZWxkZXItZmxleC1pbnRlcnZhbC1jb250cm9sXCI+XG4gICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgICAgIGNsYXNzPVwibWRjLXRleHQtZmllbGRfX2lucHV0XCJcbiAgICAgICAgICBbcmFuZ2VQaWNrZXJdPVwicGlja2VyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGVmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0YXJ0RGF0ZSQgfCBhc3luY1wiIG5hbWU9XCJkYXRlLXJhbmdlLnN0YXJ0XCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlLCB1cGRhdGVPbjogJ2JsdXInfVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TdGFydERhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhZGlzYWJsZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZVxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJlbmREYXRlJCB8IGFzeW5jXCIgbmFtZT1cImRhdGUtcmFuZ2UuZW5kXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlLCB1cGRhdGVPbjogJ2JsdXInfVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FbmREYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWRpc2FibGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG5cbiAgICAgICAgQGlmKCFpc0RlZmF1bHREYXRlUGlja2VyRGlzYWJsZWQpe1xuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgY2xhc3M9XCJlbGRlci1jb250cm9sLWljb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9ja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCJwaWNrZXJcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbj5jYWxlbmRhcl9tb250aDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgIH1cbiAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgIDwvZGl2PlxuICB9XG5cbiAgQGNhc2UgKCdzaW5nbGUtZGF5Jykge1xuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcm93IGVsZGVyLWZsZXgtY29udHJvbFwiPlxuXG4gICAgICA8IS0tIFtuYW1lXT1cIm5hbWVcIiAtLT5cbiAgICAgIDxlbGRlci1sb2NhbC1kYXRlLWlucHV0IGNsYXNzPVwiZmxleFwiIGNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0YXJ0TG9jYWxEYXRlJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZVVwZGF0ZWQpPVwib25TaW5nbGVEYXlEYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIocGxhY2Vob2xkZXIgfHwgJycpXCJcbiAgICAgID48L2VsZGVyLWxvY2FsLWRhdGUtaW5wdXQ+XG4gICAgPC9kaXY+XG4gIH1cbn1cblxuXG5cblxuXG5cbiJdfQ==
|