@sumaris-net/ngx-components 18.3.30-alpha2 → 18.4.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/doc/changelog.md +16 -13
- package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
- package/esm2022/src/app/shared/inputs.mjs +3 -2
- package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +131 -77
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +21 -105
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +1 -1
- package/esm2022/src/app/shared/material/material.testing.module.mjs +3 -3
- package/esm2022/src/app/shared/material/test/test-component.mjs +48 -24
- package/fesm2022/sumaris-net.ngx-components.mjs +273 -280
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/material/latlong/material.latlong-input.d.ts +9 -5
- package/src/app/shared/material/latlong/material.latlong.d.ts +1 -15
- package/src/assets/manifest.json +1 -1
- package/src/theme/_material.scss +5 -0
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ElementRef, Inject, inject, Input, Optional, Self, ViewChild } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, inject, Input, Optional, Self, ViewChild, } from '@angular/core';
|
|
2
2
|
import { FormBuilder, Validators } from '@angular/forms';
|
|
3
|
-
import { isNil, isNilOrBlank, isNotNil } from '../../functions';
|
|
4
|
-
import { computeDecimalDegrees, computeDecimalPart, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, } from './latlong.utils';
|
|
3
|
+
import { isNil, isNilOrBlank, isNotNil, isNotNilOrBlank } from '../../functions';
|
|
4
|
+
import { computeDecimalDegrees, computeDecimalPart, LAT_LONG_PATTERN_MAX_DECIMALS, splitDegreesToDDArray, splitDegreesToDDMMArray, splitDegreesToDDMMSSArray, } from './latlong.utils';
|
|
5
5
|
import { MAT_FORM_FIELD, MatFormFieldControl } from '@angular/material/form-field';
|
|
6
|
-
import { Subject } from 'rxjs';
|
|
6
|
+
import { Subject, Subscription } from 'rxjs';
|
|
7
7
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
8
|
+
import { maskitoNumberOptionsGenerator } from '@maskito/kit';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@angular/forms";
|
|
10
|
-
import * as i2 from "@
|
|
11
|
-
import * as i3 from "@angular
|
|
12
|
-
import * as i4 from "@angular/material/
|
|
13
|
-
import * as i5 from "@
|
|
14
|
-
import * as i6 from "
|
|
11
|
+
import * as i2 from "@ionic/angular";
|
|
12
|
+
import * as i3 from "@maskito/angular";
|
|
13
|
+
import * as i4 from "@angular/material/select";
|
|
14
|
+
import * as i5 from "@angular/material/core";
|
|
15
|
+
import * as i6 from "../../pipes/latlong-format.pipe";
|
|
16
|
+
import * as i7 from "@ngx-translate/core";
|
|
17
|
+
import * as i8 from "@angular/material/form-field";
|
|
15
18
|
export class MatLatLongFieldInput {
|
|
16
19
|
_elementRef;
|
|
17
20
|
_formField;
|
|
@@ -21,11 +24,11 @@ export class MatLatLongFieldInput {
|
|
|
21
24
|
minutesInput;
|
|
22
25
|
secondsInput;
|
|
23
26
|
signInput;
|
|
24
|
-
|
|
27
|
+
formGroup = inject(FormBuilder).group({
|
|
25
28
|
degrees: ['', [Validators.required]],
|
|
26
29
|
minutes: [''],
|
|
27
30
|
seconds: [''],
|
|
28
|
-
sign: [null
|
|
31
|
+
sign: [null],
|
|
29
32
|
});
|
|
30
33
|
stateChanges = new Subject();
|
|
31
34
|
focused = false;
|
|
@@ -35,8 +38,13 @@ export class MatLatLongFieldInput {
|
|
|
35
38
|
onChange = (_) => { };
|
|
36
39
|
onTouched = () => { };
|
|
37
40
|
get empty() {
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
if (this.readonly) {
|
|
42
|
+
return isNil(this.ngControl.value);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const { value: { degrees, minutes, seconds }, } = this.formGroup;
|
|
46
|
+
return !degrees && !minutes && !seconds;
|
|
47
|
+
}
|
|
40
48
|
}
|
|
41
49
|
get shouldLabelFloat() {
|
|
42
50
|
return this.focused || !this.empty;
|
|
@@ -57,21 +65,22 @@ export class MatLatLongFieldInput {
|
|
|
57
65
|
set disabled(value) {
|
|
58
66
|
this._disabled = coerceBooleanProperty(value);
|
|
59
67
|
if (this._disabled) {
|
|
60
|
-
this.
|
|
68
|
+
this.formGroup.disable();
|
|
61
69
|
}
|
|
62
70
|
else {
|
|
63
|
-
this.
|
|
71
|
+
this.formGroup.enable();
|
|
64
72
|
}
|
|
65
73
|
this.stateChanges.next();
|
|
66
74
|
}
|
|
67
75
|
_disabled = false;
|
|
68
76
|
get value() {
|
|
69
|
-
if (this.
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
77
|
+
if (this.formGroup.valid) {
|
|
78
|
+
const parts = this.formGroup.value;
|
|
79
|
+
const degrees = this.safeParseFloat(parts.degrees);
|
|
80
|
+
const minutes = this.safeParseFloat(parts.minutes);
|
|
81
|
+
const seconds = this.safeParseFloat(parts.seconds);
|
|
82
|
+
const sign = parts.sign;
|
|
83
|
+
return this.formGroup.valid
|
|
75
84
|
? isNil(degrees) || this.pattern === 'DD'
|
|
76
85
|
? degrees
|
|
77
86
|
: computeDecimalDegrees(degrees, minutes, seconds, sign, this.maxDecimals)
|
|
@@ -82,7 +91,7 @@ export class MatLatLongFieldInput {
|
|
|
82
91
|
set value(value) {
|
|
83
92
|
const result = this.computeLatLongFormGroupValue(value);
|
|
84
93
|
console.debug(`${this.logPrefix} Setting value`, value, result);
|
|
85
|
-
this.
|
|
94
|
+
this.formGroup.setValue({
|
|
86
95
|
degrees: result.degrees?.toString() || null,
|
|
87
96
|
minutes: result.minutes?.toString() || null,
|
|
88
97
|
seconds: result.seconds?.toString() || null,
|
|
@@ -91,26 +100,29 @@ export class MatLatLongFieldInput {
|
|
|
91
100
|
this.stateChanges.next();
|
|
92
101
|
}
|
|
93
102
|
get errorState() {
|
|
94
|
-
return this.
|
|
103
|
+
return this.formGroup.invalid && this.touched;
|
|
95
104
|
}
|
|
96
105
|
type;
|
|
97
106
|
pattern;
|
|
98
|
-
degreesSymbolUnit;
|
|
99
|
-
minutesSymbolUnit;
|
|
100
|
-
secondsSymbolUnit;
|
|
101
107
|
defaultSign;
|
|
102
108
|
maxDecimals;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
readonly = false;
|
|
110
|
+
degreesSymbolUnit = '°';
|
|
111
|
+
minutesSymbolUnit = "'";
|
|
112
|
+
secondsSymbolUnit = '"';
|
|
113
|
+
showMinutes = false;
|
|
114
|
+
showSeconds = false;
|
|
115
|
+
showSign = false;
|
|
106
116
|
degreesMask;
|
|
107
117
|
minutesMask;
|
|
108
118
|
secondsMask;
|
|
109
119
|
degreesPlaceholder;
|
|
110
120
|
minutesPlaceholder;
|
|
111
121
|
secondsPlaceholder;
|
|
112
|
-
lastInputMaxDecimals;
|
|
122
|
+
lastInputMaxDecimals = LAT_LONG_PATTERN_MAX_DECIMALS;
|
|
113
123
|
logPrefix = '[mat-latlong-input]';
|
|
124
|
+
_subscription = new Subscription();
|
|
125
|
+
cd = inject(ChangeDetectorRef);
|
|
114
126
|
constructor(_elementRef, _formField, ngControl) {
|
|
115
127
|
this._elementRef = _elementRef;
|
|
116
128
|
this._formField = _formField;
|
|
@@ -120,15 +132,76 @@ export class MatLatLongFieldInput {
|
|
|
120
132
|
}
|
|
121
133
|
}
|
|
122
134
|
ngOnInit() {
|
|
135
|
+
this.type = this.type || 'latitude';
|
|
136
|
+
this.pattern = this.pattern || 'DDMM';
|
|
137
|
+
this.showSign = this.pattern !== 'DD';
|
|
138
|
+
switch (this.pattern) {
|
|
139
|
+
case 'DD':
|
|
140
|
+
this.lastInputMaxDecimals = 7;
|
|
141
|
+
this.degreesPlaceholder = this.type === 'latitude' ? 'COMMON.LAT_LONG.DD_DDDDDDD_PLACEHOLDER' : 'COMMON.LAT_LONG.DDD_DDDDDDD_PLACEHOLDER';
|
|
142
|
+
this.degreesMask = maskitoNumberOptionsGenerator({
|
|
143
|
+
precision: this.lastInputMaxDecimals,
|
|
144
|
+
min: this.type === 'latitude' ? -90 : -180,
|
|
145
|
+
max: this.type === 'latitude' ? 90 : 180,
|
|
146
|
+
minusSign: '-',
|
|
147
|
+
});
|
|
148
|
+
break;
|
|
149
|
+
case 'DDMM':
|
|
150
|
+
this.lastInputMaxDecimals = 3;
|
|
151
|
+
this.showMinutes = true;
|
|
152
|
+
this.degreesPlaceholder = this.type === 'latitude' ? 'COMMON.LAT_LONG.DD_PLACEHOLDER' : 'COMMON.LAT_LONG.DDD_PLACEHOLDER';
|
|
153
|
+
this.minutesPlaceholder = 'COMMON.LAT_LONG.MM_MMM_PLACEHOLDER';
|
|
154
|
+
this.degreesMask = maskitoNumberOptionsGenerator({
|
|
155
|
+
precision: 0,
|
|
156
|
+
min: 0,
|
|
157
|
+
max: this.type === 'latitude' ? 90 : 180,
|
|
158
|
+
});
|
|
159
|
+
this.minutesMask = maskitoNumberOptionsGenerator({
|
|
160
|
+
precision: this.lastInputMaxDecimals,
|
|
161
|
+
min: 0,
|
|
162
|
+
max: 60 - computeDecimalPart(1, this.lastInputMaxDecimals),
|
|
163
|
+
});
|
|
164
|
+
break;
|
|
165
|
+
default: // Default is DDMMSS
|
|
166
|
+
this.lastInputMaxDecimals = 2;
|
|
167
|
+
this.showMinutes = true;
|
|
168
|
+
this.showSeconds = true;
|
|
169
|
+
this.degreesPlaceholder = this.type === 'latitude' ? 'COMMON.LAT_LONG.DD_PLACEHOLDER' : 'COMMON.LAT_LONG.DDD_PLACEHOLDER';
|
|
170
|
+
this.minutesPlaceholder = 'COMMON.LAT_LONG.MM_PLACEHOLDER';
|
|
171
|
+
this.secondsPlaceholder = 'COMMON.LAT_LONG.SS_SS_PLACEHOLDER';
|
|
172
|
+
this.degreesMask = maskitoNumberOptionsGenerator({
|
|
173
|
+
precision: 0,
|
|
174
|
+
min: 0,
|
|
175
|
+
max: this.type === 'latitude' ? 90 : 180,
|
|
176
|
+
});
|
|
177
|
+
this.minutesMask = maskitoNumberOptionsGenerator({
|
|
178
|
+
precision: 0,
|
|
179
|
+
min: 0,
|
|
180
|
+
max: 59,
|
|
181
|
+
});
|
|
182
|
+
this.secondsMask = maskitoNumberOptionsGenerator({
|
|
183
|
+
precision: this.lastInputMaxDecimals,
|
|
184
|
+
min: 0,
|
|
185
|
+
max: 60 - computeDecimalPart(1, this.lastInputMaxDecimals),
|
|
186
|
+
});
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
123
189
|
if (this.showMinutes) {
|
|
124
|
-
this.
|
|
190
|
+
this.formGroup.controls.minutes.addValidators(Validators.required);
|
|
125
191
|
}
|
|
126
192
|
if (this.showSeconds) {
|
|
127
|
-
this.
|
|
193
|
+
this.formGroup.controls.seconds.addValidators(Validators.required);
|
|
194
|
+
}
|
|
195
|
+
if (this.showSign) {
|
|
196
|
+
this.formGroup.controls.sign.addValidators(Validators.required);
|
|
197
|
+
}
|
|
198
|
+
if (this.readonly) {
|
|
199
|
+
this._subscription.add(this.ngControl.valueChanges.subscribe(() => this.cd.markForCheck()));
|
|
128
200
|
}
|
|
129
201
|
}
|
|
130
202
|
ngOnDestroy() {
|
|
131
203
|
this.stateChanges.complete();
|
|
204
|
+
this._subscription.unsubscribe();
|
|
132
205
|
}
|
|
133
206
|
onFocusIn(event) {
|
|
134
207
|
if (!this.focused) {
|
|
@@ -149,7 +222,7 @@ export class MatLatLongFieldInput {
|
|
|
149
222
|
let focusNext = false;
|
|
150
223
|
switch (controlName) {
|
|
151
224
|
case 'degrees': {
|
|
152
|
-
const degrees =
|
|
225
|
+
const degrees = this.safeParseFloat(this.formGroup.value.degrees);
|
|
153
226
|
if (this.type === 'latitude' && (degrees === 0 || degrees > 9)) {
|
|
154
227
|
focusNext = true;
|
|
155
228
|
}
|
|
@@ -159,7 +232,7 @@ export class MatLatLongFieldInput {
|
|
|
159
232
|
break;
|
|
160
233
|
}
|
|
161
234
|
case 'minutes': {
|
|
162
|
-
const minutes =
|
|
235
|
+
const minutes = this.safeParseFloat(this.formGroup.value.minutes);
|
|
163
236
|
if (minutes === 0 || minutes > 6) {
|
|
164
237
|
focusNext = true;
|
|
165
238
|
}
|
|
@@ -176,45 +249,47 @@ export class MatLatLongFieldInput {
|
|
|
176
249
|
this.onChange(this.value);
|
|
177
250
|
}
|
|
178
251
|
autoFocusNext(controlName, nextControlName) {
|
|
179
|
-
if (!this.
|
|
180
|
-
this.getElementByName(nextControlName)
|
|
252
|
+
if (!this.formGroup.controls[controlName].errors && nextControlName) {
|
|
253
|
+
this.getElementByName(nextControlName)?.focus();
|
|
181
254
|
}
|
|
182
255
|
}
|
|
183
256
|
autoFocusPrev(controlName, prevControlName) {
|
|
184
|
-
if (isNilOrBlank(this.
|
|
185
|
-
this.getElementByName(prevControlName)
|
|
257
|
+
if (isNilOrBlank(this.formGroup.controls[controlName].value)) {
|
|
258
|
+
this.getElementByName(prevControlName)?.focus();
|
|
186
259
|
}
|
|
187
260
|
}
|
|
188
261
|
getElementByName(name) {
|
|
189
262
|
switch (name) {
|
|
190
263
|
case 'degrees':
|
|
191
|
-
return this.degreesInput
|
|
264
|
+
return this.degreesInput?.nativeElement;
|
|
192
265
|
case 'minutes':
|
|
193
|
-
return this.minutesInput
|
|
266
|
+
return this.minutesInput?.nativeElement;
|
|
194
267
|
case 'seconds':
|
|
195
|
-
return this.secondsInput
|
|
268
|
+
return this.secondsInput?.nativeElement;
|
|
196
269
|
case 'sign':
|
|
197
|
-
return this.signInput
|
|
270
|
+
return this.signInput?.nativeElement;
|
|
198
271
|
default:
|
|
199
272
|
throw new Error(`${this.logPrefix} No HTMLElement with name '${name}'`);
|
|
200
273
|
}
|
|
201
274
|
}
|
|
202
275
|
setDescribedByIds(ids) {
|
|
203
276
|
const controlElement = this._elementRef.nativeElement.querySelector('.mat-latlong-input-container');
|
|
204
|
-
controlElement
|
|
277
|
+
controlElement?.setAttribute('aria-describedby', ids.join(' '));
|
|
205
278
|
}
|
|
206
279
|
onContainerClick() {
|
|
207
|
-
console.debug(`${this.logPrefix} DEBUG onContainerClick`);
|
|
280
|
+
// console.debug(`${this.logPrefix} DEBUG onContainerClick`);
|
|
281
|
+
if (this.readonly)
|
|
282
|
+
return;
|
|
208
283
|
if (this.empty) {
|
|
209
284
|
this.degreesInput.nativeElement.focus();
|
|
210
285
|
}
|
|
211
|
-
else if (isNilOrBlank(this.
|
|
286
|
+
else if (isNilOrBlank(this.formGroup.value.minutes)) {
|
|
212
287
|
this.minutesInput.nativeElement.focus();
|
|
213
288
|
}
|
|
214
|
-
else if (isNilOrBlank(this.
|
|
289
|
+
else if (isNilOrBlank(this.formGroup.value.seconds)) {
|
|
215
290
|
this.secondsInput.nativeElement.focus();
|
|
216
291
|
}
|
|
217
|
-
else if (isNil(this.
|
|
292
|
+
else if (isNil(this.formGroup.value.sign)) {
|
|
218
293
|
this.signInput.nativeElement.focus();
|
|
219
294
|
}
|
|
220
295
|
}
|
|
@@ -232,7 +307,7 @@ export class MatLatLongFieldInput {
|
|
|
232
307
|
}
|
|
233
308
|
computeLatLongFormGroupValue(rawValue) {
|
|
234
309
|
const isLongitude = this.type === 'longitude';
|
|
235
|
-
const value = typeof rawValue === 'string' ?
|
|
310
|
+
const value = typeof rawValue === 'string' ? this.safeParseFloat(rawValue.replace(/,/g, '.')) : rawValue;
|
|
236
311
|
const result = {
|
|
237
312
|
degrees: null,
|
|
238
313
|
minutes: null,
|
|
@@ -281,16 +356,19 @@ export class MatLatLongFieldInput {
|
|
|
281
356
|
}
|
|
282
357
|
return result;
|
|
283
358
|
}
|
|
359
|
+
safeParseFloat(value) {
|
|
360
|
+
return isNotNilOrBlank(value) ? parseFloat(value) : undefined;
|
|
361
|
+
}
|
|
284
362
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: MatLatLongFieldInput, deps: [{ token: i0.ElementRef }, { token: MAT_FORM_FIELD, optional: true }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
285
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: MatLatLongFieldInput, selector: "mat-latlong-input", inputs: { userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], required: "required", disabled: "disabled", value: "value", type: "type", pattern: ["latLongPattern", "pattern"],
|
|
363
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: MatLatLongFieldInput, selector: "mat-latlong-input", inputs: { userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], required: "required", disabled: "disabled", value: "value", type: "type", pattern: ["latLongPattern", "pattern"], defaultSign: "defaultSign", maxDecimals: "maxDecimals", readonly: "readonly" }, host: { properties: { "class.label-floating": "shouldLabelFloat", "id": "id" } }, providers: [{ provide: MatFormFieldControl, useExisting: MatLatLongFieldInput }], viewQueries: [{ propertyName: "degreesInput", first: true, predicate: ["degrees"], descendants: true, read: ElementRef }, { propertyName: "minutesInput", first: true, predicate: ["minutes"], descendants: true, read: ElementRef }, { propertyName: "secondsInput", first: true, predicate: ["seconds"], descendants: true, read: ElementRef }, { propertyName: "signInput", first: true, predicate: ["sign"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (readonly) {\n <ion-text>\n {{\n ngControl.value\n | latLongFormat: { pattern: pattern, maxDecimals: lastInputMaxDecimals, type: type, placeholderChar: '' }\n }}\n </ion-text>\n} @else {\n <div\n role=\"group\"\n class=\"mat-latlong-input-container\"\n [formGroup]=\"formGroup\"\n [attr.aria-labelledby]=\"_formField?.getLabelId()\"\n (focusin)=\"onFocusIn($event)\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n #degrees\n aria-label=\"Degrees\"\n [class.degrees-only]=\"pattern === 'DD'\"\n [class.degrees]=\"pattern !== 'DD'\"\n [class.latitude]=\"type === 'latitude'\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"degreesPlaceholder | translate\"\n formControlName=\"degrees\"\n [maskito]=\"degreesMask\"\n (input)=\"handleInput('degrees', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ degreesSymbolUnit }}\n </span>\n\n @if (showMinutes) {\n <input\n #minutes\n aria-label=\"Minutes\"\n [class.minutes]=\"showSeconds\"\n [class.minutes-seconds]=\"!showSeconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"minutesPlaceholder | translate\"\n formControlName=\"minutes\"\n [maskito]=\"minutesMask\"\n (input)=\"handleInput('minutes', 'seconds')\"\n (keyup.backspace)=\"autoFocusPrev('minutes', 'degrees')\"\n />\n <span class=\"symbol-unit\">\n {{ minutesSymbolUnit }}\n </span>\n }\n\n @if (showSeconds) {\n <input\n #seconds\n aria-label=\"Seconds\"\n class=\"seconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"secondsPlaceholder | translate\"\n formControlName=\"seconds\"\n [maskito]=\"secondsMask\"\n (input)=\"handleInput('seconds', 'sign')\"\n (keyup.backspace)=\"autoFocusPrev('seconds', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ secondsSymbolUnit }}\n </span>\n }\n\n <!-- sign -->\n @if (showSign) {\n <span class=\"sign-spacer\"></span>\n <mat-select\n #sign\n aria-label=\"Sign\"\n class=\"sign\"\n formControlName=\"sign\"\n [placeholder]=\"\n (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER' : 'COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER')\n | translate\n \"\n (focusin)=\"sign.open()\"\n (selectionChange)=\"handleInput('sign')\"\n >\n <mat-option [value]=\"1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_N' : 'COMMON.LAT_LONG.LONG_SIGN_E') | translate }}\n </mat-option>\n <mat-option [value]=\"-1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_S' : 'COMMON.LAT_LONG.LONG_SIGN_W') | translate }}\n </mat-option>\n </mat-select>\n }\n </div>\n}\n", styles: [".mat-latlong-input-container{display:inline-flex;width:100%;opacity:0;transition:opacity .2s;pointer-events:none;--mat-select-arrow-transform: translateY(0)}input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:right;color:var(--mdc-filled-text-field-input-text-color, var(--ion-text-color))}input::placeholder{letter-spacing:-.05em;color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--app-form-field-label-color))}input.degrees-only{width:calc(100% - .5em)}input.degrees{width:1.9em}input.degrees.latitude{width:1.3em}input.minutes{width:1.7em}input.minutes-seconds{width:3.5em}input.seconds{width:3em}.symbol-unit{font-weight:700}.sign-spacer{width:.25em}.sign{max-width:2.6em;color:inherit}:host.label-floating .mat-latlong-input-container{opacity:1;pointer-events:revert}\n"], dependencies: [{ kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i6.LatLongFormatPipe, name: "latLongFormat" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
286
364
|
}
|
|
287
365
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: MatLatLongFieldInput, decorators: [{
|
|
288
366
|
type: Component,
|
|
289
367
|
args: [{ selector: 'mat-latlong-input', providers: [{ provide: MatFormFieldControl, useExisting: MatLatLongFieldInput }], host: {
|
|
290
368
|
'[class.label-floating]': 'shouldLabelFloat',
|
|
291
369
|
'[id]': 'id',
|
|
292
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n
|
|
293
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type:
|
|
370
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (readonly) {\n <ion-text>\n {{\n ngControl.value\n | latLongFormat: { pattern: pattern, maxDecimals: lastInputMaxDecimals, type: type, placeholderChar: '' }\n }}\n </ion-text>\n} @else {\n <div\n role=\"group\"\n class=\"mat-latlong-input-container\"\n [formGroup]=\"formGroup\"\n [attr.aria-labelledby]=\"_formField?.getLabelId()\"\n (focusin)=\"onFocusIn($event)\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n #degrees\n aria-label=\"Degrees\"\n [class.degrees-only]=\"pattern === 'DD'\"\n [class.degrees]=\"pattern !== 'DD'\"\n [class.latitude]=\"type === 'latitude'\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"degreesPlaceholder | translate\"\n formControlName=\"degrees\"\n [maskito]=\"degreesMask\"\n (input)=\"handleInput('degrees', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ degreesSymbolUnit }}\n </span>\n\n @if (showMinutes) {\n <input\n #minutes\n aria-label=\"Minutes\"\n [class.minutes]=\"showSeconds\"\n [class.minutes-seconds]=\"!showSeconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"minutesPlaceholder | translate\"\n formControlName=\"minutes\"\n [maskito]=\"minutesMask\"\n (input)=\"handleInput('minutes', 'seconds')\"\n (keyup.backspace)=\"autoFocusPrev('minutes', 'degrees')\"\n />\n <span class=\"symbol-unit\">\n {{ minutesSymbolUnit }}\n </span>\n }\n\n @if (showSeconds) {\n <input\n #seconds\n aria-label=\"Seconds\"\n class=\"seconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"secondsPlaceholder | translate\"\n formControlName=\"seconds\"\n [maskito]=\"secondsMask\"\n (input)=\"handleInput('seconds', 'sign')\"\n (keyup.backspace)=\"autoFocusPrev('seconds', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ secondsSymbolUnit }}\n </span>\n }\n\n <!-- sign -->\n @if (showSign) {\n <span class=\"sign-spacer\"></span>\n <mat-select\n #sign\n aria-label=\"Sign\"\n class=\"sign\"\n formControlName=\"sign\"\n [placeholder]=\"\n (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER' : 'COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER')\n | translate\n \"\n (focusin)=\"sign.open()\"\n (selectionChange)=\"handleInput('sign')\"\n >\n <mat-option [value]=\"1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_N' : 'COMMON.LAT_LONG.LONG_SIGN_E') | translate }}\n </mat-option>\n <mat-option [value]=\"-1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_S' : 'COMMON.LAT_LONG.LONG_SIGN_W') | translate }}\n </mat-option>\n </mat-select>\n }\n </div>\n}\n", styles: [".mat-latlong-input-container{display:inline-flex;width:100%;opacity:0;transition:opacity .2s;pointer-events:none;--mat-select-arrow-transform: translateY(0)}input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:right;color:var(--mdc-filled-text-field-input-text-color, var(--ion-text-color))}input::placeholder{letter-spacing:-.05em;color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--app-form-field-label-color))}input.degrees-only{width:calc(100% - .5em)}input.degrees{width:1.9em}input.degrees.latitude{width:1.3em}input.minutes{width:1.7em}input.minutes-seconds{width:3.5em}input.seconds{width:3em}.symbol-unit{font-weight:700}.sign-spacer{width:.25em}.sign{max-width:2.6em;color:inherit}:host.label-floating .mat-latlong-input-container{opacity:1;pointer-events:revert}\n"] }]
|
|
371
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i8.MatFormField, decorators: [{
|
|
294
372
|
type: Optional
|
|
295
373
|
}, {
|
|
296
374
|
type: Inject,
|
|
@@ -325,35 +403,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
325
403
|
}], pattern: [{
|
|
326
404
|
type: Input,
|
|
327
405
|
args: ['latLongPattern']
|
|
328
|
-
}], degreesSymbolUnit: [{
|
|
329
|
-
type: Input
|
|
330
|
-
}], minutesSymbolUnit: [{
|
|
331
|
-
type: Input
|
|
332
|
-
}], secondsSymbolUnit: [{
|
|
333
|
-
type: Input
|
|
334
406
|
}], defaultSign: [{
|
|
335
407
|
type: Input
|
|
336
408
|
}], maxDecimals: [{
|
|
337
409
|
type: Input
|
|
338
|
-
}],
|
|
339
|
-
type: Input
|
|
340
|
-
}], showSeconds: [{
|
|
341
|
-
type: Input
|
|
342
|
-
}], showSign: [{
|
|
343
|
-
type: Input
|
|
344
|
-
}], degreesMask: [{
|
|
345
|
-
type: Input
|
|
346
|
-
}], minutesMask: [{
|
|
347
|
-
type: Input
|
|
348
|
-
}], secondsMask: [{
|
|
349
|
-
type: Input
|
|
350
|
-
}], degreesPlaceholder: [{
|
|
351
|
-
type: Input
|
|
352
|
-
}], minutesPlaceholder: [{
|
|
353
|
-
type: Input
|
|
354
|
-
}], secondsPlaceholder: [{
|
|
355
|
-
type: Input
|
|
356
|
-
}], lastInputMaxDecimals: [{
|
|
410
|
+
}], readonly: [{
|
|
357
411
|
type: Input
|
|
358
412
|
}] } });
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSixPQUFPLEVBQXdCLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGtCQUFrQixFQU1sQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixHQUMxQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxjQUFjLEVBQWdCLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQWdCLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBYTVFLE1BQU0sT0FBTyxvQkFBb0I7SUF1SHJCO0lBQ21DO0lBQ2hCO0lBeEg3QixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMwQixZQUFZLENBQWE7SUFDekIsWUFBWSxDQUFhO0lBQ3pCLFlBQVksQ0FBYTtJQUM1QixTQUFTLENBQWE7SUFFL0QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDaEMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNiLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNiLElBQUksRUFBRSxDQUFtQixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEQsQ0FBQyxDQUFDO0lBQ0gsWUFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDbkMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztJQUNsQyxFQUFFLEdBQUcscUJBQXFCLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDMUQsUUFBUSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUVyQixJQUFJLEtBQUs7UUFDUCxNQUFNLEVBQ0osS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FDckMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRWYsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRTBCLG1CQUFtQixDQUFTO0lBQ3ZELFdBQVcsQ0FBUyxDQUFDLFdBQVc7SUFFaEMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLFFBQVEsQ0FBQyxLQUFtQjtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFMUIsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLFFBQVEsQ0FBQyxLQUFtQjtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLElBQUksS0FBSztRQUNQLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJO29CQUN2QyxDQUFDLENBQUMsT0FBTztvQkFDVCxDQUFDLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQzVFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDWCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFDSSxLQUFLLENBQUMsS0FBb0I7UUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksSUFBSTtZQUMzQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJO1lBQzNDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUk7WUFDM0MsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM1QyxDQUFDO0lBRVEsSUFBSSxDQUFjO0lBQ0YsT0FBTyxDQUFpQjtJQUN4QyxpQkFBaUIsQ0FBUztJQUMxQixpQkFBaUIsQ0FBUztJQUMxQixpQkFBaUIsQ0FBUztJQUMxQixXQUFXLENBQWM7SUFDekIsV0FBVyxDQUFTO0lBRXBCLFdBQVcsQ0FBVTtJQUNyQixXQUFXLENBQVU7SUFDckIsUUFBUSxDQUFVO0lBQ2xCLFdBQVcsQ0FBaUI7SUFDNUIsV0FBVyxDQUFpQjtJQUM1QixXQUFXLENBQWlCO0lBQzVCLGtCQUFrQixDQUFTO0lBQzNCLGtCQUFrQixDQUFTO0lBQzNCLGtCQUFrQixDQUFTO0lBQzNCLG9CQUFvQixDQUFTO0lBRTlCLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQztJQUUxQyxZQUNVLFdBQW9DLEVBQ0QsVUFBd0IsRUFDeEMsU0FBb0I7UUFGdkMsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ0QsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4QyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBRS9DLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBd0IsQ0FBQyxFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsV0FBbUIsRUFBRSxlQUF3QjtRQUN2RCwrQkFBK0I7UUFDL0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFFBQVEsV0FBVyxFQUFFLENBQUM7WUFDcEIsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNmLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQy9ELFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3hFLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7Z0JBQ0QsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNqQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNmLG9CQUFvQjtnQkFDcEIsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQW1CLEVBQUUsZUFBd0I7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsV0FBbUIsRUFBRSxlQUF1QjtRQUN4RCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVk7UUFDM0IsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1lBQ3pDLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1lBQ3pDLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1lBQ3pDLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3RDO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyw4QkFBOEIsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQWE7UUFDN0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFFLENBQUM7UUFDckcsY0FBYyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBb0I7UUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxRQUF5QjtRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDaEcsTUFBTSxNQUFNLEdBQWlCO1lBQzNCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNuQixDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsMkJBQTJCO29CQUMzQixJQUFJLENBQUMsV0FBVzt3QkFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssR0FBRzs0QkFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDSixDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsSUFBSTtTQUNYLENBQUM7UUFFRixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixnQkFBZ0I7WUFDaEIsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsb0JBQW9CO2dCQUN0QyxVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBYSxDQUFDLENBQUMsZUFBZTtnQkFDbkcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUgsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BILE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkcsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLG9CQUFvQjtnQkFDcEIsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUNwSCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdEYsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4SCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7d0dBNVNVLG9CQUFvQiw0Q0F3SFQsY0FBYzs0RkF4SHpCLG9CQUFvQiw0ekJBUHBCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUMsOEdBU2xELFVBQVUsa0dBQ1YsVUFBVSxrR0FDVixVQUFVLDRGQUNiLFVBQVUsNkJDcEN2QywyK0VBb0ZBOzs0RkRyRGEsb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLG1CQUFtQixhQUdsQixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsc0JBQXNCLEVBQUUsQ0FBQyxRQUMxRTt3QkFDSix3QkFBd0IsRUFBRSxrQkFBa0I7d0JBQzVDLE1BQU0sRUFBRSxJQUFJO3FCQUNiLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzswQkEwSDVDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs7MEJBQ2pDLFFBQVE7OzBCQUFJLElBQUk7eUNBdkh5QixZQUFZO3NCQUF2RCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ0UsWUFBWTtzQkFBdkQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNFLFlBQVk7c0JBQXZELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDRCxTQUFTO3NCQUFqRCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBNEJaLG1CQUFtQjtzQkFBN0MsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBUXJCLFFBQVE7c0JBRFgsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBNkJGLEtBQUs7c0JBRFIsS0FBSztnQkFpQkcsSUFBSTtzQkFBWixLQUFLO2dCQUNtQixPQUFPO3NCQUEvQixLQUFLO3VCQUFDLGdCQUFnQjtnQkFDZCxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFNlbGYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1CdWlsZGVyLCBOZ0NvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1xuICBjb21wdXRlRGVjaW1hbERlZ3JlZXMsXG4gIGNvbXB1dGVEZWNpbWFsUGFydCxcbiAgSUxhdExvbmdEYXRhLFxuICBMYXRMb25nUGF0dGVybixcbiAgTGF0TG9uZ1NpZ24sXG4gIExhdExvbmdTaWduVmFsdWUsXG4gIExhdExvbmdUeXBlLFxuICBzcGxpdERlZ3JlZXNUb0REQXJyYXksXG4gIHNwbGl0RGVncmVlc1RvRERNTUFycmF5LFxuICBzcGxpdERlZ3JlZXNUb0RETU1TU0FycmF5LFxufSBmcm9tICcuL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgTWFza2l0b09wdGlvbnMgfSBmcm9tICdAbWFza2l0by9jb3JlJztcbmltcG9ydCB7IE1BVF9GT1JNX0ZJRUxELCBNYXRGb3JtRmllbGQsIE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWxhdGxvbmctaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21hdGVyaWFsLmxhdGxvbmctaW5wdXQuc2NzcycsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IE1hdExhdExvbmdGaWVsZElucHV0IH1dLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5sYWJlbC1mbG9hdGluZ10nOiAnc2hvdWxkTGFiZWxGbG9hdCcsXG4gICAgJ1tpZF0nOiAnaWQnLFxuICB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TGF0TG9uZ0ZpZWxkSW5wdXQgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPG51bWJlcj4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xuICBAVmlld0NoaWxkKCdkZWdyZWVzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRlZ3JlZXNJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbWludXRlcycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtaW51dGVzSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NlY29uZHMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc2Vjb25kc0lucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzaWduJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNpZ25JbnB1dDogRWxlbWVudFJlZjtcblxuICBwYXJ0cyA9IGluamVjdChGb3JtQnVpbGRlcikuZ3JvdXAoe1xuICAgIGRlZ3JlZXM6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICBtaW51dGVzOiBbJyddLFxuICAgIHNlY29uZHM6IFsnJ10sXG4gICAgc2lnbjogWzxMYXRMb25nU2lnblZhbHVlPm51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gIH0pO1xuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIHRvdWNoZWQgPSBmYWxzZTtcbiAgY29udHJvbFR5cGUgPSAnbWF0LWxhdGxvbmctaW5wdXQnO1xuICBpZCA9IGBtYXQtbGF0bG9uZy1pbnB1dC0ke01hdExhdExvbmdGaWVsZElucHV0Lm5leHRJZCsrfWA7XG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIGdldCBlbXB0eSgpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZTogeyBkZWdyZWVzLCBtaW51dGVzLCBzZWNvbmRzIH0sXG4gICAgfSA9IHRoaXMucGFydHM7XG5cbiAgICByZXR1cm4gIWRlZ3JlZXMgJiYgIW1pbnV0ZXMgJiYgIXNlY29uZHM7XG4gIH1cblxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xuICB9XG5cbiAgQElucHV0KCdhcmlhLWRlc2NyaWJlZGJ5JykgdXNlckFyaWFEZXNjcmliZWRCeTogc3RyaW5nO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nOyAvLyBOb3QgdXNlZFxuXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcmVxdWlyZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucGFydHMuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnRzLmVuYWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGdldCB2YWx1ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5wYXJ0cy52YWxpZCkge1xuICAgICAgY29uc3QgZGVncmVlcyA9IHBhcnNlRmxvYXQodGhpcy5wYXJ0cy52YWx1ZS5kZWdyZWVzKTtcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZUZsb2F0KHRoaXMucGFydHMudmFsdWUubWludXRlcyk7XG4gICAgICBjb25zdCBzZWNvbmRzID0gcGFyc2VGbG9hdCh0aGlzLnBhcnRzLnZhbHVlLnNlY29uZHMpO1xuICAgICAgY29uc3Qgc2lnbiA9IHRoaXMucGFydHMudmFsdWUuc2lnbjtcbiAgICAgIHJldHVybiB0aGlzLnBhcnRzLnZhbGlkXG4gICAgICAgID8gaXNOaWwoZGVncmVlcykgfHwgdGhpcy5wYXR0ZXJuID09PSAnREQnXG4gICAgICAgICAgPyBkZWdyZWVzXG4gICAgICAgICAgOiBjb21wdXRlRGVjaW1hbERlZ3JlZXMoZGVncmVlcywgbWludXRlcywgc2Vjb25kcywgc2lnbiwgdGhpcy5tYXhEZWNpbWFscylcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY29tcHV0ZUxhdExvbmdGb3JtR3JvdXBWYWx1ZSh2YWx1ZSk7XG4gICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gU2V0dGluZyB2YWx1ZWAsIHZhbHVlLCByZXN1bHQpO1xuICAgIHRoaXMucGFydHMuc2V0VmFsdWUoe1xuICAgICAgZGVncmVlczogcmVzdWx0LmRlZ3JlZXM/LnRvU3RyaW5nKCkgfHwgbnVsbCxcbiAgICAgIG1pbnV0ZXM6IHJlc3VsdC5taW51dGVzPy50b1N0cmluZygpIHx8IG51bGwsXG4gICAgICBzZWNvbmRzOiByZXN1bHQuc2Vjb25kcz8udG9TdHJpbmcoKSB8fCBudWxsLFxuICAgICAgc2lnbjogcmVzdWx0LnNpZ24sXG4gICAgfSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFydHMuaW52YWxpZCAmJiB0aGlzLnRvdWNoZWQ7XG4gIH1cblxuICBASW5wdXQoKSB0eXBlOiBMYXRMb25nVHlwZTtcbiAgQElucHV0KCdsYXRMb25nUGF0dGVybicpIHBhdHRlcm46IExhdExvbmdQYXR0ZXJuO1xuICBASW5wdXQoKSBkZWdyZWVzU3ltYm9sVW5pdDogc3RyaW5nO1xuICBASW5wdXQoKSBtaW51dGVzU3ltYm9sVW5pdDogc3RyaW5nO1xuICBASW5wdXQoKSBzZWNvbmRzU3ltYm9sVW5pdDogc3RyaW5nO1xuICBASW5wdXQoKSBkZWZhdWx0U2lnbjogTGF0TG9uZ1NpZ247XG4gIEBJbnB1dCgpIG1heERlY2ltYWxzOiBudW1iZXI7XG5cbiAgQElucHV0KCkgc2hvd01pbnV0ZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dTZWNvbmRzOiBib29sZWFuO1xuICBASW5wdXQoKSBzaG93U2lnbjogYm9vbGVhbjtcbiAgQElucHV0KCkgZGVncmVlc01hc2s6IE1hc2tpdG9PcHRpb25zO1xuICBASW5wdXQoKSBtaW51dGVzTWFzazogTWFza2l0b09wdGlvbnM7XG4gIEBJbnB1dCgpIHNlY29uZHNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgQElucHV0KCkgZGVncmVlc1BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1pbnV0ZXNQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzZWNvbmRzUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgbGFzdElucHV0TWF4RGVjaW1hbHM6IG51bWJlcjtcblxuICBwcml2YXRlIGxvZ1ByZWZpeCA9ICdbbWF0LWxhdGxvbmctaW5wdXRdJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9GT1JNX0ZJRUxEKSBwdWJsaWMgX2Zvcm1GaWVsZDogTWF0Rm9ybUZpZWxkLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sXG4gICkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5zaG93TWludXRlcykge1xuICAgICAgdGhpcy5wYXJ0cy5jb250cm9scy5taW51dGVzLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dTZWNvbmRzKSB7XG4gICAgICB0aGlzLnBhcnRzLmNvbnRyb2xzLnNlY29uZHMuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1c091dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCkpIHtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSW5wdXQoY29udHJvbE5hbWU6IHN0cmluZywgbmV4dENvbnRyb2xOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2FuIGF1dG9mb2N1cyBuZXh0IGNvbnRyb2wgP1xuICAgIGxldCBmb2N1c05leHQgPSBmYWxzZTtcbiAgICBzd2l0Y2ggKGNvbnRyb2xOYW1lKSB7XG4gICAgICBjYXNlICdkZWdyZWVzJzoge1xuICAgICAgICBjb25zdCBkZWdyZWVzID0gcGFyc2VGbG9hdCh0aGlzLnBhcnRzLnZhbHVlLmRlZ3JlZXMpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbGF0aXR1ZGUnICYmIChkZWdyZWVzID09PSAwIHx8IGRlZ3JlZXMgPiA5KSkge1xuICAgICAgICAgIGZvY3VzTmV4dCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbG9uZ2l0dWRlJyAmJiAoZGVncmVlcyA9PT0gMCB8fCBkZWdyZWVzID4gMTgpKSB7XG4gICAgICAgICAgZm9jdXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21pbnV0ZXMnOiB7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZUZsb2F0KHRoaXMucGFydHMudmFsdWUubWludXRlcyk7XG4gICAgICAgIGlmIChtaW51dGVzID09PSAwIHx8IG1pbnV0ZXMgPiA2KSB7XG4gICAgICAgICAgZm9jdXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3NlY29uZHMnOiB7XG4gICAgICAgIC8vIGZvY3VzTmV4dCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmb2N1c05leHQpIHtcbiAgICAgIHRoaXMuYXV0b0ZvY3VzTmV4dChjb250cm9sTmFtZSwgbmV4dENvbnRyb2xOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIGF1dG9Gb2N1c05leHQoY29udHJvbE5hbWU6IHN0cmluZywgbmV4dENvbnRyb2xOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcnRzLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS5lcnJvcnMgJiYgbmV4dENvbnRyb2xOYW1lKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnRCeU5hbWUobmV4dENvbnRyb2xOYW1lKS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGF1dG9Gb2N1c1ByZXYoY29udHJvbE5hbWU6IHN0cmluZywgcHJldkNvbnRyb2xOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHRoaXMucGFydHMuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlKSkge1xuICAgICAgdGhpcy5nZXRFbGVtZW50QnlOYW1lKHByZXZDb250cm9sTmFtZSkuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50QnlOYW1lKG5hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ2RlZ3JlZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWdyZWVzSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5taW51dGVzSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICByZXR1cm4gdGhpcy5zZWNvbmRzSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIGNhc2UgJ3NpZ24nOlxuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmxvZ1ByZWZpeH0gTm8gSFRNTEVsZW1lbnQgd2l0aCBuYW1lICcke25hbWV9J2ApO1xuICAgIH1cbiAgfVxuXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LWxhdGxvbmctaW5wdXQtY29udGFpbmVyJykhO1xuICAgIGNvbnRyb2xFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIGlkcy5qb2luKCcgJykpO1xuICB9XG5cbiAgb25Db250YWluZXJDbGljaygpIHtcbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBERUJVRyBvbkNvbnRhaW5lckNsaWNrYCk7XG4gICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgIHRoaXMuZGVncmVlc0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKGlzTmlsT3JCbGFuayh0aGlzLnBhcnRzLnZhbHVlLm1pbnV0ZXMpKSB7XG4gICAgICB0aGlzLm1pbnV0ZXNJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChpc05pbE9yQmxhbmsodGhpcy5wYXJ0cy52YWx1ZS5zZWNvbmRzKSkge1xuICAgICAgdGhpcy5zZWNvbmRzSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwodGhpcy5wYXJ0cy52YWx1ZS5zaWduKSkge1xuICAgICAgdGhpcy5zaWduSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTGF0TG9uZ0Zvcm1Hcm91cFZhbHVlKHJhd1ZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBJTGF0TG9uZ0RhdGEge1xuICAgIGNvbnN0IGlzTG9uZ2l0dWRlID0gdGhpcy50eXBlID09PSAnbG9uZ2l0dWRlJztcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUZsb2F0KHJhd1ZhbHVlLnJlcGxhY2UoLywvZywgJy4nKSkgOiByYXdWYWx1ZTtcbiAgICBjb25zdCByZXN1bHQ6IElMYXRMb25nRGF0YSA9IHtcbiAgICAgIGRlZ3JlZXM6IG51bGwsXG4gICAgICBtaW51dGVzOiBudWxsLFxuICAgICAgc2Vjb25kczogbnVsbCxcbiAgICAgIHNpZ246IGlzTm90TmlsKHZhbHVlKVxuICAgICAgICA/IHZhbHVlIDwgMFxuICAgICAgICAgID8gLTFcbiAgICAgICAgICA6IDFcbiAgICAgICAgOiAvLyBVc2UgZGVmYXVsdCBzaWduLCBpZiBhbnlcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTaWduXG4gICAgICAgICAgPyB0aGlzLmRlZmF1bHRTaWduID09PSAnLSdcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogMVxuICAgICAgICAgIDogbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICByZXN1bHQuZGVncmVlcyA9IDA7XG4gICAgfSBlbHNlIGlmIChpc05vdE5pbCh2YWx1ZSkpIHtcbiAgICAgIC8vIFBhcnNlIG9wdGlvbnNcbiAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgbG9uZ2l0dWRlOiBpc0xvbmdpdHVkZSxcbiAgICAgICAgcGF0dGVybjogdGhpcy5wYXR0ZXJuLFxuICAgICAgICBtYXhEZWNpbWFsczogdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyxcbiAgICAgICAgZml4TGF0TG9uZzogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHNwbGl0RGVncmVlc1RvRERBcnJheSh2YWx1ZSwgcGFyc2VPcHRpb25zKS5zbGljZSgxKSBhcyBudW1iZXJbXTsgLy8gcmVtb3ZlIHNpZ247XG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gMDtcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSAwO1xuICAgICAgICByZXN1bHQuZGVncmVlcyA9IChzcGxpdFZhbHVlWzBdICsgY29tcHV0ZURlY2ltYWxQYXJ0KHNwbGl0VmFsdWVbMV0gPz8gMCwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscykpICogKHJlc3VsdC5zaWduIHx8IDEpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERE1NJykge1xuICAgICAgICBjb25zdCBzcGxpdFZhbHVlID0gc3BsaXREZWdyZWVzVG9ERE1NQXJyYXkodmFsdWUsIHBhcnNlT3B0aW9ucyk7XG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gMDtcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSBNYXRoLmFicygoc3BsaXRWYWx1ZVsxXSA/PyAwKSArIGNvbXB1dGVEZWNpbWFsUGFydChzcGxpdFZhbHVlWzJdID8/IDAsIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMpKTtcbiAgICAgICAgcmVzdWx0LmRlZ3JlZXMgPSBNYXRoLmFicyghcmVzdWx0Lm1pbnV0ZXMgJiYgaXNOaWxPckJsYW5rKHNwbGl0VmFsdWVbMF0pID8gMCA6IChzcGxpdFZhbHVlWzBdID8/IDApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgLy8gRERNTVNTXG4gICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSBzcGxpdERlZ3JlZXNUb0RETU1TU0FycmF5KHZhbHVlLCBwYXJzZU9wdGlvbnMpO1xuICAgICAgICByZXN1bHQuc2Vjb25kcyA9IE1hdGguYWJzKChzcGxpdFZhbHVlWzJdID8/IDApICsgY29tcHV0ZURlY2ltYWxQYXJ0KHNwbGl0VmFsdWVbM10gPz8gMCwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscykpO1xuICAgICAgICByZXN1bHQubWludXRlcyA9ICFyZXN1bHQuc2Vjb25kcyAmJiAhc3BsaXRWYWx1ZVsxXSA/IDAgOiBNYXRoLmFicyhzcGxpdFZhbHVlWzFdID8/IDApO1xuICAgICAgICByZXN1bHQuZGVncmVlcyA9ICFyZXN1bHQuc2Vjb25kcyAmJiAhcmVzdWx0Lm1pbnV0ZXMgJiYgaXNOaWxPckJsYW5rKHNwbGl0VmFsdWVbMF0pID8gMCA6IE1hdGguYWJzKHNwbGl0VmFsdWVbMF0gPz8gMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIiwiPGRpdlxuICByb2xlPVwiZ3JvdXBcIlxuICBjbGFzcz1cIm1hdC1sYXRsb25nLWlucHV0LWNvbnRhaW5lclwiXG4gIFtmb3JtR3JvdXBdPVwicGFydHNcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpXCJcbiAgKGZvY3VzaW4pPVwib25Gb2N1c0luKCRldmVudClcIlxuICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgkZXZlbnQpXCJcbj5cbiAgPGlucHV0XG4gICAgI2RlZ3JlZXNcbiAgICBhcmlhLWxhYmVsPVwiRGVncmVlc1wiXG4gICAgW2NsYXNzLmRlZ3JlZXNdPVwicGF0dGVybiAhPT0gJ0REJ1wiXG4gICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiZGVncmVlc1BsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWdyZWVzXCJcbiAgICBbbWFza2l0b109XCJkZWdyZWVzTWFza1wiXG4gICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCdkZWdyZWVzJywgJ21pbnV0ZXMnKVwiXG4gIC8+XG4gIDxzcGFuIGNsYXNzPVwic3ltYm9sLXVuaXRcIj5cbiAgICB7eyBkZWdyZWVzU3ltYm9sVW5pdCB9fVxuICA8L3NwYW4+XG5cbiAgQGlmIChzaG93TWludXRlcykge1xuICAgIDxpbnB1dFxuICAgICAgI21pbnV0ZXNcbiAgICAgIGFyaWEtbGFiZWw9XCJNaW51dGVzXCJcbiAgICAgIFtjbGFzcy5taW51dGVzXT1cInNob3dTZWNvbmRzXCJcbiAgICAgIFtjbGFzcy5taW51dGVzLXNlY29uZHNdPVwiIXNob3dTZWNvbmRzXCJcbiAgICAgIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJtaW51dGVzUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWludXRlc1wiXG4gICAgICBbbWFza2l0b109XCJtaW51dGVzTWFza1wiXG4gICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJ21pbnV0ZXMnLCAnc2Vjb25kcycpXCJcbiAgICAgIChrZXl1cC5iYWNrc3BhY2UpPVwiYXV0b0ZvY3VzUHJldignbWludXRlcycsICdkZWdyZWVzJylcIlxuICAgIC8+XG4gICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAge3sgbWludXRlc1N5bWJvbFVuaXQgfX1cbiAgICA8L3NwYW4+XG4gIH1cblxuICBAaWYgKHNob3dTZWNvbmRzKSB7XG4gICAgPGlucHV0XG4gICAgICAjc2Vjb25kc1xuICAgICAgYXJpYS1sYWJlbD1cIlNlY29uZHNcIlxuICAgICAgY2xhc3M9XCJzZWNvbmRzXCJcbiAgICAgIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWNvbmRzUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kc1wiXG4gICAgICBbbWFza2l0b109XCJzZWNvbmRzTWFza1wiXG4gICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJ3NlY29uZHMnLCAnc2lnbicpXCJcbiAgICAgIChrZXl1cC5iYWNrc3BhY2UpPVwiYXV0b0ZvY3VzUHJldignc2Vjb25kcycsICdtaW51dGVzJylcIlxuICAgIC8+XG4gICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAge3sgc2Vjb25kc1N5bWJvbFVuaXQgfX1cbiAgICA8L3NwYW4+XG4gIH1cblxuICA8IS0tIHNpZ24gLS0+XG4gIEBpZiAoc2hvd1NpZ24pIHtcbiAgICA8c3BhbiBjbGFzcz1cInNpZ24tc3BhY2VyXCI+PC9zcGFuPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICAjc2lnblxuICAgICAgYXJpYS1sYWJlbD1cIlNpZ25cIlxuICAgICAgY2xhc3M9XCJzaWduXCJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cInNpZ25cIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAodHlwZSA9PT0gJ2xhdGl0dWRlJyA/ICdDT01NT04uTEFUX0xPTkcuTEFUX1NJR05fUExBQ0VIT0xERVInIDogJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fUExBQ0VIT0xERVInKVxuICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICBcIlxuICAgICAgKGZvY3VzaW4pPVwic2lnbi5vcGVuKClcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVJbnB1dCgnc2lnbicpXCJcbiAgICA+XG4gICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMVwiIChjbGljayk9XCJzaWduLmNsb3NlKClcIj5cbiAgICAgICAge3sgKHR5cGUgPT09ICdsYXRpdHVkZScgPyAnQ09NTU9OLkxBVF9MT05HLkxBVF9TSUdOX04nIDogJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fRScpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiLTFcIiAoY2xpY2spPVwic2lnbi5jbG9zZSgpXCI+XG4gICAgICAgIHt7ICh0eXBlID09PSAnbGF0aXR1ZGUnID8gJ0NPTU1PTi5MQVRfTE9ORy5MQVRfU0lHTl9TJyA6ICdDT01NT04uTEFUX0xPTkcuTE9OR19TSUdOX1cnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
413
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsa0JBQWtCLEVBRWxCLDZCQUE2QixFQUs3QixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixHQUMxQixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxjQUFjLEVBQWdCLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQWE3RCxNQUFNLE9BQU8sb0JBQW9CO0lBOEhyQjtJQUNtQztJQUNoQjtJQS9IN0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDMEIsWUFBWSxDQUFhO0lBQ3pCLFlBQVksQ0FBYTtJQUN6QixZQUFZLENBQWE7SUFDNUIsU0FBUyxDQUFhO0lBRXJELFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzlDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDYixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDYixJQUFJLEVBQUUsQ0FBbUIsSUFBSSxDQUFDO0tBQy9CLENBQUMsQ0FBQztJQUNILFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ25DLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixXQUFXLEdBQUcsbUJBQW1CLENBQUM7SUFDbEMsRUFBRSxHQUFHLHFCQUFxQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQzFELFFBQVEsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFckIsSUFBSSxLQUFLO1FBQ1AsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sRUFDSixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUNyQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDbkIsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUUwQixtQkFBbUIsQ0FBUztJQUN2RCxXQUFXLENBQVMsQ0FBQyxXQUFXO0lBRWhDLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFDSSxRQUFRLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFDSSxRQUFRLENBQUMsS0FBbUI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sU0FBUyxHQUFHLEtBQUssQ0FBQztJQUUxQixJQUFJLEtBQUs7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztnQkFDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUk7b0JBQ3ZDLENBQUMsQ0FBQyxPQUFPO29CQUNULENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNYLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxLQUFvQjtRQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUN0QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJO1lBQzNDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUk7WUFDM0MsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksSUFBSTtZQUMzQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFFUSxJQUFJLENBQWM7SUFDRixPQUFPLENBQWlCO0lBQ3hDLFdBQVcsQ0FBYztJQUN6QixXQUFXLENBQVM7SUFDcEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUUxQixpQkFBaUIsR0FBRyxHQUFHLENBQUM7SUFDeEIsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0lBQ3hCLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUN4QixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixXQUFXLENBQWlCO0lBQzVCLFdBQVcsQ0FBaUI7SUFDNUIsV0FBVyxDQUFpQjtJQUM1QixrQkFBa0IsQ0FBUztJQUMzQixrQkFBa0IsQ0FBUztJQUMzQixrQkFBa0IsQ0FBUztJQUMzQixvQkFBb0IsR0FBRyw2QkFBNkIsQ0FBQztJQUU3QyxTQUFTLEdBQUcscUJBQXFCLENBQUM7SUFDbEMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRXZDLFlBQ1UsV0FBb0MsRUFDRCxVQUF3QixFQUN4QyxTQUFvQjtRQUZ2QyxnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDRCxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFFL0MsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQztRQUV0QyxRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQixLQUFLLElBQUk7Z0JBQ1AsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENBQUMseUNBQXlDLENBQUM7Z0JBQzFJLElBQUksQ0FBQyxXQUFXLEdBQUcsNkJBQTZCLENBQUM7b0JBQy9DLFNBQVMsRUFBRSxJQUFJLENBQUMsb0JBQW9CO29CQUNwQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7b0JBQzFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHO29CQUN4QyxTQUFTLEVBQUUsR0FBRztpQkFDZixDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUM7Z0JBQzFILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxvQ0FBb0MsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQztvQkFDL0MsU0FBUyxFQUFFLENBQUM7b0JBQ1osR0FBRyxFQUFFLENBQUM7b0JBQ04sR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7aUJBQ3pDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLDZCQUE2QixDQUFDO29CQUMvQyxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtvQkFDcEMsR0FBRyxFQUFFLENBQUM7b0JBQ04sR0FBRyxFQUFFLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2lCQUMzRCxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSLFNBQVMsb0JBQW9CO2dCQUMzQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDO2dCQUMxSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsZ0NBQWdDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxtQ0FBbUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQztvQkFDL0MsU0FBUyxFQUFFLENBQUM7b0JBQ1osR0FBRyxFQUFFLENBQUM7b0JBQ04sR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7aUJBQ3pDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLDZCQUE2QixDQUFDO29CQUMvQyxTQUFTLEVBQUUsQ0FBQztvQkFDWixHQUFHLEVBQUUsQ0FBQztvQkFDTixHQUFHLEVBQUUsRUFBRTtpQkFDUixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQztvQkFDL0MsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7b0JBQ3BDLEdBQUcsRUFBRSxDQUFDO29CQUNOLEdBQUcsRUFBRSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztpQkFDM0QsQ0FBQyxDQUFDO2dCQUNILE1BQU07UUFDVixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlGLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUF3QixDQUFDLEVBQUUsQ0FBQztZQUM3RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxXQUFtQixFQUFFLGVBQXdCO1FBQ3ZELCtCQUErQjtRQUMvQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsUUFBUSxXQUFXLEVBQUUsQ0FBQztZQUNwQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQy9ELFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3hFLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLENBQUM7Z0JBQ0QsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDakMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDbkIsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDZixvQkFBb0I7Z0JBQ3BCLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxXQUFtQixFQUFFLGVBQXdCO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQW1CLEVBQUUsZUFBdUI7UUFDeEQsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFZO1FBQzNCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUMxQyxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUMxQyxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUMxQyxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztZQUN2QztnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsOEJBQThCLElBQUksR0FBRyxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFhO1FBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsQ0FBRSxDQUFDO1FBQ3JHLGNBQWMsRUFBRSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCw2REFBNkQ7UUFDN0QsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxDQUFDO2FBQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxDQUFDO2FBQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVPLDRCQUE0QixDQUFDLFFBQXlCO1FBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDekcsTUFBTSxNQUFNLEdBQWlCO1lBQzNCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNuQixDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsMkJBQTJCO29CQUMzQixJQUFJLENBQUMsV0FBVzt3QkFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssR0FBRzs0QkFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDSixDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUMsSUFBSTtTQUNYLENBQUM7UUFFRixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixnQkFBZ0I7WUFDaEIsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLFNBQVMsRUFBRSxXQUFXO2dCQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsb0JBQW9CO2dCQUN0QyxVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBYSxDQUFDLENBQUMsZUFBZTtnQkFDbkcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUgsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BILE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkcsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLG9CQUFvQjtnQkFDcEIsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUNwSCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdEYsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4SCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBYTtRQUNsQyxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEUsQ0FBQzt3R0F4WFUsb0JBQW9CLDRDQStIVCxjQUFjOzRGQS9IekIsb0JBQW9CLDRZQVBwQixDQUFDLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLDhHQVNsRCxVQUFVLGtHQUNWLFVBQVUsa0dBQ1YsVUFBVSw0RkFDYixVQUFVLDZCQ25EdkMseThGQStGQTs7NEZEakRhLG9CQUFvQjtrQkFYaEMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHNCQUFzQixFQUFFLENBQUMsUUFDMUU7d0JBQ0osd0JBQXdCLEVBQUUsa0JBQWtCO3dCQUM1QyxNQUFNLEVBQUUsSUFBSTtxQkFDYixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs7MEJBaUk1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7OzBCQUNqQyxRQUFROzswQkFBSSxJQUFJO3lDQTlIeUIsWUFBWTtzQkFBdkQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNFLFlBQVk7c0JBQXZELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDRSxZQUFZO3NCQUF2RCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ0QsU0FBUztzQkFBakQsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQStCWixtQkFBbUI7c0JBQTdDLEtBQUs7dUJBQUMsa0JBQWtCO2dCQVFyQixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsUUFBUTtzQkFEWCxLQUFLO2dCQThCRixLQUFLO3NCQURSLEtBQUs7Z0JBaUJHLElBQUk7c0JBQVosS0FBSztnQkFDbUIsT0FBTztzQkFBL0IsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ2QsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZURlY2ltYWxEZWdyZWVzLFxuICBjb21wdXRlRGVjaW1hbFBhcnQsXG4gIElMYXRMb25nRGF0YSxcbiAgTEFUX0xPTkdfUEFUVEVSTl9NQVhfREVDSU1BTFMsXG4gIExhdExvbmdQYXR0ZXJuLFxuICBMYXRMb25nU2lnbixcbiAgTGF0TG9uZ1NpZ25WYWx1ZSxcbiAgTGF0TG9uZ1R5cGUsXG4gIHNwbGl0RGVncmVlc1RvRERBcnJheSxcbiAgc3BsaXREZWdyZWVzVG9ERE1NQXJyYXksXG4gIHNwbGl0RGVncmVlc1RvRERNTVNTQXJyYXksXG59IGZyb20gJy4vbGF0bG9uZy51dGlscyc7XG5pbXBvcnQgeyBNYXNraXRvT3B0aW9ucyB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTEQsIE1hdEZvcm1GaWVsZCwgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvciB9IGZyb20gJ0BtYXNraXRvL2tpdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1sYXRsb25nLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmxhdGxvbmctaW5wdXQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tYXRlcmlhbC5sYXRsb25nLWlucHV0LnNjc3MnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBNYXRMYXRMb25nRmllbGRJbnB1dCB9XSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MubGFiZWwtZmxvYXRpbmddJzogJ3Nob3VsZExhYmVsRmxvYXQnLFxuICAgICdbaWRdJzogJ2lkJyxcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdExhdExvbmdGaWVsZElucHV0IGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxudW1iZXI+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzdGF0aWMgbmV4dElkID0gMDtcbiAgQFZpZXdDaGlsZCgnZGVncmVlcycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkZWdyZWVzSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ21pbnV0ZXMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbWludXRlc0lucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWNvbmRzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNlY29uZHNJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2lnbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzaWduSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgcHJvdGVjdGVkIGZvcm1Hcm91cCA9IGluamVjdChGb3JtQnVpbGRlcikuZ3JvdXAoe1xuICAgIGRlZ3JlZXM6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICBtaW51dGVzOiBbJyddLFxuICAgIHNlY29uZHM6IFsnJ10sXG4gICAgc2lnbjogWzxMYXRMb25nU2lnblZhbHVlPm51bGxdLFxuICB9KTtcbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgZm9jdXNlZCA9IGZhbHNlO1xuICB0b3VjaGVkID0gZmFsc2U7XG4gIGNvbnRyb2xUeXBlID0gJ21hdC1sYXRsb25nLWlucHV0JztcbiAgaWQgPSBgbWF0LWxhdGxvbmctaW5wdXQtJHtNYXRMYXRMb25nRmllbGRJbnB1dC5uZXh0SWQrK31gO1xuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICBnZXQgZW1wdHkoKSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybiBpc05pbCh0aGlzLm5nQ29udHJvbC52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmFsdWU6IHsgZGVncmVlcywgbWludXRlcywgc2Vjb25kcyB9LFxuICAgICAgfSA9IHRoaXMuZm9ybUdyb3VwO1xuICAgICAgcmV0dXJuICFkZWdyZWVzICYmICFtaW51dGVzICYmICFzZWNvbmRzO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCkge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICBASW5wdXQoJ2FyaWEtZGVzY3JpYmVkYnknKSB1c2VyQXJpYURlc2NyaWJlZEJ5OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7IC8vIE5vdCB1c2VkXG5cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBnZXQgdmFsdWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlO1xuICAgICAgY29uc3QgZGVncmVlcyA9IHRoaXMuc2FmZVBhcnNlRmxvYXQocGFydHMuZGVncmVlcyk7XG4gICAgICBjb25zdCBtaW51dGVzID0gdGhpcy5zYWZlUGFyc2VGbG9hdChwYXJ0cy5taW51dGVzKTtcbiAgICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnNhZmVQYXJzZUZsb2F0KHBhcnRzLnNlY29uZHMpO1xuICAgICAgY29uc3Qgc2lnbiA9IHBhcnRzLnNpZ247XG4gICAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAudmFsaWRcbiAgICAgICAgPyBpc05pbChkZWdyZWVzKSB8fCB0aGlzLnBhdHRlcm4gPT09ICdERCdcbiAgICAgICAgICA/IGRlZ3JlZXNcbiAgICAgICAgICA6IGNvbXB1dGVEZWNpbWFsRGVncmVlcyhkZWdyZWVzLCBtaW51dGVzLCBzZWNvbmRzLCBzaWduLCB0aGlzLm1heERlY2ltYWxzKVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb21wdXRlTGF0TG9uZ0Zvcm1Hcm91cFZhbHVlKHZhbHVlKTtcbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBTZXR0aW5nIHZhbHVlYCwgdmFsdWUsIHJlc3VsdCk7XG4gICAgdGhpcy5mb3JtR3JvdXAuc2V0VmFsdWUoe1xuICAgICAgZGVncmVlczogcmVzdWx0LmRlZ3JlZXM/LnRvU3RyaW5nKCkgfHwgbnVsbCxcbiAgICAgIG1pbnV0ZXM6IHJlc3VsdC5taW51dGVzPy50b1N0cmluZygpIHx8IG51bGwsXG4gICAgICBzZWNvbmRzOiByZXN1bHQuc2Vjb25kcz8udG9TdHJpbmcoKSB8fCBudWxsLFxuICAgICAgc2lnbjogcmVzdWx0LnNpZ24sXG4gICAgfSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmludmFsaWQgJiYgdGhpcy50b3VjaGVkO1xuICB9XG5cbiAgQElucHV0KCkgdHlwZTogTGF0TG9uZ1R5cGU7XG4gIEBJbnB1dCgnbGF0TG9uZ1BhdHRlcm4nKSBwYXR0ZXJuOiBMYXRMb25nUGF0dGVybjtcbiAgQElucHV0KCkgZGVmYXVsdFNpZ246IExhdExvbmdTaWduO1xuICBASW5wdXQoKSBtYXhEZWNpbWFsczogbnVtYmVyO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIGRlZ3JlZXNTeW1ib2xVbml0ID0gJ8KwJztcbiAgbWludXRlc1N5bWJvbFVuaXQgPSBcIidcIjtcbiAgc2Vjb25kc1N5bWJvbFVuaXQgPSAnXCInO1xuICBzaG93TWludXRlcyA9IGZhbHNlO1xuICBzaG93U2Vjb25kcyA9IGZhbHNlO1xuICBzaG93U2lnbiA9IGZhbHNlO1xuICBkZWdyZWVzTWFzazogTWFza2l0b09wdGlvbnM7XG4gIG1pbnV0ZXNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgc2Vjb25kc01hc2s6IE1hc2tpdG9PcHRpb25zO1xuICBkZWdyZWVzUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgbWludXRlc1BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHNlY29uZHNQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBsYXN0SW5wdXRNYXhEZWNpbWFscyA9IExBVF9MT05HX1BBVFRFUk5fTUFYX0RFQ0lNQUxTO1xuXG4gIHByaXZhdGUgbG9nUHJlZml4ID0gJ1ttYXQtbGF0bG9uZy1pbnB1dF0nO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0ZPUk1fRklFTEQpIHB1YmxpYyBfZm9ybUZpZWxkOiBNYXRGb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2xcbiAgKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudHlwZSA9IHRoaXMudHlwZSB8fCAnbGF0aXR1ZGUnO1xuICAgIHRoaXMucGF0dGVybiA9IHRoaXMucGF0dGVybiB8fCAnRERNTSc7XG4gICAgdGhpcy5zaG93U2lnbiA9IHRoaXMucGF0dGVybiAhPT0gJ0REJztcblxuICAgIHN3aXRjaCAodGhpcy5wYXR0ZXJuKSB7XG4gICAgICBjYXNlICdERCc6XG4gICAgICAgIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMgPSA3O1xuICAgICAgICB0aGlzLmRlZ3JlZXNQbGFjZWhvbGRlciA9IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/ICdDT01NT04uTEFUX0xPTkcuRERfRERERERERF9QTEFDRUhPTERFUicgOiAnQ09NTU9OLkxBVF9MT05HLkRERF9EREREREREX1BMQUNFSE9MREVSJztcbiAgICAgICAgdGhpcy5kZWdyZWVzTWFzayA9IG1hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICBwcmVjaXNpb246IHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMsXG4gICAgICAgICAgbWluOiB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyAtOTAgOiAtMTgwLFxuICAgICAgICAgIG1heDogdGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gOTAgOiAxODAsXG4gICAgICAgICAgbWludXNTaWduOiAnLScsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0RETU0nOlxuICAgICAgICB0aGlzLmxhc3RJbnB1dE1heERlY2ltYWxzID0gMztcbiAgICAgICAgdGhpcy5zaG93TWludXRlcyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVncmVlc1BsYWNlaG9sZGVyID0gdGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gJ0NPTU1PTi5MQVRfTE9ORy5ERF9QTEFDRUhPTERFUicgOiAnQ09NTU9OLkxBVF9MT05HLkRERF9QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMubWludXRlc1BsYWNlaG9sZGVyID0gJ0NPTU1PTi5MQVRfTE9ORy5NTV9NTU1fUExBQ0VIT0xERVInO1xuICAgICAgICB0aGlzLmRlZ3JlZXNNYXNrID0gbWFza2l0b051bWJlck9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgbWF4OiB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyA5MCA6IDE4MCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWludXRlc01hc2sgPSBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgICAgcHJlY2lzaW9uOiB0aGlzLmxhc3RJbnB1dE1heERlY2ltYWxzLFxuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IDYwIC0gY29tcHV0ZURlY2ltYWxQYXJ0KDEsIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMpLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBEZWZhdWx0IGlzIERETU1TU1xuICAgICAgICB0aGlzLmxhc3RJbnB1dE1heERlY2ltYWxzID0gMjtcbiAgICAgICAgdGhpcy5zaG93TWludXRlcyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd1NlY29uZHMgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlZ3JlZXNQbGFjZWhvbGRlciA9IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/ICdDT01NT04uTEFUX0xPTkcuRERfUExBQ0VIT0xERVInIDogJ0NPTU1PTi5MQVRfTE9ORy5ERERfUExBQ0VIT0xERVInO1xuICAgICAgICB0aGlzLm1pbnV0ZXNQbGFjZWhvbGRlciA9ICdDT01NT04uTEFUX0xPTkcuTU1fUExBQ0VIT0xERVInO1xuICAgICAgICB0aGlzLnNlY29uZHNQbGFjZWhvbGRlciA9ICdDT01NT04uTEFUX0xPTkcuU1NfU1NfUExBQ0VIT0xERVInO1xuICAgICAgICB0aGlzLmRlZ3JlZXNNYXNrID0gbWFza2l0b051bWJlck9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgbWF4OiB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyA5MCA6IDE4MCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWludXRlc01hc2sgPSBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IDU5LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWNvbmRzTWFzayA9IG1hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICBwcmVjaXNpb246IHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMsXG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogNjAgLSBjb21wdXRlRGVjaW1hbFBhcnQoMSwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyksXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93TWludXRlcykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMubWludXRlcy5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93U2Vjb25kcykge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuc2Vjb25kcy5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93U2lnbikge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuc2lnbi5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZC5tYXJrRm9yQ2hlY2soKSkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvbkZvY3VzSW4oZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBFbGVtZW50KSkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dChjb250cm9sTmFtZTogc3RyaW5nLCBuZXh0Q29udHJvbE5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDYW4gYXV0b2ZvY3VzIG5leHQgY29udHJvbCA/XG4gICAgbGV0IGZvY3VzTmV4dCA9IGZhbHNlO1xuICAgIHN3aXRjaCAoY29udHJvbE5hbWUpIHtcbiAgICAgIGNhc2UgJ2RlZ3JlZXMnOiB7XG4gICAgICAgIGNvbnN0IGRlZ3JlZXMgPSB0aGlzLnNhZmVQYXJzZUZsb2F0KHRoaXMuZm9ybUdyb3VwLnZhbHVlLmRlZ3JlZXMpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbGF0aXR1ZGUnICYmIChkZWdyZWVzID09PSAwIHx8IGRlZ3JlZXMgPiA5KSkge1xuICAgICAgICAgIGZvY3VzTmV4dCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbG9uZ2l0dWRlJyAmJiAoZGVncmVlcyA9PT0gMCB8fCBkZWdyZWVzID4gMTgpKSB7XG4gICAgICAgICAgZm9jdXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21pbnV0ZXMnOiB7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLnNhZmVQYXJzZUZsb2F0KHRoaXMuZm9ybUdyb3VwLnZhbHVlLm1pbnV0ZXMpO1xuICAgICAgICBpZiAobWludXRlcyA9PT0gMCB8fCBtaW51dGVzID4gNikge1xuICAgICAgICAgIGZvY3VzTmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzZWNvbmRzJzoge1xuICAgICAgICAvLyBmb2N1c05leHQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZm9jdXNOZXh0KSB7XG4gICAgICB0aGlzLmF1dG9Gb2N1c05leHQoY29udHJvbE5hbWUsIG5leHRDb250cm9sTmFtZSk7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICBhdXRvRm9jdXNOZXh0KGNvbnRyb2xOYW1lOiBzdHJpbmcsIG5leHRDb250cm9sTmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLmVycm9ycyAmJiBuZXh0Q29udHJvbE5hbWUpIHtcbiAgICAgIHRoaXMuZ2V0RWxlbWVudEJ5TmFtZShuZXh0Q29udHJvbE5hbWUpPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGF1dG9Gb2N1c1ByZXYoY29udHJvbE5hbWU6IHN0cmluZywgcHJldkNvbnRyb2xOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuZ2V0RWxlbWVudEJ5TmFtZShwcmV2Q29udHJvbE5hbWUpPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGdldEVsZW1lbnRCeU5hbWUobmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSAnZGVncmVlcyc6XG4gICAgICAgIHJldHVybiB0aGlzLmRlZ3JlZXNJbnB1dD8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5taW51dGVzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kc0lucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgICAgY2FzZSAnc2lnbic6XG4gICAgICAgIHJldHVybiB0aGlzLnNpZ25JbnB1dD8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmxvZ1ByZWZpeH0gTm8gSFRNTEVsZW1lbnQgd2l0aCBuYW1lICcke25hbWV9J2ApO1xuICAgIH1cbiAgfVxuXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LWxhdGxvbmctaW5wdXQtY29udGFpbmVyJykhO1xuICAgIGNvbnRyb2xFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBpZHMuam9pbignICcpKTtcbiAgfVxuXG4gIG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gREVCVUcgb25Db250YWluZXJDbGlja2ApO1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSByZXR1cm47XG4gICAgaWYgKHRoaXMuZW1wdHkpIHtcbiAgICAgIHRoaXMuZGVncmVlc0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKGlzTmlsT3JCbGFuayh0aGlzLmZvcm1Hcm91cC52YWx1ZS5taW51dGVzKSkge1xuICAgICAgdGhpcy5taW51dGVzSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoaXNOaWxPckJsYW5rKHRoaXMuZm9ybUdyb3VwLnZhbHVlLnNlY29uZHMpKSB7XG4gICAgICB0aGlzLnNlY29uZHNJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChpc05pbCh0aGlzLmZvcm1Hcm91cC52YWx1ZS5zaWduKSkge1xuICAgICAgdGhpcy5zaWduSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTGF0TG9uZ0Zvcm1Hcm91cFZhbHVlKHJhd1ZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBJTGF0TG9uZ0RhdGEge1xuICAgIGNvbnN0IGlzTG9uZ2l0dWRlID0gdGhpcy50eXBlID09PSAnbG9uZ2l0dWRlJztcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ3N0cmluZycgPyB0aGlzLnNhZmVQYXJzZUZsb2F0KHJhd1ZhbHVlLnJlcGxhY2UoLywvZywgJy4nKSkgOiByYXdWYWx1ZTtcbiAgICBjb25zdCByZXN1bHQ6IElMYXRMb25nRGF0YSA9IHtcbiAgICAgIGRlZ3JlZXM6IG51bGwsXG4gICAgICBtaW51dGVzOiBudWxsLFxuICAgICAgc2Vjb25kczogbnVsbCxcbiAgICAgIHNpZ246IGlzTm90TmlsKHZhbHVlKVxuICAgICAgICA/IHZhbHVlIDwgMFxuICAgICAgICAgID8gLTFcbiAgICAgICAgICA6IDFcbiAgICAgICAgOiAvLyBVc2UgZGVmYXVsdCBzaWduLCBpZiBhbnlcbiAgICAgICAgICB0aGlzLmRlZmF1bHRTaWduXG4gICAgICAgICAgPyB0aGlzLmRlZmF1bHRTaWduID09PSAnLSdcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogMVxuICAgICAgICAgIDogbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICByZXN1bHQuZGVncmVlcyA9IDA7XG4gICAgfSBlbHNlIGlmIChpc05vdE5pbCh2YWx1ZSkpIHtcbiAgICAgIC8vIFBhcnNlIG9wdGlvbnNcbiAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgbG9uZ2l0dWRlOiBpc0xvbmdpdHVkZSxcbiAgICAgICAgcGF0dGVybjogdGhpcy5wYXR0ZXJuLFxuICAgICAgICBtYXhEZWNpbWFsczogdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyxcbiAgICAgICAgZml4TGF0TG9uZzogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHNwbGl0RGVncmVlc1RvRERBcnJheSh2YWx1ZSwgcGFyc2VPcHRpb25zKS5zbGljZSgxKSBhcyBudW1iZXJbXTsgLy8gcmVtb3ZlIHNpZ247XG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gMDtcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSAwO1xuICAgICAgICByZXN1bHQuZGVncmVlcyA9IChzcGxpdFZhbHVlWzBdICsgY29tcHV0ZURlY2ltYWxQYXJ0KHNwbGl0VmFsdWVbMV0gPz8gMCwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscykpICogKHJlc3VsdC5zaWduIHx8IDEpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERE1NJykge1xuICAgICAgICBjb25zdCBzcGxpdFZhbHVlID0gc3BsaXREZWdyZWVzVG9ERE1NQXJyYXkodmFsdWUsIHBhcnNlT3B0aW9ucyk7XG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gMDtcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSBNYXRoLmFicygoc3BsaXRWYWx1ZVsxXSA/PyAwKSArIGNvbXB1dGVEZWNpbWFsUGFydChzcGxpdFZhbHVlWzJdID8/IDAsIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMpKTtcbiAgICAgICAgcmVzdWx0LmRlZ3JlZXMgPSBNYXRoLmFicyghcmVzdWx0Lm1pbnV0ZXMgJiYgaXNOaWxPckJsYW5rKHNwbGl0VmFsdWVbMF0pID8gMCA6IChzcGxpdFZhbHVlWzBdID8/IDApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgLy8gRERNTVNTXG4gICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSBzcGxpdERlZ3JlZXNUb0RETU1TU0FycmF5KHZhbHVlLCBwYXJzZU9wdGlvbnMpO1xuICAgICAgICByZXN1bHQuc2Vjb25kcyA9IE1hdGguYWJzKChzcGxpdFZhbHVlWzJdID8/IDApICsgY29tcHV0ZURlY2ltYWxQYXJ0KHNwbGl0VmFsdWVbM10gPz8gMCwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscykpO1xuICAgICAgICByZXN1bHQubWludXRlcyA9ICFyZXN1bHQuc2Vjb25kcyAmJiAhc3BsaXRWYWx1ZVsxXSA/IDAgOiBNYXRoLmFicyhzcGxpdFZhbHVlWzFdID8/IDApO1xuICAgICAgICByZXN1bHQuZGVncmVlcyA9ICFyZXN1bHQuc2Vjb25kcyAmJiAhcmVzdWx0Lm1pbnV0ZXMgJiYgaXNOaWxPckJsYW5rKHNwbGl0VmFsdWVbMF0pID8gMCA6IE1hdGguYWJzKHNwbGl0VmFsdWVbMF0gPz8gMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2FmZVBhcnNlRmxvYXQodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGlzTm90TmlsT3JCbGFuayh2YWx1ZSkgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiQGlmIChyZWFkb25seSkge1xuICA8aW9uLXRleHQ+XG4gICAge3tcbiAgICAgIG5nQ29udHJvbC52YWx1ZVxuICAgICAgICB8IGxhdExvbmdGb3JtYXQ6IHsgcGF0dGVybjogcGF0dGVybiwgbWF4RGVjaW1hbHM6IGxhc3RJbnB1dE1heERlY2ltYWxzLCB0eXBlOiB0eXBlLCBwbGFjZWhvbGRlckNoYXI6ICcnIH1cbiAgICB9fVxuICA8L2lvbi10ZXh0PlxufSBAZWxzZSB7XG4gIDxkaXZcbiAgICByb2xlPVwiZ3JvdXBcIlxuICAgIGNsYXNzPVwibWF0LWxhdGxvbmctaW5wdXQtY29udGFpbmVyXCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9mb3JtRmllbGQ/LmdldExhYmVsSWQoKVwiXG4gICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKCRldmVudClcIlxuICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KCRldmVudClcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICAjZGVncmVlc1xuICAgICAgYXJpYS1sYWJlbD1cIkRlZ3JlZXNcIlxuICAgICAgW2NsYXNzLmRlZ3JlZXMtb25seV09XCJwYXR0ZXJuID09PSAnREQnXCJcbiAgICAgIFtjbGFzcy5kZWdyZWVzXT1cInBhdHRlcm4gIT09ICdERCdcIlxuICAgICAgW2NsYXNzLmxhdGl0dWRlXT1cInR5cGUgPT09ICdsYXRpdHVkZSdcIlxuICAgICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImRlZ3JlZXNQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWdyZWVzXCJcbiAgICAgIFttYXNraXRvXT1cImRlZ3JlZXNNYXNrXCJcbiAgICAgIChpbnB1dCk9XCJoYW5kbGVJbnB1dCgnZGVncmVlcycsICdtaW51dGVzJylcIlxuICAgIC8+XG4gICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAge3sgZGVncmVlc1N5bWJvbFVuaXQgfX1cbiAgICA8L3NwYW4+XG5cbiAgICBAaWYgKHNob3dNaW51dGVzKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgI21pbnV0ZXNcbiAgICAgICAgYXJpYS1sYWJlbD1cIk1pbnV0ZXNcIlxuICAgICAgICBbY2xhc3MubWludXRlc109XCJzaG93U2Vjb25kc1wiXG4gICAgICAgIFtjbGFzcy5taW51dGVzLXNlY29uZHNdPVwiIXNob3dTZWNvbmRzXCJcbiAgICAgICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJtaW51dGVzUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCJcbiAgICAgICAgW21hc2tpdG9dPVwibWludXRlc01hc2tcIlxuICAgICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJ21pbnV0ZXMnLCAnc2Vjb25kcycpXCJcbiAgICAgICAgKGtleXVwLmJhY2tzcGFjZSk9XCJhdXRvRm9jdXNQcmV2KCdtaW51dGVzJywgJ2RlZ3JlZXMnKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAgICB7eyBtaW51dGVzU3ltYm9sVW5pdCB9fVxuICAgICAgPC9zcGFuPlxuICAgIH1cblxuICAgIEBpZiAoc2hvd1NlY29uZHMpIHtcbiAgICAgIDxpbnB1dFxuICAgICAgICAjc2Vjb25kc1xuICAgICAgICBhcmlhLWxhYmVsPVwiU2Vjb25kc1wiXG4gICAgICAgIGNsYXNzPVwic2Vjb25kc1wiXG4gICAgICAgIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2Vjb25kc1BsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kc1wiXG4gICAgICAgIFttYXNraXRvXT1cInNlY29uZHNNYXNrXCJcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCdzZWNvbmRzJywgJ3NpZ24nKVwiXG4gICAgICAgIChrZXl1cC5iYWNrc3BhY2UpPVwiYXV0b0ZvY3VzUHJldignc2Vjb25kcycsICdtaW51dGVzJylcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3ltYm9sLXVuaXRcIj5cbiAgICAgICAge3sgc2Vjb25kc1N5bWJvbFVuaXQgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG5cbiAgICA8IS0tIHNpZ24gLS0+XG4gICAgQGlmIChzaG93U2lnbikge1xuICAgICAgPHNwYW4gY2xhc3M9XCJzaWduLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICNzaWduXG4gICAgICAgIGFyaWEtbGFiZWw9XCJTaWduXCJcbiAgICAgICAgY2xhc3M9XCJzaWduXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnblwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAodHlwZSA9PT0gJ2xhdGl0dWRlJyA/ICdDT01NT04uTEFUX0xPTkcuTEFUX1NJR05fUExBQ0VIT0xERVInIDogJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fUExBQ0VIT0xERVInKVxuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgXCJcbiAgICAgICAgKGZvY3VzaW4pPVwic2lnbi5vcGVuKClcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZUlucHV0KCdzaWduJylcIlxuICAgICAgPlxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMVwiIChjbGljayk9XCJzaWduLmNsb3NlKClcIj5cbiAgICAgICAgICB7eyAodHlwZSA9PT0gJ2xhdGl0dWRlJyA/ICdDT01NT04uTEFUX0xPTkcuTEFUX1NJR05fTicgOiAnQ09NTU9OLkxBVF9MT05HLkxPTkdfU0lHTl9FJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiLTFcIiAoY2xpY2spPVwic2lnbi5jbG9zZSgpXCI+XG4gICAgICAgICAge3sgKHR5cGUgPT09ICdsYXRpdHVkZScgPyAnQ09NTU9OLkxBVF9MT05HLkxBVF9TSUdOX1MnIDogJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fVycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19
|