pdm-ui-kit 0.1.21 → 0.1.22
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/esm2020/lib/components/calendar/calendar.component.mjs +454 -53
- package/esm2020/lib/components/date-picker/date-picker.component.mjs +252 -34
- package/fesm2015/pdm-ui-kit.mjs +727 -103
- package/fesm2015/pdm-ui-kit.mjs.map +1 -1
- package/fesm2020/pdm-ui-kit.mjs +721 -103
- package/fesm2020/pdm-ui-kit.mjs.map +1 -1
- package/lib/components/calendar/calendar.component.d.ts +137 -18
- package/lib/components/date-picker/date-picker.component.d.ts +61 -17
- package/package.json +2 -1
|
@@ -1,63 +1,281 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
+
import { format as formatDateFns } from 'date-fns';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
import * as i1 from "@angular/common";
|
|
4
5
|
import * as i2 from "../calendar/calendar.component";
|
|
6
|
+
import * as i3 from "../label/label.component";
|
|
7
|
+
let nextDatePickerId = 0;
|
|
5
8
|
export class PdmDatePickerComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.
|
|
9
|
+
constructor(elementRef, cdr) {
|
|
10
|
+
this.elementRef = elementRef;
|
|
11
|
+
this.cdr = cdr;
|
|
12
|
+
this._value = null;
|
|
13
|
+
this._rangeValue = null;
|
|
14
|
+
this._open = false;
|
|
15
|
+
this.instanceId = `pdm-date-picker-${++nextDatePickerId}`;
|
|
16
|
+
this.triggerFocused = false;
|
|
17
|
+
this.id = '';
|
|
18
|
+
this.variant = 'single';
|
|
19
|
+
this.label = '';
|
|
20
|
+
this.labelClassName = '';
|
|
8
21
|
this.className = '';
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
22
|
+
this.triggerClassName = '';
|
|
23
|
+
this.panelClassName = '';
|
|
24
|
+
this.placeholder = 'Pick a date';
|
|
25
|
+
this.rangePlaceholder = 'Pick a date range';
|
|
26
|
+
this.format = 'MMM d, yyyy';
|
|
27
|
+
this.disabled = false;
|
|
28
|
+
this.readonly = false;
|
|
29
|
+
this.required = false;
|
|
30
|
+
this.invalid = false;
|
|
31
|
+
this.allowSameDayRange = true;
|
|
32
|
+
this.closeOnSelect = true;
|
|
33
|
+
this.minDate = null;
|
|
34
|
+
this.maxDate = null;
|
|
35
|
+
this.disabledDates = [];
|
|
36
|
+
this.isDateDisabled = null;
|
|
19
37
|
this.valueChange = new EventEmitter();
|
|
38
|
+
this.rangeValueChange = new EventEmitter();
|
|
39
|
+
this.openChange = new EventEmitter();
|
|
40
|
+
this.monthChange = new EventEmitter();
|
|
41
|
+
}
|
|
42
|
+
set open(value) {
|
|
43
|
+
this._open = !!value;
|
|
44
|
+
this.cdr.markForCheck();
|
|
45
|
+
}
|
|
46
|
+
get open() {
|
|
47
|
+
return this._open;
|
|
48
|
+
}
|
|
49
|
+
set value(value) {
|
|
50
|
+
this._value = this.normalizeDate(value);
|
|
51
|
+
this.cdr.markForCheck();
|
|
52
|
+
}
|
|
53
|
+
get value() {
|
|
54
|
+
return this._value;
|
|
55
|
+
}
|
|
56
|
+
set rangeValue(value) {
|
|
57
|
+
this._rangeValue = value
|
|
58
|
+
? {
|
|
59
|
+
start: this.normalizeDate(value.start),
|
|
60
|
+
end: this.normalizeDate(value.end)
|
|
61
|
+
}
|
|
62
|
+
: null;
|
|
63
|
+
this.cdr.markForCheck();
|
|
64
|
+
}
|
|
65
|
+
get rangeValue() {
|
|
66
|
+
return this._rangeValue;
|
|
67
|
+
}
|
|
68
|
+
get resolvedVariant() {
|
|
69
|
+
return this.variant === 'range' ? 'range' : 'single';
|
|
70
|
+
}
|
|
71
|
+
get triggerId() {
|
|
72
|
+
return this.id || `${this.instanceId}-trigger`;
|
|
73
|
+
}
|
|
74
|
+
get panelId() {
|
|
75
|
+
return `${this.id || this.instanceId}-panel`;
|
|
76
|
+
}
|
|
77
|
+
get hasSingleValue() {
|
|
78
|
+
return this.resolvedVariant === 'single' && !!this._value;
|
|
79
|
+
}
|
|
80
|
+
get hasRangeValue() {
|
|
81
|
+
return this.resolvedVariant === 'range' && !!this._rangeValue?.start;
|
|
82
|
+
}
|
|
83
|
+
get displayText() {
|
|
84
|
+
if (this.resolvedVariant === 'single') {
|
|
85
|
+
return this._value ? this.formatDate(this._value) : this.placeholder;
|
|
86
|
+
}
|
|
87
|
+
const start = this._rangeValue?.start ?? null;
|
|
88
|
+
const end = this._rangeValue?.end ?? null;
|
|
89
|
+
if (!start) {
|
|
90
|
+
return this.rangePlaceholder;
|
|
91
|
+
}
|
|
92
|
+
if (!end) {
|
|
93
|
+
return `${this.formatDate(start)} -`;
|
|
94
|
+
}
|
|
95
|
+
return `${this.formatDate(start)} - ${this.formatDate(end)}`;
|
|
96
|
+
}
|
|
97
|
+
get textClasses() {
|
|
98
|
+
const hasValue = this.resolvedVariant === 'single' ? this.hasSingleValue : this.hasRangeValue;
|
|
99
|
+
return [
|
|
100
|
+
'min-w-0 flex-1 truncate text-left text-sm leading-5',
|
|
101
|
+
hasValue ? 'text-foreground' : 'text-muted-foreground'
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
get rootClasses() {
|
|
105
|
+
return [
|
|
106
|
+
'grid gap-2',
|
|
107
|
+
this.resolvedVariant === 'range' ? 'w-[280px]' : 'w-[197px]',
|
|
108
|
+
this.className
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
get triggerClasses() {
|
|
112
|
+
const focusStyle = this.open || this.triggerFocused;
|
|
113
|
+
return [
|
|
114
|
+
'relative flex w-full items-center gap-2 overflow-hidden rounded-lg border px-3 py-[7.5px] text-left shadow-xs outline-none transition-colors',
|
|
115
|
+
'min-h-[36px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',
|
|
116
|
+
focusStyle
|
|
117
|
+
? 'bg-accent border-neutral-400 ring-3 ring-neutral-300'
|
|
118
|
+
: 'bg-input border-input',
|
|
119
|
+
this.invalid ? 'border-destructive ring-destructive/20' : '',
|
|
120
|
+
this.triggerClassName
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
get panelClasses() {
|
|
124
|
+
return [
|
|
125
|
+
'absolute left-0 top-full z-30 mt-2',
|
|
126
|
+
this.panelClassName
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
toggleOpen() {
|
|
130
|
+
if (this.disabled || this.readonly) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.setOpen(!this.open);
|
|
134
|
+
}
|
|
135
|
+
onTriggerFocus() {
|
|
136
|
+
this.triggerFocused = true;
|
|
137
|
+
this.cdr.markForCheck();
|
|
138
|
+
}
|
|
139
|
+
onTriggerBlur() {
|
|
140
|
+
this.triggerFocused = false;
|
|
141
|
+
this.cdr.markForCheck();
|
|
142
|
+
}
|
|
143
|
+
onCalendarValueChange(value) {
|
|
144
|
+
this._value = this.normalizeDate(value);
|
|
145
|
+
this.valueChange.emit(this._value ? this.cloneDate(this._value) : null);
|
|
146
|
+
if (this.closeOnSelect && this._value) {
|
|
147
|
+
this.setOpen(false);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this.cdr.markForCheck();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
onCalendarRangeValueChange(value) {
|
|
154
|
+
this._rangeValue = value
|
|
155
|
+
? {
|
|
156
|
+
start: this.normalizeDate(value.start),
|
|
157
|
+
end: this.normalizeDate(value.end)
|
|
158
|
+
}
|
|
159
|
+
: null;
|
|
160
|
+
this.rangeValueChange.emit(this._rangeValue
|
|
161
|
+
? {
|
|
162
|
+
start: this._rangeValue.start ? this.cloneDate(this._rangeValue.start) : null,
|
|
163
|
+
end: this._rangeValue.end ? this.cloneDate(this._rangeValue.end) : null
|
|
164
|
+
}
|
|
165
|
+
: null);
|
|
166
|
+
if (this.closeOnSelect && this._rangeValue?.start && this._rangeValue?.end) {
|
|
167
|
+
this.setOpen(false);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
this.cdr.markForCheck();
|
|
171
|
+
}
|
|
172
|
+
onCalendarMonthChange(month) {
|
|
173
|
+
this.monthChange.emit(this.cloneDate(month));
|
|
174
|
+
}
|
|
175
|
+
onEscape() {
|
|
176
|
+
if (this.open) {
|
|
177
|
+
this.setOpen(false);
|
|
178
|
+
}
|
|
20
179
|
}
|
|
21
|
-
|
|
22
|
-
|
|
180
|
+
onDocumentClick(event) {
|
|
181
|
+
if (!this.open) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const target = event.target;
|
|
185
|
+
if (target && !this.elementRef.nativeElement.contains(target)) {
|
|
186
|
+
this.setOpen(false);
|
|
187
|
+
}
|
|
23
188
|
}
|
|
24
|
-
|
|
25
|
-
this.
|
|
189
|
+
setOpen(nextOpen) {
|
|
190
|
+
if (this._open === nextOpen) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
this._open = nextOpen;
|
|
194
|
+
this.openChange.emit(this._open);
|
|
195
|
+
this.cdr.markForCheck();
|
|
26
196
|
}
|
|
27
|
-
|
|
28
|
-
|
|
197
|
+
formatDate(date) {
|
|
198
|
+
try {
|
|
199
|
+
return formatDateFns(date, this.format || 'MMM d, yyyy');
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return formatDateFns(date, 'MMM d, yyyy');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
normalizeDate(value) {
|
|
206
|
+
if (!(value instanceof Date) || Number.isNaN(value.getTime())) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
return new Date(value.getFullYear(), value.getMonth(), value.getDate());
|
|
210
|
+
}
|
|
211
|
+
cloneDate(date) {
|
|
212
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
29
213
|
}
|
|
30
214
|
}
|
|
31
|
-
PdmDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
-
PdmDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDatePickerComponent, selector: "pdm-date-picker", inputs: { variant: "variant", className: "className",
|
|
215
|
+
PdmDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
216
|
+
PdmDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PdmDatePickerComponent, selector: "pdm-date-picker", inputs: { id: "id", variant: "variant", label: "label", labelClassName: "labelClassName", className: "className", triggerClassName: "triggerClassName", panelClassName: "panelClassName", placeholder: "placeholder", rangePlaceholder: "rangePlaceholder", format: "format", disabled: "disabled", readonly: "readonly", required: "required", invalid: "invalid", allowSameDayRange: "allowSameDayRange", closeOnSelect: "closeOnSelect", minDate: "minDate", maxDate: "maxDate", disabledDates: "disabledDates", isDateDisabled: "isDateDisabled", open: "open", value: "value", rangeValue: "rangeValue" }, outputs: { valueChange: "valueChange", rangeValueChange: "rangeValueChange", openChange: "openChange", monthChange: "monthChange" }, host: { listeners: { "document:keydown.escape": "onEscape()", "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <div class=\"relative inline-block w-full\">\n <button\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n\n <div *ngIf=\"open\" [id]=\"panelId\" [ngClass]=\"panelClasses\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PdmCalendarComponent, selector: "pdm-calendar", inputs: ["variant", "className", "disabledDates", "minDate", "maxDate", "isDateDisabled", "allowSameDayRange", "readonly", "value", "rangeValue", "month"], outputs: ["valueChange", "rangeValueChange", "monthChange", "dateClick", "disabledDateClick"] }, { kind: "component", type: i3.PdmLabelComponent, selector: "pdm-label", inputs: ["forId", "required", "className"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
33
217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PdmDatePickerComponent, decorators: [{
|
|
34
218
|
type: Component,
|
|
35
|
-
args: [{ selector: 'pdm-date-picker', changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
36
|
-
}], propDecorators: {
|
|
219
|
+
args: [{ selector: 'pdm-date-picker', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [ngClass]=\"rootClasses\">\n <pdm-label *ngIf=\"label\" [forId]=\"triggerId\" [required]=\"required\" [className]=\"labelClassName\">\n {{ label }}\n </pdm-label>\n\n <div class=\"relative inline-block w-full\">\n <button\n type=\"button\"\n [id]=\"triggerId\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-haspopup]=\"'dialog'\"\n [attr.aria-invalid]=\"invalid\"\n [ngClass]=\"triggerClasses\"\n [attr.title]=\"displayText\"\n (click)=\"toggleOpen()\"\n (focus)=\"onTriggerFocus()\"\n (blur)=\"onTriggerBlur()\"\n >\n <span class=\"flex h-5 w-5 shrink-0 items-center justify-center p-0.5 text-muted-foreground\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" class=\"h-4 w-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\">\n <path d=\"M8 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path d=\"M16 2v4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <rect x=\"3\" y=\"4.5\" width=\"18\" height=\"16.5\" rx=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></rect>\n <path d=\"M3 9.5h18\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </svg>\n </span>\n\n <span [ngClass]=\"textClasses\">{{ displayText }}</span>\n </button>\n\n <div *ngIf=\"open\" [id]=\"panelId\" [ngClass]=\"panelClasses\" role=\"dialog\" [attr.aria-labelledby]=\"label ? triggerId : null\">\n <pdm-calendar\n [variant]=\"resolvedVariant\"\n [value]=\"value\"\n [rangeValue]=\"rangeValue\"\n [readonly]=\"readonly\"\n [allowSameDayRange]=\"allowSameDayRange\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [disabledDates]=\"disabledDates\"\n [isDateDisabled]=\"isDateDisabled\"\n (valueChange)=\"onCalendarValueChange($event)\"\n (rangeValueChange)=\"onCalendarRangeValueChange($event)\"\n (monthChange)=\"onCalendarMonthChange($event)\"\n ></pdm-calendar>\n </div>\n </div>\n</div>\n" }]
|
|
220
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], variant: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], label: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], labelClassName: [{
|
|
37
227
|
type: Input
|
|
38
228
|
}], className: [{
|
|
39
229
|
type: Input
|
|
40
|
-
}],
|
|
230
|
+
}], triggerClassName: [{
|
|
41
231
|
type: Input
|
|
42
|
-
}],
|
|
232
|
+
}], panelClassName: [{
|
|
43
233
|
type: Input
|
|
44
|
-
}],
|
|
234
|
+
}], placeholder: [{
|
|
235
|
+
type: Input
|
|
236
|
+
}], rangePlaceholder: [{
|
|
237
|
+
type: Input
|
|
238
|
+
}], format: [{
|
|
239
|
+
type: Input
|
|
240
|
+
}], disabled: [{
|
|
45
241
|
type: Input
|
|
46
|
-
}],
|
|
242
|
+
}], readonly: [{
|
|
47
243
|
type: Input
|
|
48
|
-
}],
|
|
244
|
+
}], required: [{
|
|
49
245
|
type: Input
|
|
50
|
-
}],
|
|
246
|
+
}], invalid: [{
|
|
51
247
|
type: Input
|
|
52
|
-
}],
|
|
248
|
+
}], allowSameDayRange: [{
|
|
53
249
|
type: Input
|
|
54
|
-
}],
|
|
250
|
+
}], closeOnSelect: [{
|
|
55
251
|
type: Input
|
|
56
|
-
}],
|
|
252
|
+
}], minDate: [{
|
|
57
253
|
type: Input
|
|
254
|
+
}], maxDate: [{
|
|
255
|
+
type: Input
|
|
256
|
+
}], disabledDates: [{
|
|
257
|
+
type: Input
|
|
258
|
+
}], isDateDisabled: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], valueChange: [{
|
|
261
|
+
type: Output
|
|
262
|
+
}], rangeValueChange: [{
|
|
263
|
+
type: Output
|
|
58
264
|
}], openChange: [{
|
|
59
265
|
type: Output
|
|
60
|
-
}],
|
|
266
|
+
}], monthChange: [{
|
|
61
267
|
type: Output
|
|
268
|
+
}], open: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], value: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], rangeValue: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], onEscape: [{
|
|
275
|
+
type: HostListener,
|
|
276
|
+
args: ['document:keydown.escape']
|
|
277
|
+
}], onDocumentClick: [{
|
|
278
|
+
type: HostListener,
|
|
279
|
+
args: ['document:click', ['$event']]
|
|
62
280
|
}] } });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBU2hHLE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUFNVyxZQUFPLEdBQXlCLFNBQVMsQ0FBQztRQUMxQyxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViLFVBQUssR0FBRyxlQUFlLENBQUM7UUFDeEIsVUFBSyxHQUFHLGVBQWUsQ0FBQztRQUN4QixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLFNBQUksR0FBRyxVQUFVLENBQUM7UUFDbEIseUJBQW9CLEdBQUcsV0FBVyxDQUFDO1FBQ25DLHdCQUFtQixHQUFHLCtDQUErQyxDQUFDO1FBRXJFLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3pDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQWFwRDtJQVhDLE1BQU07UUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQzs7bUhBM0JVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLGtZQ1RuQywwMkdBc0NBOzJGRDdCYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUVWLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgUGRtRGF0ZVBpY2tlclZhcmlhbnQgPSAnZGVmYXVsdCcgfCAnd2l0aC1pbnB1dCcgfCAnZGF0ZS10aW1lJyB8ICduYXR1cmFsLWxhbmd1YWdlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRtLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUGRtRGF0ZVBpY2tlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFBkbURhdGVQaWNrZXJWYXJpYW50ID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBjbGFzc05hbWUgPSAnJztcbiAgQElucHV0KCkgb3BlbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGxhYmVsID0gJ0RhdGUgb2YgQmlydGgnO1xuICBASW5wdXQoKSB2YWx1ZSA9ICdTZWxlY3QgYSBkYXRlJztcbiAgQElucHV0KCkgbW9udGggPSA2O1xuICBASW5wdXQoKSB5ZWFyID0gMjAyNTtcbiAgQElucHV0KCkgc2VsZWN0ZWREYXkgPSAyNTtcbiAgQElucHV0KCkgdGltZSA9ICcxMDozMDowMCc7XG4gIEBJbnB1dCgpIG5hdHVyYWxMYW5ndWFnZVZhbHVlID0gJ0luIDIgZGF5cyc7XG4gIEBJbnB1dCgpIG5hdHVyYWxMYW5ndWFnZUhpbnQgPSAnWW91ciBwb3N0IHdpbGwgYmUgcHVibGlzaGVkIG9uIEp1bmUgMjEsIDIwMjUuJztcblxuICBAT3V0cHV0KCkgb3BlbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KCF0aGlzLm9wZW4pO1xuICB9XG5cbiAgc2VsZWN0UHJlc2V0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IG1vbnRoTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoIC0gMSwgMSkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ3Nob3J0JyB9KTtcbiAgfVxufVxuIiwiPHNlY3Rpb24gW25nQ2xhc3NdPVwiWydmbGV4IGZsZXgtY29sIGdhcC0zJywgY2xhc3NOYW1lXVwiIGNsYXNzPVwidy1mdWxsIG1heC13LXNtXCI+XG4gIDxsYWJlbCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwidmFyaWFudCA9PT0gJ2RhdGUtdGltZSdcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZsZXggaC05IGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC1zbSBzaGFkb3ctc21cIiAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC14cyB0ZXh0LWZvcmVncm91bmRcIj57eyB2YWx1ZSB9fTwvc3Bhbj5cbiAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGNsYXNzPVwiaC00IHctNCB0ZXh0LWZvcmVncm91bmRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTcgMTBMMTIgMTVMMTcgMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaC05IHctMjQgaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC14cyB0ZXh0LWZvcmVncm91bmQgc2hhZG93LXNtXCI+e3sgdGltZSB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwidmFyaWFudCAhPT0gJ2RhdGUtdGltZSdcIiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZsZXggaC05IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC1zbSBzaGFkb3ctc21cIiAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGUgdGV4dC1zbSB0ZXh0LWZvcmVncm91bmRcIj57eyB2YXJpYW50ID09PSAnbmF0dXJhbC1sYW5ndWFnZScgPyBuYXR1cmFsTGFuZ3VhZ2VWYWx1ZSA6IHZhbHVlIH19PC9zcGFuPlxuICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00IHRleHQtZm9yZWdyb3VuZFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNyAxMEwxMiAxNUwxNyAxMFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD48L3N2Zz5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxwICpuZ0lmPVwidmFyaWFudCA9PT0gJ25hdHVyYWwtbGFuZ3VhZ2UnXCIgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPnt7IG5hdHVyYWxMYW5ndWFnZUhpbnQgfX08L3A+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJvcGVuXCIgY2xhc3M9XCJ3LWZ1bGwgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1iYWNrZ3JvdW5kIHAtMyBzaGFkb3ctc21cIj5cbiAgICA8ZGl2IGNsYXNzPVwibWItNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaC04IHctOCByb3VuZGVkLW1kIHRleHQtZm9yZWdyb3VuZCBob3ZlcjpiZy1hY2NlbnQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtYmFja2dyb3VuZFwiPuKAuTwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJpbmxpbmUtZmxleCBoLTggaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBweC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHNoYWRvdy1zbVwiPnt7IG1vbnRoTGFiZWwgfX0gPHNwYW4+y4U8L3NwYW4+PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaW5saW5lLWZsZXggaC04IGl0ZW1zLWNlbnRlciBnYXAtMSByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgcHgtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZCBzaGFkb3ctc21cIj57eyB5ZWFyIH19IDxzcGFuPsuFPC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImgtOCB3LTggcm91bmRlZC1tZCB0ZXh0LWZvcmVncm91bmQgaG92ZXI6YmctYWNjZW50IGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LWJhY2tncm91bmRcIj7igLo8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxwZG0tY2FsZW5kYXIgW21vbnRoXT1cIm1vbnRoXCIgW3llYXJdPVwieWVhclwiIFtzZWxlY3RlZERheV09XCJzZWxlY3RlZERheVwiIG1vZGU9XCJzaW5nbGVcIj48L3BkbS1jYWxlbmRhcj5cblxuICAgIDxkaXYgKm5nSWY9XCJ2YXJpYW50ID09PSAnd2l0aC1pbnB1dCcgfHwgdmFyaWFudCA9PT0gJ25hdHVyYWwtbGFuZ3VhZ2UnXCIgY2xhc3M9XCJtdC0zIGZsZXggZ2FwLTJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaC04IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBweC0zIHRleHQteHMgdGV4dC1mb3JlZ3JvdW5kXCIgKGNsaWNrKT1cInNlbGVjdFByZXNldCgnVG9kYXknKVwiPlRvZGF5PC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImgtOCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgcHgtMyB0ZXh0LXhzIHRleHQtZm9yZWdyb3VuZFwiIChjbGljayk9XCJzZWxlY3RQcmVzZXQoJ1RvbW9ycm93JylcIj5Ub21vcnJvdzwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBR25ELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBT3pCLE1BQU0sT0FBTyxzQkFBc0I7SUFRakMsWUFDbUIsVUFBbUMsRUFDbkMsR0FBc0I7UUFEdEIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFUakMsV0FBTSxHQUFnQixJQUFJLENBQUM7UUFDM0IsZ0JBQVcsR0FBNEIsSUFBSSxDQUFDO1FBQzVDLFVBQUssR0FBRyxLQUFLLENBQUM7UUFFTCxlQUFVLEdBQUcsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5RCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQU90QixPQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsWUFBTyxHQUFnQyxRQUFRLENBQUM7UUFDaEQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxhQUFhLENB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LFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFHSCxJQUFJO3NCQURQLEtBQUs7Z0JBVUYsS0FBSztzQkFEUixLQUFLO2dCQVVGLFVBQVU7c0JBRGIsS0FBSztnQkFxSk4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFRdkMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0IGFzIGZvcm1hdERhdGVGbnMgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBQZG1DYWxlbmRhclJhbmdlLCBQZG1DYWxlbmRhclZhcmlhbnQgfSBmcm9tICcuLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xuXG5sZXQgbmV4dERhdGVQaWNrZXJJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkbS1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFBkbURhdGVQaWNrZXJDb21wb25lbnQge1xuICBwcml2YXRlIF92YWx1ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9yYW5nZVZhbHVlOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX29wZW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlSWQgPSBgcGRtLWRhdGUtcGlja2VyLSR7KytuZXh0RGF0ZVBpY2tlcklkfWA7XG4gIHByaXZhdGUgdHJpZ2dlckZvY3VzZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgQElucHV0KCkgaWQgPSAnJztcbiAgQElucHV0KCkgdmFyaWFudDogUGRtQ2FsZW5kYXJWYXJpYW50IHwgc3RyaW5nID0gJ3NpbmdsZSc7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIGxhYmVsQ2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICcnO1xuICBASW5wdXQoKSB0cmlnZ2VyQ2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIHBhbmVsQ2xhc3NOYW1lID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1BpY2sgYSBkYXRlJztcbiAgQElucHV0KCkgcmFuZ2VQbGFjZWhvbGRlciA9ICdQaWNrIGEgZGF0ZSByYW5nZSc7XG4gIEBJbnB1dCgpIGZvcm1hdCA9ICdNTU0gZCwgeXl5eSc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcbiAgQElucHV0KCkgYWxsb3dTYW1lRGF5UmFuZ2UgPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uU2VsZWN0ID0gdHJ1ZTtcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBpc0RhdGVEaXNhYmxlZDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IG51bGw+KCk7XG4gIEBPdXRwdXQoKSByYW5nZVZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQZG1DYWxlbmRhclJhbmdlIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBtb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcblxuICBASW5wdXQoKVxuICBzZXQgb3Blbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX29wZW4gPSAhIXZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIGdldCBvcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcGVuO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBnZXQgdmFsdWUoKTogRGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByYW5nZVZhbHVlKHZhbHVlOiBQZG1DYWxlbmRhclJhbmdlIHwgbnVsbCkge1xuICAgIHRoaXMuX3JhbmdlVmFsdWUgPSB2YWx1ZVxuICAgICAgPyB7XG4gICAgICAgICAgc3RhcnQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5zdGFydCksXG4gICAgICAgICAgZW5kOiB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUuZW5kKVxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IHJhbmdlVmFsdWUoKTogUGRtQ2FsZW5kYXJSYW5nZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9yYW5nZVZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkVmFyaWFudCgpOiBQZG1DYWxlbmRhclZhcmlhbnQge1xuICAgIHJldHVybiB0aGlzLnZhcmlhbnQgPT09ICdyYW5nZScgPyAncmFuZ2UnIDogJ3NpbmdsZSc7XG4gIH1cblxuICBnZXQgdHJpZ2dlcklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQgfHwgYCR7dGhpcy5pbnN0YW5jZUlkfS10cmlnZ2VyYDtcbiAgfVxuXG4gIGdldCBwYW5lbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuaWQgfHwgdGhpcy5pbnN0YW5jZUlkfS1wYW5lbGA7XG4gIH1cblxuICBnZXQgaGFzU2luZ2xlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSAnc2luZ2xlJyAmJiAhIXRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgZ2V0IGhhc1JhbmdlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSAncmFuZ2UnICYmICEhdGhpcy5fcmFuZ2VWYWx1ZT8uc3RhcnQ7XG4gIH1cblxuICBnZXQgZGlzcGxheVRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5yZXNvbHZlZFZhcmlhbnQgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUodGhpcy5fdmFsdWUpIDogdGhpcy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0ID8/IG51bGw7XG4gICAgY29uc3QgZW5kID0gdGhpcy5fcmFuZ2VWYWx1ZT8uZW5kID8/IG51bGw7XG5cbiAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICByZXR1cm4gdGhpcy5yYW5nZVBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICghZW5kKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5mb3JtYXREYXRlKHN0YXJ0KX0gLWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3RoaXMuZm9ybWF0RGF0ZShzdGFydCl9IC0gJHt0aGlzLmZvcm1hdERhdGUoZW5kKX1gO1xuICB9XG5cbiAgZ2V0IHRleHRDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBoYXNWYWx1ZSA9IHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSAnc2luZ2xlJyA/IHRoaXMuaGFzU2luZ2xlVmFsdWUgOiB0aGlzLmhhc1JhbmdlVmFsdWU7XG4gICAgcmV0dXJuIFtcbiAgICAgICdtaW4tdy0wIGZsZXgtMSB0cnVuY2F0ZSB0ZXh0LWxlZnQgdGV4dC1zbSBsZWFkaW5nLTUnLFxuICAgICAgaGFzVmFsdWUgPyAndGV4dC1mb3JlZ3JvdW5kJyA6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQnXG4gICAgXTtcbiAgfVxuXG4gIGdldCByb290Q2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdncmlkIGdhcC0yJyxcbiAgICAgIHRoaXMucmVzb2x2ZWRWYXJpYW50ID09PSAncmFuZ2UnID8gJ3ctWzI4MHB4XScgOiAndy1bMTk3cHhdJyxcbiAgICAgIHRoaXMuY2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIGdldCB0cmlnZ2VyQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZm9jdXNTdHlsZSA9IHRoaXMub3BlbiB8fCB0aGlzLnRyaWdnZXJGb2N1c2VkO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICdyZWxhdGl2ZSBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTIgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtbGcgYm9yZGVyIHB4LTMgcHktWzcuNXB4XSB0ZXh0LWxlZnQgc2hhZG93LXhzIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAnbWluLWgtWzM2cHhdIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgZm9jdXNTdHlsZVxuICAgICAgICA/ICdiZy1hY2NlbnQgYm9yZGVyLW5ldXRyYWwtNDAwIHJpbmctMyByaW5nLW5ldXRyYWwtMzAwJ1xuICAgICAgICA6ICdiZy1pbnB1dCBib3JkZXItaW5wdXQnLFxuICAgICAgdGhpcy5pbnZhbGlkID8gJ2JvcmRlci1kZXN0cnVjdGl2ZSByaW5nLWRlc3RydWN0aXZlLzIwJyA6ICcnLFxuICAgICAgdGhpcy50cmlnZ2VyQ2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIGdldCBwYW5lbENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnYWJzb2x1dGUgbGVmdC0wIHRvcC1mdWxsIHotMzAgbXQtMicsXG4gICAgICB0aGlzLnBhbmVsQ2xhc3NOYW1lXG4gICAgXTtcbiAgfVxuXG4gIHRvZ2dsZU9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0T3BlbighdGhpcy5vcGVuKTtcbiAgfVxuXG4gIG9uVHJpZ2dlckZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlckZvY3VzZWQgPSB0cnVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25UcmlnZ2VyQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJGb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkNhbGVuZGFyVmFsdWVDaGFuZ2UodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZURhdGUodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSA/IHRoaXMuY2xvbmVEYXRlKHRoaXMuX3ZhbHVlKSA6IG51bGwpO1xuXG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCAmJiB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5zZXRPcGVuKGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgb25DYWxlbmRhclJhbmdlVmFsdWVDaGFuZ2UodmFsdWU6IFBkbUNhbGVuZGFyUmFuZ2UgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fcmFuZ2VWYWx1ZSA9IHZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlKHZhbHVlLnN0YXJ0KSxcbiAgICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZSh2YWx1ZS5lbmQpXG4gICAgICAgIH1cbiAgICAgIDogbnVsbDtcblxuICAgIHRoaXMucmFuZ2VWYWx1ZUNoYW5nZS5lbWl0KFxuICAgICAgdGhpcy5fcmFuZ2VWYWx1ZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9yYW5nZVZhbHVlLnN0YXJ0ID8gdGhpcy5jbG9uZURhdGUodGhpcy5fcmFuZ2VWYWx1ZS5zdGFydCkgOiBudWxsLFxuICAgICAgICAgICAgZW5kOiB0aGlzLl9yYW5nZVZhbHVlLmVuZCA/IHRoaXMuY2xvbmVEYXRlKHRoaXMuX3JhbmdlVmFsdWUuZW5kKSA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0ICYmIHRoaXMuX3JhbmdlVmFsdWU/LnN0YXJ0ICYmIHRoaXMuX3JhbmdlVmFsdWU/LmVuZCkge1xuICAgICAgdGhpcy5zZXRPcGVuKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQ2FsZW5kYXJNb250aENoYW5nZShtb250aDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMubW9udGhDaGFuZ2UuZW1pdCh0aGlzLmNsb25lRGF0ZShtb250aCkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzY2FwZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICB0aGlzLnNldE9wZW4oZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZSB8IG51bGw7XG4gICAgaWYgKHRhcmdldCAmJiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgdGhpcy5zZXRPcGVuKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wZW4obmV4dE9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3BlbiA9PT0gbmV4dE9wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9vcGVuID0gbmV4dE9wZW47XG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQodGhpcy5fb3Blbik7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmb3JtYXREYXRlRm5zKGRhdGUsIHRoaXMuZm9ybWF0IHx8ICdNTU0gZCwgeXl5eScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGVGbnMoZGF0ZSwgJ01NTSBkLCB5eXl5Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKHZhbHVlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHx8IE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUuZ2V0RnVsbFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvbmVEYXRlKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJyb290Q2xhc3Nlc1wiPlxuICA8cGRtLWxhYmVsICpuZ0lmPVwibGFiZWxcIiBbZm9ySWRdPVwidHJpZ2dlcklkXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW2NsYXNzTmFtZV09XCJsYWJlbENsYXNzTmFtZVwiPlxuICAgIHt7IGxhYmVsIH19XG4gIDwvcGRtLWxhYmVsPlxuXG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtYmxvY2sgdy1mdWxsXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbaWRdPVwidHJpZ2dlcklkXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJwYW5lbElkXCJcbiAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiJ2RpYWxvZydcIlxuICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImludmFsaWRcIlxuICAgICAgW25nQ2xhc3NdPVwidHJpZ2dlckNsYXNzZXNcIlxuICAgICAgW2F0dHIudGl0bGVdPVwiZGlzcGxheVRleHRcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW4oKVwiXG4gICAgICAoZm9jdXMpPVwib25UcmlnZ2VyRm9jdXMoKVwiXG4gICAgICAoYmx1cik9XCJvblRyaWdnZXJCbHVyKClcIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBoLTUgdy01IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTAuNSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgY2xhc3M9XCJoLTQgdy00XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTggMnY0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTYgMnY0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjQuNVwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxNi41XCIgcng9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9yZWN0PlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMyA5LjVoMThcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8c3BhbiBbbmdDbGFzc109XCJ0ZXh0Q2xhc3Nlc1wiPnt7IGRpc3BsYXlUZXh0IH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiAqbmdJZj1cIm9wZW5cIiBbaWRdPVwicGFuZWxJZFwiIFtuZ0NsYXNzXT1cInBhbmVsQ2xhc3Nlc1wiIHJvbGU9XCJkaWFsb2dcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWwgPyB0cmlnZ2VySWQgOiBudWxsXCI+XG4gICAgICA8cGRtLWNhbGVuZGFyXG4gICAgICAgIFt2YXJpYW50XT1cInJlc29sdmVkVmFyaWFudFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtyYW5nZVZhbHVlXT1cInJhbmdlVmFsdWVcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbYWxsb3dTYW1lRGF5UmFuZ2VdPVwiYWxsb3dTYW1lRGF5UmFuZ2VcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICBbaXNEYXRlRGlzYWJsZWRdPVwiaXNEYXRlRGlzYWJsZWRcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DYWxlbmRhclZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAocmFuZ2VWYWx1ZUNoYW5nZSk9XCJvbkNhbGVuZGFyUmFuZ2VWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKG1vbnRoQ2hhbmdlKT1cIm9uQ2FsZW5kYXJNb250aENoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L3BkbS1jYWxlbmRhcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|