special-forms 16.2.1 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/index.mjs +13 -13
- package/esm2022/lib/components/special-autocomplete/special-autocomplete.component.mjs +75 -75
- package/esm2022/lib/components/special-autocomplete/special-autocomplete.interface.mjs +2 -2
- package/esm2022/lib/components/special-checkbox/special-checkbox.component.mjs +39 -36
- package/esm2022/lib/components/special-checkbox/special-checkbox.interface.mjs +3 -2
- package/esm2022/lib/components/special-datepicker/special-datepicker.component.mjs +43 -40
- package/esm2022/lib/components/special-datepicker/special-datepicker.interface.mjs +3 -2
- package/esm2022/lib/components/special-dropdown/special-dropdown.component.mjs +48 -47
- package/esm2022/lib/components/special-dropdown/special-dropdown.interface.mjs +3 -2
- package/esm2022/lib/components/special-form/special-form.component.mjs +99 -99
- package/esm2022/lib/components/special-form/special-form.module.mjs +78 -78
- package/esm2022/lib/components/special-input/special-input.component.mjs +56 -56
- package/esm2022/lib/components/special-input/special-input.interface.mjs +2 -2
- package/esm2022/lib/components/special-label/special-label.component.mjs +27 -27
- package/esm2022/lib/components/special-label/special-label.interface.mjs +2 -2
- package/esm2022/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.mjs +97 -97
- package/esm2022/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.interface.mjs +2 -2
- package/esm2022/lib/components/special-richtext/special-richtext.component.mjs +54 -45
- package/esm2022/lib/components/special-richtext/special-richtext.interface.mjs +3 -2
- package/esm2022/lib/components/special-text-area/special-text-area.component.mjs +44 -44
- package/esm2022/lib/components/special-text-area/special-text-area.interface.mjs +2 -2
- package/esm2022/lib/components/special-upload/special-upload.component.mjs +84 -84
- package/esm2022/lib/components/special-upload/special-upload.interface.mjs +2 -2
- package/esm2022/lib/core/aux-data/control-types.enum.mjs +17 -17
- package/esm2022/lib/core/aux-data/input-types.mjs +15 -15
- package/esm2022/lib/core/forms/special-forms.mjs +240 -260
- package/esm2022/lib/core/interfaces/field-basics.interfaces.mjs +1 -1
- package/esm2022/lib/core/interfaces/form.interfaces.mjs +2 -2
- package/esm2022/lib/core/interfaces/special-control.interface.mjs +2 -2
- package/esm2022/lib/core/masks/currency.mask.mjs +10 -10
- package/esm2022/lib/core/masks/index.mjs +2 -2
- package/esm2022/lib/core/masks/number.mask.mjs +2 -2
- package/esm2022/lib/core/pipes/controls-list-pipe/controls-list.pipe.mjs +17 -17
- package/esm2022/lib/core/pipes/error-message-pipe/error.pipe.mjs +22 -22
- package/esm2022/lib/core/pipes/index.mjs +3 -3
- package/esm2022/lib/core/pipes/text-by-function/text-by-function.pipe.mjs +21 -21
- package/esm2022/lib/core/services/error-state-matcher/error-matcher.mjs +12 -12
- package/esm2022/lib/core/services/index.mjs +3 -3
- package/esm2022/lib/core/services/special-form-builder/special-form-builder.service.mjs +156 -156
- package/esm2022/public-api.mjs +12 -12
- package/esm2022/special-forms.mjs +4 -4
- package/fesm2022/special-forms.mjs +1018 -1024
- package/fesm2022/special-forms.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/components/index.d.ts +23 -23
- package/lib/components/special-autocomplete/special-autocomplete.component.d.ts +19 -19
- package/lib/components/special-autocomplete/special-autocomplete.interface.d.ts +19 -18
- package/lib/components/special-checkbox/special-checkbox.component.d.ts +12 -11
- package/lib/components/special-checkbox/special-checkbox.interface.d.ts +13 -12
- package/lib/components/special-datepicker/special-datepicker.component.d.ts +13 -12
- package/lib/components/special-datepicker/special-datepicker.interface.d.ts +12 -11
- package/lib/components/special-dropdown/special-dropdown.component.d.ts +11 -11
- package/lib/components/special-dropdown/special-dropdown.interface.d.ts +17 -16
- package/lib/components/special-form/special-form.component.d.ts +31 -31
- package/lib/components/special-form/special-form.module.d.ts +20 -20
- package/lib/components/special-input/special-input.component.d.ts +15 -15
- package/lib/components/special-input/special-input.interface.d.ts +17 -16
- package/lib/components/special-label/special-label.component.d.ts +13 -13
- package/lib/components/special-label/special-label.interface.d.ts +13 -12
- package/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.d.ts +22 -22
- package/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.interface.d.ts +19 -18
- package/lib/components/special-richtext/special-richtext.component.d.ts +17 -17
- package/lib/components/special-richtext/special-richtext.interface.d.ts +10 -9
- package/lib/components/special-text-area/special-text-area.component.d.ts +13 -13
- package/lib/components/special-text-area/special-text-area.interface.d.ts +8 -7
- package/lib/components/special-upload/special-upload.component.d.ts +21 -21
- package/lib/components/special-upload/special-upload.interface.d.ts +12 -11
- package/lib/core/aux-data/control-types.enum.d.ts +16 -16
- package/lib/core/aux-data/input-types.d.ts +2 -2
- package/lib/core/forms/special-forms.d.ts +108 -123
- package/lib/core/interfaces/field-basics.interfaces.d.ts +22 -22
- package/lib/core/interfaces/form.interfaces.d.ts +58 -55
- package/lib/core/interfaces/special-control.interface.d.ts +4 -4
- package/lib/core/masks/currency.mask.d.ts +1 -1
- package/lib/core/masks/index.d.ts +2 -2
- package/lib/core/masks/number.mask.d.ts +1 -1
- package/lib/core/pipes/controls-list-pipe/controls-list.pipe.d.ts +11 -11
- package/lib/core/pipes/error-message-pipe/error.pipe.d.ts +12 -12
- package/lib/core/pipes/index.d.ts +3 -3
- package/lib/core/pipes/text-by-function/text-by-function.pipe.d.ts +7 -7
- package/lib/core/services/error-state-matcher/error-matcher.d.ts +8 -8
- package/lib/core/services/index.d.ts +3 -3
- package/lib/core/services/special-form-builder/special-form-builder.service.d.ts +25 -25
- package/lib/styles/tailwind-final.scss +31 -0
- package/package.json +9 -9
- package/public-api.d.ts +9 -9
|
@@ -1,260 +1,240 @@
|
|
|
1
|
-
import { FormArray, FormControl, FormGroup, } from '@angular/forms';
|
|
2
|
-
export class SpecialFormControl extends FormControl {
|
|
3
|
-
constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, length, placeholder, readOnly, required, tooltip, errorMessages, disabled, }) {
|
|
4
|
-
super(defaultValue, validators, asyncValidators);
|
|
5
|
-
this.name = name;
|
|
6
|
-
this.placeholder = placeholder;
|
|
7
|
-
this.label = label;
|
|
8
|
-
this.tooltip = tooltip;
|
|
9
|
-
this.icon = icon;
|
|
10
|
-
this.elementId = elementId;
|
|
11
|
-
this.settings = settings;
|
|
12
|
-
this.type = type;
|
|
13
|
-
this.styleClasses = styleClasses;
|
|
14
|
-
this.hidden = hidden;
|
|
15
|
-
this.length = length;
|
|
16
|
-
this.readOnly = readOnly;
|
|
17
|
-
this.required = required;
|
|
18
|
-
this.errorMessages = errorMessages;
|
|
19
|
-
disabled ? this.disable() : this.enable();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
this.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
this.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
Object.entries(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
this.
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
this.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
this.
|
|
169
|
-
this.
|
|
170
|
-
this.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
this.
|
|
205
|
-
this.
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
this.form.getDirty();
|
|
241
|
-
this.controls.forEach((item) => {
|
|
242
|
-
item.getDirty();
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
recursiveFillForm(form, data) {
|
|
246
|
-
Object.entries(form.controls).map(([key, control]) => {
|
|
247
|
-
if (control instanceof FormControl) {
|
|
248
|
-
control.setValue(data[key]);
|
|
249
|
-
}
|
|
250
|
-
else if (control instanceof FormArray) {
|
|
251
|
-
data[key].forEach(() => { });
|
|
252
|
-
}
|
|
253
|
-
else if (control instanceof FormGroup) {
|
|
254
|
-
control.reset(data[key]);
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
return form;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1mb3Jtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb3JlL2Zvcm1zL3NwZWNpYWwtZm9ybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFXeEIsTUFBTSxPQUFPLGtCQUNYLFNBQVEsV0FBVztJQWtCbkIsWUFBWSxFQUNWLElBQUksRUFDSixRQUFRLEVBQ1IsSUFBSSxFQUNKLFVBQVUsRUFDVixlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLElBQUksRUFDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE9BQU8sRUFDUCxhQUFhLEVBQ2IsUUFBUSxHQUNPO1FBQ2YsS0FBSyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFhLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFN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OlsiaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgRm9ybUFycmF5LFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVDb250cm9sVHlwZXMgfSBmcm9tICcuLi9hdXgtZGF0YS9jb250cm9sLXR5cGVzLmVudW0nO1xyXG5pbXBvcnQgeyBJRmllbGRCYXNpY0RhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZpZWxkLWJhc2ljcy5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtcclxuICBJQXJyYXlTZXR0aW5ncyxcclxuICBJRm9ybVNldHRpbmdzLFxyXG4gIFRTcGVjaWFsRmllbGRzLFxyXG4gIFRTcGVjaWFsRm9ybSxcclxuICBUU3BlY2lhbEFycmF5LFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS5pbnRlcmZhY2VzJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5leHBvcnQgY2xhc3MgU3BlY2lhbEZvcm1Db250cm9sPFQ+XHJcbiAgZXh0ZW5kcyBGb3JtQ29udHJvbFxyXG4gIGltcGxlbWVudHMgSUZpZWxkQmFzaWNEYXRhXHJcbntcclxuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyB0b29sdGlwOiBzdHJpbmc7XHJcbiAgcHVibGljIGljb246IHN0cmluZztcclxuICBwdWJsaWMgZWxlbWVudElkOiBzdHJpbmc7XHJcbiAgcHVibGljIHN0eWxlQ2xhc3Nlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcclxuICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgcHVibGljIHNldHRpbmdzOiBUO1xyXG4gIHB1YmxpYyB0eXBlOiBFQ29udHJvbFR5cGVzO1xyXG4gIHB1YmxpYyBlcnJvck1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcih7XHJcbiAgICBuYW1lLFxyXG4gICAgc2V0dGluZ3MsXHJcbiAgICB0eXBlLFxyXG4gICAgdmFsaWRhdG9ycyxcclxuICAgIGFzeW5jVmFsaWRhdG9ycyxcclxuICAgIGVsZW1lbnRJZCxcclxuICAgIHN0eWxlQ2xhc3NlcyxcclxuICAgIGRlZmF1bHRWYWx1ZSxcclxuICAgIGhpZGRlbixcclxuICAgIGljb24sXHJcbiAgICBsYWJlbCxcclxuICAgIGxlbmd0aCxcclxuICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgcmVhZE9ubHksXHJcbiAgICByZXF1aXJlZCxcclxuICAgIHRvb2x0aXAsXHJcbiAgICBlcnJvck1lc3NhZ2VzLFxyXG4gICAgZGlzYWJsZWQsXHJcbiAgfTogVFNwZWNpYWxGaWVsZHMpIHtcclxuICAgIHN1cGVyKGRlZmF1bHRWYWx1ZSwgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xyXG4gICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaWNvbiA9IGljb247XHJcbiAgICB0aGlzLmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncyBhcyBUO1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuc3R5bGVDbGFzc2VzID0gc3R5bGVDbGFzc2VzO1xyXG4gICAgdGhpcy5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICAgIHRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IGVycm9yTWVzc2FnZXM7XHJcbiAgICBkaXNhYmxlZCA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG1hcmtBc0RpcnR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgfSk6IHZvaWQge1xyXG4gICAgc3VwZXIubWFya0FzRGlydHkob3B0cyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgfSk6IHZvaWQge1xyXG4gICAgc3VwZXIubWFya0FzUHJpc3RpbmUob3B0cyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcbiAgb3ZlcnJpZGUgbWFya0FzVG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IH0pOiB2b2lkIHtcclxuICAgIHN1cGVyLm1hcmtBc1RvdWNoZWQob3B0cyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG1hcmtBc1VudG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IH0pOiB2b2lkIHtcclxuICAgIHN1cGVyLm1hcmtBc1VudG91Y2hlZChvcHRzKTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbWFya0FsbEFzVG91Y2hlZCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkoc3RhdHVzOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHN0YXR1cyA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIHNldEhpZGRlbihzdGF0dXMgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmhpZGRlbiA9IHN0YXR1cztcclxuICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxGb3JtR3JvdXAgZXh0ZW5kcyBGb3JtR3JvdXAgaW1wbGVtZW50cyBJRmllbGRCYXNpY0RhdGEge1xyXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGxhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIHRvb2x0aXA6IHN0cmluZztcclxuICBwdWJsaWMgaWNvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBlbGVtZW50SWQ6IHN0cmluZztcclxuICBwdWJsaWMgc3R5bGVDbGFzc2VzOiBzdHJpbmc7XHJcbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xyXG4gIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcclxuICBwdWJsaWMgaGlkZGVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyByZWFkT25seTogYm9vbGVhbjtcclxuICBwdWJsaWMgc2V0dGluZ3M6IElGb3JtU2V0dGluZ3M7XHJcbiAgcHVibGljIHR5cGU6IEVDb250cm9sVHlwZXMuZm9ybTtcclxuICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnk7XHJcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAge1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBzZXR0aW5ncyxcclxuICAgICAgdHlwZSxcclxuICAgICAgdmFsaWRhdG9ycyxcclxuICAgICAgYXN5bmNWYWxpZGF0b3JzLFxyXG4gICAgICBlbGVtZW50SWQsXHJcbiAgICAgIHN0eWxlQ2xhc3NlcyxcclxuICAgICAgZGVmYXVsdFZhbHVlLFxyXG4gICAgICBoaWRkZW4sXHJcbiAgICAgIGljb24sXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgICBsZW5ndGgsXHJcbiAgICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgICByZWFkT25seSxcclxuICAgICAgcmVxdWlyZWQsXHJcbiAgICAgIHRvb2x0aXAsXHJcbiAgICAgIGRpc2FibGVkLFxyXG4gICAgfTogVFNwZWNpYWxGb3JtLFxyXG4gICAgY29udHJvbHM6IHtcclxuICAgICAgW2tleTogc3RyaW5nXTogU3BlY2lhbEZvcm1Db250cm9sPGFueT47XHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb250cm9scywgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xyXG4gICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaWNvbiA9IGljb247XHJcbiAgICB0aGlzLmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnN0eWxlQ2xhc3NlcyA9IHN0eWxlQ2xhc3NlcztcclxuICAgIHRoaXMuaGlkZGVuID0gaGlkZGVuO1xyXG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgICB0aGlzLnJlcXVpcmVkID0gcmVxdWlyZWQ7XHJcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgIGRpc2FibGVkID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlydHkoKSB7XHJcbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXApIHtcclxuICAgICAgICBjb250cm9sLmdldERpcnR5KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQXJyYXkpIHtcclxuICAgICAgICBjb250cm9sLmdldERpcnR5KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbFJlc2V0KHZhbHVlID0ge30pIHtcclxuICAgIGNvbnN0IGF1eDogYW55ID0ge307XHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKS5tYXAoKFtrZXksIGNvbnRyb2xdKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgYXV4W2tleV0gPSBjb250cm9sLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSkge1xyXG4gICAgICAgIGNvbnRyb2wuY2xlYXIoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXNldCh7IC4uLmF1eCwgLi4udmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seShzdGF0dXM6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sIHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5IHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUdyb3VwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZhbHVlLnNldFJlYWRPbmx5KHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHlCeUZpZWxkcyhmaWVsZHNPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KSB7XHJcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZHNPYmplY3QpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbnRyb2xzW2tleV07XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgY29udHJvbC5yZWFkT25seSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEhpZGRlbkJ5RmllbGRzKGZpZWxkczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkcykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbHNba2V5XTtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLmhpZGRlbiA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbikge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbnRyb2xzKS5tYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCB8fFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSB8fFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cFxyXG4gICAgICApIHtcclxuICAgICAgICB2YWx1ZS5zZXREaXNhYmxlZChzdGF0dXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkQnlGaWVsZHMoZmllbGRzT2JqZWN0OiBhbnkpIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc09iamVjdCkubWFwKChlbnRyaWVzKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRyb2xzW2VudHJpZXNbMF1dIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgZW50cmllc1sxXVxyXG4gICAgICAgICAgPyB0aGlzLmNvbnRyb2xzW2VudHJpZXNbMF1dLmVuYWJsZSgpXHJcbiAgICAgICAgICA6IHRoaXMuY29udHJvbHNbZW50cmllc1swXV0uZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGRvbmRlIHZhbHVlIGVzIGVsIG9iamV0byBzZW1pbGxhIHkgZGV0YWlsRm9ybSBlcyB1biBhcnJlZ2xvIGRlIGZvcm0ga2V5IHBhcmEgZGFyIHVuIG1hcmNvIGFsIGZvcm1hcnJheVxyXG4gICAqL1xyXG5cclxuICBzZXRGb3JtVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zcGVjaWFsUmVzZXQodmFsdWUpO1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scylcclxuICAgICAgLmZpbHRlcigoW19rZXksIGNvbnRyb2xdKSA9PiBjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSlcclxuICAgICAgLm1hcCgoW2tleSwgY29udHJvbF0pID0+IHtcclxuICAgICAgICAoY29udHJvbCBhcyBTcGVjaWFsRm9ybUFycmF5KS5maWxsRm9ybUFycmF5KHZhbHVlW2tleV0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcXVlIHJldG9ybmFcclxuICAgKi9cclxuXHJcbiAgZ2V0SWRQa2V5KCk6IFNwZWNpYWxGb3JtQ29udHJvbDxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLmZpbmQoXHJcbiAgICAgIChjb250cm9sKSA9PlxyXG4gICAgICAgIGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wgJiYgY29udHJvbC50eXBlID09PSAnUFJJTUFSWS1LRVknXHJcbiAgICApIGFzIFNwZWNpYWxGb3JtQ29udHJvbDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxGb3JtQXJyYXkgZXh0ZW5kcyBGb3JtQXJyYXkgaW1wbGVtZW50cyBJRmllbGRCYXNpY0RhdGEge1xyXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGxhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIHRvb2x0aXA6IHN0cmluZztcclxuICBwdWJsaWMgaWNvbjogc3RyaW5nO1xyXG4gIHB1YmxpYyBlbGVtZW50SWQ6IHN0cmluZztcclxuICBwdWJsaWMgc3R5bGVDbGFzc2VzOiBzdHJpbmc7XHJcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBzZXR0aW5nczogSUFycmF5U2V0dGluZ3M7XHJcbiAgcHVibGljIHR5cGU6IEVDb250cm9sVHlwZXM7XHJcbiAgcHVibGljIGRlZmF1bHRWYWx1ZTogYW55O1xyXG4gIHB1YmxpYyBmb3JtOiBTcGVjaWFsRm9ybUdyb3VwO1xyXG4gIHByaXZhdGUgZm9ybUNyZWF0aW9uOiAodmFsdWU/OiBhbnkpID0+IFNwZWNpYWxGb3JtR3JvdXA7XHJcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAge1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBzZXR0aW5ncyxcclxuICAgICAgdHlwZSxcclxuICAgICAgdmFsaWRhdG9ycyxcclxuICAgICAgYXN5bmNWYWxpZGF0b3JzLFxyXG4gICAgICBlbGVtZW50SWQsXHJcbiAgICAgIHN0eWxlQ2xhc3NlcyxcclxuICAgICAgZGVmYXVsdFZhbHVlLFxyXG4gICAgICBoaWRkZW4sXHJcbiAgICAgIGljb24sXHJcbiAgICAgIGxhYmVsLFxyXG4gICAgICBwbGFjZWhvbGRlcixcclxuICAgICAgcmVhZE9ubHksXHJcbiAgICAgIHJlcXVpcmVkLFxyXG4gICAgICB0b29sdGlwLFxyXG4gICAgICBlcnJvck1lc3NhZ2VzLFxyXG4gICAgICBkaXNhYmxlZCxcclxuICAgIH06IFRTcGVjaWFsQXJyYXksXHJcbiAgICBmb3JtQ3JlYXRpb246ICgpID0+IFNwZWNpYWxGb3JtR3JvdXAsXHJcbiAgICBjb250cm9sczogQWJzdHJhY3RDb250cm9sW11cclxuICApIHtcclxuICAgIHN1cGVyKGNvbnRyb2xzLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5mb3JtQ3JlYXRpb24gPSBmb3JtQ3JlYXRpb247XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbigpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcclxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcclxuICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLmljb24gPSBpY29uO1xyXG4gICAgdGhpcy5lbGVtZW50SWQgPSBlbGVtZW50SWQ7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5zdHlsZUNsYXNzZXMgPSBzdHlsZUNsYXNzZXM7XHJcbiAgICB0aGlzLmhpZGRlbiA9IGhpZGRlbjtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICAgIHRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlcztcclxuICAgIGRpc2FibGVkID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZmlsbEZvcm1BcnJheShkYXRhOiBhbnlbXSkge1xyXG4gICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNyZWF0aW9uKGl0ZW0pO1xyXG4gICAgICB0aGlzLnB1c2goZm9ybSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZEl0ZW0oKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24odGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMuZm9ybS5zcGVjaWFsUmVzZXQoKTtcclxuICAgIHRoaXMucHVzaChmb3JtKTtcclxuICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICB9XHJcblxyXG4gIHNwZWNpYWxQdXNoKGluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24odGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIGlmICghaW5kZXgpIHRoaXMucHVzaChmb3JtKTtcclxuICAgIGVsc2UgdGhpcy5jb250cm9sc1tpbmRleF0ucmVzZXQodGhpcy5mb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHNwZWNpYWxJbnNlcnQoaW5kZXggPSAwKSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24odGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMuaW5zZXJ0KGluZGV4LCBmb3JtKTtcclxuICB9XHJcblxyXG4gIHNwZWNpYWxFZGl0KGluZGV4OiBudW1iZXIsIG5ld1ZhbHVlOiBPYmplY3QpIHtcclxuICAgIHRoaXMuY29udHJvbHNbaW5kZXhdLnJlc2V0KHsgLi4udGhpcy5jb250cm9sc1tpbmRleF0udmFsdWUsIC4uLm5ld1ZhbHVlIH0pO1xyXG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVnVlbHZlIHRvZG9zIGxvcyBjb250cm9sZXMgZGVsIGZvcm1BcnJheSBkZSBsZWN0dXJhIG8gZGUgc29sb2xlY3R1cmFcclxuICAgKiBAcGFyYW0gc3RhdHVzXHJcbiAgICovXHJcblxyXG4gIHNldFJlYWRPbmx5KHN0YXR1czogYm9vbGVhbikge1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHN0YXR1cztcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXApIHtcclxuICAgICAgICBjb250cm9sLnNldFJlYWRPbmx5KHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVnVlbHZlIHRvZG9zIGxvcyBjb250cm9sZXMgZGVsIGZvcm1BcnJheSBoYWJpbGl0YWRvcyBvIGRlc2hhYmlsaXRhZG9zXHJcbiAgICogQHBhcmFtIHN0YXR1c1xyXG4gICAqL1xyXG5cclxuICBzZXREaXNhYmxlZChzdGF0dXM6IGJvb2xlYW4pIHtcclxuICAgIHN0YXR1cyA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXApIHtcclxuICAgICAgICBjb250cm9sLnNldERpc2FibGVkKHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVybWl0ZSBlZGl0YXIgdW4gY29udHJvbCBlc3BlY2lmaWNvLlxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqL1xyXG5cclxuICBlZGl0Q29udHJvbChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZvcm0ucmVzZXQodGhpcy5jb250cm9sc1tpbmRleF0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlydHkoKSB7XHJcbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmZvcm0uZ2V0RGlydHkoKTtcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAoPFNwZWNpYWxGb3JtR3JvdXA+aXRlbSkuZ2V0RGlydHkoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVjdXJzaXZlRmlsbEZvcm0oZm9ybTogRm9ybUdyb3VwLCBkYXRhOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybS5jb250cm9scykubWFwKChba2V5LCBjb250cm9sXSkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShkYXRhW2tleV0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICBkYXRhW2tleV0uZm9yRWFjaCgoKSA9PiB7fSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wucmVzZXQoZGF0YVtrZXldKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcbn1cclxuIl19
|
|
1
|
+
import { FormArray, FormControl, FormGroup, } from '@angular/forms';
|
|
2
|
+
export class SpecialFormControl extends FormControl {
|
|
3
|
+
constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, length, placeholder, readOnly, required, tooltip, errorMessages, disabled, }) {
|
|
4
|
+
super(defaultValue, validators, asyncValidators);
|
|
5
|
+
this.name = name;
|
|
6
|
+
this.placeholder = placeholder;
|
|
7
|
+
this.label = label;
|
|
8
|
+
this.tooltip = tooltip;
|
|
9
|
+
this.icon = icon;
|
|
10
|
+
this.elementId = elementId;
|
|
11
|
+
this.settings = settings;
|
|
12
|
+
this.type = type;
|
|
13
|
+
this.styleClasses = styleClasses;
|
|
14
|
+
this.hidden = hidden;
|
|
15
|
+
this.length = length;
|
|
16
|
+
this.readOnly = readOnly;
|
|
17
|
+
this.required = required;
|
|
18
|
+
this.errorMessages = errorMessages;
|
|
19
|
+
disabled ? this.disable() : this.enable();
|
|
20
|
+
}
|
|
21
|
+
setReadOnly(status = true) {
|
|
22
|
+
this.readOnly = status;
|
|
23
|
+
}
|
|
24
|
+
setDisabled(status = true) {
|
|
25
|
+
status ? this.disable() : this.enable();
|
|
26
|
+
}
|
|
27
|
+
setHidden(status = true) {
|
|
28
|
+
this.hidden = status;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class SpecialFormGroup extends FormGroup {
|
|
32
|
+
constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, length, placeholder, readOnly, required, tooltip, disabled, }, controls) {
|
|
33
|
+
super(controls, validators, asyncValidators);
|
|
34
|
+
this.name = name;
|
|
35
|
+
this.placeholder = placeholder;
|
|
36
|
+
this.label = label;
|
|
37
|
+
this.tooltip = tooltip;
|
|
38
|
+
this.icon = icon;
|
|
39
|
+
this.elementId = elementId;
|
|
40
|
+
this.settings = settings;
|
|
41
|
+
this.type = type;
|
|
42
|
+
this.styleClasses = styleClasses;
|
|
43
|
+
this.hidden = hidden;
|
|
44
|
+
this.length = length;
|
|
45
|
+
this.readOnly = readOnly;
|
|
46
|
+
this.required = required;
|
|
47
|
+
this.defaultValue = defaultValue;
|
|
48
|
+
disabled ? this.disable() : this.enable();
|
|
49
|
+
}
|
|
50
|
+
getDirty() {
|
|
51
|
+
this.markAsDirty();
|
|
52
|
+
Object.values(this.controls).forEach((control) => {
|
|
53
|
+
if (control instanceof SpecialFormControl) {
|
|
54
|
+
control.markAsDirty();
|
|
55
|
+
}
|
|
56
|
+
else if (control instanceof SpecialFormGroup) {
|
|
57
|
+
control.getDirty();
|
|
58
|
+
}
|
|
59
|
+
else if (control instanceof SpecialFormArray) {
|
|
60
|
+
control.getDirty();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
specialReset(value = {}) {
|
|
65
|
+
const aux = {};
|
|
66
|
+
Object.entries(this.controls).map(([key, control]) => {
|
|
67
|
+
if (control instanceof SpecialFormControl) {
|
|
68
|
+
aux[key] = control.defaultValue;
|
|
69
|
+
}
|
|
70
|
+
else if (control instanceof SpecialFormArray) {
|
|
71
|
+
control.clear();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
this.reset({ ...aux, ...value });
|
|
75
|
+
}
|
|
76
|
+
setReadOnly(status = true) {
|
|
77
|
+
Object.values(this.controls).map((value) => {
|
|
78
|
+
if (value instanceof SpecialFormControl ||
|
|
79
|
+
value instanceof SpecialFormArray ||
|
|
80
|
+
value instanceof SpecialFormGroup) {
|
|
81
|
+
value.setReadOnly(status);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
setReadOnlyByFields(fieldsObject) {
|
|
86
|
+
Object.entries(fieldsObject).map(([key, value]) => {
|
|
87
|
+
const control = this.controls[key];
|
|
88
|
+
if (control instanceof SpecialFormControl) {
|
|
89
|
+
control.readOnly = value;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
setHiddenByFields(fields) {
|
|
94
|
+
Object.entries(fields).map(([key, value]) => {
|
|
95
|
+
const control = this.controls[key];
|
|
96
|
+
if (control instanceof SpecialFormControl) {
|
|
97
|
+
control.hidden = value;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
setDisabled(status) {
|
|
102
|
+
Object.values(this.controls).map((value) => {
|
|
103
|
+
if (value instanceof SpecialFormControl ||
|
|
104
|
+
value instanceof SpecialFormArray ||
|
|
105
|
+
value instanceof SpecialFormGroup) {
|
|
106
|
+
value.setDisabled(status);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
setDisabledByFields(fieldsObject) {
|
|
111
|
+
Object.entries(fieldsObject).map((entries) => {
|
|
112
|
+
if (this.controls[entries[0]] instanceof SpecialFormControl) {
|
|
113
|
+
entries[1]
|
|
114
|
+
? this.controls[entries[0]].enable()
|
|
115
|
+
: this.controls[entries[0]].disable();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* donde value es el objeto semilla y detailForm es un arreglo de form key para dar un marco al formarray
|
|
121
|
+
*/
|
|
122
|
+
setFormValue(value) {
|
|
123
|
+
this.specialReset(value);
|
|
124
|
+
Object.entries(this.controls)
|
|
125
|
+
.filter(([_key, control]) => control instanceof SpecialFormArray)
|
|
126
|
+
.map(([key, control]) => {
|
|
127
|
+
control.fillFormArray(value[key]);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Método que retorna
|
|
132
|
+
*/
|
|
133
|
+
getIdPkey() {
|
|
134
|
+
return Object.values(this.controls).find((control) => control instanceof SpecialFormControl && control.type === 'PRIMARY-KEY');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export class SpecialFormArray extends FormArray {
|
|
138
|
+
constructor({ name, settings, type, validators, asyncValidators, elementId, styleClasses, defaultValue, hidden, icon, label, placeholder, readOnly, required, tooltip, errorMessages, disabled, }, formCreation, controls) {
|
|
139
|
+
super(controls, validators, asyncValidators);
|
|
140
|
+
this.formCreation = formCreation;
|
|
141
|
+
this.form = this.formCreation();
|
|
142
|
+
this.name = name;
|
|
143
|
+
this.placeholder = placeholder;
|
|
144
|
+
this.label = label;
|
|
145
|
+
this.tooltip = tooltip;
|
|
146
|
+
this.icon = icon;
|
|
147
|
+
this.elementId = elementId;
|
|
148
|
+
this.settings = settings;
|
|
149
|
+
this.type = type;
|
|
150
|
+
this.styleClasses = styleClasses;
|
|
151
|
+
this.hidden = hidden;
|
|
152
|
+
this.readOnly = readOnly;
|
|
153
|
+
this.required = required;
|
|
154
|
+
this.defaultValue = defaultValue;
|
|
155
|
+
this.errorMessages = errorMessages;
|
|
156
|
+
disabled ? this.disable() : this.enable();
|
|
157
|
+
}
|
|
158
|
+
fillFormArray(data) {
|
|
159
|
+
this.form.reset();
|
|
160
|
+
this.clear();
|
|
161
|
+
data.forEach((item) => {
|
|
162
|
+
const form = this.formCreation(item);
|
|
163
|
+
this.push(form);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
addItem() {
|
|
167
|
+
const form = this.formCreation(this.form.value);
|
|
168
|
+
this.form.specialReset();
|
|
169
|
+
this.push(form);
|
|
170
|
+
this.markAsDirty();
|
|
171
|
+
}
|
|
172
|
+
specialPush(index) {
|
|
173
|
+
const form = this.formCreation(this.form.value);
|
|
174
|
+
if (!index)
|
|
175
|
+
this.push(form);
|
|
176
|
+
else
|
|
177
|
+
this.controls[index].reset(this.form.value);
|
|
178
|
+
}
|
|
179
|
+
specialInsert(index = 0) {
|
|
180
|
+
const form = this.formCreation(this.form.value);
|
|
181
|
+
this.insert(index, form);
|
|
182
|
+
}
|
|
183
|
+
specialEdit(index, newValue) {
|
|
184
|
+
this.controls[index].reset({ ...this.controls[index].value, ...newValue });
|
|
185
|
+
this.markAsDirty();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Vuelve todos los controles del formArray de lectura o de sololectura
|
|
189
|
+
* @param status
|
|
190
|
+
*/
|
|
191
|
+
setReadOnly(status) {
|
|
192
|
+
this.readOnly = status;
|
|
193
|
+
this.controls.forEach((control) => {
|
|
194
|
+
if (control instanceof SpecialFormGroup) {
|
|
195
|
+
control.setReadOnly(status);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Vuelve todos los controles del formArray habilitados o deshabilitados
|
|
201
|
+
* @param status
|
|
202
|
+
*/
|
|
203
|
+
setDisabled(status) {
|
|
204
|
+
status ? this.disable() : this.enable();
|
|
205
|
+
this.controls.forEach((control) => {
|
|
206
|
+
if (control instanceof SpecialFormGroup) {
|
|
207
|
+
control.setDisabled(status);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Permite editar un control especifico.
|
|
213
|
+
* @param index
|
|
214
|
+
*/
|
|
215
|
+
editControl(index) {
|
|
216
|
+
this.form.reset(this.controls[index].value);
|
|
217
|
+
}
|
|
218
|
+
getDirty() {
|
|
219
|
+
this.markAsDirty();
|
|
220
|
+
this.form.getDirty();
|
|
221
|
+
this.controls.forEach((item) => {
|
|
222
|
+
item.getDirty();
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
recursiveFillForm(form, data) {
|
|
226
|
+
Object.entries(form.controls).map(([key, control]) => {
|
|
227
|
+
if (control instanceof FormControl) {
|
|
228
|
+
control.setValue(data[key]);
|
|
229
|
+
}
|
|
230
|
+
else if (control instanceof FormArray) {
|
|
231
|
+
data[key].forEach(() => { });
|
|
232
|
+
}
|
|
233
|
+
else if (control instanceof FormGroup) {
|
|
234
|
+
control.reset(data[key]);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
return form;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1mb3Jtcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWNpYWwtZm9ybXMvc3JjL2xpYi9jb3JlL2Zvcm1zL3NwZWNpYWwtZm9ybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFZeEIsTUFBTSxPQUFPLGtCQUF5QyxTQUFRLFdBQVc7SUFnQnZFLFlBQVksRUFDVixJQUFJLEVBQ0osUUFBUSxFQUNSLElBQUksRUFDSixVQUFVLEVBQ1YsZUFBZSxFQUNmLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixJQUFJLEVBQ0osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLEVBQ1AsYUFBYSxFQUNiLFFBQVEsR0FDTztRQUNmLEtBQUssQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFB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QUFPLENBQUMsRUFBRSxFQUFFO1lBQ25ELElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtnQkFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3QjtpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7YUFDN0I7aUJBQU0sSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFQ29udHJvbFR5cGVzIH0gZnJvbSAnLi4vYXV4LWRhdGEvY29udHJvbC10eXBlcy5lbnVtJztcclxuaW1wb3J0IHsgSUZpZWxkQmFzaWNEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9maWVsZC1iYXNpY3MuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7XHJcbiAgSUFycmF5U2V0dGluZ3MsXHJcbiAgSUZvcm1TZXR0aW5ncyxcclxuICBUU3BlY2lhbEZpZWxkcyxcclxuICBUU3BlY2lhbEZvcm0sXHJcbiAgVFNwZWNpYWxBcnJheSxcclxuICBUUmF3RmllbGRzLFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS5pbnRlcmZhY2VzJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5leHBvcnQgY2xhc3MgU3BlY2lhbEZvcm1Db250cm9sPFQgZXh0ZW5kcyBUUmF3RmllbGRzPiBleHRlbmRzIEZvcm1Db250cm9sIHtcclxuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogVFsncGxhY2Vob2xkZXInXTtcclxuICBwdWJsaWMgbGFiZWw6IFRbJ2xhYmVsJ107XHJcbiAgcHVibGljIHRvb2x0aXA6IFRbJ3Rvb2x0aXAnXTtcclxuICBwdWJsaWMgaWNvbjogVFsnaWNvbiddO1xyXG4gIHB1YmxpYyBlbGVtZW50SWQ6IFRbJ2VsZW1lbnRJZCddO1xyXG4gIHB1YmxpYyBzdHlsZUNsYXNzZXM6IFRbJ3N0eWxlQ2xhc3NlcyddO1xyXG4gIHB1YmxpYyBsZW5ndGg6IFRbJ2xlbmd0aCddO1xyXG4gIHB1YmxpYyByZXF1aXJlZDogVFsncmVxdWlyZWQnXTtcclxuICBwdWJsaWMgaGlkZGVuOiBUWydoaWRkZW4nXTtcclxuICBwdWJsaWMgcmVhZE9ubHk6IFRbJ3JlYWRPbmx5J107XHJcbiAgcHVibGljIHNldHRpbmdzOiBUWydzZXR0aW5ncyddO1xyXG4gIHB1YmxpYyB0eXBlOiBUWyd0eXBlJ107XHJcbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IFRbJ2Vycm9yTWVzc2FnZXMnXTtcclxuXHJcbiAgY29uc3RydWN0b3Ioe1xyXG4gICAgbmFtZSxcclxuICAgIHNldHRpbmdzLFxyXG4gICAgdHlwZSxcclxuICAgIHZhbGlkYXRvcnMsXHJcbiAgICBhc3luY1ZhbGlkYXRvcnMsXHJcbiAgICBlbGVtZW50SWQsXHJcbiAgICBzdHlsZUNsYXNzZXMsXHJcbiAgICBkZWZhdWx0VmFsdWUsXHJcbiAgICBoaWRkZW4sXHJcbiAgICBpY29uLFxyXG4gICAgbGFiZWwsXHJcbiAgICBsZW5ndGgsXHJcbiAgICBwbGFjZWhvbGRlcixcclxuICAgIHJlYWRPbmx5LFxyXG4gICAgcmVxdWlyZWQsXHJcbiAgICB0b29sdGlwLFxyXG4gICAgZXJyb3JNZXNzYWdlcyxcclxuICAgIGRpc2FibGVkLFxyXG4gIH06IFRTcGVjaWFsRmllbGRzKSB7XHJcbiAgICBzdXBlcihkZWZhdWx0VmFsdWUsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycyk7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcclxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcclxuICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLmljb24gPSBpY29uO1xyXG4gICAgdGhpcy5lbGVtZW50SWQgPSBlbGVtZW50SWQ7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5zdHlsZUNsYXNzZXMgPSBzdHlsZUNsYXNzZXM7XHJcbiAgICB0aGlzLmhpZGRlbiA9IGhpZGRlbjtcclxuICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlcztcclxuICAgIGRpc2FibGVkID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkoc3RhdHVzOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHN0YXR1cyA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIHNldEhpZGRlbihzdGF0dXMgPSB0cnVlKSB7XHJcbiAgICB0aGlzLmhpZGRlbiA9IHN0YXR1cztcclxuICB9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFNwZWNpYWxGb3JtR3JvdXAgZXh0ZW5kcyBGb3JtR3JvdXB7XHJcbiAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuICBwdWJsaWMgdG9vbHRpcDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XHJcbiAgcHVibGljIGVsZW1lbnRJZDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHlsZUNsYXNzZXM6IHN0cmluZztcclxuICBwdWJsaWMgbGVuZ3RoOiBudW1iZXI7XHJcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBzZXR0aW5nczogSUZvcm1TZXR0aW5ncztcclxuICBwdWJsaWMgdHlwZTogRUNvbnRyb2xUeXBlcy5mb3JtO1xyXG4gIHB1YmxpYyBkZWZhdWx0VmFsdWU6IGFueTtcclxuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHNldHRpbmdzLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICB2YWxpZGF0b3JzLFxyXG4gICAgICBhc3luY1ZhbGlkYXRvcnMsXHJcbiAgICAgIGVsZW1lbnRJZCxcclxuICAgICAgc3R5bGVDbGFzc2VzLFxyXG4gICAgICBkZWZhdWx0VmFsdWUsXHJcbiAgICAgIGhpZGRlbixcclxuICAgICAgaWNvbixcclxuICAgICAgbGFiZWwsXHJcbiAgICAgIGxlbmd0aCxcclxuICAgICAgcGxhY2Vob2xkZXIsXHJcbiAgICAgIHJlYWRPbmx5LFxyXG4gICAgICByZXF1aXJlZCxcclxuICAgICAgdG9vbHRpcCxcclxuICAgICAgZGlzYWJsZWQsXHJcbiAgICB9OiBUU3BlY2lhbEZvcm0sXHJcbiAgICBjb250cm9sczoge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBTcGVjaWFsRm9ybUNvbnRyb2w8YW55PjtcclxuICAgIH1cclxuICApIHtcclxuICAgIHN1cGVyKGNvbnRyb2xzLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XHJcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XHJcbiAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgdGhpcy5pY29uID0gaWNvbjtcclxuICAgIHRoaXMuZWxlbWVudElkID0gZWxlbWVudElkO1xyXG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuc3R5bGVDbGFzc2VzID0gc3R5bGVDbGFzc2VzO1xyXG4gICAgdGhpcy5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICAgIHRoaXMucmVxdWlyZWQgPSByZXF1aXJlZDtcclxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgZGlzYWJsZWQgPyB0aGlzLmRpc2FibGUoKSA6IHRoaXMuZW5hYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXREaXJ0eSgpIHtcclxuICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jb250cm9scykuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wuZ2V0RGlydHkoKTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1BcnJheSkge1xyXG4gICAgICAgIGNvbnRyb2wuZ2V0RGlydHkoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzcGVjaWFsUmVzZXQodmFsdWUgPSB7fSkge1xyXG4gICAgY29uc3QgYXV4OiBhbnkgPSB7fTtcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpLm1hcCgoW2tleSwgY29udHJvbF0pID0+IHtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBhdXhba2V5XSA9IGNvbnRyb2wuZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5KSB7XHJcbiAgICAgICAgY29udHJvbC5jbGVhcigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc2V0KHsgLi4uYXV4LCAuLi52YWx1ZSB9KTtcclxuICB9XHJcblxyXG4gIHNldFJlYWRPbmx5KHN0YXR1czogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jb250cm9scykubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wgfHxcclxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQXJyYXkgfHxcclxuICAgICAgICB2YWx1ZSBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtR3JvdXBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdmFsdWUuc2V0UmVhZE9ubHkoc3RhdHVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seUJ5RmllbGRzKGZpZWxkc09iamVjdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pIHtcclxuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc09iamVjdCkubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbHNba2V5XTtcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLnJlYWRPbmx5ID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SGlkZGVuQnlGaWVsZHMoZmllbGRzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSkge1xyXG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sc1trZXldO1xyXG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnRyb2wuaGlkZGVuID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWQoc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udHJvbHMpLm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Db250cm9sIHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5IHx8XHJcbiAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUdyb3VwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZhbHVlLnNldERpc2FibGVkKHN0YXR1cyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRCeUZpZWxkcyhmaWVsZHNPYmplY3Q6IGFueSkge1xyXG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGRzT2JqZWN0KS5tYXAoKGVudHJpZXMpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udHJvbHNbZW50cmllc1swXV0gaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBlbnRyaWVzWzFdXHJcbiAgICAgICAgICA/IHRoaXMuY29udHJvbHNbZW50cmllc1swXV0uZW5hYmxlKClcclxuICAgICAgICAgIDogdGhpcy5jb250cm9sc1tlbnRyaWVzWzBdXS5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZG9uZGUgdmFsdWUgZXMgZWwgb2JqZXRvIHNlbWlsbGEgeSBkZXRhaWxGb3JtIGVzIHVuIGFycmVnbG8gZGUgZm9ybSBrZXkgcGFyYSBkYXIgdW4gbWFyY28gYWwgZm9ybWFycmF5XHJcbiAgICovXHJcblxyXG4gIHNldEZvcm1WYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNwZWNpYWxSZXNldCh2YWx1ZSk7XHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKVxyXG4gICAgICAuZmlsdGVyKChbX2tleSwgY29udHJvbF0pID0+IGNvbnRyb2wgaW5zdGFuY2VvZiBTcGVjaWFsRm9ybUFycmF5KVxyXG4gICAgICAubWFwKChba2V5LCBjb250cm9sXSkgPT4ge1xyXG4gICAgICAgIChjb250cm9sIGFzIFNwZWNpYWxGb3JtQXJyYXkpLmZpbGxGb3JtQXJyYXkodmFsdWVba2V5XSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBxdWUgcmV0b3JuYVxyXG4gICAqL1xyXG5cclxuICBnZXRJZFBrZXkoKTogU3BlY2lhbEZvcm1Db250cm9sPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb250cm9scykuZmluZChcclxuICAgICAgKGNvbnRyb2wpID0+XHJcbiAgICAgICAgY29udHJvbCBpbnN0YW5jZW9mIFNwZWNpYWxGb3JtQ29udHJvbCAmJiBjb250cm9sLnR5cGUgPT09ICdQUklNQVJZLUtFWSdcclxuICAgICkgYXMgU3BlY2lhbEZvcm1Db250cm9sPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3BlY2lhbEZvcm1BcnJheSBleHRlbmRzIEZvcm1BcnJheSBpbXBsZW1lbnRzIElGaWVsZEJhc2ljRGF0YSB7XHJcbiAgcHVibGljIG5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuICBwdWJsaWMgdG9vbHRpcDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XHJcbiAgcHVibGljIGVsZW1lbnRJZDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHlsZUNsYXNzZXM6IHN0cmluZztcclxuICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgcHVibGljIHNldHRpbmdzOiBJQXJyYXlTZXR0aW5ncztcclxuICBwdWJsaWMgdHlwZTogRUNvbnRyb2xUeXBlcztcclxuICBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnk7XHJcbiAgcHVibGljIGZvcm06IFNwZWNpYWxGb3JtR3JvdXA7XHJcbiAgcHJpdmF0ZSBmb3JtQ3JlYXRpb246ICh2YWx1ZT86IGFueSkgPT4gU3BlY2lhbEZvcm1Hcm91cDtcclxuICBwdWJsaWMgZXJyb3JNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHNldHRpbmdzLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICB2YWxpZGF0b3JzLFxyXG4gICAgICBhc3luY1ZhbGlkYXRvcnMsXHJcbiAgICAgIGVsZW1lbnRJZCxcclxuICAgICAgc3R5bGVDbGFzc2VzLFxyXG4gICAgICBkZWZhdWx0VmFsdWUsXHJcbiAgICAgIGhpZGRlbixcclxuICAgICAgaWNvbixcclxuICAgICAgbGFiZWwsXHJcbiAgICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgICByZWFkT25seSxcclxuICAgICAgcmVxdWlyZWQsXHJcbiAgICAgIHRvb2x0aXAsXHJcbiAgICAgIGVycm9yTWVzc2FnZXMsXHJcbiAgICAgIGRpc2FibGVkLFxyXG4gICAgfTogVFNwZWNpYWxBcnJheSxcclxuICAgIGZvcm1DcmVhdGlvbjogKCkgPT4gU3BlY2lhbEZvcm1Hcm91cCxcclxuICAgIGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29udHJvbHMsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLmZvcm1DcmVhdGlvbiA9IGZvcm1DcmVhdGlvbjtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUNyZWF0aW9uKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xyXG4gICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaWNvbiA9IGljb247XHJcbiAgICB0aGlzLmVsZW1lbnRJZCA9IGVsZW1lbnRJZDtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnN0eWxlQ2xhc3NlcyA9IHN0eWxlQ2xhc3NlcztcclxuICAgIHRoaXMuaGlkZGVuID0gaGlkZGVuO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkO1xyXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBlcnJvck1lc3NhZ2VzO1xyXG4gICAgZGlzYWJsZWQgPyB0aGlzLmRpc2FibGUoKSA6IHRoaXMuZW5hYmxlKCk7XHJcbiAgfVxyXG5cclxuICBmaWxsRm9ybUFycmF5KGRhdGE6IGFueVtdKSB7XHJcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIGRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ3JlYXRpb24oaXRlbSk7XHJcbiAgICAgIHRoaXMucHVzaChmb3JtKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbSgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbih0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5mb3JtLnNwZWNpYWxSZXNldCgpO1xyXG4gICAgdGhpcy5wdXNoKGZvcm0pO1xyXG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbFB1c2goaW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbih0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgaWYgKCFpbmRleCkgdGhpcy5wdXNoKGZvcm0pO1xyXG4gICAgZWxzZSB0aGlzLmNvbnRyb2xzW2luZGV4XS5yZXNldCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbEluc2VydChpbmRleCA9IDApIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1DcmVhdGlvbih0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5pbnNlcnQoaW5kZXgsIGZvcm0pO1xyXG4gIH1cclxuXHJcbiAgc3BlY2lhbEVkaXQoaW5kZXg6IG51bWJlciwgbmV3VmFsdWU6IE9iamVjdCkge1xyXG4gICAgdGhpcy5jb250cm9sc1tpbmRleF0ucmVzZXQoeyAuLi50aGlzLmNvbnRyb2xzW2luZGV4XS52YWx1ZSwgLi4ubmV3VmFsdWUgfSk7XHJcbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWdWVsdmUgdG9kb3MgbG9zIGNvbnRyb2xlcyBkZWwgZm9ybUFycmF5IGRlIGxlY3R1cmEgbyBkZSBzb2xvbGVjdHVyYVxyXG4gICAqIEBwYXJhbSBzdGF0dXNcclxuICAgKi9cclxuXHJcbiAgc2V0UmVhZE9ubHkoc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gc3RhdHVzO1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0UmVhZE9ubHkoc3RhdHVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWdWVsdmUgdG9kb3MgbG9zIGNvbnRyb2xlcyBkZWwgZm9ybUFycmF5IGhhYmlsaXRhZG9zIG8gZGVzaGFiaWxpdGFkb3NcclxuICAgKiBAcGFyYW0gc3RhdHVzXHJcbiAgICovXHJcblxyXG4gIHNldERpc2FibGVkKHN0YXR1czogYm9vbGVhbikge1xyXG4gICAgc3RhdHVzID8gdGhpcy5kaXNhYmxlKCkgOiB0aGlzLmVuYWJsZSgpO1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BlY2lhbEZvcm1Hcm91cCkge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0RGlzYWJsZWQoc3RhdHVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJtaXRlIGVkaXRhciB1biBjb250cm9sIGVzcGVjaWZpY28uXHJcbiAgICogQHBhcmFtIGluZGV4XHJcbiAgICovXHJcblxyXG4gIGVkaXRDb250cm9sKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZm9ybS5yZXNldCh0aGlzLmNvbnRyb2xzW2luZGV4XS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXREaXJ0eSgpIHtcclxuICAgIHRoaXMubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuZm9ybS5nZXREaXJ0eSgpO1xyXG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICg8U3BlY2lhbEZvcm1Hcm91cD5pdGVtKS5nZXREaXJ0eSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWN1cnNpdmVGaWxsRm9ybShmb3JtOiBGb3JtR3JvdXAsIGRhdGE6IGFueSk6IEZvcm1Hcm91cCB7XHJcbiAgICBPYmplY3QuZW50cmllcyhmb3JtLmNvbnRyb2xzKS5tYXAoKFtrZXksIGNvbnRyb2xdKSA9PiB7XHJcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKGRhdGFba2V5XSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgIGRhdGFba2V5XS5mb3JFYWNoKCgpID0+IHt9KTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgY29udHJvbC5yZXNldChkYXRhW2tleV0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtYmFzaWNzLmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjaWFsLWZvcm1zL3NyYy9saWIvY29yZS9pbnRlcmZhY2VzL2ZpZWxkLWJhc2ljcy5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpZWxkQmFzaWNEYXRhIHtcclxuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdG9vbHRpcDogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxuICBlbGVtZW50SWQ6IHN0cmluZztcclxuICBzdHlsZUNsYXNzZXM6IHN0cmluZztcclxuICBsZW5ndGg6IG51bWJlcjtcclxuICByZXF1aXJlZDogYm9vbGVhbjtcclxuICBoaWRkZW46IGJvb2xlYW47XHJcbiAgcmVhZE9ubHk6IGJvb2xlYW47XHJcbiAgZGlzYWJsZWQ6Ym9vbGVhbjtcclxuICBlcnJvck1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZERhdGEgZXh0ZW5kcyBJRmllbGRCYXNpY0RhdGEge1xyXG4gIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGw7XHJcbiAgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuIHwgQXN5bmNWYWxpZGF0b3JGbltdIHwgbnVsbDtcclxuICBkZWZhdWx0VmFsdWU6IGFueTtcclxufVxyXG4iXX0=
|