@skyux/lookup 6.3.2 → 6.5.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 +909 -927
- package/esm2020/lib/modules/autocomplete/autocomplete-adapter.service.mjs +12 -8
- package/esm2020/lib/modules/autocomplete/autocomplete-default-search-function.mjs +1 -1
- package/esm2020/lib/modules/autocomplete/autocomplete-input.directive.mjs +82 -69
- package/esm2020/lib/modules/autocomplete/autocomplete.component.mjs +377 -381
- package/esm2020/lib/modules/country-field/country-field.component.mjs +170 -152
- package/esm2020/lib/modules/lookup/lookup-autocomplete-adapter.mjs +14 -8
- package/esm2020/lib/modules/lookup/lookup-show-more-async-modal.component.mjs +65 -58
- package/esm2020/lib/modules/lookup/lookup-show-more-modal.component.mjs +49 -41
- package/esm2020/lib/modules/lookup/lookup.component.mjs +231 -222
- package/esm2020/lib/modules/lookup/types/lookup-show-more-custom-picker-context.mjs +1 -1
- package/esm2020/lib/modules/lookup/types/lookup-show-more-native-picker-async-context.mjs +1 -1
- package/esm2020/lib/modules/lookup/types/lookup-show-more-native-picker-context.mjs +1 -1
- package/esm2020/lib/modules/search/search-adapter.service.mjs +22 -21
- package/esm2020/lib/modules/search/search.component.mjs +68 -67
- package/esm2020/testing/country-field/country-field-fixture.mjs +1 -1
- package/fesm2015/skyux-lookup-testing.mjs.map +1 -1
- package/fesm2015/skyux-lookup.mjs +1075 -1021
- package/fesm2015/skyux-lookup.mjs.map +1 -1
- package/fesm2020/skyux-lookup-testing.mjs.map +1 -1
- package/fesm2020/skyux-lookup.mjs +1073 -1019
- package/fesm2020/skyux-lookup.mjs.map +1 -1
- package/lib/modules/autocomplete/autocomplete-adapter.service.d.ts +1 -3
- package/lib/modules/autocomplete/autocomplete-input.directive.d.ts +3 -16
- package/lib/modules/autocomplete/autocomplete.component.d.ts +20 -76
- package/lib/modules/country-field/country-field.component.d.ts +14 -36
- package/lib/modules/lookup/lookup-autocomplete-adapter.d.ts +6 -8
- package/lib/modules/lookup/lookup-show-more-async-modal.component.d.ts +9 -16
- package/lib/modules/lookup/lookup-show-more-modal.component.d.ts +3 -4
- package/lib/modules/lookup/lookup.component.d.ts +17 -42
- package/lib/modules/lookup/types/lookup-show-more-native-picker-async-context.d.ts +1 -1
- package/lib/modules/lookup/types/lookup-show-more-native-picker-context.d.ts +1 -1
- package/lib/modules/search/search-adapter.service.d.ts +1 -5
- package/lib/modules/search/search.component.d.ts +11 -22
- package/package.json +10 -10
- package/testing/country-field/country-field-fixture.d.ts +1 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
var _SkyCountryFieldComponent_instances, _SkyCountryFieldComponent_changeDetector, _SkyCountryFieldComponent_defaultCountryData, _SkyCountryFieldComponent_elRef, _SkyCountryFieldComponent_idle, _SkyCountryFieldComponent_injector, _SkyCountryFieldComponent_internalFormChange, _SkyCountryFieldComponent_isInitialChange, _SkyCountryFieldComponent_ngControl, _SkyCountryFieldComponent_ngUnsubscribe, _SkyCountryFieldComponent_themeSvc, _SkyCountryFieldComponent_windowRef, _SkyCountryFieldComponent__defaultCountry, _SkyCountryFieldComponent__disabled, _SkyCountryFieldComponent__includePhoneInfo, _SkyCountryFieldComponent__selectedCountry, _SkyCountryFieldComponent__supportedCountryISOs, _SkyCountryFieldComponent_countriesAreEqual, _SkyCountryFieldComponent_countriesEqual, _SkyCountryFieldComponent_removeEventListeners, _SkyCountryFieldComponent_setupCountries, _SkyCountryFieldComponent_sortCountriesWithSelectedAndDefault, _SkyCountryFieldComponent_updateInputBox;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
1
3
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Injector, Input, Optional, Output, TemplateRef, ViewChild, forwardRef, } from '@angular/core';
|
|
2
4
|
import { FormControl, NG_VALIDATORS, NgControl, NgModel, } from '@angular/forms';
|
|
3
5
|
import { SkyAppWindowRef } from '@skyux/core';
|
|
@@ -17,6 +19,7 @@ import * as i6 from "@angular/common";
|
|
|
17
19
|
import * as i7 from "../autocomplete/autocomplete-input.directive";
|
|
18
20
|
import * as i8 from "@angular/forms";
|
|
19
21
|
import * as i9 from "@skyux/i18n";
|
|
22
|
+
const DEFAULT_COUNTRY_CODE = 'us';
|
|
20
23
|
const SKY_COUNTRY_FIELD_VALIDATOR = {
|
|
21
24
|
provide: NG_VALIDATORS,
|
|
22
25
|
useExisting: forwardRef(() => SkyCountryFieldComponent),
|
|
@@ -25,31 +28,48 @@ const SKY_COUNTRY_FIELD_VALIDATOR = {
|
|
|
25
28
|
let uniqueId = 0;
|
|
26
29
|
export class SkyCountryFieldComponent {
|
|
27
30
|
constructor(changeDetector, elRef, windowRef, injector, inputBoxHostSvc, themeSvc) {
|
|
28
|
-
this.changeDetector = changeDetector;
|
|
29
|
-
this.elRef = elRef;
|
|
30
|
-
this.windowRef = windowRef;
|
|
31
|
-
this.injector = injector;
|
|
32
31
|
this.inputBoxHostSvc = inputBoxHostSvc;
|
|
33
|
-
this
|
|
32
|
+
_SkyCountryFieldComponent_instances.add(this);
|
|
33
|
+
/**
|
|
34
|
+
* Indicates whether to hide the flag in the input element.
|
|
35
|
+
*/
|
|
36
|
+
this.hideSelectedCountryFlag = false;
|
|
34
37
|
/**
|
|
35
38
|
* Fires when the selected country changes.
|
|
36
39
|
*/
|
|
37
40
|
this.selectedCountryChange = new EventEmitter();
|
|
41
|
+
this.countries = [];
|
|
38
42
|
this.isInputFocused = false;
|
|
39
43
|
this.searchTextMinimumCharacters = 2;
|
|
40
44
|
this.currentTheme = 'default';
|
|
41
|
-
this
|
|
42
|
-
this
|
|
43
|
-
this
|
|
44
|
-
this
|
|
45
|
-
this
|
|
46
|
-
this
|
|
45
|
+
_SkyCountryFieldComponent_changeDetector.set(this, void 0);
|
|
46
|
+
_SkyCountryFieldComponent_defaultCountryData.set(this, void 0);
|
|
47
|
+
_SkyCountryFieldComponent_elRef.set(this, void 0);
|
|
48
|
+
_SkyCountryFieldComponent_idle.set(this, new Subject());
|
|
49
|
+
_SkyCountryFieldComponent_injector.set(this, void 0);
|
|
50
|
+
_SkyCountryFieldComponent_internalFormChange.set(this, false);
|
|
51
|
+
_SkyCountryFieldComponent_isInitialChange.set(this, true);
|
|
52
|
+
_SkyCountryFieldComponent_ngControl.set(this, null);
|
|
53
|
+
_SkyCountryFieldComponent_ngUnsubscribe.set(this, new Subject());
|
|
54
|
+
_SkyCountryFieldComponent_themeSvc.set(this, void 0);
|
|
55
|
+
_SkyCountryFieldComponent_windowRef.set(this, void 0);
|
|
56
|
+
_SkyCountryFieldComponent__defaultCountry.set(this, void 0);
|
|
57
|
+
_SkyCountryFieldComponent__disabled.set(this, false);
|
|
58
|
+
_SkyCountryFieldComponent__includePhoneInfo.set(this, false);
|
|
59
|
+
_SkyCountryFieldComponent__selectedCountry.set(this, void 0);
|
|
60
|
+
_SkyCountryFieldComponent__supportedCountryISOs.set(this, void 0);
|
|
47
61
|
// Angular automatically constructs these methods.
|
|
48
62
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
49
63
|
this.onChange = (value) => { };
|
|
50
64
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
51
65
|
this.onTouched = () => { };
|
|
52
|
-
this
|
|
66
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_changeDetector, changeDetector, "f");
|
|
67
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_elRef, elRef, "f");
|
|
68
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_windowRef, windowRef, "f");
|
|
69
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_injector, injector, "f");
|
|
70
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_themeSvc, themeSvc, "f");
|
|
71
|
+
this.inputId = `sky-country-field-input-${uniqueId++}`;
|
|
72
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_setupCountries).call(this);
|
|
53
73
|
this.countrySearchFormControl = new FormControl();
|
|
54
74
|
}
|
|
55
75
|
/**
|
|
@@ -59,40 +79,43 @@ export class SkyCountryFieldComponent {
|
|
|
59
79
|
* @default "us"
|
|
60
80
|
*/
|
|
61
81
|
set defaultCountry(value) {
|
|
62
|
-
if (value
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
82
|
+
if (!value) {
|
|
83
|
+
value = DEFAULT_COUNTRY_CODE;
|
|
84
|
+
}
|
|
85
|
+
if (value !== __classPrivateFieldGet(this, _SkyCountryFieldComponent__defaultCountry, "f")) {
|
|
86
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent__defaultCountry, value.toLowerCase(), "f");
|
|
87
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_defaultCountryData, this.countries.find((country) => country.iso2 === __classPrivateFieldGet(this, _SkyCountryFieldComponent__defaultCountry, "f")), "f");
|
|
88
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_sortCountriesWithSelectedAndDefault).call(this, this.selectedCountry);
|
|
66
89
|
}
|
|
67
90
|
}
|
|
68
91
|
get defaultCountry() {
|
|
69
|
-
return this
|
|
92
|
+
return __classPrivateFieldGet(this, _SkyCountryFieldComponent__defaultCountry, "f");
|
|
70
93
|
}
|
|
71
94
|
/**
|
|
72
95
|
* Indicates whether to disable the country field.
|
|
73
96
|
* @default false
|
|
74
97
|
*/
|
|
75
98
|
set disabled(isDisabled) {
|
|
76
|
-
this.
|
|
99
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_removeEventListeners).call(this);
|
|
77
100
|
if (!isDisabled) {
|
|
78
101
|
this.addEventListeners();
|
|
79
102
|
}
|
|
80
|
-
this
|
|
81
|
-
this.
|
|
103
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent__disabled, isDisabled, "f");
|
|
104
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_changeDetector, "f").markForCheck();
|
|
82
105
|
}
|
|
83
106
|
get disabled() {
|
|
84
|
-
return this
|
|
107
|
+
return __classPrivateFieldGet(this, _SkyCountryFieldComponent__disabled, "f");
|
|
85
108
|
}
|
|
86
109
|
/**
|
|
87
110
|
* Indicates whether to include phone information in the selected country and country dropdown.
|
|
88
111
|
* @default false
|
|
89
112
|
*/
|
|
90
|
-
set includePhoneInfo(
|
|
91
|
-
this
|
|
92
|
-
this.
|
|
113
|
+
set includePhoneInfo(value) {
|
|
114
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent__includePhoneInfo, value, "f");
|
|
115
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_setupCountries).call(this);
|
|
93
116
|
}
|
|
94
117
|
get includePhoneInfo() {
|
|
95
|
-
return this
|
|
118
|
+
return __classPrivateFieldGet(this, _SkyCountryFieldComponent__includePhoneInfo, "f") || false;
|
|
96
119
|
}
|
|
97
120
|
/**
|
|
98
121
|
* Specifies the [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)
|
|
@@ -103,35 +126,36 @@ export class SkyCountryFieldComponent {
|
|
|
103
126
|
if (Array.isArray(value)) {
|
|
104
127
|
value = value.map((v) => v.toLowerCase());
|
|
105
128
|
}
|
|
106
|
-
this
|
|
107
|
-
this.
|
|
129
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent__supportedCountryISOs, value, "f");
|
|
130
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_setupCountries).call(this);
|
|
108
131
|
}
|
|
109
132
|
get supportedCountryISOs() {
|
|
110
|
-
return this
|
|
133
|
+
return __classPrivateFieldGet(this, _SkyCountryFieldComponent__supportedCountryISOs, "f") || [];
|
|
111
134
|
}
|
|
112
135
|
set selectedCountry(newCountry) {
|
|
113
|
-
if (!this.
|
|
114
|
-
|
|
115
|
-
|
|
136
|
+
if (!__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_countriesAreEqual).call(this, this.selectedCountry, newCountry)) {
|
|
137
|
+
const newCountryIso = newCountry && newCountry.iso2;
|
|
138
|
+
if (newCountryIso) {
|
|
139
|
+
const isoCountry = this.countries.find((country) => country.iso2 === newCountryIso);
|
|
116
140
|
if (isoCountry) {
|
|
117
141
|
newCountry = isoCountry;
|
|
118
142
|
}
|
|
119
143
|
}
|
|
120
|
-
this
|
|
121
|
-
this.
|
|
122
|
-
this
|
|
144
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent__selectedCountry, newCountry, "f");
|
|
145
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_sortCountriesWithSelectedAndDefault).call(this, newCountry);
|
|
146
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_internalFormChange, true, "f");
|
|
123
147
|
this.countrySearchFormControl.setValue(this.selectedCountry);
|
|
124
|
-
if (!this
|
|
148
|
+
if (!__classPrivateFieldGet(this, _SkyCountryFieldComponent_isInitialChange, "f")) {
|
|
125
149
|
this.onChange(newCountry);
|
|
126
150
|
this.onTouched();
|
|
127
151
|
this.selectedCountryChange.emit(newCountry);
|
|
128
152
|
}
|
|
129
153
|
// Do not mark the field as "dirty"
|
|
130
154
|
// if the field has been initialized with a value.
|
|
131
|
-
if (this
|
|
132
|
-
this.
|
|
155
|
+
if (__classPrivateFieldGet(this, _SkyCountryFieldComponent_isInitialChange, "f") && __classPrivateFieldGet(this, _SkyCountryFieldComponent_ngControl, "f") && __classPrivateFieldGet(this, _SkyCountryFieldComponent_ngControl, "f").control) {
|
|
156
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_ngControl, "f").control.markAsPristine();
|
|
133
157
|
}
|
|
134
|
-
this
|
|
158
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_isInitialChange, false, "f");
|
|
135
159
|
/**
|
|
136
160
|
* The second portion of this if statement is complex. The control type check ensures that
|
|
137
161
|
* we only watch for the initial time through this function on reactive forms. However,
|
|
@@ -139,39 +163,38 @@ export class SkyCountryFieldComponent {
|
|
|
139
163
|
* so we have to check for when the non-null pass through happens.
|
|
140
164
|
*/
|
|
141
165
|
}
|
|
142
|
-
else if (this
|
|
143
|
-
(!(this
|
|
144
|
-
this
|
|
166
|
+
else if (__classPrivateFieldGet(this, _SkyCountryFieldComponent_isInitialChange, "f") &&
|
|
167
|
+
(!(__classPrivateFieldGet(this, _SkyCountryFieldComponent_ngControl, "f") instanceof NgModel) || newCountry !== null)) {
|
|
168
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_isInitialChange, false, "f");
|
|
145
169
|
}
|
|
146
170
|
}
|
|
147
171
|
get selectedCountry() {
|
|
148
|
-
return this
|
|
172
|
+
return __classPrivateFieldGet(this, _SkyCountryFieldComponent__selectedCountry, "f");
|
|
149
173
|
}
|
|
150
174
|
/**
|
|
151
175
|
* Angular lifecycle hook for when the component is initialized
|
|
152
176
|
* @internal
|
|
153
177
|
*/
|
|
154
178
|
ngOnInit() {
|
|
155
|
-
this.
|
|
156
|
-
this
|
|
157
|
-
this
|
|
158
|
-
|
|
159
|
-
this.ngControl.valueAccessor = this;
|
|
179
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_updateInputBox).call(this);
|
|
180
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_ngControl, __classPrivateFieldGet(this, _SkyCountryFieldComponent_injector, "f").get(NgControl, null), "f");
|
|
181
|
+
if (__classPrivateFieldGet(this, _SkyCountryFieldComponent_ngControl, "f")) {
|
|
182
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_ngControl, "f").valueAccessor = this;
|
|
160
183
|
}
|
|
161
184
|
else {
|
|
162
185
|
/**
|
|
163
186
|
* The initial change boolean is to determine if the form is setting the value. When no form
|
|
164
187
|
* is present we don't want to ignore the first change.
|
|
165
188
|
*/
|
|
166
|
-
this
|
|
189
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_isInitialChange, false, "f");
|
|
167
190
|
}
|
|
168
191
|
if (!this.defaultCountry) {
|
|
169
|
-
this.defaultCountry =
|
|
192
|
+
this.defaultCountry = DEFAULT_COUNTRY_CODE;
|
|
170
193
|
}
|
|
171
194
|
this.countrySearchFormControl.valueChanges
|
|
172
|
-
.pipe(takeUntil(this
|
|
195
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyCountryFieldComponent_ngUnsubscribe, "f")))
|
|
173
196
|
.subscribe((newValue) => {
|
|
174
|
-
if (newValue && !this
|
|
197
|
+
if (newValue && !__classPrivateFieldGet(this, _SkyCountryFieldComponent_internalFormChange, "f")) {
|
|
175
198
|
this.selectedCountry = newValue;
|
|
176
199
|
}
|
|
177
200
|
});
|
|
@@ -181,11 +204,11 @@ export class SkyCountryFieldComponent {
|
|
|
181
204
|
}
|
|
182
205
|
ngAfterViewInit() {
|
|
183
206
|
/* istanbul ignore else */
|
|
184
|
-
if (this
|
|
185
|
-
this.
|
|
207
|
+
if (__classPrivateFieldGet(this, _SkyCountryFieldComponent_themeSvc, "f")) {
|
|
208
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_themeSvc, "f").settingsChange.subscribe((change) => {
|
|
186
209
|
this.currentTheme = change.currentSettings.theme.name;
|
|
187
|
-
this.
|
|
188
|
-
this.
|
|
210
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_updateInputBox).call(this);
|
|
211
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_changeDetector, "f").markForCheck();
|
|
189
212
|
});
|
|
190
213
|
}
|
|
191
214
|
}
|
|
@@ -195,9 +218,9 @@ export class SkyCountryFieldComponent {
|
|
|
195
218
|
*/
|
|
196
219
|
ngOnDestroy() {
|
|
197
220
|
this.selectedCountryChange.complete();
|
|
198
|
-
this.
|
|
199
|
-
this.
|
|
200
|
-
this.
|
|
221
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_removeEventListeners).call(this);
|
|
222
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_ngUnsubscribe, "f").next();
|
|
223
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_ngUnsubscribe, "f").complete();
|
|
201
224
|
}
|
|
202
225
|
/**
|
|
203
226
|
* Sets the component's touched value when the autocomplete is blurred
|
|
@@ -239,121 +262,116 @@ export class SkyCountryFieldComponent {
|
|
|
239
262
|
return { unsupportedCountry: true };
|
|
240
263
|
}
|
|
241
264
|
}
|
|
242
|
-
return;
|
|
265
|
+
return null;
|
|
243
266
|
}
|
|
244
267
|
writeValue(value) {
|
|
245
268
|
this.selectedCountry = value;
|
|
246
|
-
this.
|
|
269
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_changeDetector, "f").markForCheck();
|
|
247
270
|
}
|
|
248
271
|
addEventListeners() {
|
|
249
|
-
this.
|
|
250
|
-
this
|
|
251
|
-
const documentObj = this.
|
|
272
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_removeEventListeners).call(this);
|
|
273
|
+
__classPrivateFieldSet(this, _SkyCountryFieldComponent_idle, new Subject(), "f");
|
|
274
|
+
const documentObj = __classPrivateFieldGet(this, _SkyCountryFieldComponent_windowRef, "f").nativeWindow.document;
|
|
252
275
|
fromEvent(documentObj, 'mousedown')
|
|
253
|
-
.pipe(takeUntil(this
|
|
276
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyCountryFieldComponent_idle, "f")))
|
|
254
277
|
.subscribe((event) => {
|
|
255
|
-
this.isInputFocused = this.
|
|
256
|
-
this.
|
|
278
|
+
this.isInputFocused = __classPrivateFieldGet(this, _SkyCountryFieldComponent_elRef, "f").nativeElement.contains(event.target);
|
|
279
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_changeDetector, "f").markForCheck();
|
|
257
280
|
});
|
|
258
281
|
fromEvent(documentObj, 'focusin')
|
|
259
|
-
.pipe(takeUntil(this
|
|
282
|
+
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyCountryFieldComponent_idle, "f")))
|
|
260
283
|
.subscribe((event) => {
|
|
261
|
-
this.isInputFocused = this.
|
|
262
|
-
this.
|
|
284
|
+
this.isInputFocused = __classPrivateFieldGet(this, _SkyCountryFieldComponent_elRef, "f").nativeElement.contains(event.target);
|
|
285
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_changeDetector, "f").markForCheck();
|
|
263
286
|
});
|
|
264
287
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
// NOTE: We are doing this in this way because template forms will send through `null`
|
|
270
|
-
// and then `undefined` on empty initialization. These are functionally equivalent but will
|
|
271
|
-
// not pass a standard triple equals check.
|
|
272
|
-
return !country1 && !country2;
|
|
273
|
-
}
|
|
274
|
-
countriesEqual(a, b) {
|
|
275
|
-
return a.iso2 === b.iso2 && a.name === b.name;
|
|
288
|
+
}
|
|
289
|
+
_SkyCountryFieldComponent_changeDetector = new WeakMap(), _SkyCountryFieldComponent_defaultCountryData = new WeakMap(), _SkyCountryFieldComponent_elRef = new WeakMap(), _SkyCountryFieldComponent_idle = new WeakMap(), _SkyCountryFieldComponent_injector = new WeakMap(), _SkyCountryFieldComponent_internalFormChange = new WeakMap(), _SkyCountryFieldComponent_isInitialChange = new WeakMap(), _SkyCountryFieldComponent_ngControl = new WeakMap(), _SkyCountryFieldComponent_ngUnsubscribe = new WeakMap(), _SkyCountryFieldComponent_themeSvc = new WeakMap(), _SkyCountryFieldComponent_windowRef = new WeakMap(), _SkyCountryFieldComponent__defaultCountry = new WeakMap(), _SkyCountryFieldComponent__disabled = new WeakMap(), _SkyCountryFieldComponent__includePhoneInfo = new WeakMap(), _SkyCountryFieldComponent__selectedCountry = new WeakMap(), _SkyCountryFieldComponent__supportedCountryISOs = new WeakMap(), _SkyCountryFieldComponent_instances = new WeakSet(), _SkyCountryFieldComponent_countriesAreEqual = function _SkyCountryFieldComponent_countriesAreEqual(country1, country2) {
|
|
290
|
+
if (country1 && country2) {
|
|
291
|
+
return country1.iso2 === country2.iso2;
|
|
276
292
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
293
|
+
// NOTE: We are doing this in this way because template forms will send through `null`
|
|
294
|
+
// and then `undefined` on empty initialization. These are functionally equivalent but will
|
|
295
|
+
// not pass a standard triple equals check.
|
|
296
|
+
return !country1 && !country2;
|
|
297
|
+
}, _SkyCountryFieldComponent_countriesEqual = function _SkyCountryFieldComponent_countriesEqual(a, b) {
|
|
298
|
+
return a.iso2 === b.iso2 && a.name === b.name;
|
|
299
|
+
}, _SkyCountryFieldComponent_removeEventListeners = function _SkyCountryFieldComponent_removeEventListeners() {
|
|
300
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_idle, "f").next();
|
|
301
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_idle, "f").complete();
|
|
302
|
+
}, _SkyCountryFieldComponent_setupCountries = function _SkyCountryFieldComponent_setupCountries() {
|
|
303
|
+
/**
|
|
304
|
+
* The json functions here ensures that we get a copy of the array and not the global original.
|
|
305
|
+
* This ensures that multiple instances of the component don't overwrite the original data.
|
|
306
|
+
*
|
|
307
|
+
* We must type the window object as any here as the intl-tel-input library adds its object
|
|
308
|
+
* to the main window object.
|
|
309
|
+
*/
|
|
310
|
+
this.countries = JSON.parse(
|
|
311
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
312
|
+
JSON.stringify(window.intlTelInputGlobals.getCountryData()));
|
|
313
|
+
// Ignoring coverage here as this will be removed in the next release.
|
|
314
|
+
// istanbul ignore next
|
|
315
|
+
if (!this.includePhoneInfo && !this.hideSelectedCountryFlag) {
|
|
316
|
+
if (__classPrivateFieldGet(this, _SkyCountryFieldComponent_elRef, "f").nativeElement.parentElement?.classList?.contains('sky-phone-field-country-search')) {
|
|
317
|
+
this.includePhoneInfo = true;
|
|
318
|
+
this.hideSelectedCountryFlag = true;
|
|
319
|
+
}
|
|
280
320
|
}
|
|
281
|
-
|
|
321
|
+
/* istanbul ignore else */
|
|
322
|
+
if (!this.includePhoneInfo) {
|
|
282
323
|
/**
|
|
283
|
-
* The
|
|
284
|
-
*
|
|
285
|
-
*
|
|
286
|
-
* We must type the window object as any here as the intl-tel-input library adds its object
|
|
287
|
-
* to the main window object.
|
|
324
|
+
* The library we get the country data from includes extra phone properties.
|
|
325
|
+
* We want to remove these unless we are in a phone field
|
|
288
326
|
*/
|
|
289
|
-
this.countries
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
327
|
+
this.countries.forEach((country) => {
|
|
328
|
+
delete country.dialCode;
|
|
329
|
+
delete country.areaCodes;
|
|
330
|
+
delete country.priority;
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_sortCountriesWithSelectedAndDefault).call(this, this.selectedCountry);
|
|
334
|
+
if (this.supportedCountryISOs && this.supportedCountryISOs.length > 0) {
|
|
335
|
+
this.countries = this.countries.filter((country) => {
|
|
336
|
+
return this.supportedCountryISOs.indexOf(country.iso2) >= 0;
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
}, _SkyCountryFieldComponent_sortCountriesWithSelectedAndDefault = function _SkyCountryFieldComponent_sortCountriesWithSelectedAndDefault(selectedCountry) {
|
|
340
|
+
let selectedCountryIndex;
|
|
341
|
+
let selectedCountryData;
|
|
342
|
+
const sortedNewCountries = this.countries.sort((a, b) => {
|
|
343
|
+
if (((__classPrivateFieldGet(this, _SkyCountryFieldComponent_defaultCountryData, "f") &&
|
|
344
|
+
__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_countriesEqual).call(this, a, __classPrivateFieldGet(this, _SkyCountryFieldComponent_defaultCountryData, "f"))) ||
|
|
345
|
+
a.name < b.name) &&
|
|
346
|
+
(!__classPrivateFieldGet(this, _SkyCountryFieldComponent_defaultCountryData, "f") ||
|
|
347
|
+
!__classPrivateFieldGet(this, _SkyCountryFieldComponent_instances, "m", _SkyCountryFieldComponent_countriesEqual).call(this, __classPrivateFieldGet(this, _SkyCountryFieldComponent_defaultCountryData, "f"), b))) {
|
|
348
|
+
return -1;
|
|
299
349
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* The library we get the country data from includes extra phone properties.
|
|
304
|
-
* We want to remove these unless we are in a phone field
|
|
305
|
-
*/
|
|
306
|
-
this.countries.forEach((country) => {
|
|
307
|
-
delete country.dialCode;
|
|
308
|
-
delete country.areaCodes;
|
|
309
|
-
delete country.priority;
|
|
310
|
-
});
|
|
350
|
+
else {
|
|
351
|
+
return 1;
|
|
311
352
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
353
|
+
});
|
|
354
|
+
if (selectedCountry) {
|
|
355
|
+
// Note: We are looking up this data here to ensure we are using the offical data from the
|
|
356
|
+
// library and not the data provided by the user on initialization of the component
|
|
357
|
+
selectedCountryData = this.countries.find((country) => country.iso2 === selectedCountry.iso2.toLocaleLowerCase());
|
|
358
|
+
selectedCountryIndex = this.countries.indexOf(selectedCountryData);
|
|
359
|
+
if (selectedCountryIndex >= 0) {
|
|
360
|
+
this.countries.splice(selectedCountryIndex, 1);
|
|
361
|
+
sortedNewCountries.splice(0, 0, selectedCountryData);
|
|
317
362
|
}
|
|
318
363
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
!this.countriesEqual(this.defaultCountryData, b))) {
|
|
328
|
-
return -1;
|
|
329
|
-
}
|
|
330
|
-
else {
|
|
331
|
-
return 1;
|
|
332
|
-
}
|
|
364
|
+
this.countries = sortedNewCountries;
|
|
365
|
+
}, _SkyCountryFieldComponent_updateInputBox = function _SkyCountryFieldComponent_updateInputBox() {
|
|
366
|
+
if (this.inputBoxHostSvc) {
|
|
367
|
+
this.inputBoxHostSvc.populate({
|
|
368
|
+
inputTemplate: this.inputTemplateRef,
|
|
369
|
+
iconsInsetTemplate: this.currentTheme === 'modern'
|
|
370
|
+
? this.searchIconTemplateRef
|
|
371
|
+
: undefined,
|
|
333
372
|
});
|
|
334
|
-
if (selectedCountry) {
|
|
335
|
-
// Note: We are looking up this data here to ensure we are using the offical data from the
|
|
336
|
-
// library and not the data provided by the user on initialization of the component
|
|
337
|
-
selectedCountryData = this.countries.find((country) => country.iso2 === selectedCountry.iso2.toLocaleLowerCase());
|
|
338
|
-
selectedCountryIndex = this.countries.indexOf(selectedCountryData);
|
|
339
|
-
if (selectedCountryIndex >= 0) {
|
|
340
|
-
this.countries.splice(selectedCountryIndex, 1);
|
|
341
|
-
sortedNewCountries.splice(0, 0, selectedCountryData);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
this.countries = sortedNewCountries;
|
|
345
373
|
}
|
|
346
|
-
|
|
347
|
-
if (this.inputBoxHostSvc) {
|
|
348
|
-
this.inputBoxHostSvc.populate({
|
|
349
|
-
inputTemplate: this.inputTemplateRef,
|
|
350
|
-
iconsInsetTemplate: this.currentTheme === 'modern'
|
|
351
|
-
? this.searchIconTemplateRef
|
|
352
|
-
: undefined,
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
374
|
+
};
|
|
357
375
|
SkyCountryFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyCountryFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyAppWindowRef }, { token: i0.Injector }, { token: i2.SkyInputBoxHostService, optional: true }, { token: i3.SkyThemeService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
358
376
|
SkyCountryFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyCountryFieldComponent, selector: "sky-country-field", inputs: { autocompleteAttribute: "autocompleteAttribute", defaultCountry: "defaultCountry", disabled: "disabled", hideSelectedCountryFlag: "hideSelectedCountryFlag", includePhoneInfo: "includePhoneInfo", supportedCountryISOs: "supportedCountryISOs" }, outputs: { selectedCountryChange: "selectedCountryChange" }, providers: [SKY_COUNTRY_FIELD_VALIDATOR], viewQueries: [{ propertyName: "countrySearchAutocompleteDirective", first: true, predicate: SkyAutocompleteInputDirective, descendants: true }, { propertyName: "inputTemplateRef", first: true, predicate: ["inputTemplateRef"], descendants: true, read: TemplateRef, static: true }, { propertyName: "searchIconTemplateRef", first: true, predicate: ["searchIconTemplateRef"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"!inputBoxHostSvc\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n</ng-container>\n\n<ng-template #inputTemplateRef>\n <span\n class=\"sky-country-field-container\"\n [ngClass]=\"{\n 'sky-country-field-disabled': disabled\n }\"\n >\n <sky-autocomplete\n [ariaLabelledBy]=\"inputId\"\n [data]=\"countries\"\n [propertiesToSearch]=\"['name', 'iso2']\"\n [searchResultTemplate]=\"countrySearchResultTemplate\"\n [searchTextMinimumCharacters]=\"searchTextMinimumCharacters\"\n (selectionChange)=\"onCountrySelected($event)\"\n >\n <div\n class=\"sky-country-field-input\"\n [ngClass]=\"{\n 'sky-country-field-input-with-flag':\n selectedCountry && selectedCountry.iso2 && !hideSelectedCountryFlag\n }\"\n >\n <div\n *ngIf=\"\n selectedCountry && selectedCountry.iso2 && !hideSelectedCountryFlag\n \"\n class=\"sky-country-field-flag\"\n >\n <div\n class=\"iti__flag\"\n [ngClass]=\"'iti__' + selectedCountry.iso2.toLowerCase()\"\n ></div>\n </div>\n <textarea\n class=\"sky-form-control\"\n name=\"selectedCountry\"\n rows=\"1\"\n skyAutocomplete\n [attr.aria-label]=\"\n 'skyux_country_field_search_placeholder' | skyLibResources\n \"\n [attr.disabled]=\"disabled ? true : undefined\"\n [attr.id]=\"inputId\"\n [autocompleteAttribute]=\"autocompleteAttribute\"\n [formControl]=\"countrySearchFormControl\"\n [placeholder]=\"\n currentTheme === 'default'\n ? ('skyux_country_field_search_placeholder' | skyLibResources)\n : ''\n \"\n (blur)=\"onAutocompleteBlur()\"\n ></textarea>\n </div>\n </sky-autocomplete>\n </span>\n</ng-template>\n\n<ng-template let-item=\"item\" #countrySearchResultTemplate>\n <div\n class=\"sky-country-field-search-result-flag\"\n [ngClass]=\"'iti__flag iti__' + item.iso2.toLowerCase()\"\n ></div>\n {{ item.name }}\n <span *ngIf=\"includePhoneInfo\" class=\"sky-deemphasized\">\n {{ item.dialCode }}\n </span>\n</ng-template>\n\n<!-- This template should only be used in modern theme input boxes. -->\n<ng-template #searchIconTemplateRef>\n <div class=\"sky-input-group-icon sky-input-box-icon-inset\">\n <sky-icon iconType=\"skyux\" icon=\"search\"></sky-icon>\n </div>\n</ng-template>\n", styles: [".iti{position:relative;display:inline-block}.iti *{box-sizing:border-box;-moz-box-sizing:border-box}.iti__hide{display:none}.iti__v-hide{visibility:hidden}.iti input,.iti input[type=text],.iti input[type=tel]{position:relative;z-index:0;margin-top:0!important;margin-bottom:0!important;padding-right:36px;margin-right:0}.iti__flag-container{position:absolute;top:0;bottom:0;right:0;padding:1px}.iti__selected-flag{z-index:1;position:relative;display:flex;align-items:center;height:100%;padding:0 6px 0 8px}.iti__arrow{margin-left:6px;width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:4px solid #555}.iti__arrow--up{border-top:none;border-bottom:4px solid #555}.iti__country-list{position:absolute;z-index:2;list-style:none;text-align:left;padding:0;margin:0 0 0 -1px;box-shadow:1px 1px 4px #0003;background-color:#fff;border:1px solid #CCC;white-space:nowrap;max-height:200px;overflow-y:scroll;-webkit-overflow-scrolling:touch}.iti__country-list--dropup{bottom:100%;margin-bottom:-1px}@media (max-width: 500px){.iti__country-list{white-space:normal}}.iti__flag-box{display:inline-block;width:20px}.iti__divider{padding-bottom:5px;margin-bottom:5px;border-bottom:1px solid #CCC}.iti__country{padding:5px 10px;outline:none}.iti__dial-code{color:#999}.iti__country.iti__highlight{background-color:#0000000d}.iti__flag-box,.iti__country-name,.iti__dial-code{vertical-align:middle}.iti__flag-box,.iti__country-name{margin-right:6px}.iti--allow-dropdown input,.iti--allow-dropdown input[type=text],.iti--allow-dropdown input[type=tel],.iti--separate-dial-code input,.iti--separate-dial-code input[type=text],.iti--separate-dial-code input[type=tel]{padding-right:6px;padding-left:52px;margin-left:0}.iti--allow-dropdown .iti__flag-container,.iti--separate-dial-code .iti__flag-container{right:auto;left:0}.iti--allow-dropdown .iti__flag-container:hover{cursor:pointer}.iti--allow-dropdown .iti__flag-container:hover .iti__selected-flag{background-color:#0000000d}.iti--allow-dropdown input[disabled]+.iti__flag-container:hover,.iti--allow-dropdown input[readonly]+.iti__flag-container:hover{cursor:default}.iti--allow-dropdown input[disabled]+.iti__flag-container:hover .iti__selected-flag,.iti--allow-dropdown input[readonly]+.iti__flag-container:hover .iti__selected-flag{background-color:transparent}.iti--separate-dial-code .iti__selected-flag{background-color:#0000000d}.iti--separate-dial-code .iti__selected-dial-code{margin-left:6px}.iti--container{position:absolute;top:-1000px;left:-1000px;z-index:1060;padding:1px}.iti--container:hover{cursor:pointer}.iti-mobile .iti--container{top:30px;bottom:30px;left:30px;right:30px;position:fixed}.iti-mobile .iti__country-list{max-height:100%;width:100%}.iti-mobile .iti__country{padding:10px;line-height:1.5em}.iti__flag{width:20px}.iti__flag.iti__be{width:18px}.iti__flag.iti__ch{width:15px}.iti__flag.iti__mc{width:19px}.iti__flag.iti__ne{width:18px}.iti__flag.iti__np{width:13px}.iti__flag.iti__va{width:15px}@media (-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-size:5652px 15px}}.iti__flag.iti__ac{height:10px;background-position:0px 0px}.iti__flag.iti__ad{height:14px;background-position:-22px 0px}.iti__flag.iti__ae{height:10px;background-position:-44px 0px}.iti__flag.iti__af{height:14px;background-position:-66px 0px}.iti__flag.iti__ag{height:14px;background-position:-88px 0px}.iti__flag.iti__ai{height:10px;background-position:-110px 0px}.iti__flag.iti__al{height:15px;background-position:-132px 0px}.iti__flag.iti__am{height:10px;background-position:-154px 0px}.iti__flag.iti__ao{height:14px;background-position:-176px 0px}.iti__flag.iti__aq{height:14px;background-position:-198px 0px}.iti__flag.iti__ar{height:13px;background-position:-220px 0px}.iti__flag.iti__as{height:10px;background-position:-242px 0px}.iti__flag.iti__at{height:14px;background-position:-264px 0px}.iti__flag.iti__au{height:10px;background-position:-286px 0px}.iti__flag.iti__aw{height:14px;background-position:-308px 0px}.iti__flag.iti__ax{height:13px;background-position:-330px 0px}.iti__flag.iti__az{height:10px;background-position:-352px 0px}.iti__flag.iti__ba{height:10px;background-position:-374px 0px}.iti__flag.iti__bb{height:14px;background-position:-396px 0px}.iti__flag.iti__bd{height:12px;background-position:-418px 0px}.iti__flag.iti__be{height:15px;background-position:-440px 0px}.iti__flag.iti__bf{height:14px;background-position:-460px 0px}.iti__flag.iti__bg{height:12px;background-position:-482px 0px}.iti__flag.iti__bh{height:12px;background-position:-504px 0px}.iti__flag.iti__bi{height:12px;background-position:-526px 0px}.iti__flag.iti__bj{height:14px;background-position:-548px 0px}.iti__flag.iti__bl{height:14px;background-position:-570px 0px}.iti__flag.iti__bm{height:10px;background-position:-592px 0px}.iti__flag.iti__bn{height:10px;background-position:-614px 0px}.iti__flag.iti__bo{height:14px;background-position:-636px 0px}.iti__flag.iti__bq{height:14px;background-position:-658px 0px}.iti__flag.iti__br{height:14px;background-position:-680px 0px}.iti__flag.iti__bs{height:10px;background-position:-702px 0px}.iti__flag.iti__bt{height:14px;background-position:-724px 0px}.iti__flag.iti__bv{height:15px;background-position:-746px 0px}.iti__flag.iti__bw{height:14px;background-position:-768px 0px}.iti__flag.iti__by{height:10px;background-position:-790px 0px}.iti__flag.iti__bz{height:14px;background-position:-812px 0px}.iti__flag.iti__ca{height:10px;background-position:-834px 0px}.iti__flag.iti__cc{height:10px;background-position:-856px 0px}.iti__flag.iti__cd{height:15px;background-position:-878px 0px}.iti__flag.iti__cf{height:14px;background-position:-900px 0px}.iti__flag.iti__cg{height:14px;background-position:-922px 0px}.iti__flag.iti__ch{height:15px;background-position:-944px 0px}.iti__flag.iti__ci{height:14px;background-position:-961px 0px}.iti__flag.iti__ck{height:10px;background-position:-983px 0px}.iti__flag.iti__cl{height:14px;background-position:-1005px 0px}.iti__flag.iti__cm{height:14px;background-position:-1027px 0px}.iti__flag.iti__cn{height:14px;background-position:-1049px 0px}.iti__flag.iti__co{height:14px;background-position:-1071px 0px}.iti__flag.iti__cp{height:14px;background-position:-1093px 0px}.iti__flag.iti__cr{height:12px;background-position:-1115px 0px}.iti__flag.iti__cu{height:10px;background-position:-1137px 0px}.iti__flag.iti__cv{height:12px;background-position:-1159px 0px}.iti__flag.iti__cw{height:14px;background-position:-1181px 0px}.iti__flag.iti__cx{height:10px;background-position:-1203px 0px}.iti__flag.iti__cy{height:14px;background-position:-1225px 0px}.iti__flag.iti__cz{height:14px;background-position:-1247px 0px}.iti__flag.iti__de{height:12px;background-position:-1269px 0px}.iti__flag.iti__dg{height:10px;background-position:-1291px 0px}.iti__flag.iti__dj{height:14px;background-position:-1313px 0px}.iti__flag.iti__dk{height:15px;background-position:-1335px 0px}.iti__flag.iti__dm{height:10px;background-position:-1357px 0px}.iti__flag.iti__do{height:14px;background-position:-1379px 0px}.iti__flag.iti__dz{height:14px;background-position:-1401px 0px}.iti__flag.iti__ea{height:14px;background-position:-1423px 0px}.iti__flag.iti__ec{height:14px;background-position:-1445px 0px}.iti__flag.iti__ee{height:13px;background-position:-1467px 0px}.iti__flag.iti__eg{height:14px;background-position:-1489px 0px}.iti__flag.iti__eh{height:10px;background-position:-1511px 0px}.iti__flag.iti__er{height:10px;background-position:-1533px 0px}.iti__flag.iti__es{height:14px;background-position:-1555px 0px}.iti__flag.iti__et{height:10px;background-position:-1577px 0px}.iti__flag.iti__eu{height:14px;background-position:-1599px 0px}.iti__flag.iti__fi{height:12px;background-position:-1621px 0px}.iti__flag.iti__fj{height:10px;background-position:-1643px 0px}.iti__flag.iti__fk{height:10px;background-position:-1665px 0px}.iti__flag.iti__fm{height:11px;background-position:-1687px 0px}.iti__flag.iti__fo{height:15px;background-position:-1709px 0px}.iti__flag.iti__fr{height:14px;background-position:-1731px 0px}.iti__flag.iti__ga{height:15px;background-position:-1753px 0px}.iti__flag.iti__gb{height:10px;background-position:-1775px 0px}.iti__flag.iti__gd{height:12px;background-position:-1797px 0px}.iti__flag.iti__ge{height:14px;background-position:-1819px 0px}.iti__flag.iti__gf{height:14px;background-position:-1841px 0px}.iti__flag.iti__gg{height:14px;background-position:-1863px 0px}.iti__flag.iti__gh{height:14px;background-position:-1885px 0px}.iti__flag.iti__gi{height:10px;background-position:-1907px 0px}.iti__flag.iti__gl{height:14px;background-position:-1929px 0px}.iti__flag.iti__gm{height:14px;background-position:-1951px 0px}.iti__flag.iti__gn{height:14px;background-position:-1973px 0px}.iti__flag.iti__gp{height:14px;background-position:-1995px 0px}.iti__flag.iti__gq{height:14px;background-position:-2017px 0px}.iti__flag.iti__gr{height:14px;background-position:-2039px 0px}.iti__flag.iti__gs{height:10px;background-position:-2061px 0px}.iti__flag.iti__gt{height:13px;background-position:-2083px 0px}.iti__flag.iti__gu{height:11px;background-position:-2105px 0px}.iti__flag.iti__gw{height:10px;background-position:-2127px 0px}.iti__flag.iti__gy{height:12px;background-position:-2149px 0px}.iti__flag.iti__hk{height:14px;background-position:-2171px 0px}.iti__flag.iti__hm{height:10px;background-position:-2193px 0px}.iti__flag.iti__hn{height:10px;background-position:-2215px 0px}.iti__flag.iti__hr{height:10px;background-position:-2237px 0px}.iti__flag.iti__ht{height:12px;background-position:-2259px 0px}.iti__flag.iti__hu{height:10px;background-position:-2281px 0px}.iti__flag.iti__ic{height:14px;background-position:-2303px 0px}.iti__flag.iti__id{height:14px;background-position:-2325px 0px}.iti__flag.iti__ie{height:10px;background-position:-2347px 0px}.iti__flag.iti__il{height:15px;background-position:-2369px 0px}.iti__flag.iti__im{height:10px;background-position:-2391px 0px}.iti__flag.iti__in{height:14px;background-position:-2413px 0px}.iti__flag.iti__io{height:10px;background-position:-2435px 0px}.iti__flag.iti__iq{height:14px;background-position:-2457px 0px}.iti__flag.iti__ir{height:12px;background-position:-2479px 0px}.iti__flag.iti__is{height:15px;background-position:-2501px 0px}.iti__flag.iti__it{height:14px;background-position:-2523px 0px}.iti__flag.iti__je{height:12px;background-position:-2545px 0px}.iti__flag.iti__jm{height:10px;background-position:-2567px 0px}.iti__flag.iti__jo{height:10px;background-position:-2589px 0px}.iti__flag.iti__jp{height:14px;background-position:-2611px 0px}.iti__flag.iti__ke{height:14px;background-position:-2633px 0px}.iti__flag.iti__kg{height:12px;background-position:-2655px 0px}.iti__flag.iti__kh{height:13px;background-position:-2677px 0px}.iti__flag.iti__ki{height:10px;background-position:-2699px 0px}.iti__flag.iti__km{height:12px;background-position:-2721px 0px}.iti__flag.iti__kn{height:14px;background-position:-2743px 0px}.iti__flag.iti__kp{height:10px;background-position:-2765px 0px}.iti__flag.iti__kr{height:14px;background-position:-2787px 0px}.iti__flag.iti__kw{height:10px;background-position:-2809px 0px}.iti__flag.iti__ky{height:10px;background-position:-2831px 0px}.iti__flag.iti__kz{height:10px;background-position:-2853px 0px}.iti__flag.iti__la{height:14px;background-position:-2875px 0px}.iti__flag.iti__lb{height:14px;background-position:-2897px 0px}.iti__flag.iti__lc{height:10px;background-position:-2919px 0px}.iti__flag.iti__li{height:12px;background-position:-2941px 0px}.iti__flag.iti__lk{height:10px;background-position:-2963px 0px}.iti__flag.iti__lr{height:11px;background-position:-2985px 0px}.iti__flag.iti__ls{height:14px;background-position:-3007px 0px}.iti__flag.iti__lt{height:12px;background-position:-3029px 0px}.iti__flag.iti__lu{height:12px;background-position:-3051px 0px}.iti__flag.iti__lv{height:10px;background-position:-3073px 0px}.iti__flag.iti__ly{height:10px;background-position:-3095px 0px}.iti__flag.iti__ma{height:14px;background-position:-3117px 0px}.iti__flag.iti__mc{height:15px;background-position:-3139px 0px}.iti__flag.iti__md{height:10px;background-position:-3160px 0px}.iti__flag.iti__me{height:10px;background-position:-3182px 0px}.iti__flag.iti__mf{height:14px;background-position:-3204px 0px}.iti__flag.iti__mg{height:14px;background-position:-3226px 0px}.iti__flag.iti__mh{height:11px;background-position:-3248px 0px}.iti__flag.iti__mk{height:10px;background-position:-3270px 0px}.iti__flag.iti__ml{height:14px;background-position:-3292px 0px}.iti__flag.iti__mm{height:14px;background-position:-3314px 0px}.iti__flag.iti__mn{height:10px;background-position:-3336px 0px}.iti__flag.iti__mo{height:14px;background-position:-3358px 0px}.iti__flag.iti__mp{height:10px;background-position:-3380px 0px}.iti__flag.iti__mq{height:14px;background-position:-3402px 0px}.iti__flag.iti__mr{height:14px;background-position:-3424px 0px}.iti__flag.iti__ms{height:10px;background-position:-3446px 0px}.iti__flag.iti__mt{height:14px;background-position:-3468px 0px}.iti__flag.iti__mu{height:14px;background-position:-3490px 0px}.iti__flag.iti__mv{height:14px;background-position:-3512px 0px}.iti__flag.iti__mw{height:14px;background-position:-3534px 0px}.iti__flag.iti__mx{height:12px;background-position:-3556px 0px}.iti__flag.iti__my{height:10px;background-position:-3578px 0px}.iti__flag.iti__mz{height:14px;background-position:-3600px 0px}.iti__flag.iti__na{height:14px;background-position:-3622px 0px}.iti__flag.iti__nc{height:10px;background-position:-3644px 0px}.iti__flag.iti__ne{height:15px;background-position:-3666px 0px}.iti__flag.iti__nf{height:10px;background-position:-3686px 0px}.iti__flag.iti__ng{height:10px;background-position:-3708px 0px}.iti__flag.iti__ni{height:12px;background-position:-3730px 0px}.iti__flag.iti__nl{height:14px;background-position:-3752px 0px}.iti__flag.iti__no{height:15px;background-position:-3774px 0px}.iti__flag.iti__np{height:15px;background-position:-3796px 0px}.iti__flag.iti__nr{height:10px;background-position:-3811px 0px}.iti__flag.iti__nu{height:10px;background-position:-3833px 0px}.iti__flag.iti__nz{height:10px;background-position:-3855px 0px}.iti__flag.iti__om{height:10px;background-position:-3877px 0px}.iti__flag.iti__pa{height:14px;background-position:-3899px 0px}.iti__flag.iti__pe{height:14px;background-position:-3921px 0px}.iti__flag.iti__pf{height:14px;background-position:-3943px 0px}.iti__flag.iti__pg{height:15px;background-position:-3965px 0px}.iti__flag.iti__ph{height:10px;background-position:-3987px 0px}.iti__flag.iti__pk{height:14px;background-position:-4009px 0px}.iti__flag.iti__pl{height:13px;background-position:-4031px 0px}.iti__flag.iti__pm{height:14px;background-position:-4053px 0px}.iti__flag.iti__pn{height:10px;background-position:-4075px 0px}.iti__flag.iti__pr{height:14px;background-position:-4097px 0px}.iti__flag.iti__ps{height:10px;background-position:-4119px 0px}.iti__flag.iti__pt{height:14px;background-position:-4141px 0px}.iti__flag.iti__pw{height:13px;background-position:-4163px 0px}.iti__flag.iti__py{height:11px;background-position:-4185px 0px}.iti__flag.iti__qa{height:8px;background-position:-4207px 0px}.iti__flag.iti__re{height:14px;background-position:-4229px 0px}.iti__flag.iti__ro{height:14px;background-position:-4251px 0px}.iti__flag.iti__rs{height:14px;background-position:-4273px 0px}.iti__flag.iti__ru{height:14px;background-position:-4295px 0px}.iti__flag.iti__rw{height:14px;background-position:-4317px 0px}.iti__flag.iti__sa{height:14px;background-position:-4339px 0px}.iti__flag.iti__sb{height:10px;background-position:-4361px 0px}.iti__flag.iti__sc{height:10px;background-position:-4383px 0px}.iti__flag.iti__sd{height:10px;background-position:-4405px 0px}.iti__flag.iti__se{height:13px;background-position:-4427px 0px}.iti__flag.iti__sg{height:14px;background-position:-4449px 0px}.iti__flag.iti__sh{height:10px;background-position:-4471px 0px}.iti__flag.iti__si{height:10px;background-position:-4493px 0px}.iti__flag.iti__sj{height:15px;background-position:-4515px 0px}.iti__flag.iti__sk{height:14px;background-position:-4537px 0px}.iti__flag.iti__sl{height:14px;background-position:-4559px 0px}.iti__flag.iti__sm{height:15px;background-position:-4581px 0px}.iti__flag.iti__sn{height:14px;background-position:-4603px 0px}.iti__flag.iti__so{height:14px;background-position:-4625px 0px}.iti__flag.iti__sr{height:14px;background-position:-4647px 0px}.iti__flag.iti__ss{height:10px;background-position:-4669px 0px}.iti__flag.iti__st{height:10px;background-position:-4691px 0px}.iti__flag.iti__sv{height:12px;background-position:-4713px 0px}.iti__flag.iti__sx{height:14px;background-position:-4735px 0px}.iti__flag.iti__sy{height:14px;background-position:-4757px 0px}.iti__flag.iti__sz{height:14px;background-position:-4779px 0px}.iti__flag.iti__ta{height:10px;background-position:-4801px 0px}.iti__flag.iti__tc{height:10px;background-position:-4823px 0px}.iti__flag.iti__td{height:14px;background-position:-4845px 0px}.iti__flag.iti__tf{height:14px;background-position:-4867px 0px}.iti__flag.iti__tg{height:13px;background-position:-4889px 0px}.iti__flag.iti__th{height:14px;background-position:-4911px 0px}.iti__flag.iti__tj{height:10px;background-position:-4933px 0px}.iti__flag.iti__tk{height:10px;background-position:-4955px 0px}.iti__flag.iti__tl{height:10px;background-position:-4977px 0px}.iti__flag.iti__tm{height:14px;background-position:-4999px 0px}.iti__flag.iti__tn{height:14px;background-position:-5021px 0px}.iti__flag.iti__to{height:10px;background-position:-5043px 0px}.iti__flag.iti__tr{height:14px;background-position:-5065px 0px}.iti__flag.iti__tt{height:12px;background-position:-5087px 0px}.iti__flag.iti__tv{height:10px;background-position:-5109px 0px}.iti__flag.iti__tw{height:14px;background-position:-5131px 0px}.iti__flag.iti__tz{height:14px;background-position:-5153px 0px}.iti__flag.iti__ua{height:14px;background-position:-5175px 0px}.iti__flag.iti__ug{height:14px;background-position:-5197px 0px}.iti__flag.iti__um{height:11px;background-position:-5219px 0px}.iti__flag.iti__un{height:14px;background-position:-5241px 0px}.iti__flag.iti__us{height:11px;background-position:-5263px 0px}.iti__flag.iti__uy{height:14px;background-position:-5285px 0px}.iti__flag.iti__uz{height:10px;background-position:-5307px 0px}.iti__flag.iti__va{height:15px;background-position:-5329px 0px}.iti__flag.iti__vc{height:14px;background-position:-5346px 0px}.iti__flag.iti__ve{height:14px;background-position:-5368px 0px}.iti__flag.iti__vg{height:10px;background-position:-5390px 0px}.iti__flag.iti__vi{height:14px;background-position:-5412px 0px}.iti__flag.iti__vn{height:14px;background-position:-5434px 0px}.iti__flag.iti__vu{height:12px;background-position:-5456px 0px}.iti__flag.iti__wf{height:14px;background-position:-5478px 0px}.iti__flag.iti__ws{height:10px;background-position:-5500px 0px}.iti__flag.iti__xk{height:15px;background-position:-5522px 0px}.iti__flag.iti__ye{height:14px;background-position:-5544px 0px}.iti__flag.iti__yt{height:14px;background-position:-5566px 0px}.iti__flag.iti__za{height:14px;background-position:-5588px 0px}.iti__flag.iti__zm{height:14px;background-position:-5610px 0px}.iti__flag.iti__zw{height:10px;background-position:-5632px 0px}.iti__flag{height:15px;box-shadow:0 0 1px #888;background-image:url(../img/flags.png);background-repeat:no-repeat;background-color:#dbdbdb;background-position:20px 0}@media (-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag{background-image:url(../img/flags@2x.png)}}.iti__flag.iti__np{background-color:transparent}.sky-country-field-country-btn+::ng-deep .sky-form-control{border-left:none}.sky-country-field-container{width:100%}.sky-country-field-search-result-flag{display:inline-block;margin-right:5px}.sky-country-field-flag{display:none}.sky-country-field-disabled .sky-country-field-input{cursor:default;background-color:#cdcfd2}.sky-country-field-disabled .sky-country-field-flag{opacity:.65}.sky-country-field-input{cursor:text;display:flex;position:relative}.sky-country-field-input .sky-country-field-flag{align-items:center;margin-bottom:auto;margin-top:auto;position:absolute;left:13px;height:35px;bottom:0}.sky-country-field-input textarea{overflow:hidden;resize:none;white-space:nowrap}.sky-country-field-input-with-flag .sky-country-field-flag{display:flex}.sky-country-field-input-with-flag .sky-form-control{padding-left:40px}.sky-country-field-country-selected,.sky-country-field-country-default{border-bottom:1px solid #e2e3e4}:host(.ng-invalid.ng-touched) .sky-country-field-input textarea{box-shadow:0 0 8px #ef404499;border:1px solid #ef4044;outline:none}::ng-deep .sky-theme-modern .sky-country-field-disabled .sky-country-field-flag{filter:grayscale(100%)}::ng-deep .sky-theme-modern .sky-input-box .sky-form-group .sky-country-field-input{background-color:transparent;border-radius:6px}::ng-deep .sky-theme-modern .sky-input-box .sky-form-group .sky-country-field-input textarea.sky-form-control{overflow:hidden;resize:none;white-space:nowrap}::ng-deep .sky-theme-modern .sky-input-box .sky-form-group .sky-country-field-input-with-flag .sky-country-field-flag{height:40px;left:15px;opacity:1}::ng-deep .sky-theme-modern .sky-input-box .sky-form-group .sky-country-field-input-with-flag .sky-form-control{padding-left:45px}.iti__flag{max-width:25px;max-height:13px;background-image:url(https://sky.blackbaudcdn.net/static/skyux-public-assets/1.0.0-beta.2/assets/images/intl-tel-input/flags.webp)!important}@media (-webkit-min-device-pixel-ratio: 2),(min-resolution: 192dpi){.iti__flag .iti__flag{background-image:url(https://sky.blackbaudcdn.net/static/skyux-public-assets/1.0.0-beta.2/assets/images/intl-tel-input/flags@2x.webp)!important}}\n"], components: [{ type: i4.SkyAutocompleteComponent, selector: "sky-autocomplete", inputs: ["ariaLabelledBy", "data", "debounceTime", "descriptorProperty", "enableShowMore", "messageStream", "wrapperClass", "propertiesToSearch", "search", "searchResultTemplate", "searchTextMinimumCharacters", "searchFilters", "searchResultsLimit", "showAddButton", "noResultsFoundText", "searchAsyncDisabled"], outputs: ["addClick", "showMoreClick", "selectionChange", "searchAsync"] }, { type: i5.λ4, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.SkyAutocompleteInputDirective, selector: "input[skyAutocomplete], textarea[skyAutocomplete]", inputs: ["autocompleteAttribute", "disabled"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], pipes: { "skyLibResources": i9.SkyLibResourcesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
359
377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyCountryFieldComponent, decorators: [{
|
|
@@ -393,4 +411,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
393
411
|
static: true,
|
|
394
412
|
}]
|
|
395
413
|
}] } });
|
|
396
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3NyYy9saWIvbW9kdWxlcy9jb3VudHJ5LWZpZWxkL2NvdW50cnktZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvY291bnRyeS1maWVsZC9jb3VudHJ5LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixXQUFXLEVBRVgsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxHQUdSLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7Ozs7QUFLN0YsTUFBTSwyQkFBMkIsR0FBRztJQUNsQyxPQUFPLEVBQUUsYUFBYTtJQUN0QixXQUFXLEVBQUUs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Q0FBQywyQkFBMkIsQ0FBQyxtQkFDdkIsdUJBQXVCLENBQUMsTUFBTTs7MEJBaU41QyxRQUFROzswQkFDUixRQUFROzRDQXhNSixxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBVUssY0FBYztzQkFEeEIsS0FBSztnQkFzQkssUUFBUTtzQkFEbEIsS0FBSztnQkFzQkMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQVFLLGdCQUFnQjtzQkFEMUIsS0FBSztnQkFnQkssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQW1CQyxxQkFBcUI7c0JBRDNCLE1BQU07Z0JBWUEsa0NBQWtDO3NCQUR4QyxTQUFTO3VCQUFDLDZCQUE2QjtnQkErRGhDLGdCQUFnQjtzQkFKdkIsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRTt3QkFDN0IsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQU9PLHFCQUFxQjtzQkFKNUIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRTt3QkFDbEMsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQ29udHJvbCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTmdDb250cm9sLFxuICBOZ01vZGVsLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFwcFdpbmRvd1JlZiB9IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7IFNreUlucHV0Qm94SG9zdFNlcnZpY2UgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0ICdpbnRsLXRlbC1pbnB1dCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLWlucHV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2UgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvdHlwZXMvYXV0b2NvbXBsZXRlLXNlbGVjdGlvbi1jaGFuZ2UnO1xuXG5pbXBvcnQgeyBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IH0gZnJvbSAnLi90eXBlcy9jb3VudHJ5JztcblxuY29uc3QgU0tZX0NPVU5UUllfRklFTERfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lDb3VudHJ5RmllbGRDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1jb3VudHJ5LWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdW50cnktZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb3VudHJ5LWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1NLWV9DT1VOVFJZX0ZJRUxEX1ZBTElEQVRPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lDb3VudHJ5RmllbGRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95LCBPbkluaXQsIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSBmb3IgdGhlIGBhdXRvY29tcGxldGVgIGF0dHJpYnV0ZSBvbiB0aGUgZm9ybSBpbnB1dC5cbiAgICogQGRlZmF1bHQgXCJvZmZcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9jb21wbGV0ZUF0dHJpYnV0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIFtJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIEFscGhhIDJdKGh0dHBzOi8vd3d3Lm5hdGlvbnNvbmxpbmUub3JnL29uZXdvcmxkL2NvdW50cnlfY29kZV9saXN0Lmh0bSlcbiAgICogY291bnRyeSBjb2RlIGZvciB0aGUgZGVmYXVsdCBjb3VudHJ5LlxuICAgKiBXaGVuIHNlYXJjaCByZXN1bHRzIGluY2x1ZGUgdGhlIGRlZmF1bHQgY291bnRyeSwgaXQgYXBwZWFycyBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0LlxuICAgKiBAZGVmYXVsdCBcInVzXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVmYXVsdENvdW50cnkodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fZGVmYXVsdENvdW50cnkpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRDb3VudHJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgdGhpcy5kZWZhdWx0Q291bnRyeURhdGEgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAoY291bnRyeSkgPT4gY291bnRyeS5pc28yID09PSB0aGlzLl9kZWZhdWx0Q291bnRyeVxuICAgICAgKTtcblxuICAgICAgdGhpcy5zb3J0Q291bnRyaWVzV2l0aFNlbGVjdGVkQW5kRGVmYXVsdCh0aGlzLnNlbGVjdGVkQ291bnRyeSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBkZWZhdWx0Q291bnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0Q291bnRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBjb3VudHJ5IGZpZWxkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycygpO1xuXG4gICAgaWYgKCFpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGhpZGUgdGhlIGZsYWcgaW4gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGlkZVNlbGVjdGVkQ291bnRyeUZsYWc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgcGhvbmUgaW5mb3JtYXRpb24gaW4gdGhlIHNlbGVjdGVkIGNvdW50cnkgYW5kIGNvdW50cnkgZHJvcGRvd24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluY2x1ZGVQaG9uZUluZm8oaW5jbHVkZVBob25lSW5mbzogYm9vbGVhbikge1xuICAgIHRoaXMuX2luY2x1ZGVQaG9uZUluZm8gPSBpbmNsdWRlUGhvbmVJbmZvO1xuXG4gICAgdGhpcy5zZXR1cENvdW50cmllcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbmNsdWRlUGhvbmVJbmZvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbmNsdWRlUGhvbmVJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgW0ludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gQWxwaGEgMl0oaHR0cHM6Ly93d3cubmF0aW9uc29ubGluZS5vcmcvb25ld29ybGQvY291bnRyeV9jb2RlX2xpc3QuaHRtKVxuICAgKiBjb3VudHJ5IGNvZGVzIGZvciB0aGUgY291bnRyaWVzIHRoYXQgdXNlcnMgY2FuIHNlbGVjdC4gQnkgZGVmYXVsdCwgYWxsIGNvdW50cmllcyBhcmUgYXZhaWxhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdXBwb3J0ZWRDb3VudHJ5SVNPcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAvLyBFbnN1cmUgYWxsIHZhbHVlcyBhcmUgdGhlIHNhbWUgY2FzZS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUubWFwKCh2KSA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuX3N1cHBvcnRlZENvdW50cnlJU09zID0gdmFsdWU7XG4gICAgdGhpcy5zZXR1cENvdW50cmllcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdXBwb3J0ZWRDb3VudHJ5SVNPcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRlZENvdW50cnlJU09zO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNlbGVjdGVkIGNvdW50cnkgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb3VudHJ5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8U2t5Q291bnRyeUZpZWxkQ291bnRyeT4gPSBuZXcgRXZlbnRFbWl0dGVyPFNreUNvdW50cnlGaWVsZENvdW50cnk+KCk7XG5cbiAgcHVibGljIGNvdW50cmllczogU2t5Q291bnRyeUZpZWxkQ291bnRyeVtdO1xuXG4gIHB1YmxpYyBjb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gIHB1YmxpYyBpc0lucHV0Rm9jdXNlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnMgPSAyO1xuXG4gIEBWaWV3Q2hpbGQoU2t5QXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUpXG4gIHB1YmxpYyBjb3VudHJ5U2VhcmNoQXV0b2NvbXBsZXRlRGlyZWN0aXZlOiBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZTtcblxuICBwdWJsaWMgc2V0IHNlbGVjdGVkQ291bnRyeShuZXdDb3VudHJ5OiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5KSB7XG4gICAgaWYgKCF0aGlzLmNvdW50cmllc0FyZUVxdWFsKHRoaXMuc2VsZWN0ZWRDb3VudHJ5LCBuZXdDb3VudHJ5KSkge1xuICAgICAgaWYgKG5ld0NvdW50cnkgJiYgbmV3Q291bnRyeS5pc28yKSB7XG4gICAgICAgIGNvbnN0IGlzb0NvdW50cnkgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAgIChjb3VudHJ5KSA9PiBjb3VudHJ5LmlzbzIgPT09IG5ld0NvdW50cnkuaXNvMlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpc29Db3VudHJ5KSB7XG4gICAgICAgICAgbmV3Q291bnRyeSA9IGlzb0NvdW50cnk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudHJ5ID0gbmV3Q291bnRyeTtcblxuICAgICAgdGhpcy5zb3J0Q291bnRyaWVzV2l0aFNlbGVjdGVkQW5kRGVmYXVsdChuZXdDb3VudHJ5KTtcblxuICAgICAgdGhpcy5pbnRlcm5hbEZvcm1DaGFuZ2UgPSB0cnVlO1xuICAgICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuXG4gICAgICBpZiAoIXRoaXMuaXNJbml0aWFsQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UobmV3Q291bnRyeSk7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnlDaGFuZ2UuZW1pdChuZXdDb3VudHJ5KTtcbiAgICAgIH1cblxuICAgICAgLy8gRG8gbm90IG1hcmsgdGhlIGZpZWxkIGFzIFwiZGlydHlcIlxuICAgICAgLy8gaWYgdGhlIGZpZWxkIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggYSB2YWx1ZS5cbiAgICAgIGlmICh0aGlzLmlzSW5pdGlhbENoYW5nZSAmJiB0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5jb250cm9sKSB7XG4gICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgc2Vjb25kIHBvcnRpb24gb2YgdGhpcyBpZiBzdGF0ZW1lbnQgaXMgY29tcGxleC4gVGhlIGNvbnRyb2wgdHlwZSBjaGVjayBlbnN1cmVzIHRoYXRcbiAgICAgICAqIHdlIG9ubHkgd2F0Y2ggZm9yIHRoZSBpbml0aWFsIHRpbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIG9uIHJlYWN0aXZlIGZvcm1zLiBIb3dldmVyLFxuICAgICAgICogdGVtcGxhdGUgZm9ybXMgd2lsbCBzZW5kIHRocm91Z2ggYG51bGxgIGFuZCB0aGVuIGB1bmRlZmluZWRgIG9uIGVtcHR5IGluaXRpYWxpemF0aW9uXG4gICAgICAgKiBzbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciB3aGVuIHRoZSBub24tbnVsbCBwYXNzIHRocm91Z2ggaGFwcGVucy5cbiAgICAgICAqL1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlzSW5pdGlhbENoYW5nZSAmJlxuICAgICAgKCEodGhpcy5uZ0NvbnRyb2wgaW5zdGFuY2VvZiBOZ01vZGVsKSB8fCBuZXdDb3VudHJ5ICE9PSBudWxsKVxuICAgICkge1xuICAgICAgdGhpcy5pc0luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkQ291bnRyeSgpOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRDb3VudHJ5O1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnRUaGVtZSA9ICdkZWZhdWx0JztcblxuICBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0VGVtcGxhdGVSZWYnLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGlucHV0VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaEljb25UZW1wbGF0ZVJlZicsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHByaXZhdGUgc2VhcmNoSWNvblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBwcml2YXRlIGRlZmF1bHRDb3VudHJ5RGF0YTogU2t5Q291bnRyeUZpZWxkQ291bnRyeTtcblxuICBwcml2YXRlIGlkbGUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgaW50ZXJuYWxGb3JtQ2hhbmdlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBpc0luaXRpYWxDaGFuZ2UgPSB0cnVlO1xuXG4gIHByaXZhdGUgbmdDb250cm9sOiBOZ0NvbnRyb2w7XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9kZWZhdWx0Q291bnRyeTogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfaW5jbHVkZVBob25lSW5mbyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3NlbGVjdGVkQ291bnRyeTogU2t5Q291bnRyeUZpZWxkQ291bnRyeTtcblxuICBwcml2YXRlIF9zdXBwb3J0ZWRDb3VudHJ5SVNPczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHdpbmRvd1JlZjogU2t5QXBwV2luZG93UmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBpbnB1dEJveEhvc3RTdmM/OiBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdGhlbWVTdmM/OiBTa3lUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXR1cENvdW50cmllcygpO1xuXG4gICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmd1bGFyIGxpZmVjeWNsZSBob29rIGZvciB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVJbnB1dEJveCgpO1xuXG4gICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldDxOZ0NvbnRyb2w+KFxuICAgICAgTmdDb250cm9sIGFzIHVua25vd24gYXMgVHlwZTxOZ0NvbnRyb2w+LFxuICAgICAgbnVsbFxuICAgICk7XG5cbiAgICB0aGlzLmlucHV0SWQgPSBgc2t5LWNvdW50cnktZmllbGQtaW5wdXQtJHt1bmlxdWVJZCsrfWA7XG5cbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBpbml0aWFsIGNoYW5nZSBib29sZWFuIGlzIHRvIGRldGVybWluZSBpZiB0aGUgZm9ybSBpcyBzZXR0aW5nIHRoZSB2YWx1ZS4gV2hlbiBubyBmb3JtXG4gICAgICAgKiBpcyBwcmVzZW50IHdlIGRvbid0IHdhbnQgdG8gaWdub3JlIHRoZSBmaXJzdCBjaGFuZ2UuXG4gICAgICAgKi9cbiAgICAgIHRoaXMuaXNJbml0aWFsQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRDb3VudHJ5KSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gJ3VzJztcbiAgICB9XG5cbiAgICB0aGlzLmNvdW50cnlTZWFyY2hGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmICF0aGlzLmludGVybmFsRm9ybUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnRoZW1lU3ZjKSB7XG4gICAgICB0aGlzLnRoZW1lU3ZjLnNldHRpbmdzQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFRoZW1lID0gY2hhbmdlLmN1cnJlbnRTZXR0aW5ncy50aGVtZS5uYW1lO1xuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0Qm94KCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQW5ndWxhciBsaWZlY3ljbGUgaG9vayBmb3Igd2hlbiB0aGUgY29tcG9lbm50IGlzIGRlc3RydWN0ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29tcG9uZW50J3MgdG91Y2hlZCB2YWx1ZSB3aGVuIHRoZSBhdXRvY29tcGxldGUgaXMgYmx1cnJlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBvbkF1dG9jb21wbGV0ZUJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb3VudHJ5IHRvIHZhbGlkYXRlIGFnYWluc3QgYmFzZWQgb24gdGhlIGNvdW50eSdzIGlzbzIgY29kZS5cbiAgICogQHBhcmFtIG5ld0NvdW50cnkgVGhlIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24ncyB0d28tbGV0dGVyIGNvZGVcbiAgICogZm9yIHRoZSBkZWZhdWx0IGNvdW50cnkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIG9uQ291bnRyeVNlbGVjdGVkKG5ld0NvdW50cnk6IFNreUF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5nZSk6IHZvaWQge1xuICAgIGlmIChuZXdDb3VudHJ5LnNlbGVjdGVkSXRlbSkge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKFxuICAgICAgICB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAgIChjb3VudHJ5SW5mbykgPT4gY291bnRyeUluZm8uaXNvMiA9PT0gbmV3Q291bnRyeS5zZWxlY3RlZEl0ZW0uaXNvMlxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvLyBBbmd1bGFyIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0cyB0aGVzZSBtZXRob2RzLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHB1YmxpYyBvbkNoYW5nZSA9ICh2YWx1ZTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSkgPT4ge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBBbGxvd3MgQW5ndWxhciB0byBkaXNhYmxlIHRoZSBpbnB1dC5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuc3VwcG9ydGVkQ291bnRyeUlTT3MgJiZcbiAgICAgICAgICB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmluZGV4T2YoY29udHJvbC52YWx1ZS5pc28yKSA8IDApIHx8XG4gICAgICAgICF0aGlzLmNvdW50cmllcy5maW5kKChjb3VudHJ5KSA9PiBjb3VudHJ5LmlzbzIgPT09IGNvbnRyb2wudmFsdWUuaXNvMilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4geyB1bnN1cHBvcnRlZENvdW50cnk6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFNreUNvdW50cnlGaWVsZENvdW50cnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuaWRsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBkb2N1bWVudE9iaiA9IHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudDtcblxuICAgIGZyb21FdmVudChkb2N1bWVudE9iaiwgJ21vdXNlZG93bicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5pZGxlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgZnJvbUV2ZW50KGRvY3VtZW50T2JqLCAnZm9jdXNpbicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5pZGxlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3VudHJpZXNBcmVFcXVhbChcbiAgICBjb3VudHJ5MTogU2t5Q291bnRyeUZpZWxkQ291bnRyeSxcbiAgICBjb3VudHJ5MjogU2t5Q291bnRyeUZpZWxkQ291bnRyeVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoY291bnRyeTEgJiYgY291bnRyeTIpIHtcbiAgICAgIHJldHVybiBjb3VudHJ5MS5pc28yID09PSBjb3VudHJ5Mi5pc28yO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IFdlIGFyZSBkb2luZyB0aGlzIGluICB0aGlzIHdheSBiZWNhdXNlIHRlbXBsYXRlIGZvcm1zIHdpbGwgc2VuZCB0aHJvdWdoIGBudWxsYFxuICAgIC8vIGFuZCB0aGVuIGB1bmRlZmluZWRgIG9uIGVtcHR5IGluaXRpYWxpemF0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgYnV0IHdpbGxcbiAgICAvLyBub3QgcGFzcyBhIHN0YW5kYXJkIHRyaXBsZSBlcXVhbHMgY2hlY2suXG4gICAgcmV0dXJuICFjb3VudHJ5MSAmJiAhY291bnRyeTI7XG4gIH1cblxuICBwcml2YXRlIGNvdW50cmllc0VxdWFsKFxuICAgIGE6IFNreUNvdW50cnlGaWVsZENvdW50cnksXG4gICAgYjogU2t5Q291bnRyeUZpZWxkQ291bnRyeVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5pc28yID09PSBiLmlzbzIgJiYgYS5uYW1lID09PSBiLm5hbWU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuaWRsZS5uZXh0KCk7XG4gICAgdGhpcy5pZGxlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ291bnRyaWVzKCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIFRoZSBqc29uIGZ1bmN0aW9ucyBoZXJlIGVuc3VyZXMgdGhhdCB3ZSBnZXQgYSBjb3B5IG9mIHRoZSBhcnJheSBhbmQgbm90IHRoZSBnbG9iYWwgb3JpZ2luYWwuXG4gICAgICogVGhpcyBlbnN1cmVzIHRoYXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjb21wb25lbnQgZG9uJ3Qgb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBkYXRhLlxuICAgICAqXG4gICAgICogV2UgbXVzdCB0eXBlIHRoZSB3aW5kb3cgb2JqZWN0IGFzIGFueSBoZXJlIGFzIHRoZSBpbnRsLXRlbC1pbnB1dCBsaWJyYXJ5IGFkZHMgaXRzIG9iamVjdFxuICAgICAqIHRvIHRoZSBtYWluIHdpbmRvdyBvYmplY3QuXG4gICAgICovXG4gICAgdGhpcy5jb3VudHJpZXMgPSBKU09OLnBhcnNlKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIEpTT04uc3RyaW5naWZ5KCh3aW5kb3cgYXMgYW55KS5pbnRsVGVsSW5wdXRHbG9iYWxzLmdldENvdW50cnlEYXRhKCkpXG4gICAgKTtcblxuICAgIC8vIElnbm9yaW5nIGNvdmVyYWdlIGhlcmUgYXMgdGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGlmICghdGhpcy5pbmNsdWRlUGhvbmVJbmZvICYmICF0aGlzLmhpZGVTZWxlY3RlZENvdW50cnlGbGFnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChcbiAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAgICAgICApPy5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdza3ktcGhvbmUtZmllbGQtY291bnRyeS1zZWFyY2gnKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaW5jbHVkZVBob25lSW5mbyA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGVkQ291bnRyeUZsYWcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLmluY2x1ZGVQaG9uZUluZm8pIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGxpYnJhcnkgd2UgZ2V0IHRoZSBjb3VudHJ5IGRhdGEgZnJvbSBpbmNsdWRlcyBleHRyYSBwaG9uZSBwcm9wZXJ0aWVzLlxuICAgICAgICogV2Ugd2FudCB0byByZW1vdmUgdGhlc2UgdW5sZXNzIHdlIGFyZSBpbiBhIHBob25lIGZpZWxkXG4gICAgICAgKi9cbiAgICAgIHRoaXMuY291bnRyaWVzLmZvckVhY2goKGNvdW50cnk6IGFueSkgPT4ge1xuICAgICAgICBkZWxldGUgY291bnRyeS5kaWFsQ29kZTtcbiAgICAgICAgZGVsZXRlIGNvdW50cnkuYXJlYUNvZGVzO1xuICAgICAgICBkZWxldGUgY291bnRyeS5wcmlvcml0eTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc29ydENvdW50cmllc1dpdGhTZWxlY3RlZEFuZERlZmF1bHQodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuXG4gICAgaWYgKHRoaXMuc3VwcG9ydGVkQ291bnRyeUlTT3MgJiYgdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLmZpbHRlcihcbiAgICAgICAgKGNvdW50cnk6IFNreUNvdW50cnlGaWVsZENvdW50cnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5pbmRleE9mKGNvdW50cnkuaXNvMikgPj0gMDtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNvcnRDb3VudHJpZXNXaXRoU2VsZWN0ZWRBbmREZWZhdWx0KFxuICAgIHNlbGVjdGVkQ291bnRyeTogU2t5Q291bnRyeUZpZWxkQ291bnRyeVxuICApOiB2b2lkIHtcbiAgICBsZXQgc2VsZWN0ZWRDb3VudHJ5SW5kZXg6IG51bWJlcjtcbiAgICBsZXQgc2VsZWN0ZWRDb3VudHJ5RGF0YTogU2t5Q291bnRyeUZpZWxkQ291bnRyeTtcblxuICAgIGNvbnN0IHNvcnRlZE5ld0NvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgKCh0aGlzLmRlZmF1bHRDb3VudHJ5RGF0YSAmJlxuICAgICAgICAgIHRoaXMuY291bnRyaWVzRXF1YWwoYSwgdGhpcy5kZWZhdWx0Q291bnRyeURhdGEpKSB8fFxuICAgICAgICAgIGEubmFtZSA8IGIubmFtZSkgJiZcbiAgICAgICAgKCF0aGlzLmRlZmF1bHRDb3VudHJ5RGF0YSB8fFxuICAgICAgICAgICF0aGlzLmNvdW50cmllc0VxdWFsKHRoaXMuZGVmYXVsdENvdW50cnlEYXRhLCBiKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzZWxlY3RlZENvdW50cnkpIHtcbiAgICAgIC8vIE5vdGU6IFdlIGFyZSBsb29raW5nIHVwIHRoaXMgZGF0YSBoZXJlIHRvIGVuc3VyZSB3ZSBhcmUgdXNpbmcgdGhlIG9mZmljYWwgZGF0YSBmcm9tIHRoZVxuICAgICAgLy8gbGlicmFyeSBhbmQgbm90IHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9uIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICAgIHNlbGVjdGVkQ291bnRyeURhdGEgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAoY291bnRyeSkgPT4gY291bnRyeS5pc28yID09PSBzZWxlY3RlZENvdW50cnkuaXNvMi50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWRDb3VudHJ5SW5kZXggPSB0aGlzLmNvdW50cmllcy5pbmRleE9mKHNlbGVjdGVkQ291bnRyeURhdGEpO1xuXG4gICAgICBpZiAoc2VsZWN0ZWRDb3VudHJ5SW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLmNvdW50cmllcy5zcGxpY2Uoc2VsZWN0ZWRDb3VudHJ5SW5kZXgsIDEpO1xuICAgICAgICBzb3J0ZWROZXdDb3VudHJpZXMuc3BsaWNlKDAsIDAsIHNlbGVjdGVkQ291bnRyeURhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY291bnRyaWVzID0gc29ydGVkTmV3Q291bnRyaWVzO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dEJveCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dEJveEhvc3RTdmMpIHtcbiAgICAgIHRoaXMuaW5wdXRCb3hIb3N0U3ZjLnBvcHVsYXRlKHtcbiAgICAgICAgaW5wdXRUZW1wbGF0ZTogdGhpcy5pbnB1dFRlbXBsYXRlUmVmLFxuICAgICAgICBpY29uc0luc2V0VGVtcGxhdGU6XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGhlbWUgPT09ICdtb2Rlcm4nXG4gICAgICAgICAgICA/IHRoaXMuc2VhcmNoSWNvblRlbXBsYXRlUmVmXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbnB1dEJveEhvc3RTdmNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2lucHV0VGVtcGxhdGVSZWY+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJza3ktY291bnRyeS1maWVsZC1jb250YWluZXJcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktY291bnRyeS1maWVsZC1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgfVwiXG4gID5cbiAgICA8c2t5LWF1dG9jb21wbGV0ZVxuICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cImlucHV0SWRcIlxuICAgICAgW2RhdGFdPVwiY291bnRyaWVzXCJcbiAgICAgIFtwcm9wZXJ0aWVzVG9TZWFyY2hdPVwiWyduYW1lJywgJ2lzbzInXVwiXG4gICAgICBbc2VhcmNoUmVzdWx0VGVtcGxhdGVdPVwiY291bnRyeVNlYXJjaFJlc3VsdFRlbXBsYXRlXCJcbiAgICAgIFtzZWFyY2hUZXh0TWluaW11bUNoYXJhY3RlcnNdPVwic2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzXCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25Db3VudHJ5U2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNreS1jb3VudHJ5LWZpZWxkLWlucHV0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdza3ktY291bnRyeS1maWVsZC1pbnB1dC13aXRoLWZsYWcnOlxuICAgICAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ICYmIHNlbGVjdGVkQ291bnRyeS5pc28yICYmICFoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBzZWxlY3RlZENvdW50cnkgJiYgc2VsZWN0ZWRDb3VudHJ5LmlzbzIgJiYgIWhpZGVTZWxlY3RlZENvdW50cnlGbGFnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInNreS1jb3VudHJ5LWZpZWxkLWZsYWdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpdGlfX2ZsYWdcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiJ2l0aV9fJyArIHNlbGVjdGVkQ291bnRyeS5pc28yLnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIGNsYXNzPVwic2t5LWZvcm0tY29udHJvbFwiXG4gICAgICAgICAgbmFtZT1cInNlbGVjdGVkQ291bnRyeVwiXG4gICAgICAgICAgcm93cz1cIjFcIlxuICAgICAgICAgIHNreUF1dG9jb21wbGV0ZVxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAnc2t5dXhfY291bnRyeV9maWVsZF9zZWFyY2hfcGxhY2Vob2xkZXInIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcIlxuICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgIFthdXRvY29tcGxldGVBdHRyaWJ1dGVdPVwiYXV0b2NvbXBsZXRlQXR0cmlidXRlXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY291bnRyeVNlYXJjaEZvcm1Db250cm9sXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICBjdXJyZW50VGhlbWUgPT09ICdkZWZhdWx0J1xuICAgICAgICAgICAgICA/ICgnc2t5dXhfY291bnRyeV9maWVsZF9zZWFyY2hfcGxhY2Vob2xkZXInIHwgc2t5TGliUmVzb3VyY2VzKVxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoYmx1cik9XCJvbkF1dG9jb21wbGV0ZUJsdXIoKVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgPC9za3ktYXV0b2NvbXBsZXRlPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgI2NvdW50cnlTZWFyY2hSZXN1bHRUZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LWNvdW50cnktZmllbGQtc2VhcmNoLXJlc3VsdC1mbGFnXCJcbiAgICBbbmdDbGFzc109XCInaXRpX19mbGFnIGl0aV9fJyArIGl0ZW0uaXNvMi50b0xvd2VyQ2FzZSgpXCJcbiAgPjwvZGl2PlxuICB7eyBpdGVtLm5hbWUgfX1cbiAgPHNwYW4gKm5nSWY9XCJpbmNsdWRlUGhvbmVJbmZvXCIgY2xhc3M9XCJza3ktZGVlbXBoYXNpemVkXCI+XG4gICAge3sgaXRlbS5kaWFsQ29kZSB9fVxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRoaXMgdGVtcGxhdGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBtb2Rlcm4gdGhlbWUgaW5wdXQgYm94ZXMuIC0tPlxuPG5nLXRlbXBsYXRlICNzZWFyY2hJY29uVGVtcGxhdGVSZWY+XG4gIDxkaXYgY2xhc3M9XCJza3ktaW5wdXQtZ3JvdXAtaWNvbiBza3ktaW5wdXQtYm94LWljb24taW5zZXRcIj5cbiAgICA8c2t5LWljb24gaWNvblR5cGU9XCJza3l1eFwiIGljb249XCJzZWFyY2hcIj48L3NreS1pY29uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbG9va3VwL3NyYy9saWIvbW9kdWxlcy9jb3VudHJ5LWZpZWxkL2NvdW50cnktZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xvb2t1cC9zcmMvbGliL21vZHVsZXMvY291bnRyeS1maWVsZC9jb3VudHJ5LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFFWCxTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFNBQVMsRUFDVCxPQUFPLEdBR1IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9DLE9BQU8sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7OztBQUs3RixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUVsQyxNQUFNLDJCQUEyQixHQUFHO0lB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QUp2QixTQUFTO3VCQUFDLGtCQUFrQixFQUFFO3dCQUM3QixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2I7Z0JBT08scUJBQXFCO3NCQUo1QixTQUFTO3VCQUFDLHVCQUF1QixFQUFFO3dCQUNsQyxJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBOR19WQUxJREFUT1JTLFxuICBOZ0NvbnRyb2wsXG4gIE5nTW9kZWwsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5SW5wdXRCb3hIb3N0U2VydmljZSB9IGZyb20gJ0Bza3l1eC9mb3Jtcyc7XG5pbXBvcnQgeyBTa3lUaGVtZVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQgJ2ludGwtdGVsLWlucHV0JztcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lBdXRvY29tcGxldGVJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUtaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNreUF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5nZSB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS90eXBlcy9hdXRvY29tcGxldGUtc2VsZWN0aW9uLWNoYW5nZSc7XG5cbmltcG9ydCB7IFNreUNvdW50cnlGaWVsZENvdW50cnkgfSBmcm9tICcuL3R5cGVzL2NvdW50cnknO1xuXG5jb25zdCBERUZBVUxUX0NPVU5UUllfQ09ERSA9ICd1cyc7XG5cbmNvbnN0IFNLWV9DT1VOVFJZX0ZJRUxEX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5Q291bnRyeUZpZWxkQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktY291bnRyeS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3VudHJ5LWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY291bnRyeS1maWVsZC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtTS1lfQ09VTlRSWV9GSUVMRF9WQUxJREFUT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5Q291bnRyeUZpZWxkQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSwgT25Jbml0LCBWYWxpZGF0b3JcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgZm9yIHRoZSBgYXV0b2NvbXBsZXRlYCBhdHRyaWJ1dGUgb24gdGhlIGZvcm0gaW5wdXQuXG4gICAqIEBkZWZhdWx0IFwib2ZmXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvY29tcGxldGVBdHRyaWJ1dGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBbSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiBBbHBoYSAyXShodHRwczovL3d3dy5uYXRpb25zb25saW5lLm9yZy9vbmV3b3JsZC9jb3VudHJ5X2NvZGVfbGlzdC5odG0pXG4gICAqIGNvdW50cnkgY29kZSBmb3IgdGhlIGRlZmF1bHQgY291bnRyeS5cbiAgICogV2hlbiBzZWFyY2ggcmVzdWx0cyBpbmNsdWRlIHRoZSBkZWZhdWx0IGNvdW50cnksIGl0IGFwcGVhcnMgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdC5cbiAgICogQGRlZmF1bHQgXCJ1c1wiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRlZmF1bHRDb3VudHJ5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IERFRkFVTFRfQ09VTlRSWV9DT0RFO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy4jX2RlZmF1bHRDb3VudHJ5KSB7XG4gICAgICB0aGlzLiNfZGVmYXVsdENvdW50cnkgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICB0aGlzLiNkZWZhdWx0Q291bnRyeURhdGEgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAoY291bnRyeSkgPT4gY291bnRyeS5pc28yID09PSB0aGlzLiNfZGVmYXVsdENvdW50cnlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuI3NvcnRDb3VudHJpZXNXaXRoU2VsZWN0ZWRBbmREZWZhdWx0KHRoaXMuc2VsZWN0ZWRDb3VudHJ5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlZmF1bHRDb3VudHJ5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI19kZWZhdWx0Q291bnRyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSBjb3VudHJ5IGZpZWxkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy4jcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgIGlmICghaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHRoaXMuI19kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBoaWRlIHRoZSBmbGFnIGluIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpZGVTZWxlY3RlZENvdW50cnlGbGFnID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGluY2x1ZGUgcGhvbmUgaW5mb3JtYXRpb24gaW4gdGhlIHNlbGVjdGVkIGNvdW50cnkgYW5kIGNvdW50cnkgZHJvcGRvd24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluY2x1ZGVQaG9uZUluZm8odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLiNfaW5jbHVkZVBob25lSW5mbyA9IHZhbHVlO1xuXG4gICAgdGhpcy4jc2V0dXBDb3VudHJpZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5jbHVkZVBob25lSW5mbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy4jX2luY2x1ZGVQaG9uZUluZm8gfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBbSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiBBbHBoYSAyXShodHRwczovL3d3dy5uYXRpb25zb25saW5lLm9yZy9vbmV3b3JsZC9jb3VudHJ5X2NvZGVfbGlzdC5odG0pXG4gICAqIGNvdW50cnkgY29kZXMgZm9yIHRoZSBjb3VudHJpZXMgdGhhdCB1c2VycyBjYW4gc2VsZWN0LiBCeSBkZWZhdWx0LCBhbGwgY291bnRyaWVzIGFyZSBhdmFpbGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHN1cHBvcnRlZENvdW50cnlJU09zKHZhbHVlOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIC8vIEVuc3VyZSBhbGwgdmFsdWVzIGFyZSB0aGUgc2FtZSBjYXNlLlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHYpID0+IHYudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgdGhpcy4jX3N1cHBvcnRlZENvdW50cnlJU09zID0gdmFsdWU7XG4gICAgdGhpcy4jc2V0dXBDb3VudHJpZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3VwcG9ydGVkQ291bnRyeUlTT3MoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLiNfc3VwcG9ydGVkQ291bnRyeUlTT3MgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgc2VsZWN0ZWQgY291bnRyeSBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENvdW50cnlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxTa3lDb3VudHJ5RmllbGRDb3VudHJ5PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5Q291bnRyeUZpZWxkQ291bnRyeT4oKTtcblxuICBwdWJsaWMgY291bnRyaWVzOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5W10gPSBbXTtcblxuICBwdWJsaWMgY291bnRyeVNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcblxuICBwdWJsaWMgaXNJbnB1dEZvY3VzZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzID0gMjtcblxuICBAVmlld0NoaWxkKFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlKVxuICBwdWJsaWMgY291bnRyeVNlYXJjaEF1dG9jb21wbGV0ZURpcmVjdGl2ZSE6IFNreUF1dG9jb21wbGV0ZUlucHV0RGlyZWN0aXZlO1xuXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRDb3VudHJ5KG5ld0NvdW50cnk6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuI2NvdW50cmllc0FyZUVxdWFsKHRoaXMuc2VsZWN0ZWRDb3VudHJ5LCBuZXdDb3VudHJ5KSkge1xuICAgICAgY29uc3QgbmV3Q291bnRyeUlzbyA9IG5ld0NvdW50cnkgJiYgbmV3Q291bnRyeS5pc28yO1xuICAgICAgaWYgKG5ld0NvdW50cnlJc28pIHtcbiAgICAgICAgY29uc3QgaXNvQ291bnRyeSA9IHRoaXMuY291bnRyaWVzLmZpbmQoXG4gICAgICAgICAgKGNvdW50cnkpID0+IGNvdW50cnkuaXNvMiA9PT0gbmV3Q291bnRyeUlzb1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpc29Db3VudHJ5KSB7XG4gICAgICAgICAgbmV3Q291bnRyeSA9IGlzb0NvdW50cnk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy4jX3NlbGVjdGVkQ291bnRyeSA9IG5ld0NvdW50cnk7XG5cbiAgICAgIHRoaXMuI3NvcnRDb3VudHJpZXNXaXRoU2VsZWN0ZWRBbmREZWZhdWx0KG5ld0NvdW50cnkpO1xuXG4gICAgICB0aGlzLiNpbnRlcm5hbEZvcm1DaGFuZ2UgPSB0cnVlO1xuICAgICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuXG4gICAgICBpZiAoIXRoaXMuI2lzSW5pdGlhbENoYW5nZSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld0NvdW50cnkpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5Q2hhbmdlLmVtaXQobmV3Q291bnRyeSk7XG4gICAgICB9XG5cbiAgICAgIC8vIERvIG5vdCBtYXJrIHRoZSBmaWVsZCBhcyBcImRpcnR5XCJcbiAgICAgIC8vIGlmIHRoZSBmaWVsZCBoYXMgYmVlbiBpbml0aWFsaXplZCB3aXRoIGEgdmFsdWUuXG4gICAgICBpZiAodGhpcy4jaXNJbml0aWFsQ2hhbmdlICYmIHRoaXMuI25nQ29udHJvbCAmJiB0aGlzLiNuZ0NvbnRyb2wuY29udHJvbCkge1xuICAgICAgICB0aGlzLiNuZ0NvbnRyb2wuY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNpc0luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgc2Vjb25kIHBvcnRpb24gb2YgdGhpcyBpZiBzdGF0ZW1lbnQgaXMgY29tcGxleC4gVGhlIGNvbnRyb2wgdHlwZSBjaGVjayBlbnN1cmVzIHRoYXRcbiAgICAgICAqIHdlIG9ubHkgd2F0Y2ggZm9yIHRoZSBpbml0aWFsIHRpbWUgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIG9uIHJlYWN0aXZlIGZvcm1zLiBIb3dldmVyLFxuICAgICAgICogdGVtcGxhdGUgZm9ybXMgd2lsbCBzZW5kIHRocm91Z2ggYG51bGxgIGFuZCB0aGVuIGB1bmRlZmluZWRgIG9uIGVtcHR5IGluaXRpYWxpemF0aW9uXG4gICAgICAgKiBzbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciB3aGVuIHRoZSBub24tbnVsbCBwYXNzIHRocm91Z2ggaGFwcGVucy5cbiAgICAgICAqL1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLiNpc0luaXRpYWxDaGFuZ2UgJiZcbiAgICAgICghKHRoaXMuI25nQ29udHJvbCBpbnN0YW5jZW9mIE5nTW9kZWwpIHx8IG5ld0NvdW50cnkgIT09IG51bGwpXG4gICAgKSB7XG4gICAgICB0aGlzLiNpc0luaXRpYWxDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkQ291bnRyeSgpOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3NlbGVjdGVkQ291bnRyeTtcbiAgfVxuXG4gIHB1YmxpYyBjdXJyZW50VGhlbWUgPSAnZGVmYXVsdCc7XG5cbiAgcHVibGljIGlucHV0SWQ6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdpbnB1dFRlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBpbnB1dFRlbXBsYXRlUmVmITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQFZpZXdDaGlsZCgnc2VhcmNoSWNvblRlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBzZWFyY2hJY29uVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuXG4gICNkZWZhdWx0Q291bnRyeURhdGE6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQ7XG5cbiAgI2VsUmVmOiBFbGVtZW50UmVmO1xuXG4gICNpZGxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gICNpbnRlcm5hbEZvcm1DaGFuZ2UgPSBmYWxzZTtcblxuICAjaXNJbml0aWFsQ2hhbmdlID0gdHJ1ZTtcblxuICAjbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsID0gbnVsbDtcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI3RoZW1lU3ZjOiBTa3lUaGVtZVNlcnZpY2UgfCB1bmRlZmluZWQ7XG5cbiAgI3dpbmRvd1JlZjogU2t5QXBwV2luZG93UmVmO1xuXG4gICNfZGVmYXVsdENvdW50cnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgI19pbmNsdWRlUGhvbmVJbmZvID0gZmFsc2U7XG5cbiAgI19zZWxlY3RlZENvdW50cnk6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQ7XG5cbiAgI19zdXBwb3J0ZWRDb3VudHJ5SVNPczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHdpbmRvd1JlZjogU2t5QXBwV2luZG93UmVmLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgaW5wdXRCb3hIb3N0U3ZjPzogU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSB0aGVtZVN2Yz86IFNreVRoZW1lU2VydmljZVxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI2VsUmVmID0gZWxSZWY7XG4gICAgdGhpcy4jd2luZG93UmVmID0gd2luZG93UmVmO1xuICAgIHRoaXMuI2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgdGhpcy4jdGhlbWVTdmMgPSB0aGVtZVN2YztcblxuICAgIHRoaXMuaW5wdXRJZCA9IGBza3ktY291bnRyeS1maWVsZC1pbnB1dC0ke3VuaXF1ZUlkKyt9YDtcblxuICAgIHRoaXMuI3NldHVwQ291bnRyaWVzKCk7XG5cbiAgICB0aGlzLmNvdW50cnlTZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgZm9yIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiN1cGRhdGVJbnB1dEJveCgpO1xuXG4gICAgdGhpcy4jbmdDb250cm9sID0gdGhpcy4jaW5qZWN0b3IuZ2V0PE5nQ29udHJvbCB8IG51bGw+KFxuICAgICAgTmdDb250cm9sIGFzIHVua25vd24gYXMgVHlwZTxOZ0NvbnRyb2w+LFxuICAgICAgbnVsbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy4jbmdDb250cm9sKSB7XG4gICAgICB0aGlzLiNuZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGluaXRpYWwgY2hhbmdlIGJvb2xlYW4gaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmb3JtIGlzIHNldHRpbmcgdGhlIHZhbHVlLiBXaGVuIG5vIGZvcm1cbiAgICAgICAqIGlzIHByZXNlbnQgd2UgZG9uJ3Qgd2FudCB0byBpZ25vcmUgdGhlIGZpcnN0IGNoYW5nZS5cbiAgICAgICAqL1xuICAgICAgdGhpcy4jaXNJbml0aWFsQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRDb3VudHJ5KSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gREVGQVVMVF9DT1VOVFJZX0NPREU7XG4gICAgfVxuXG4gICAgdGhpcy5jb3VudHJ5U2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAobmV3VmFsdWUgJiYgIXRoaXMuI2ludGVybmFsRm9ybUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiN0aGVtZVN2Yykge1xuICAgICAgdGhpcy4jdGhlbWVTdmMuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGhlbWUgPSBjaGFuZ2UuY3VycmVudFNldHRpbmdzLnRoZW1lLm5hbWU7XG4gICAgICAgIHRoaXMuI3VwZGF0ZUlucHV0Qm94KCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2sgZm9yIHdoZW4gdGhlIGNvbXBvZW5udCBpcyBkZXN0cnVjdGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNvbXBvbmVudCdzIHRvdWNoZWQgdmFsdWUgd2hlbiB0aGUgYXV0b2NvbXBsZXRlIGlzIGJsdXJyZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgb25BdXRvY29tcGxldGVCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY291bnRyeSB0byB2YWxpZGF0ZSBhZ2FpbnN0IGJhc2VkIG9uIHRoZSBjb3VudHkncyBpc28yIGNvZGUuXG4gICAqIEBwYXJhbSBuZXdDb3VudHJ5IFRoZSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uJ3MgdHdvLWxldHRlciBjb2RlXG4gICAqIGZvciB0aGUgZGVmYXVsdCBjb3VudHJ5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBvbkNvdW50cnlTZWxlY3RlZChuZXdDb3VudHJ5OiBTa3lBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2UpOiB2b2lkIHtcbiAgICBpZiAobmV3Q291bnRyeS5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShcbiAgICAgICAgdGhpcy5jb3VudHJpZXMuZmluZChcbiAgICAgICAgICAoY291bnRyeUluZm8pID0+IGNvdW50cnlJbmZvLmlzbzIgPT09IG5ld0NvdW50cnkuc2VsZWN0ZWRJdGVtLmlzbzJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQW5ndWxhciBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdHMgdGhlc2UgbWV0aG9kcy5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgb25DaGFuZ2UgPSAodmFsdWU6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQpID0+IHt9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKFxuICAgIGZuOiAodmFsdWU6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQpID0+IHZvaWRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEFsbG93cyBBbmd1bGFyIHRvIGRpc2FibGUgdGhlIGlucHV0LlxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuc3VwcG9ydGVkQ291bnRyeUlTT3MgJiZcbiAgICAgICAgICB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmluZGV4T2YoY29udHJvbC52YWx1ZS5pc28yKSA8IDApIHx8XG4gICAgICAgICF0aGlzLmNvdW50cmllcy5maW5kKChjb3VudHJ5KSA9PiBjb3VudHJ5LmlzbzIgPT09IGNvbnRyb2wudmFsdWUuaXNvMilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4geyB1bnN1cHBvcnRlZENvdW50cnk6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSB2YWx1ZTtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuI2lkbGUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRPYmogPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuXG4gICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50T2JqLCAnbW91c2Vkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNpZGxlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnRPYmosICdmb2N1c2luJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNpZGxlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuaXNJbnB1dEZvY3VzZWQgPSB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICAjY291bnRyaWVzQXJlRXF1YWwoXG4gICAgY291bnRyeTE6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWQsXG4gICAgY291bnRyeTI6IFNreUNvdW50cnlGaWVsZENvdW50cnkgfCB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvdW50cnkxICYmIGNvdW50cnkyKSB7XG4gICAgICByZXR1cm4gY291bnRyeTEuaXNvMiA9PT0gY291bnRyeTIuaXNvMjtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiBXZSBhcmUgZG9pbmcgdGhpcyBpbiAgdGhpcyB3YXkgYmVjYXVzZSB0ZW1wbGF0ZSBmb3JtcyB3aWxsIHNlbmQgdGhyb3VnaCBgbnVsbGBcbiAgICAvLyBhbmQgdGhlbiBgdW5kZWZpbmVkYCBvbiBlbXB0eSBpbml0aWFsaXphdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGJ1dCB3aWxsXG4gICAgLy8gbm90IHBhc3MgYSBzdGFuZGFyZCB0cmlwbGUgZXF1YWxzIGNoZWNrLlxuICAgIHJldHVybiAhY291bnRyeTEgJiYgIWNvdW50cnkyO1xuICB9XG5cbiAgI2NvdW50cmllc0VxdWFsKFxuICAgIGE6IFNreUNvdW50cnlGaWVsZENvdW50cnksXG4gICAgYjogU2t5Q291bnRyeUZpZWxkQ291bnRyeVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gYS5pc28yID09PSBiLmlzbzIgJiYgYS5uYW1lID09PSBiLm5hbWU7XG4gIH1cblxuICAjcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jaWRsZS5uZXh0KCk7XG4gICAgdGhpcy4jaWRsZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgI3NldHVwQ291bnRyaWVzKCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIFRoZSBqc29uIGZ1bmN0aW9ucyBoZXJlIGVuc3VyZXMgdGhhdCB3ZSBnZXQgYSBjb3B5IG9mIHRoZSBhcnJheSBhbmQgbm90IHRoZSBnbG9iYWwgb3JpZ2luYWwuXG4gICAgICogVGhpcyBlbnN1cmVzIHRoYXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjb21wb25lbnQgZG9uJ3Qgb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBkYXRhLlxuICAgICAqXG4gICAgICogV2UgbXVzdCB0eXBlIHRoZSB3aW5kb3cgb2JqZWN0IGFzIGFueSBoZXJlIGFzIHRoZSBpbnRsLXRlbC1pbnB1dCBsaWJyYXJ5IGFkZHMgaXRzIG9iamVjdFxuICAgICAqIHRvIHRoZSBtYWluIHdpbmRvdyBvYmplY3QuXG4gICAgICovXG4gICAgdGhpcy5jb3VudHJpZXMgPSBKU09OLnBhcnNlKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIEpTT04uc3RyaW5naWZ5KCh3aW5kb3cgYXMgYW55KS5pbnRsVGVsSW5wdXRHbG9iYWxzLmdldENvdW50cnlEYXRhKCkpXG4gICAgKTtcblxuICAgIC8vIElnbm9yaW5nIGNvdmVyYWdlIGhlcmUgYXMgdGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGlmICghdGhpcy5pbmNsdWRlUGhvbmVJbmZvICYmICF0aGlzLmhpZGVTZWxlY3RlZENvdW50cnlGbGFnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChcbiAgICAgICAgICB0aGlzLiNlbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgKT8uY2xhc3NMaXN0Py5jb250YWlucygnc2t5LXBob25lLWZpZWxkLWNvdW50cnktc2VhcmNoJylcbiAgICAgICkge1xuICAgICAgICB0aGlzLmluY2x1ZGVQaG9uZUluZm8gPSB0cnVlO1xuICAgICAgICB0aGlzLmhpZGVTZWxlY3RlZENvdW50cnlGbGFnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5pbmNsdWRlUGhvbmVJbmZvKSB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBsaWJyYXJ5IHdlIGdldCB0aGUgY291bnRyeSBkYXRhIGZyb20gaW5jbHVkZXMgZXh0cmEgcGhvbmUgcHJvcGVydGllcy5cbiAgICAgICAqIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZXNlIHVubGVzcyB3ZSBhcmUgaW4gYSBwaG9uZSBmaWVsZFxuICAgICAgICovXG4gICAgICB0aGlzLmNvdW50cmllcy5mb3JFYWNoKChjb3VudHJ5KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjb3VudHJ5LmRpYWxDb2RlO1xuICAgICAgICBkZWxldGUgY291bnRyeS5hcmVhQ29kZXM7XG4gICAgICAgIGRlbGV0ZSBjb3VudHJ5LnByaW9yaXR5O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy4jc29ydENvdW50cmllc1dpdGhTZWxlY3RlZEFuZERlZmF1bHQodGhpcy5zZWxlY3RlZENvdW50cnkpO1xuXG4gICAgaWYgKHRoaXMuc3VwcG9ydGVkQ291bnRyeUlTT3MgJiYgdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuY291bnRyaWVzLmZpbHRlcihcbiAgICAgICAgKGNvdW50cnk6IFNreUNvdW50cnlGaWVsZENvdW50cnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0ZWRDb3VudHJ5SVNPcy5pbmRleE9mKGNvdW50cnkuaXNvMikgPj0gMDtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAjc29ydENvdW50cmllc1dpdGhTZWxlY3RlZEFuZERlZmF1bHQoXG4gICAgc2VsZWN0ZWRDb3VudHJ5OiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5IHwgdW5kZWZpbmVkXG4gICk6IHZvaWQge1xuICAgIGxldCBzZWxlY3RlZENvdW50cnlJbmRleDogbnVtYmVyO1xuICAgIGxldCBzZWxlY3RlZENvdW50cnlEYXRhOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5O1xuXG4gICAgY29uc3Qgc29ydGVkTmV3Q291bnRyaWVzID0gdGhpcy5jb3VudHJpZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoKHRoaXMuI2RlZmF1bHRDb3VudHJ5RGF0YSAmJlxuICAgICAgICAgIHRoaXMuI2NvdW50cmllc0VxdWFsKGEsIHRoaXMuI2RlZmF1bHRDb3VudHJ5RGF0YSkpIHx8XG4gICAgICAgICAgYS5uYW1lISA8IGIubmFtZSEpICYmXG4gICAgICAgICghdGhpcy4jZGVmYXVsdENvdW50cnlEYXRhIHx8XG4gICAgICAgICAgIXRoaXMuI2NvdW50cmllc0VxdWFsKHRoaXMuI2RlZmF1bHRDb3VudHJ5RGF0YSwgYikpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2VsZWN0ZWRDb3VudHJ5KSB7XG4gICAgICAvLyBOb3RlOiBXZSBhcmUgbG9va2luZyB1cCB0aGlzIGRhdGEgaGVyZSB0byBlbnN1cmUgd2UgYXJlIHVzaW5nIHRoZSBvZmZpY2FsIGRhdGEgZnJvbSB0aGVcbiAgICAgIC8vIGxpYnJhcnkgYW5kIG5vdCB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGUgdXNlciBvbiBpbml0aWFsaXphdGlvbiBvZiB0aGUgY29tcG9uZW50XG4gICAgICBzZWxlY3RlZENvdW50cnlEYXRhID0gdGhpcy5jb3VudHJpZXMuZmluZChcbiAgICAgICAgKGNvdW50cnkpID0+IGNvdW50cnkuaXNvMiA9PT0gc2VsZWN0ZWRDb3VudHJ5LmlzbzIudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgKSE7XG4gICAgICBzZWxlY3RlZENvdW50cnlJbmRleCA9IHRoaXMuY291bnRyaWVzLmluZGV4T2Yoc2VsZWN0ZWRDb3VudHJ5RGF0YSk7XG5cbiAgICAgIGlmIChzZWxlY3RlZENvdW50cnlJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuY291bnRyaWVzLnNwbGljZShzZWxlY3RlZENvdW50cnlJbmRleCwgMSk7XG4gICAgICAgIHNvcnRlZE5ld0NvdW50cmllcy5zcGxpY2UoMCwgMCwgc2VsZWN0ZWRDb3VudHJ5RGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb3VudHJpZXMgPSBzb3J0ZWROZXdDb3VudHJpZXM7XG4gIH1cblxuICAjdXBkYXRlSW5wdXRCb3goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRCb3hIb3N0U3ZjKSB7XG4gICAgICB0aGlzLmlucHV0Qm94SG9zdFN2Yy5wb3B1bGF0ZSh7XG4gICAgICAgIGlucHV0VGVtcGxhdGU6IHRoaXMuaW5wdXRUZW1wbGF0ZVJlZixcbiAgICAgICAgaWNvbnNJbnNldFRlbXBsYXRlOlxuICAgICAgICAgIHRoaXMuY3VycmVudFRoZW1lID09PSAnbW9kZXJuJ1xuICAgICAgICAgICAgPyB0aGlzLnNlYXJjaEljb25UZW1wbGF0ZVJlZlxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5wdXRCb3hIb3N0U3ZjXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dFRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNpbnB1dFRlbXBsYXRlUmVmPlxuICA8c3BhblxuICAgIGNsYXNzPVwic2t5LWNvdW50cnktZmllbGQtY29udGFpbmVyXCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnc2t5LWNvdW50cnktZmllbGQtZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgIH1cIlxuICA+XG4gICAgPHNreS1hdXRvY29tcGxldGVcbiAgICAgIFthcmlhTGFiZWxsZWRCeV09XCJpbnB1dElkXCJcbiAgICAgIFtkYXRhXT1cImNvdW50cmllc1wiXG4gICAgICBbcHJvcGVydGllc1RvU2VhcmNoXT1cIlsnbmFtZScsICdpc28yJ11cIlxuICAgICAgW3NlYXJjaFJlc3VsdFRlbXBsYXRlXT1cImNvdW50cnlTZWFyY2hSZXN1bHRUZW1wbGF0ZVwiXG4gICAgICBbc2VhcmNoVGV4dE1pbmltdW1DaGFyYWN0ZXJzXT1cInNlYXJjaFRleHRNaW5pbXVtQ2hhcmFjdGVyc1wiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ291bnRyeVNlbGVjdGVkKCRldmVudClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJza3ktY291bnRyeS1maWVsZC1pbnB1dFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnc2t5LWNvdW50cnktZmllbGQtaW5wdXQtd2l0aC1mbGFnJzpcbiAgICAgICAgICAgIHNlbGVjdGVkQ291bnRyeSAmJiBzZWxlY3RlZENvdW50cnkuaXNvMiAmJiAhaGlkZVNlbGVjdGVkQ291bnRyeUZsYWdcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgc2VsZWN0ZWRDb3VudHJ5ICYmIHNlbGVjdGVkQ291bnRyeS5pc28yICYmICFoaWRlU2VsZWN0ZWRDb3VudHJ5RmxhZ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJza3ktY291bnRyeS1maWVsZC1mbGFnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaXRpX19mbGFnXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidpdGlfXycgKyBzZWxlY3RlZENvdW50cnkuaXNvMi50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICBjbGFzcz1cInNreS1mb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZENvdW50cnlcIlxuICAgICAgICAgIHJvd3M9XCIxXCJcbiAgICAgICAgICBza3lBdXRvY29tcGxldGVcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgJ3NreXV4X2NvdW50cnlfZmllbGRfc2VhcmNoX3BsYWNlaG9sZGVyJyB8IHNreUxpYlJlc291cmNlc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyB0cnVlIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICBbYXV0b2NvbXBsZXRlQXR0cmlidXRlXT1cImF1dG9jb21wbGV0ZUF0dHJpYnV0ZVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvdW50cnlTZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgY3VycmVudFRoZW1lID09PSAnZGVmYXVsdCdcbiAgICAgICAgICAgICAgPyAoJ3NreXV4X2NvdW50cnlfZmllbGRfc2VhcmNoX3BsYWNlaG9sZGVyJyB8IHNreUxpYlJlc291cmNlcylcbiAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgKGJsdXIpPVwib25BdXRvY29tcGxldGVCbHVyKClcIlxuICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2t5LWF1dG9jb21wbGV0ZT5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiICNjb3VudHJ5U2VhcmNoUmVzdWx0VGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1jb3VudHJ5LWZpZWxkLXNlYXJjaC1yZXN1bHQtZmxhZ1wiXG4gICAgW25nQ2xhc3NdPVwiJ2l0aV9fZmxhZyBpdGlfXycgKyBpdGVtLmlzbzIudG9Mb3dlckNhc2UoKVwiXG4gID48L2Rpdj5cbiAge3sgaXRlbS5uYW1lIH19XG4gIDxzcGFuICpuZ0lmPVwiaW5jbHVkZVBob25lSW5mb1wiIGNsYXNzPVwic2t5LWRlZW1waGFzaXplZFwiPlxuICAgIHt7IGl0ZW0uZGlhbENvZGUgfX1cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaGlzIHRlbXBsYXRlIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gbW9kZXJuIHRoZW1lIGlucHV0IGJveGVzLiAtLT5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoSWNvblRlbXBsYXRlUmVmPlxuICA8ZGl2IGNsYXNzPVwic2t5LWlucHV0LWdyb3VwLWljb24gc2t5LWlucHV0LWJveC1pY29uLWluc2V0XCI+XG4gICAgPHNreS1pY29uIGljb25UeXBlPVwic2t5dXhcIiBpY29uPVwic2VhcmNoXCI+PC9za3ktaWNvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|