@skyux/datetime 8.6.0 → 9.0.0-alpha.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/documentation.json +8 -8
- package/esm2022/lib/modules/date-pipe/date-format-utility.mjs +45 -0
- package/{esm2020 → esm2022}/lib/modules/date-pipe/date-pipe.module.mjs +5 -5
- package/esm2022/lib/modules/date-pipe/date.pipe.mjs +67 -0
- package/esm2022/lib/modules/date-pipe/fuzzy-date.pipe.mjs +47 -0
- package/{esm2020 → esm2022}/lib/modules/date-range-picker/date-range-picker-end-date-resource-key.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/date-range-picker/date-range-picker-start-date-resource-key.pipe.mjs +4 -4
- package/esm2022/lib/modules/date-range-picker/date-range-picker.component.mjs +518 -0
- package/{esm2020 → esm2022}/lib/modules/date-range-picker/date-range-picker.module.mjs +19 -19
- package/esm2022/lib/modules/date-range-picker/date-range.service.mjs +97 -0
- package/esm2022/lib/modules/date-range-picker/types/date-range-calculator.mjs +54 -0
- package/esm2022/lib/modules/datepicker/date-formatter.mjs +38 -0
- package/esm2022/lib/modules/datepicker/datepicker-adapter.service.mjs +23 -0
- package/esm2022/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +332 -0
- package/esm2022/lib/modules/datepicker/datepicker-calendar.component.mjs +95 -0
- package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-config.service.mjs +4 -4
- package/esm2022/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +487 -0
- package/esm2022/lib/modules/datepicker/datepicker-input.directive.mjs +534 -0
- package/esm2022/lib/modules/datepicker/datepicker.component.mjs +327 -0
- package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker.module.mjs +35 -35
- package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/datepicker/daypicker-button.component.mjs +4 -4
- package/esm2022/lib/modules/datepicker/daypicker-cell.component.mjs +128 -0
- package/esm2022/lib/modules/datepicker/daypicker.component.mjs +224 -0
- package/esm2022/lib/modules/datepicker/fuzzy-date.service.mjs +412 -0
- package/esm2022/lib/modules/datepicker/monthpicker.component.mjs +80 -0
- package/{esm2020 → esm2022}/lib/modules/datepicker/yearpicker.component.mjs +53 -54
- package/{esm2020 → esm2022}/lib/modules/shared/sky-datetime-resources.module.mjs +11 -11
- package/esm2022/lib/modules/timepicker/timepicker.component.mjs +396 -0
- package/esm2022/lib/modules/timepicker/timepicker.directive.mjs +237 -0
- package/{esm2020 → esm2022}/lib/modules/timepicker/timepicker.module.mjs +17 -17
- package/esm2022/testing/datepicker-fixture.mjs +55 -0
- package/esm2022/testing/timepicker-fixture.mjs +52 -0
- package/fesm2022/skyux-datetime-testing.mjs +112 -0
- package/{fesm2020 → fesm2022}/skyux-datetime-testing.mjs.map +1 -1
- package/fesm2022/skyux-datetime.mjs +5030 -0
- package/fesm2022/skyux-datetime.mjs.map +1 -0
- package/lib/modules/date-range-picker/date-range-picker.component.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-calendar-inner.component.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-calendar.component.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-input-fuzzy.directive.d.ts +1 -1
- package/lib/modules/datepicker/datepicker-input.directive.d.ts +1 -1
- package/lib/modules/datepicker/datepicker.component.d.ts +1 -1
- package/lib/modules/datepicker/daypicker-button.component.d.ts +1 -1
- package/lib/modules/datepicker/daypicker-cell.component.d.ts +1 -1
- package/lib/modules/datepicker/daypicker.component.d.ts +1 -1
- package/lib/modules/timepicker/timepicker.directive.d.ts +1 -1
- package/package.json +19 -27
- package/esm2020/lib/modules/date-pipe/date-format-utility.mjs +0 -45
- package/esm2020/lib/modules/date-pipe/date.pipe.mjs +0 -70
- package/esm2020/lib/modules/date-pipe/fuzzy-date.pipe.mjs +0 -50
- package/esm2020/lib/modules/date-range-picker/date-range-picker.component.mjs +0 -494
- package/esm2020/lib/modules/date-range-picker/date-range.service.mjs +0 -100
- package/esm2020/lib/modules/date-range-picker/types/date-range-calculator.mjs +0 -53
- package/esm2020/lib/modules/datepicker/date-formatter.mjs +0 -38
- package/esm2020/lib/modules/datepicker/datepicker-adapter.service.mjs +0 -26
- package/esm2020/lib/modules/datepicker/datepicker-calendar-inner.component.mjs +0 -333
- package/esm2020/lib/modules/datepicker/datepicker-calendar.component.mjs +0 -96
- package/esm2020/lib/modules/datepicker/datepicker-input-fuzzy.directive.mjs +0 -462
- package/esm2020/lib/modules/datepicker/datepicker-input.directive.mjs +0 -496
- package/esm2020/lib/modules/datepicker/datepicker.component.mjs +0 -319
- package/esm2020/lib/modules/datepicker/daypicker-cell.component.mjs +0 -126
- package/esm2020/lib/modules/datepicker/daypicker.component.mjs +0 -216
- package/esm2020/lib/modules/datepicker/fuzzy-date.service.mjs +0 -392
- package/esm2020/lib/modules/datepicker/monthpicker.component.mjs +0 -81
- package/esm2020/lib/modules/timepicker/timepicker.component.mjs +0 -389
- package/esm2020/lib/modules/timepicker/timepicker.directive.mjs +0 -236
- package/esm2020/testing/datepicker-fixture.mjs +0 -58
- package/esm2020/testing/timepicker-fixture.mjs +0 -55
- package/fesm2015/skyux-datetime-testing.mjs +0 -117
- package/fesm2015/skyux-datetime-testing.mjs.map +0 -1
- package/fesm2015/skyux-datetime.mjs +0 -4925
- package/fesm2015/skyux-datetime.mjs.map +0 -1
- package/fesm2020/skyux-datetime-testing.mjs +0 -117
- package/fesm2020/skyux-datetime.mjs +0 -4895
- package/fesm2020/skyux-datetime.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculation.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-date-range-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-id.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-calculator-validate-function.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-default-calculator-config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-default-calculator-configs.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range-relative-value.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/date-range-picker/types/date-range.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-calendar-change.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-custom-date.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/datepicker-date.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/datepicker/fuzzy-date.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/timepicker/timepicker-time-format-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/timepicker/timepicker-time-output.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-datetime.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-datetime-testing.mjs +0 -0
@@ -1,462 +0,0 @@
|
|
1
|
-
var _SkyFuzzyDatepickerInputDirective_instances, _SkyFuzzyDatepickerInputDirective_value_get, _SkyFuzzyDatepickerInputDirective_value_set, _SkyFuzzyDatepickerInputDirective_control, _SkyFuzzyDatepickerInputDirective_dateFormatter, _SkyFuzzyDatepickerInputDirective_locale, _SkyFuzzyDatepickerInputDirective_preferredShortDateFormat, _SkyFuzzyDatepickerInputDirective_ngUnsubscribe, _SkyFuzzyDatepickerInputDirective__futureDisabled, _SkyFuzzyDatepickerInputDirective__dateFormat, _SkyFuzzyDatepickerInputDirective__disabled, _SkyFuzzyDatepickerInputDirective__maxDate, _SkyFuzzyDatepickerInputDirective__minDate, _SkyFuzzyDatepickerInputDirective__startingDay, _SkyFuzzyDatepickerInputDirective__value, _SkyFuzzyDatepickerInputDirective__yearRequired, _SkyFuzzyDatepickerInputDirective_changeDetector, _SkyFuzzyDatepickerInputDirective_configService, _SkyFuzzyDatepickerInputDirective_elementRef, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, _SkyFuzzyDatepickerInputDirective_renderer, _SkyFuzzyDatepickerInputDirective_resourcesService, _SkyFuzzyDatepickerInputDirective_datepickerComponent, _SkyFuzzyDatepickerInputDirective_onValueChange, _SkyFuzzyDatepickerInputDirective_setInputElementValue, _SkyFuzzyDatepickerInputDirective_getMaxDate, _SkyFuzzyDatepickerInputDirective_getMinDate, _SkyFuzzyDatepickerInputDirective_fuzzyDatesEqual, _SkyFuzzyDatepickerInputDirective_onChange, _SkyFuzzyDatepickerInputDirective_onTouched, _SkyFuzzyDatepickerInputDirective_onValidatorChange, _SkyFuzzyDatepickerInputDirective_updateValue;
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
3
|
-
import { Directive, HostListener, Input, Optional, forwardRef, } from '@angular/core';
|
4
|
-
import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
5
|
-
import { Subject } from 'rxjs';
|
6
|
-
import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
|
7
|
-
import { SkyDateFormatter } from './date-formatter';
|
8
|
-
import * as i0 from "@angular/core";
|
9
|
-
import * as i1 from "./datepicker-config.service";
|
10
|
-
import * as i2 from "./fuzzy-date.service";
|
11
|
-
import * as i3 from "@skyux/i18n";
|
12
|
-
import * as i4 from "./datepicker.component";
|
13
|
-
const SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR = {
|
14
|
-
provide: NG_VALUE_ACCESSOR,
|
15
|
-
useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),
|
16
|
-
multi: true,
|
17
|
-
};
|
18
|
-
const SKY_FUZZY_DATEPICKER_VALIDATOR = {
|
19
|
-
provide: NG_VALIDATORS,
|
20
|
-
useExisting: forwardRef(() => SkyFuzzyDatepickerInputDirective),
|
21
|
-
multi: true,
|
22
|
-
};
|
23
|
-
export class SkyFuzzyDatepickerInputDirective {
|
24
|
-
/**
|
25
|
-
* The date format for the input. Place this attribute on the `input` element
|
26
|
-
* to override the default in `SkyDatepickerConfigService`.
|
27
|
-
* @default "MM/DD/YYYY"
|
28
|
-
*/
|
29
|
-
set dateFormat(value) {
|
30
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__dateFormat, value, "f");
|
31
|
-
if (__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "a", _SkyFuzzyDatepickerInputDirective_value_get)) {
|
32
|
-
const formattedDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").format(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "a", _SkyFuzzyDatepickerInputDirective_value_get), this.dateFormat, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_locale, "f"));
|
33
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_setInputElementValue).call(this, formattedDate);
|
34
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_changeDetector, "f").markForCheck();
|
35
|
-
}
|
36
|
-
}
|
37
|
-
// TODO: Refactor to not have getter logic
|
38
|
-
get dateFormat() {
|
39
|
-
return (__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__dateFormat, "f") ||
|
40
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_configService, "f").dateFormat ||
|
41
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_preferredShortDateFormat, "f"));
|
42
|
-
}
|
43
|
-
/**
|
44
|
-
* Whether to disable the datepicker on template-driven forms. Don't use this input on reactive forms because they may overwrite the input or leave the control out of sync.
|
45
|
-
* To set the disabled state on reactive forms, use the `FormControl` instead.
|
46
|
-
* @default false
|
47
|
-
*/
|
48
|
-
set disabled(value) {
|
49
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__disabled, value, "f");
|
50
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, "f").disabled = value;
|
51
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_renderer, "f").setProperty(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_elementRef, "f").nativeElement, 'disabled', value);
|
52
|
-
}
|
53
|
-
get disabled() {
|
54
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__disabled, "f");
|
55
|
-
}
|
56
|
-
/**
|
57
|
-
* Whether to prevent users from specifying dates that are in the future.
|
58
|
-
* Place this attribute on the `input` element.
|
59
|
-
* @default false
|
60
|
-
*/
|
61
|
-
set futureDisabled(value) {
|
62
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__futureDisabled, value, "f");
|
63
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
64
|
-
}
|
65
|
-
get futureDisabled() {
|
66
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__futureDisabled, "f");
|
67
|
-
}
|
68
|
-
/**
|
69
|
-
* The latest fuzzy date allowed. Place this attribute on the `input` element
|
70
|
-
* to prevent fuzzy dates after a specified date. This property accepts
|
71
|
-
* a `SkyFuzzyDate` value that includes numeric month, day, and year values.
|
72
|
-
* For example: `{ month: 1, day: 1, year: 2027 }`.
|
73
|
-
*/
|
74
|
-
set maxDate(value) {
|
75
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__maxDate, value, "f");
|
76
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, "f").maxDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_getMaxDate).call(this);
|
77
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
78
|
-
}
|
79
|
-
get maxDate() {
|
80
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__maxDate, "f");
|
81
|
-
}
|
82
|
-
/**
|
83
|
-
* The earliest fuzzy date allowed. Place this attribute on the `input` element
|
84
|
-
* to prevent fuzzy dates before a specified date. This property accepts a `SkyFuzzyDate` value
|
85
|
-
* that includes numeric month, day, and year values.
|
86
|
-
* For example: `{ month: 1, day: 1, year: 2007 }`.
|
87
|
-
*/
|
88
|
-
set minDate(value) {
|
89
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__minDate, value, "f");
|
90
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, "f").minDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_getMinDate).call(this);
|
91
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
92
|
-
}
|
93
|
-
get minDate() {
|
94
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__minDate, "f");
|
95
|
-
}
|
96
|
-
/**
|
97
|
-
* The starting day of the week in the calendar, where `0` sets the starting day
|
98
|
-
* to Sunday. Place this attribute on the `input` element to override the default
|
99
|
-
* in `SkyDatepickerConfigService`.
|
100
|
-
* @default 0
|
101
|
-
*/
|
102
|
-
set startingDay(value) {
|
103
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__startingDay, value, "f");
|
104
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, "f").startingDay = this.startingDay;
|
105
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
106
|
-
}
|
107
|
-
// TODO: Refactor to not have getter logic
|
108
|
-
get startingDay() {
|
109
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__startingDay, "f") || __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_configService, "f").startingDay;
|
110
|
-
}
|
111
|
-
/**
|
112
|
-
* Whether to require the year in fuzzy dates.
|
113
|
-
* @default false
|
114
|
-
*/
|
115
|
-
set yearRequired(value) {
|
116
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__yearRequired, value, "f");
|
117
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onValidatorChange, "f").call(this);
|
118
|
-
}
|
119
|
-
get yearRequired() {
|
120
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__yearRequired, "f");
|
121
|
-
}
|
122
|
-
constructor(changeDetector, configService, elementRef, fuzzyDateService, localeProvider, renderer, resourcesService, datepickerComponent) {
|
123
|
-
_SkyFuzzyDatepickerInputDirective_instances.add(this);
|
124
|
-
/**
|
125
|
-
* Whether to disable date validation on the fuzzy datepicker input.
|
126
|
-
* @default false
|
127
|
-
*/
|
128
|
-
this.skyDatepickerNoValidate = false;
|
129
|
-
_SkyFuzzyDatepickerInputDirective_control.set(this, void 0);
|
130
|
-
_SkyFuzzyDatepickerInputDirective_dateFormatter.set(this, new SkyDateFormatter());
|
131
|
-
_SkyFuzzyDatepickerInputDirective_locale.set(this, void 0);
|
132
|
-
_SkyFuzzyDatepickerInputDirective_preferredShortDateFormat.set(this, void 0);
|
133
|
-
_SkyFuzzyDatepickerInputDirective_ngUnsubscribe.set(this, new Subject());
|
134
|
-
_SkyFuzzyDatepickerInputDirective__futureDisabled.set(this, false);
|
135
|
-
_SkyFuzzyDatepickerInputDirective__dateFormat.set(this, void 0);
|
136
|
-
_SkyFuzzyDatepickerInputDirective__disabled.set(this, false);
|
137
|
-
_SkyFuzzyDatepickerInputDirective__maxDate.set(this, void 0);
|
138
|
-
_SkyFuzzyDatepickerInputDirective__minDate.set(this, void 0);
|
139
|
-
_SkyFuzzyDatepickerInputDirective__startingDay.set(this, void 0);
|
140
|
-
_SkyFuzzyDatepickerInputDirective__value.set(this, void 0);
|
141
|
-
_SkyFuzzyDatepickerInputDirective__yearRequired.set(this, false);
|
142
|
-
_SkyFuzzyDatepickerInputDirective_changeDetector.set(this, void 0);
|
143
|
-
_SkyFuzzyDatepickerInputDirective_configService.set(this, void 0);
|
144
|
-
_SkyFuzzyDatepickerInputDirective_elementRef.set(this, void 0);
|
145
|
-
_SkyFuzzyDatepickerInputDirective_fuzzyDateService.set(this, void 0);
|
146
|
-
_SkyFuzzyDatepickerInputDirective_renderer.set(this, void 0);
|
147
|
-
_SkyFuzzyDatepickerInputDirective_resourcesService.set(this, void 0);
|
148
|
-
_SkyFuzzyDatepickerInputDirective_datepickerComponent.set(this, void 0);
|
149
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
150
|
-
// istanbul ignore next
|
151
|
-
_SkyFuzzyDatepickerInputDirective_onChange.set(this, (_) => { });
|
152
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
153
|
-
// istanbul ignore next
|
154
|
-
_SkyFuzzyDatepickerInputDirective_onTouched.set(this, () => { });
|
155
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
156
|
-
// istanbul ignore next
|
157
|
-
_SkyFuzzyDatepickerInputDirective_onValidatorChange.set(this, () => { });
|
158
|
-
if (!datepickerComponent) {
|
159
|
-
throw new Error('You must wrap the `skyFuzzyDatepickerInput` directive within a ' +
|
160
|
-
'`<sky-datepicker>` component!');
|
161
|
-
}
|
162
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_changeDetector, changeDetector, "f");
|
163
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_configService, configService, "f");
|
164
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_elementRef, elementRef, "f");
|
165
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, fuzzyDateService, "f");
|
166
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_renderer, renderer, "f");
|
167
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_resourcesService, resourcesService, "f");
|
168
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, datepickerComponent, "f");
|
169
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_locale, localeProvider.defaultLocale, "f");
|
170
|
-
localeProvider
|
171
|
-
.getLocaleInfo()
|
172
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_ngUnsubscribe, "f")))
|
173
|
-
.subscribe((localeInfo) => {
|
174
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_locale, localeInfo.locale, "f");
|
175
|
-
SkyDateFormatter.setLocale(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_locale, "f"));
|
176
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_preferredShortDateFormat, SkyDateFormatter.getPreferredShortDateFormat(), "f");
|
177
|
-
});
|
178
|
-
}
|
179
|
-
ngOnInit() {
|
180
|
-
if (this.yearRequired) {
|
181
|
-
if (this.dateFormat?.toLowerCase().indexOf('y') === -1) {
|
182
|
-
throw new Error('You have configured conflicting settings. Year is required and dateFormat does not include year.');
|
183
|
-
}
|
184
|
-
}
|
185
|
-
const element = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_elementRef, "f").nativeElement;
|
186
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_renderer, "f").addClass(element, 'sky-form-control');
|
187
|
-
const hasAriaLabel = element.getAttribute('aria-label');
|
188
|
-
/* istanbul ignore else */
|
189
|
-
if (!hasAriaLabel) {
|
190
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_resourcesService, "f")
|
191
|
-
.getString('skyux_date_field_default_label')
|
192
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_ngUnsubscribe, "f")))
|
193
|
-
.subscribe((value) => {
|
194
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_renderer, "f").setAttribute(element, 'aria-label', value);
|
195
|
-
});
|
196
|
-
}
|
197
|
-
}
|
198
|
-
ngAfterContentInit() {
|
199
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, "f").dateChange
|
200
|
-
.pipe(distinctUntilChanged(), takeUntil(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_ngUnsubscribe, "f")))
|
201
|
-
.subscribe((value) => {
|
202
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_instances, value, "a", _SkyFuzzyDatepickerInputDirective_value_set);
|
203
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onTouched, "f").call(this);
|
204
|
-
});
|
205
|
-
}
|
206
|
-
ngAfterViewInit() {
|
207
|
-
// This is needed to address a bug in Angular 4.
|
208
|
-
// When a control value is set initially, its value is not represented on the view.
|
209
|
-
// See: https://github.com/angular/angular/issues/13792
|
210
|
-
// Of note is the parent check which allows us to determine if the form is reactive.
|
211
|
-
// Without this check there is a changed before checked error
|
212
|
-
/* istanbul ignore else */
|
213
|
-
if (__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f") && __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f").parent) {
|
214
|
-
setTimeout(() => {
|
215
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "a", _SkyFuzzyDatepickerInputDirective_value_get), {
|
216
|
-
emitEvent: false,
|
217
|
-
});
|
218
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_changeDetector, "f").markForCheck();
|
219
|
-
});
|
220
|
-
}
|
221
|
-
}
|
222
|
-
ngOnDestroy() {
|
223
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_ngUnsubscribe, "f").next();
|
224
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_ngUnsubscribe, "f").complete();
|
225
|
-
}
|
226
|
-
onInputChange(event) {
|
227
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_onValueChange).call(this, event.target.value);
|
228
|
-
}
|
229
|
-
onInputBlur() {
|
230
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onTouched, "f").call(this);
|
231
|
-
const formattedDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").format(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "a", _SkyFuzzyDatepickerInputDirective_value_get), this.dateFormat, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_locale, "f"));
|
232
|
-
if (__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f")?.valid) {
|
233
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_setInputElementValue).call(this, formattedDate);
|
234
|
-
}
|
235
|
-
}
|
236
|
-
onInput() {
|
237
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f")?.markAsDirty();
|
238
|
-
}
|
239
|
-
writeValue(value) {
|
240
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_updateValue).call(this, value, false);
|
241
|
-
}
|
242
|
-
validate(control) {
|
243
|
-
if (!__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f")) {
|
244
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_control, control, "f");
|
245
|
-
}
|
246
|
-
if (this.skyDatepickerNoValidate) {
|
247
|
-
return null;
|
248
|
-
}
|
249
|
-
if (!__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f").value) {
|
250
|
-
return null;
|
251
|
-
}
|
252
|
-
const value = control.value;
|
253
|
-
let fuzzyDate;
|
254
|
-
let validationError = null;
|
255
|
-
if (typeof value === 'string') {
|
256
|
-
fuzzyDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getFuzzyDateFromString(value, this.dateFormat);
|
257
|
-
}
|
258
|
-
else {
|
259
|
-
fuzzyDate = value;
|
260
|
-
}
|
261
|
-
if (!fuzzyDate) {
|
262
|
-
validationError = {
|
263
|
-
skyFuzzyDate: {
|
264
|
-
invalid: value,
|
265
|
-
},
|
266
|
-
};
|
267
|
-
}
|
268
|
-
else {
|
269
|
-
if (!fuzzyDate.year && this.yearRequired) {
|
270
|
-
validationError = {
|
271
|
-
skyFuzzyDate: {
|
272
|
-
yearRequired: value,
|
273
|
-
},
|
274
|
-
};
|
275
|
-
}
|
276
|
-
if (!validationError && fuzzyDate.year) {
|
277
|
-
let fuzzyDateRange;
|
278
|
-
if (this.maxDate) {
|
279
|
-
fuzzyDateRange = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getFuzzyDateRange(fuzzyDate, this.maxDate);
|
280
|
-
if (!fuzzyDateRange.valid) {
|
281
|
-
validationError = {
|
282
|
-
skyFuzzyDate: {
|
283
|
-
maxDate: value,
|
284
|
-
},
|
285
|
-
};
|
286
|
-
}
|
287
|
-
}
|
288
|
-
if (!validationError && this.minDate) {
|
289
|
-
fuzzyDateRange = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getFuzzyDateRange(this.minDate, fuzzyDate);
|
290
|
-
if (!fuzzyDateRange.valid) {
|
291
|
-
validationError = {
|
292
|
-
skyFuzzyDate: {
|
293
|
-
minDate: value,
|
294
|
-
},
|
295
|
-
};
|
296
|
-
}
|
297
|
-
}
|
298
|
-
if (!validationError && this.futureDisabled) {
|
299
|
-
fuzzyDateRange = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getFuzzyDateRange(fuzzyDate, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getCurrentFuzzyDate());
|
300
|
-
if (!fuzzyDateRange.valid) {
|
301
|
-
validationError = {
|
302
|
-
skyFuzzyDate: {
|
303
|
-
futureDisabled: value,
|
304
|
-
},
|
305
|
-
};
|
306
|
-
}
|
307
|
-
}
|
308
|
-
}
|
309
|
-
}
|
310
|
-
if (validationError) {
|
311
|
-
// Mark the invalid control as touched so that the input's invalid CSS styles appear.
|
312
|
-
// (This is only required when the invalid value is set by the FormControl constructor.)
|
313
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f").markAsTouched();
|
314
|
-
}
|
315
|
-
return validationError;
|
316
|
-
}
|
317
|
-
registerOnChange(fn) {
|
318
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_onChange, fn, "f");
|
319
|
-
}
|
320
|
-
registerOnTouched(fn) {
|
321
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_onTouched, fn, "f");
|
322
|
-
}
|
323
|
-
registerOnValidatorChange(fn) {
|
324
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_onValidatorChange, fn, "f");
|
325
|
-
}
|
326
|
-
setDisabledState(disabled) {
|
327
|
-
this.disabled = disabled;
|
328
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, "f").disabled = disabled;
|
329
|
-
}
|
330
|
-
/**
|
331
|
-
* Detects changes to the underlying input element's value and updates the ngModel accordingly.
|
332
|
-
* This is useful if you need to update the ngModel value before the input element loses focus.
|
333
|
-
*/
|
334
|
-
detectInputValueChange() {
|
335
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_onValueChange).call(this, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_elementRef, "f").nativeElement.value);
|
336
|
-
}
|
337
|
-
}
|
338
|
-
_SkyFuzzyDatepickerInputDirective_control = new WeakMap(), _SkyFuzzyDatepickerInputDirective_dateFormatter = new WeakMap(), _SkyFuzzyDatepickerInputDirective_locale = new WeakMap(), _SkyFuzzyDatepickerInputDirective_preferredShortDateFormat = new WeakMap(), _SkyFuzzyDatepickerInputDirective_ngUnsubscribe = new WeakMap(), _SkyFuzzyDatepickerInputDirective__futureDisabled = new WeakMap(), _SkyFuzzyDatepickerInputDirective__dateFormat = new WeakMap(), _SkyFuzzyDatepickerInputDirective__disabled = new WeakMap(), _SkyFuzzyDatepickerInputDirective__maxDate = new WeakMap(), _SkyFuzzyDatepickerInputDirective__minDate = new WeakMap(), _SkyFuzzyDatepickerInputDirective__startingDay = new WeakMap(), _SkyFuzzyDatepickerInputDirective__value = new WeakMap(), _SkyFuzzyDatepickerInputDirective__yearRequired = new WeakMap(), _SkyFuzzyDatepickerInputDirective_changeDetector = new WeakMap(), _SkyFuzzyDatepickerInputDirective_configService = new WeakMap(), _SkyFuzzyDatepickerInputDirective_elementRef = new WeakMap(), _SkyFuzzyDatepickerInputDirective_fuzzyDateService = new WeakMap(), _SkyFuzzyDatepickerInputDirective_renderer = new WeakMap(), _SkyFuzzyDatepickerInputDirective_resourcesService = new WeakMap(), _SkyFuzzyDatepickerInputDirective_datepickerComponent = new WeakMap(), _SkyFuzzyDatepickerInputDirective_onChange = new WeakMap(), _SkyFuzzyDatepickerInputDirective_onTouched = new WeakMap(), _SkyFuzzyDatepickerInputDirective_onValidatorChange = new WeakMap(), _SkyFuzzyDatepickerInputDirective_instances = new WeakSet(), _SkyFuzzyDatepickerInputDirective_value_get = function _SkyFuzzyDatepickerInputDirective_value_get() {
|
339
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__value, "f");
|
340
|
-
}, _SkyFuzzyDatepickerInputDirective_value_set = function _SkyFuzzyDatepickerInputDirective_value_set(value) {
|
341
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_updateValue).call(this, value);
|
342
|
-
}, _SkyFuzzyDatepickerInputDirective_onValueChange = function _SkyFuzzyDatepickerInputDirective_onValueChange(newValue) {
|
343
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective_instances, newValue, "a", _SkyFuzzyDatepickerInputDirective_value_set);
|
344
|
-
}, _SkyFuzzyDatepickerInputDirective_setInputElementValue = function _SkyFuzzyDatepickerInputDirective_setInputElementValue(value) {
|
345
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_renderer, "f").setProperty(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_elementRef, "f").nativeElement, 'value', value);
|
346
|
-
}, _SkyFuzzyDatepickerInputDirective_getMaxDate = function _SkyFuzzyDatepickerInputDirective_getMaxDate() {
|
347
|
-
if (this.maxDate) {
|
348
|
-
const maxDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getMomentFromFuzzyDate(this.maxDate);
|
349
|
-
if (maxDate.isValid()) {
|
350
|
-
return maxDate.toDate();
|
351
|
-
}
|
352
|
-
}
|
353
|
-
else if (this.futureDisabled) {
|
354
|
-
return new Date();
|
355
|
-
}
|
356
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_configService, "f").maxDate;
|
357
|
-
}, _SkyFuzzyDatepickerInputDirective_getMinDate = function _SkyFuzzyDatepickerInputDirective_getMinDate() {
|
358
|
-
if (this.minDate) {
|
359
|
-
const minDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getMomentFromFuzzyDate(this.minDate);
|
360
|
-
if (minDate.isValid()) {
|
361
|
-
return minDate.toDate();
|
362
|
-
}
|
363
|
-
}
|
364
|
-
return __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_configService, "f").minDate;
|
365
|
-
}, _SkyFuzzyDatepickerInputDirective_fuzzyDatesEqual = function _SkyFuzzyDatepickerInputDirective_fuzzyDatesEqual(dateA, dateB) {
|
366
|
-
return (dateA !== undefined &&
|
367
|
-
dateB !== undefined &&
|
368
|
-
((!dateA.day && !dateB.day) || dateA.day === dateB.day) &&
|
369
|
-
((!dateA.month && !dateB.month) || dateA.month === dateB.month) &&
|
370
|
-
((!dateA.year && !dateB.year) || dateA.year === dateB.year));
|
371
|
-
}, _SkyFuzzyDatepickerInputDirective_updateValue = function _SkyFuzzyDatepickerInputDirective_updateValue(value, emitEvent = true) {
|
372
|
-
if (__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__value, "f") === value ||
|
373
|
-
(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__value, "f") === undefined && value === null)) {
|
374
|
-
return;
|
375
|
-
}
|
376
|
-
let fuzzyDate;
|
377
|
-
let fuzzyMoment;
|
378
|
-
let dateValue;
|
379
|
-
let formattedDate;
|
380
|
-
if (value instanceof Date) {
|
381
|
-
dateValue = value;
|
382
|
-
formattedDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_dateFormatter, "f").format(value, this.dateFormat);
|
383
|
-
fuzzyDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getFuzzyDateFromSelectedDate(value, this.dateFormat);
|
384
|
-
}
|
385
|
-
else if (typeof value === 'string') {
|
386
|
-
fuzzyDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getFuzzyDateFromString(value, this.dateFormat);
|
387
|
-
if (fuzzyDate) {
|
388
|
-
formattedDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").format(fuzzyDate, this.dateFormat, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_locale, "f"));
|
389
|
-
}
|
390
|
-
if (!formattedDate) {
|
391
|
-
formattedDate = value;
|
392
|
-
}
|
393
|
-
fuzzyMoment = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getMomentFromFuzzyDate(fuzzyDate);
|
394
|
-
if (fuzzyMoment) {
|
395
|
-
dateValue = fuzzyMoment.toDate();
|
396
|
-
}
|
397
|
-
}
|
398
|
-
else {
|
399
|
-
fuzzyDate = value;
|
400
|
-
formattedDate = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").format(fuzzyDate, this.dateFormat, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_locale, "f"));
|
401
|
-
fuzzyMoment = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_fuzzyDateService, "f").getMomentFromFuzzyDate(fuzzyDate);
|
402
|
-
if (fuzzyMoment) {
|
403
|
-
dateValue = fuzzyMoment.toDate();
|
404
|
-
}
|
405
|
-
}
|
406
|
-
const areFuzzyDatesEqual = __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_fuzzyDatesEqual).call(this, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__value, "f"), fuzzyDate);
|
407
|
-
const isNewValue = fuzzyDate !== __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__value, "f") || !areFuzzyDatesEqual;
|
408
|
-
__classPrivateFieldSet(this, _SkyFuzzyDatepickerInputDirective__value, fuzzyDate || value, "f");
|
409
|
-
if (isNewValue) {
|
410
|
-
if (emitEvent) {
|
411
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_onChange, "f").call(this, __classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__value, "f"));
|
412
|
-
}
|
413
|
-
else {
|
414
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_control, "f")?.setValue(__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective__value, "f"), { emitEvent: false });
|
415
|
-
}
|
416
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_datepickerComponent, "f").selectedDate = dateValue;
|
417
|
-
}
|
418
|
-
__classPrivateFieldGet(this, _SkyFuzzyDatepickerInputDirective_instances, "m", _SkyFuzzyDatepickerInputDirective_setInputElementValue).call(this, formattedDate || '');
|
419
|
-
};
|
420
|
-
SkyFuzzyDatepickerInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyDatepickerConfigService }, { token: i0.ElementRef }, { token: i2.SkyFuzzyDateService }, { token: i3.SkyAppLocaleProvider }, { token: i0.Renderer2 }, { token: i3.SkyLibResourcesService }, { token: i4.SkyDatepickerComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
421
|
-
SkyFuzzyDatepickerInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SkyFuzzyDatepickerInputDirective, selector: "[skyFuzzyDatepickerInput]", inputs: { dateFormat: "dateFormat", disabled: "disabled", futureDisabled: "futureDisabled", maxDate: "maxDate", minDate: "minDate", skyDatepickerNoValidate: "skyDatepickerNoValidate", startingDay: "startingDay", yearRequired: "yearRequired" }, host: { listeners: { "change": "onInputChange($event)", "blur": "onInputBlur()", "input": "onInput()" } }, providers: [
|
422
|
-
SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,
|
423
|
-
SKY_FUZZY_DATEPICKER_VALIDATOR,
|
424
|
-
], ngImport: i0 });
|
425
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyFuzzyDatepickerInputDirective, decorators: [{
|
426
|
-
type: Directive,
|
427
|
-
args: [{
|
428
|
-
selector: '[skyFuzzyDatepickerInput]',
|
429
|
-
providers: [
|
430
|
-
SKY_FUZZY_DATEPICKER_VALUE_ACCESSOR,
|
431
|
-
SKY_FUZZY_DATEPICKER_VALIDATOR,
|
432
|
-
],
|
433
|
-
}]
|
434
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SkyDatepickerConfigService }, { type: i0.ElementRef }, { type: i2.SkyFuzzyDateService }, { type: i3.SkyAppLocaleProvider }, { type: i0.Renderer2 }, { type: i3.SkyLibResourcesService }, { type: i4.SkyDatepickerComponent, decorators: [{
|
435
|
-
type: Optional
|
436
|
-
}] }]; }, propDecorators: { dateFormat: [{
|
437
|
-
type: Input
|
438
|
-
}], disabled: [{
|
439
|
-
type: Input
|
440
|
-
}], futureDisabled: [{
|
441
|
-
type: Input
|
442
|
-
}], maxDate: [{
|
443
|
-
type: Input
|
444
|
-
}], minDate: [{
|
445
|
-
type: Input
|
446
|
-
}], skyDatepickerNoValidate: [{
|
447
|
-
type: Input
|
448
|
-
}], startingDay: [{
|
449
|
-
type: Input
|
450
|
-
}], yearRequired: [{
|
451
|
-
type: Input
|
452
|
-
}], onInputChange: [{
|
453
|
-
type: HostListener,
|
454
|
-
args: ['change', ['$event']]
|
455
|
-
}], onInputBlur: [{
|
456
|
-
type: HostListener,
|
457
|
-
args: ['blur']
|
458
|
-
}], onInput: [{
|
459
|
-
type: HostListener,
|
460
|
-
args: ['input']
|
461
|
-
}] } });
|
462
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZGF0ZXRpbWUvc3JjL2xpYi9tb2R1bGVzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC1mdXp6eS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBSUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUVSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFNcEQsTUFBTSxtQ0FBbUMsR0FBRztJQUMxQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0NBQWdDLENBQUM7SUFDL0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSw4QkFBOEIsR0FBRztJQUNyQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO0lBQy9ELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVNGLE1BQU0sT0FBTyxnQ0FBZ0M7SUFTM0M7Ozs7T0FJRztJQUNILElBQ1csVUFBVSxDQUFDLEtBQXlCO1FBQzdDLHVCQUFBLElBQUksaURBQWdCLEtBQUssTUFBQSxDQUFDO1FBRTFCLElBQUksdUJBQUEsSUFBSSxnR0FBTyxFQUFFO1lBQ2YsTUFBTSxhQUFhLEdBQUcsdUJBQUEsSUFBSSwwREFBa0IsQ0FBQyxNQUFNLENBQ2pELHVCQUFBLElBQUksZ0dBQU8sRUFDWCxJQUFJLENBQUMsVUFBVSxFQUNmLHVCQUFBLElBQUksZ0RBQVEsQ0FDYixDQUFDO1lBQ0YsdUJBQUEsSUFBSSwyR0FBc0IsTUFBMUIsSUFBSSxFQUF1QixhQUFhLENBQUMsQ0FBQztZQUMxQyx1QkFBQSxJQUFJLHdEQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxJQUFXLFVBQVU7UUFDbkIsT0FBTyxDQUNMLHVCQUFBLElBQUkscURBQWE7WUFDakIsdUJBQUEsSUFBSSx1REFBZSxDQUFDLFVBQVU7WUFDOUIsdUJBQUEsSUFBSSxrRUFBMEIsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBMEI7UUFDNUMsdUJBQUEsSUFBSSwrQ0FBYyxLQUFLLE1BQUEsQ0FBQztRQUN4Qix1QkFBQSxJQUFJLDZEQUFxQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFM0MsdUJBQUEsSUFBSSxrREFBVSxDQUFDLFdBQVcsQ0FDeEIsdUJBQUEsSUFBSSxvREFBWSxDQUFDLGFBQWEsRUFDOUIsVUFBVSxFQUNWLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLHVCQUFBLElBQUksbURBQVcsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQ1csY0FBYyxDQUFDLEtBQTBCO1FBQ2xELHVCQUFBLElBQUkscURBQW9CLEtBQUssTUFBQSxDQUFDO1FBQzlCLHVCQUFBLElBQUksMkRBQW1CLE1BQXZCLElBQUksQ0FBcUIsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sdUJBQUEsSUFBSSx5REFBaUIsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUNXLE9BQU8sQ0FBQyxLQUErQjtRQUNoRCx1QkFBQSxJQUFJLDhDQUFhLEtBQUssTUFBQSxDQUFDO1FBQ3ZCLHVCQUFBLElBQUksNkRBQXFCLENBQUMsT0FBTyxHQUFHLHVCQUFBLElBQUksaUdBQVksTUFBaEIsSUFBSSxDQUFjLENBQUM7UUFDdkQsdUJBQUEsSUFBSSwyREFBbUIsTUFBdkIsSUFBSSxDQUFxQixDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyx1QkFBQSxJQUFJLGtEQUFVLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxPQUFPLENBQUMsS0FBK0I7UUFDaEQsdUJBQUEsSUFBSSw4Q0FBYSxLQUFLLE1BQUEsQ0FBQztRQUN2Qix1QkFBQSxJQUFJLDZEQUFxQixDQUFDLE9BQU8sR0FBRyx1QkFBQSxJQUFJLGlHQUFZLE1BQWhCLElBQUksQ0FBYyxDQUFDO1FBQ3ZELHVCQUFBLElBQUksMkRBQW1CLE1BQXZCLElBQUksQ0FBcUIsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sdUJBQUEsSUFBSSxrREFBVSxDQUFDO0lBQ3hCLENBQUM7SUFTRDs7Ozs7T0FLRztJQUNILElBQ1csV0FBVyxDQUFDLEtBQXlCO1FBQzlDLHVCQUFBLElBQUksa0RBQWlCLEtBQUssTUFBQSxDQUFDO1FBQzNCLHVCQUFBLElBQUksNkRBQXFCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFekQsdUJBQUEsSUFBSSwyREFBbUIsTUFBdkIsSUFBSSxDQUFxQixDQUFDO0lBQzVCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sdUJBQUEsSUFBSSxzREFBYyxJQUFJLHVCQUFBLElBQUksdURBQWUsQ0FBQyxXQUFXLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csWUFBWSxDQUFDLEtBQTBCO1FBQ2hELHVCQUFBLElBQUksbURBQWtCLEtBQUssTUFBQSxDQUFDO1FBQzVCLHVCQUFBLElBQUksMkRBQW1CLE1BQXZCLElBQUksQ0FBcUIsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sdUJBQUEsSUFBSSx1REFBZSxDQUFDO0lBQzdCLENBQUM7SUE0Q0QsWUFDRSxjQUFpQyxFQUNqQyxhQUF5QyxFQUN6QyxVQUFzQixFQUN0QixnQkFBcUMsRUFDckMsY0FBb0MsRUFDcEMsUUFBbUIsRUFDbkIsZ0JBQXdDLEVBQzVCLG1CQUE0Qzs7UUExRjFEOzs7V0FHRztRQUVJLDRCQUF1QixHQUF3QixLQUFLLENBQUM7UUEyQzVELDREQUFzQztRQUV0QywwREFBaUIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFDO1FBRXhDLDJEQUFnQjtRQUVoQiw2RUFBOEM7UUFFOUMsMERBQWlCLElBQUksT0FBTyxFQUFRLEVBQUM7UUFFckMsNERBQXdDLEtBQUssRUFBQztRQUU5QyxnRUFBaUM7UUFFakMsc0RBQWtDLEtBQUssRUFBQztRQUV4Qyw2REFBb0M7UUFFcEMsNkRBQW9DO1FBRXBDLGlFQUFrQztRQUVsQywyREFBYTtRQUViLDBEQUFzQyxLQUFLLEVBQUM7UUFFNUMsbUVBQW1DO1FBQ25DLGtFQUEyQztRQUMzQywrREFBd0I7UUFDeEIscUVBQXVDO1FBQ3ZDLDZEQUFxQjtRQUNyQixxRUFBMEM7UUFDMUMsd0VBQTZDO1FBd1M3QyxnRUFBZ0U7UUFDaEUsdUJBQXVCO1FBQ3ZCLHFEQUFZLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLEVBQUM7UUFDM0IsZ0VBQWdFO1FBQ2hFLHVCQUF1QjtRQUN2QixzREFBYSxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUM7UUFDdEIsZ0VBQWdFO1FBQ2hFLHVCQUF1QjtRQUN2Qiw4REFBcUIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBcFM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYixpRUFBaUU7Z0JBQy9ELCtCQUErQixDQUNsQyxDQUFDO1NBQ0g7UUFFRCx1QkFBQSxJQUFJLG9EQUFtQixjQUFjLE1BQUEsQ0FBQztRQUN0Qyx1QkFBQSxJQUFJLG1EQUFrQixhQUFhLE1BQUEsQ0FBQztRQUNwQyx1QkFBQSxJQUFJLGdEQUFlLFVBQVUsTUFBQSxDQUFDO1FBQzlCLHVCQUFBLElBQUksc0RBQXFCLGdCQUFnQixNQUFBLENBQUM7UUFDMUMsdUJBQUEsSUFBSSw4Q0FBYSxRQUFRLE1BQUEsQ0FBQztRQUMxQix1QkFBQSxJQUFJLHNEQUFxQixnQkFBZ0IsTUFBQSxDQUFDO1FBQzFDLHVCQUFBLElBQUkseURBQXdCLG1CQUFtQixNQUFBLENBQUM7UUFFaEQsdUJBQUEsSUFBSSw0Q0FBVyxjQUFjLENBQUMsYUFBYSxNQUFBLENBQUM7UUFDNUMsY0FBYzthQUNYLGFBQWEsRUFBRTthQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQUEsSUFBSSx1REFBZSxDQUFDLENBQUM7YUFDcEMsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDeEIsdUJBQUEsSUFBSSw0Q0FBVyxVQUFVLENBQUMsTUFBTSxNQUFBLENBQUM7WUFDakMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksZ0RBQVEsQ0FBQyxDQUFDO1lBQ3pDLHVCQUFBLElBQUksOERBQ0YsZ0JBQWdCLENBQUMsMkJBQTJCLEVBQUUsTUFBQSxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDdEQsTUFBTSxJQUFJLEtBQUssQ0FDYixrR0FBa0csQ0FDbkcsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxNQUFNLE9BQU8sR0FBRyx1QkFBQSxJQUFJLG9EQUFZLENBQUMsYUFBYSxDQUFDO1FBRS9DLHVCQUFBLElBQUksa0RBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV4RCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQix1QkFBQSxJQUFJLDBEQUFrQjtpQkFDbkIsU0FBUyxDQUFDLGdDQUFnQyxDQUFDO2lCQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUFBLElBQUksdURBQWUsQ0FBQyxDQUFDO2lCQUNwQyxTQUFTLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDM0IsdUJBQUEsSUFBSSxrREFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLHVCQUFBLElBQUksNkRBQXFCLENBQUMsVUFBVTthQUNqQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLENBQUMsdUJBQUEsSUFBSSx1REFBZSxDQUFDLENBQUM7YUFDNUQsU0FBUyxDQUFDLENBQUMsS0FBVyxFQUFFLEVBQUU7WUFDekIsdUJBQUEsSUFBSSwrQ0FBVSxLQUFLLG1EQUFBLENBQUM7WUFDcEIsdUJBQUEsSUFBSSxtREFBVyxNQUFmLElBQUksQ0FBYSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGVBQWU7UUFDcEIsZ0RBQWdEO1FBQ2hELG1GQUFtRjtRQUNuRix1REFBdUQ7UUFDdkQsb0ZBQW9GO1FBQ3BGLDZEQUE2RDtRQUM3RCwwQkFBMEI7UUFFMUIsSUFBSSx1QkFBQSxJQUFJLGlEQUFTLElBQUksdUJBQUEsSUFBSSxpREFBUyxDQUFDLE1BQU0sRUFBRTtZQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLHVCQUFBLElBQUksaURBQVMsRUFBRSxRQUFRLENBQUMsdUJBQUEsSUFBSSxnR0FBTyxFQUFFO29CQUNuQyxTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO2dCQUVILHVCQUFBLElBQUksd0RBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLHVCQUFBLElBQUksdURBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQix1QkFBQSxJQUFJLHVEQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUdNLGFBQWEsQ0FBQyxLQUFVO1FBQzdCLHVCQUFBLElBQUksb0dBQWUsTUFBbkIsSUFBSSxFQUFnQixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFHTSxXQUFXO1FBQ2hCLHVCQUFBLElBQUksbURBQVcsTUFBZixJQUFJLENBQWEsQ0FBQztRQUVsQixNQUFNLGFBQWEsR0FBRyx1QkFBQSxJQUFJLDBEQUFrQixDQUFDLE1BQU0sQ0FDakQsdUJBQUEsSUFBSSxnR0FBTyxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsdUJBQUEsSUFBSSxnREFBUSxDQUNiLENBQUM7UUFFRixJQUFJLHVCQUFBLElBQUksaURBQVMsRUFBRSxLQUFLLEVBQUU7WUFDeEIsdUJBQUEsSUFBSSwyR0FBc0IsTUFBMUIsSUFBSSxFQUF1QixhQUFhLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFHTSxPQUFPO1FBQ1osdUJBQUEsSUFBSSxpREFBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVTtRQUMxQix1QkFBQSxJQUFJLGtHQUFhLE1BQWpCLElBQUksRUFBYyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxPQUF3QjtRQUN0QyxJQUFJLENBQUMsdUJBQUEsSUFBSSxpREFBUyxFQUFFO1lBQ2xCLHVCQUFBLElBQUksNkNBQVksT0FBTyxNQUFBLENBQUM7U0FDekI7UUFFRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLHVCQUFBLElBQUksaURBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sS0FBSyxHQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFFakMsSUFBSSxTQUFtQyxDQUFDO1FBQ3hDLElBQUksZUFBZSxHQUE0QixJQUFJLENBQUM7UUFFcEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsU0FBUyxHQUFHLHVCQUFBLElBQUksMERBQWtCLENBQUMsc0JBQXNCLENBQ3ZELEtBQUssRUFDTCxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO1NBQ0g7YUFBTTtZQUNMLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDbkI7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsZUFBZSxHQUFHO2dCQUNoQixZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFLEtBQUs7aUJBQ2Y7YUFDRixDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hDLGVBQWUsR0FBRztvQkFDaEIsWUFBWSxFQUFFO3dCQUNaLFlBQVksRUFBRSxLQUFLO3FCQUNwQjtpQkFDRixDQUFDO2FBQ0g7WUFFRCxJQUFJLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RDLElBQUksY0FBYyxDQUFDO2dCQUVuQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLGNBQWMsR0FBRyx1QkFBQSxJQUFJLDBEQUFrQixDQUFDLGlCQUFpQixDQUN2RCxTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO29CQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO3dCQUN6QixlQUFlLEdBQUc7NEJBQ2hCLFlBQVksRUFBRTtnQ0FDWixPQUFPLEVBQUUsS0FBSzs2QkFDZjt5QkFDRixDQUFDO3FCQUNIO2lCQUNGO2dCQUVELElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDcEMsY0FBYyxHQUFHLHVCQUFBLElBQUksMERBQWtCLENBQUMsaUJBQWlCLENBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQ1osU0FBUyxDQUNWLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7d0JBQ3pCLGVBQWUsR0FBRzs0QkFDaEIsWUFBWSxFQUFFO2dDQUNaLE9BQU8sRUFBRSxLQUFLOzZCQUNmO3lCQUNGLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUMzQyxjQUFjLEdBQUcsdUJBQUEsSUFBSSwwREFBa0IsQ0FBQyxpQkFBaUIsQ0FDdkQsU0FBUyxFQUNULHVCQUFBLElBQUksMERBQWtCLENBQUMsbUJBQW1CLEVBQUUsQ0FDN0MsQ0FBQztvQkFDRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTt3QkFDekIsZUFBZSxHQUFHOzRCQUNoQixZQUFZLEVBQUU7Z0NBQ1osY0FBYyxFQUFFLEtBQUs7NkJBQ3RCO3lCQUNGLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsSUFBSSxlQUFlLEVBQUU7WUFDbkIscUZBQXFGO1lBQ3JGLHdGQUF3RjtZQUN4Rix1QkFBQSxJQUFJLGlEQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDL0I7UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBd0I7UUFDOUMsdUJBQUEsSUFBSSw4Q0FBYSxFQUFFLE1BQUEsQ0FBQztJQUN0QixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBYztRQUNyQyx1QkFBQSxJQUFJLCtDQUFjLEVBQUUsTUFBQSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxFQUFjO1FBQzdDLHVCQUFBLElBQUksdURBQXNCLEVBQUUsTUFBQSxDQUFDO0lBQy9CLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6Qix1QkFBQSxJQUFJLDZEQUFxQixDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHNCQUFzQjtRQUMzQix1QkFBQSxJQUFJLG9HQUFlLE1BQW5CLElBQUksRUFBZ0IsdUJBQUEsSUFBSSxvREFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDOzs7SUFoU0MsT0FBTyx1QkFBQSxJQUFJLGdEQUFRLENBQUM7QUFDdEIsQ0FBQyxxR0FFVSxLQUFVO0lBQ25CLHVCQUFBLElBQUksa0dBQWEsTUFBakIsSUFBSSxFQUFjLEtBQUssQ0FBQyxDQUFDO0FBQzNCLENBQUMsNkdBNlJjLFFBQWdCO0lBQzdCLHVCQUFBLElBQUksK0NBQVUsUUFBUSxtREFBQSxDQUFDO0FBQ3pCLENBQUMsMkhBRXFCLEtBQWE7SUFDakMsdUJBQUEsSUFBSSxrREFBVSxDQUFDLFdBQVcsQ0FBQyx1QkFBQSxJQUFJLG9EQUFZLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RSxDQUFDO0lBR0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLHVCQUFBLElBQUksMERBQWtCLENBQUMsc0JBQXNCLENBQzNELElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO0tBQ0Y7U0FBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDOUIsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0tBQ25CO0lBQ0QsT0FBTyx1QkFBQSxJQUFJLHVEQUFlLENBQUMsT0FBTyxDQUFDO0FBQ3JDLENBQUM7SUFHQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDaEIsTUFBTSxPQUFPLEdBQUcsdUJBQUEsSUFBSSwwREFBa0IsQ0FBQyxzQkFBc0IsQ0FDM0QsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO1FBQ0YsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckIsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekI7S0FDRjtJQUNELE9BQU8sdUJBQUEsSUFBSSx1REFBZSxDQUFDLE9BQU8sQ0FBQztBQUNyQyxDQUFDLGlIQUdnQixLQUFvQixFQUFFLEtBQW9CO0lBQ3pELE9BQU8sQ0FDTCxLQUFLLEtBQUssU0FBUztRQUNuQixLQUFLLEtBQUssU0FBUztRQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUM1RCxDQUFDO0FBQ0osQ0FBQyx5R0FpQlksS0FBVSxFQUFFLFNBQVMsR0FBRyxJQUFJO0lBQ3ZDLElBQ0UsdUJBQUEsSUFBSSxnREFBUSxLQUFLLEtBQUs7UUFDdEIsQ0FBQyx1QkFBQSxJQUFJLGdEQUFRLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsRUFDOUM7UUFDQSxPQUFPO0tBQ1I7SUFFRCxJQUFJLFNBQW1DLENBQUM7SUFDeEMsSUFBSSxXQUFnQixDQUFDO0lBQ3JCLElBQUksU0FBMkIsQ0FBQztJQUNoQyxJQUFJLGFBQWlDLENBQUM7SUFFdEMsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO1FBQ3pCLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFBYSxHQUFHLHVCQUFBLElBQUksdURBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxTQUFTLEdBQUcsdUJBQUEsSUFBSSwwREFBa0IsQ0FBQyw0QkFBNEIsQ0FDN0QsS0FBSyxFQUNMLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7S0FDSDtTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ3BDLFNBQVMsR0FBRyx1QkFBQSxJQUFJLDBEQUFrQixDQUFDLHNCQUFzQixDQUN2RCxLQUFLLEVBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IsYUFBYSxHQUFHLHVCQUFBLElBQUksMERBQWtCLENBQUMsTUFBTSxDQUMzQyxTQUFTLEVBQ1QsSUFBSSxDQUFDLFVBQVUsRUFDZix1QkFBQSxJQUFJLGdEQUFRLENBQ2IsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixhQUFhLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCO1FBRUQsV0FBVyxHQUFHLHVCQUFBLElBQUksMERBQWtCLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkUsSUFBSSxXQUFXLEVBQUU7WUFDZixTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2xDO0tBQ0Y7U0FBTTtRQUNMLFNBQVMsR0FBRyxLQUFxQixDQUFDO1FBQ2xDLGFBQWEsR0FBRyx1QkFBQSxJQUFJLDBEQUFrQixDQUFDLE1BQU0sQ0FDM0MsU0FBUyxFQUNULElBQUksQ0FBQyxVQUFVLEVBQ2YsdUJBQUEsSUFBSSxnREFBUSxDQUNiLENBQUM7UUFDRixXQUFXLEdBQUcsdUJBQUEsSUFBSSwwREFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2RSxJQUFJLFdBQVcsRUFBRTtZQUNmLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDbEM7S0FDRjtJQUVELE1BQU0sa0JBQWtCLEdBQUcsdUJBQUEsSUFBSSxzR0FBaUIsTUFBckIsSUFBSSxFQUFrQix1QkFBQSxJQUFJLGdEQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUUsTUFBTSxVQUFVLEdBQUcsU0FBUyxLQUFLLHVCQUFBLElBQUksZ0RBQVEsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBRXJFLHVCQUFBLElBQUksNENBQVcsU0FBUyxJQUFJLEtBQUssTUFBQSxDQUFDO0lBRWxDLElBQUksVUFBVSxFQUFFO1FBQ2QsSUFBSSxTQUFTLEVBQUU7WUFDYix1QkFBQSxJQUFJLGtEQUFVLE1BQWQsSUFBSSxFQUFXLHVCQUFBLElBQUksZ0RBQVEsQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCx1QkFBQSxJQUFJLGlEQUFTLEVBQUUsUUFBUSxDQUFDLHVCQUFBLElBQUksZ0RBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsdUJBQUEsSUFBSSw2REFBcUIsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0tBQ3BEO0lBRUQsdUJBQUEsSUFBSSwyR0FBc0IsTUFBMUIsSUFBSSxFQUF1QixhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEQsQ0FBQzs2SEEzakJVLGdDQUFnQztpSEFBaEMsZ0NBQWdDLG1aQUxoQztRQUNULG1DQUFtQztRQUNuQyw4QkFBOEI7S0FDL0I7MkZBRVUsZ0NBQWdDO2tCQVA1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFNBQVMsRUFBRTt3QkFDVCxtQ0FBbUM7d0JBQ25DLDhCQUE4QjtxQkFDL0I7aUJBQ0Y7OzBCQXVNSSxRQUFROzRDQXZMQSxVQUFVO3NCQURwQixLQUFLO2dCQThCSyxRQUFRO3NCQURsQixLQUFLO2dCQXNCSyxjQUFjO3NCQUR4QixLQUFLO2dCQWlCSyxPQUFPO3NCQURqQixLQUFLO2dCQWtCSyxPQUFPO3NCQURqQixLQUFLO2dCQWdCQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBVUssV0FBVztzQkFEckIsS0FBSztnQkFrQkssWUFBWTtzQkFEdEIsS0FBSztnQkFxSkMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTTNCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsTUFBTTtnQkFnQmIsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lBcHBMb2NhbGVQcm92aWRlciwgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5RGF0ZUZvcm1hdHRlciB9IGZyb20gJy4vZGF0ZS1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2RhdGVwaWNrZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5RGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RnV6enlEYXRlIH0gZnJvbSAnLi9mdXp6eS1kYXRlJztcbmltcG9ydCB7IFNreUZ1enp5RGF0ZVNlcnZpY2UgfSBmcm9tICcuL2Z1enp5LWRhdGUuc2VydmljZSc7XG5cbmNvbnN0IFNLWV9GVVpaWV9EQVRFUElDS0VSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RnV6enlEYXRlcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmNvbnN0IFNLWV9GVVpaWV9EQVRFUElDS0VSX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5RnV6enlEYXRlcGlja2VySW5wdXREaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tza3lGdXp6eURhdGVwaWNrZXJJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxVRV9BQ0NFU1NPUixcbiAgICBTS1lfRlVaWllfREFURVBJQ0tFUl9WQUxJREFUT1IsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUZ1enp5RGF0ZXBpY2tlcklucHV0RGlyZWN0aXZlXG4gIGltcGxlbWVudHNcbiAgICBPbkluaXQsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFRoZSBkYXRlIGZvcm1hdCBmb3IgdGhlIGlucHV0LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqIEBkZWZhdWx0IFwiTU0vREQvWVlZWVwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGVGb3JtYXQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kYXRlRm9ybWF0ID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy4jdmFsdWUpIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgdGhpcy4jdmFsdWUsXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGhpcy4jbG9jYWxlXG4gICAgICApO1xuICAgICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSk7XG4gICAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciB0byBub3QgaGF2ZSBnZXR0ZXIgbG9naWNcbiAgcHVibGljIGdldCBkYXRlRm9ybWF0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuI19kYXRlRm9ybWF0IHx8XG4gICAgICB0aGlzLiNjb25maWdTZXJ2aWNlLmRhdGVGb3JtYXQgfHxcbiAgICAgIHRoaXMuI3ByZWZlcnJlZFNob3J0RGF0ZUZvcm1hdFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIG9uIHRlbXBsYXRlLWRyaXZlbiBmb3Jtcy4gRG9uJ3QgdXNlIHRoaXMgaW5wdXQgb24gcmVhY3RpdmUgZm9ybXMgYmVjYXVzZSB0aGV5IG1heSBvdmVyd3JpdGUgdGhlIGlucHV0IG9yIGxlYXZlIHRoZSBjb250cm9sIG91dCBvZiBzeW5jLlxuICAgKiBUbyBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9uIHJlYWN0aXZlIGZvcm1zLCB1c2UgdGhlIGBGb3JtQ29udHJvbGAgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gdmFsdWU7XG5cbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNhYmxlZCcsXG4gICAgICB2YWx1ZVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0byBwcmV2ZW50IHVzZXJzIGZyb20gc3BlY2lmeWluZyBkYXRlcyB0aGF0IGFyZSBpbiB0aGUgZnV0dXJlLlxuICAgKiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmdXR1cmVEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19mdXR1cmVEaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZ1dHVyZURpc2FibGVkKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfZnV0dXJlRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBmdXp6eSBkYXRlIGFsbG93ZWQuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnRcbiAgICogdG8gcHJldmVudCBmdXp6eSBkYXRlcyBhZnRlciBhIHNwZWNpZmllZCBkYXRlLiBUaGlzIHByb3BlcnR5IGFjY2VwdHNcbiAgICogYSBgU2t5RnV6enlEYXRlYCB2YWx1ZSB0aGF0IGluY2x1ZGVzIG51bWVyaWMgbW9udGgsIGRheSwgYW5kIHllYXIgdmFsdWVzLlxuICAgKiBGb3IgZXhhbXBsZTogYHsgbW9udGg6IDEsIGRheTogMSwgeWVhcjogMjAyNyB9YC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWF4RGF0ZSh2YWx1ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX21heERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50Lm1heERhdGUgPSB0aGlzLiNnZXRNYXhEYXRlKCk7XG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWF4RGF0ZSgpOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfbWF4RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZWFybGllc3QgZnV6enkgZGF0ZSBhbGxvd2VkLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50XG4gICAqIHRvIHByZXZlbnQgZnV6enkgZGF0ZXMgYmVmb3JlIGEgc3BlY2lmaWVkIGRhdGUuIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBhIGBTa3lGdXp6eURhdGVgIHZhbHVlXG4gICAqIHRoYXQgaW5jbHVkZXMgbnVtZXJpYyBtb250aCwgZGF5LCBhbmQgeWVhciB2YWx1ZXMuXG4gICAqIEZvciBleGFtcGxlOiBgeyBtb250aDogMSwgZGF5OiAxLCB5ZWFyOiAyMDA3IH1gLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5EYXRlKHZhbHVlOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfbWluRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQubWluRGF0ZSA9IHRoaXMuI2dldE1pbkRhdGUoKTtcbiAgICB0aGlzLiNvblZhbGlkYXRvckNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19taW5EYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBkYXRlIHZhbGlkYXRpb24gb24gdGhlIGZ1enp5IGRhdGVwaWNrZXIgaW5wdXQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2t5RGF0ZXBpY2tlck5vVmFsaWRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHN0YXJ0aW5nIGRheSBvZiB0aGUgd2VlayBpbiB0aGUgY2FsZW5kYXIsIHdoZXJlIGAwYCBzZXRzIHRoZSBzdGFydGluZyBkYXlcbiAgICogdG8gU3VuZGF5LiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0XG4gICAqIGluIGBTa3lEYXRlcGlja2VyQ29uZmlnU2VydmljZWAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3RhcnRpbmdEYXkodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19zdGFydGluZ0RheSA9IHZhbHVlO1xuICAgIHRoaXMuI2RhdGVwaWNrZXJDb21wb25lbnQuc3RhcnRpbmdEYXkgPSB0aGlzLnN0YXJ0aW5nRGF5O1xuXG4gICAgdGhpcy4jb25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIHRvIG5vdCBoYXZlIGdldHRlciBsb2dpY1xuICBwdWJsaWMgZ2V0IHN0YXJ0aW5nRGF5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI19zdGFydGluZ0RheSB8fCB0aGlzLiNjb25maWdTZXJ2aWNlLnN0YXJ0aW5nRGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVxdWlyZSB0aGUgeWVhciBpbiBmdXp6eSBkYXRlcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgeWVhclJlcXVpcmVkKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3llYXJSZXF1aXJlZCA9IHZhbHVlO1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHllYXJSZXF1aXJlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3llYXJSZXF1aXJlZDtcbiAgfVxuXG4gIGdldCAjdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy4jX3ZhbHVlO1xuICB9XG5cbiAgc2V0ICN2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy4jdXBkYXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgI2NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZDtcblxuICAjZGF0ZUZvcm1hdHRlciA9IG5ldyBTa3lEYXRlRm9ybWF0dGVyKCk7XG5cbiAgI2xvY2FsZTogc3RyaW5nO1xuXG4gICNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI19mdXR1cmVEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gICNfZGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICNfZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAjX21heERhdGU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZDtcblxuICAjX21pbkRhdGU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZDtcblxuICAjX3N0YXJ0aW5nRGF5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgI192YWx1ZTogYW55O1xuXG4gICNfeWVhclJlcXVpcmVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgI2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgI2NvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI2Z1enp5RGF0ZVNlcnZpY2U6IFNreUZ1enp5RGF0ZVNlcnZpY2U7XG4gICNyZW5kZXJlcjogUmVuZGVyZXIyO1xuICAjcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZTtcbiAgI2RhdGVwaWNrZXJDb21wb25lbnQ6IFNreURhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGNvbmZpZ1NlcnZpY2U6IFNreURhdGVwaWNrZXJDb25maWdTZXJ2aWNlLFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgZnV6enlEYXRlU2VydmljZTogU2t5RnV6enlEYXRlU2VydmljZSxcbiAgICBsb2NhbGVQcm92aWRlcjogU2t5QXBwTG9jYWxlUHJvdmlkZXIsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICByZXNvdXJjZXNTZXJ2aWNlOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGRhdGVwaWNrZXJDb21wb25lbnQ/OiBTa3lEYXRlcGlja2VyQ29tcG9uZW50XG4gICkge1xuICAgIGlmICghZGF0ZXBpY2tlckNvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnWW91IG11c3Qgd3JhcCB0aGUgYHNreUZ1enp5RGF0ZXBpY2tlcklucHV0YCBkaXJlY3RpdmUgd2l0aGluIGEgJyArXG4gICAgICAgICAgJ2A8c2t5LWRhdGVwaWNrZXI+YCBjb21wb25lbnQhJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2NvbmZpZ1NlcnZpY2UgPSBjb25maWdTZXJ2aWNlO1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UgPSBmdXp6eURhdGVTZXJ2aWNlO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jcmVzb3VyY2VzU2VydmljZSA9IHJlc291cmNlc1NlcnZpY2U7XG4gICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudCA9IGRhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgICB0aGlzLiNsb2NhbGUgPSBsb2NhbGVQcm92aWRlci5kZWZhdWx0TG9jYWxlO1xuICAgIGxvY2FsZVByb3ZpZGVyXG4gICAgICAuZ2V0TG9jYWxlSW5mbygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuI2xvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgICBTa3lEYXRlRm9ybWF0dGVyLnNldExvY2FsZSh0aGlzLiNsb2NhbGUpO1xuICAgICAgICB0aGlzLiNwcmVmZXJyZWRTaG9ydERhdGVGb3JtYXQgPVxuICAgICAgICAgIFNreURhdGVGb3JtYXR0ZXIuZ2V0UHJlZmVycmVkU2hvcnREYXRlRm9ybWF0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy55ZWFyUmVxdWlyZWQpIHtcbiAgICAgIGlmICh0aGlzLmRhdGVGb3JtYXQ/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigneScpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1lvdSBoYXZlIGNvbmZpZ3VyZWQgY29uZmxpY3Rpbmcgc2V0dGluZ3MuIFllYXIgaXMgcmVxdWlyZWQgYW5kIGRhdGVGb3JtYXQgZG9lcyBub3QgaW5jbHVkZSB5ZWFyLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcblxuICAgIGNvbnN0IGhhc0FyaWFMYWJlbCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghaGFzQXJpYUxhYmVsKSB7XG4gICAgICB0aGlzLiNyZXNvdXJjZXNTZXJ2aWNlXG4gICAgICAgIC5nZXRTdHJpbmcoJ3NreXV4X2RhdGVfZmllbGRfZGVmYXVsdF9sYWJlbCcpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuI3JlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCAnYXJpYS1sYWJlbCcsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRhdGVDaGFuZ2VcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBEYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuI3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGFkZHJlc3MgYSBidWcgaW4gQW5ndWxhciA0LlxuICAgIC8vIFdoZW4gYSBjb250cm9sIHZhbHVlIGlzIHNldCBpbml0aWFsbHksIGl0cyB2YWx1ZSBpcyBub3QgcmVwcmVzZW50ZWQgb24gdGhlIHZpZXcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzc5MlxuICAgIC8vIE9mIG5vdGUgaXMgdGhlIHBhcmVudCBjaGVjayB3aGljaCBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHJlYWN0aXZlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBjaGVjayB0aGVyZSBpcyBhIGNoYW5nZWQgYmVmb3JlIGNoZWNrZWQgZXJyb3JcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXG4gICAgaWYgKHRoaXMuI2NvbnRyb2wgJiYgdGhpcy4jY29udHJvbC5wYXJlbnQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiN2YWx1ZSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLiNvblZhbHVlQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgcHVibGljIG9uSW5wdXRCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVG91Y2hlZCgpO1xuXG4gICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZm9ybWF0KFxuICAgICAgdGhpcy4jdmFsdWUsXG4gICAgICB0aGlzLmRhdGVGb3JtYXQsXG4gICAgICB0aGlzLiNsb2NhbGVcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuI2NvbnRyb2w/LnZhbGlkKSB7XG4gICAgICB0aGlzLiNzZXRJbnB1dEVsZW1lbnRWYWx1ZShmb3JtYXR0ZWREYXRlKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXG4gIHB1YmxpYyBvbklucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuI2NvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy4jdXBkYXRlVmFsdWUodmFsdWUsIGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLiNjb250cm9sKSB7XG4gICAgICB0aGlzLiNjb250cm9sID0gY29udHJvbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5za3lEYXRlcGlja2VyTm9WYWxpZGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLiNjb250cm9sLnZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZTogYW55ID0gY29udHJvbC52YWx1ZTtcblxuICAgIGxldCBmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgdmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgZnV6enlEYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVGcm9tU3RyaW5nKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdXp6eURhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICBpbnZhbGlkOiB2YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZnV6enlEYXRlLnllYXIgJiYgdGhpcy55ZWFyUmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgeWVhclJlcXVpcmVkOiB2YWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiBmdXp6eURhdGUueWVhcikge1xuICAgICAgICBsZXQgZnV6enlEYXRlUmFuZ2U7XG5cbiAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgIGZ1enp5RGF0ZVJhbmdlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVSYW5nZShcbiAgICAgICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgICAgIHRoaXMubWF4RGF0ZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWZ1enp5RGF0ZVJhbmdlLnZhbGlkKSB7XG4gICAgICAgICAgICB2YWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgICAgICAgICAgIHNreUZ1enp5RGF0ZToge1xuICAgICAgICAgICAgICAgIG1heERhdGU6IHZhbHVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICBmdXp6eURhdGVSYW5nZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0RnV6enlEYXRlUmFuZ2UoXG4gICAgICAgICAgICB0aGlzLm1pbkRhdGUsXG4gICAgICAgICAgICBmdXp6eURhdGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghZnV6enlEYXRlUmFuZ2UudmFsaWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25FcnJvciA9IHtcbiAgICAgICAgICAgICAgc2t5RnV6enlEYXRlOiB7XG4gICAgICAgICAgICAgICAgbWluRGF0ZTogdmFsdWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWRhdGlvbkVycm9yICYmIHRoaXMuZnV0dXJlRGlzYWJsZWQpIHtcbiAgICAgICAgICBmdXp6eURhdGVSYW5nZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0RnV6enlEYXRlUmFuZ2UoXG4gICAgICAgICAgICBmdXp6eURhdGUsXG4gICAgICAgICAgICB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldEN1cnJlbnRGdXp6eURhdGUoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFmdXp6eURhdGVSYW5nZS52YWxpZCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkVycm9yID0ge1xuICAgICAgICAgICAgICBza3lGdXp6eURhdGU6IHtcbiAgICAgICAgICAgICAgICBmdXR1cmVEaXNhYmxlZDogdmFsdWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIC8vIE1hcmsgdGhlIGludmFsaWQgY29udHJvbCBhcyB0b3VjaGVkIHNvIHRoYXQgdGhlIGlucHV0J3MgaW52YWxpZCBDU1Mgc3R5bGVzIGFwcGVhci5cbiAgICAgIC8vIChUaGlzIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB0aGUgaW52YWxpZCB2YWx1ZSBpcyBzZXQgYnkgdGhlIEZvcm1Db250cm9sIGNvbnN0cnVjdG9yLilcbiAgICAgIHRoaXMuI2NvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLiNvbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy4jb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB0aGlzLiNkYXRlcGlja2VyQ29tcG9uZW50LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0cyBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQncyB2YWx1ZSBhbmQgdXBkYXRlcyB0aGUgbmdNb2RlbCBhY2NvcmRpbmdseS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoZSBuZ01vZGVsIHZhbHVlIGJlZm9yZSB0aGUgaW5wdXQgZWxlbWVudCBsb3NlcyBmb2N1cy5cbiAgICovXG4gIHB1YmxpYyBkZXRlY3RJbnB1dFZhbHVlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuI29uVmFsdWVDaGFuZ2UodGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gICNvblZhbHVlQ2hhbmdlKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiN2YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgI3NldElucHV0RWxlbWVudFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgfVxuXG4gICNnZXRNYXhEYXRlKCk6IERhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLm1heERhdGUpIHtcbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoXG4gICAgICAgIHRoaXMubWF4RGF0ZVxuICAgICAgKTtcbiAgICAgIGlmIChtYXhEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbWF4RGF0ZS50b0RhdGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZnV0dXJlRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jY29uZmlnU2VydmljZS5tYXhEYXRlO1xuICB9XG5cbiAgI2dldE1pbkRhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMubWluRGF0ZSkge1xuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShcbiAgICAgICAgdGhpcy5taW5EYXRlXG4gICAgICApO1xuICAgICAgaWYgKG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBtaW5EYXRlLnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jY29uZmlnU2VydmljZS5taW5EYXRlO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgI2Z1enp5RGF0ZXNFcXVhbChkYXRlQT86IFNreUZ1enp5RGF0ZSwgZGF0ZUI/OiBTa3lGdXp6eURhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0ZUEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZGF0ZUIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKCghZGF0ZUEuZGF5ICYmICFkYXRlQi5kYXkpIHx8IGRhdGVBLmRheSA9PT0gZGF0ZUIuZGF5KSAmJlxuICAgICAgKCghZGF0ZUEubW9udGggJiYgIWRhdGVCLm1vbnRoKSB8fCBkYXRlQS5tb250aCA9PT0gZGF0ZUIubW9udGgpICYmXG4gICAgICAoKCFkYXRlQS55ZWFyICYmICFkYXRlQi55ZWFyKSB8fCBkYXRlQS55ZWFyID09PSBkYXRlQi55ZWFyKVxuICAgICk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICNvblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAjb25WYWxpZGF0b3JDaGFuZ2UgPSAoKSA9PiB7fTtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBjb250cm9sIGFuZCBpbnB1dCBlbGVtZW50XG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgRGVub3RlcyBpZiB3ZSBlbWl0IGFuIGV2ZW50IHRvIHRoZSBjb25zdW1lcidzIGZvcm0gY29udHJvbC4gV2UgZG8gbm90IHdhbnQgdG8gZG8gdGhpcyBpZiB0aGUgdmFsdWUgaXMgYmVpbmcgdXBkYXRlZCB2aWEgYSBgc2V0VmFsdWVgIGNhbGwgb3IgYSBgcGF0Y2hWYWx1ZWAgY2FsbCBhcyB0aGlzIGlzIGFscmVhZHkgaGFuZGxlZCBieSBBbmd1bGFyLlxuICAgKiBJbiB0aGVzZSBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byBmaXJlIGBvbkNoYW5nZWAgYXMgaXQgd2lsbCBjYXVzZSBleHRyYSBgdmFsdWVDaGFuZ2VgIGFuZCBgc3RhdHVzQ2hhbmdlYCBldmVudHMgYW5kIHRoZSBzdGF0dXMgb2YgdGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLlxuICAgKi9cbiAgI3VwZGF0ZVZhbHVlKHZhbHVlOiBhbnksIGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLiNfdmFsdWUgPT09IHZhbHVlIHx8XG4gICAgICAodGhpcy4jX3ZhbHVlID09PSB1bmRlZmluZWQgJiYgdmFsdWUgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkO1xuICAgIGxldCBmdXp6eU1vbWVudDogYW55O1xuICAgIGxldCBkYXRlVmFsdWU6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZvcm1hdHRlZERhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGRhdGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgZm9ybWF0dGVkRGF0ZSA9IHRoaXMuI2RhdGVGb3JtYXR0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgZnV6enlEYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVGcm9tU2VsZWN0ZWREYXRlKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgZnV6enlEYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5nZXRGdXp6eURhdGVGcm9tU3RyaW5nKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0XG4gICAgICApO1xuICAgICAgaWYgKGZ1enp5RGF0ZSkge1xuICAgICAgICBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5mb3JtYXQoXG4gICAgICAgICAgZnV6enlEYXRlLFxuICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgICB0aGlzLiNsb2NhbGVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGUgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgZnV6enlNb21lbnQgPSB0aGlzLiNmdXp6eURhdGVTZXJ2aWNlLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKTtcblxuICAgICAgaWYgKGZ1enp5TW9tZW50KSB7XG4gICAgICAgIGRhdGVWYWx1ZSA9IGZ1enp5TW9tZW50LnRvRGF0ZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmdXp6eURhdGUgPSB2YWx1ZSBhcyBTa3lGdXp6eURhdGU7XG4gICAgICBmb3JtYXR0ZWREYXRlID0gdGhpcy4jZnV6enlEYXRlU2VydmljZS5mb3JtYXQoXG4gICAgICAgIGZ1enp5RGF0ZSxcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLiNsb2NhbGVcbiAgICAgICk7XG4gICAgICBmdXp6eU1vbWVudCA9IHRoaXMuI2Z1enp5RGF0ZVNlcnZpY2UuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShmdXp6eURhdGUpO1xuXG4gICAgICBpZiAoZnV6enlNb21lbnQpIHtcbiAgICAgICAgZGF0ZVZhbHVlID0gZnV6enlNb21lbnQudG9EYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXJlRnV6enlEYXRlc0VxdWFsID0gdGhpcy4jZnV6enlEYXRlc0VxdWFsKHRoaXMuI192YWx1ZSwgZnV6enlEYXRlKTtcbiAgICBjb25zdCBpc05ld1ZhbHVlID0gZnV6enlEYXRlICE9PSB0aGlzLiNfdmFsdWUgfHwgIWFyZUZ1enp5RGF0ZXNFcXVhbDtcblxuICAgIHRoaXMuI192YWx1ZSA9IGZ1enp5RGF0ZSB8fCB2YWx1ZTtcblxuICAgIGlmIChpc05ld1ZhbHVlKSB7XG4gICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgIHRoaXMuI29uQ2hhbmdlKHRoaXMuI192YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNjb250cm9sPy5zZXRWYWx1ZSh0aGlzLiNfdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy4jZGF0ZXBpY2tlckNvbXBvbmVudC5zZWxlY3RlZERhdGUgPSBkYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy4jc2V0SW5wdXRFbGVtZW50VmFsdWUoZm9ybWF0dGVkRGF0ZSB8fCAnJyk7XG4gIH1cbn1cbiJdfQ==
|