dts-backoffice-util 18.2.1 → 19.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/README.md +71 -30
- package/fesm2022/dts-backoffice-util.mjs +87 -63
- package/fesm2022/dts-backoffice-util.mjs.map +1 -1
- package/lib/components/totvs-map/totvs-map.component.d.ts +5 -2
- package/package.json +4 -6
- package/esm2022/dts-backoffice-util.mjs +0 -5
- package/esm2022/lib/components/totvs-map/totvs-map.component.mjs +0 -74
- package/esm2022/lib/components/totvs-schedule-execution/totvs-schedule-execution.component.mjs +0 -305
- package/esm2022/lib/components/totvs-schedule-execution/totvs-schedule-execution.model.mjs +0 -7
- package/esm2022/lib/components/totvs-schedule-execution/totvs-schedule-execution.service.mjs +0 -208
- package/esm2022/lib/dts-backoffice-util.module.mjs +0 -57
- package/esm2022/lib/interfaces/filter-range.interface.mjs +0 -2
- package/esm2022/lib/interfaces/totvs-response.interface.mjs +0 -2
- package/esm2022/lib/model/session-info.model.mjs +0 -67
- package/esm2022/lib/pipes/dts-date-format.pipe.mjs +0 -20
- package/esm2022/lib/services/breadcrumb-control.service.mjs +0 -99
- package/esm2022/lib/services/cache-params.service.mjs +0 -25
- package/esm2022/lib/services/menu-datasul.service.mjs +0 -118
- package/esm2022/lib/services/profile.service.mjs +0 -55
- package/esm2022/lib/services/report.service.mjs +0 -57
- package/esm2022/lib/services/session-info.service.mjs +0 -36
- package/esm2022/lib/services/translate.service.mjs +0 -23
- package/esm2022/lib/services/validate.service.mjs +0 -42
- package/esm2022/lib/utils/date.util.mjs +0 -56
- package/esm2022/lib/utils/disclaimer.util.mjs +0 -490
- package/esm2022/lib/utils/field-validation.util.mjs +0 -179
- package/esm2022/lib/utils/file.util.mjs +0 -151
- package/esm2022/lib/utils/filter-range.util.mjs +0 -33
- package/esm2022/lib/utils/generic-functions.utils.mjs +0 -170
- package/esm2022/public-api.mjs +0 -40
|
@@ -1,490 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Versão: 1.009
|
|
3
|
-
Data Criação: 06/08/2018
|
|
4
|
-
*/
|
|
5
|
-
export class DisclaimerUtil {
|
|
6
|
-
constructor(poNotification, poI18nPipe, literals) {
|
|
7
|
-
this.literals = {};
|
|
8
|
-
this.poNotification = poNotification;
|
|
9
|
-
this.poI18nPipe = poI18nPipe;
|
|
10
|
-
this.literals = literals;
|
|
11
|
-
}
|
|
12
|
-
makeDisclaimer(property, value, hideClose = false, tradValue = false, vldBlank = false) {
|
|
13
|
-
if (value === null || value === undefined) {
|
|
14
|
-
return { label: '', property: '', value: '' };
|
|
15
|
-
}
|
|
16
|
-
if (vldBlank && value === '') {
|
|
17
|
-
return { label: '', property: '', value: '' };
|
|
18
|
-
}
|
|
19
|
-
return {
|
|
20
|
-
hideClose,
|
|
21
|
-
label: `${this.literals[property]}: ${tradValue ? this.literals[value] : value}`,
|
|
22
|
-
property: `${property}`,
|
|
23
|
-
value: `${value}`
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
makeDisclaimerFromNumber(property, value, hideClose = false, vldBlank = false) {
|
|
27
|
-
if (value === null || value === undefined) {
|
|
28
|
-
return { label: '', property: '', value: '' };
|
|
29
|
-
}
|
|
30
|
-
if (vldBlank && value === 0) {
|
|
31
|
-
return { label: '', property: '', value: '' };
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
hideClose,
|
|
35
|
-
label: `${this.literals[property]}: ${value}`,
|
|
36
|
-
property: `${property}`,
|
|
37
|
-
value: `${value}`
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
makeDisclaimerFromBoolean(property, value, hideClose = false) {
|
|
41
|
-
if (value === null || value === undefined) {
|
|
42
|
-
return { label: '', property: '', value: '' };
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
hideClose,
|
|
46
|
-
label: `${this.literals[property]}: ${value ? this.literals['yes'] : this.literals['no']}`,
|
|
47
|
-
property: `${property}`,
|
|
48
|
-
value: `${value}`
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
makeDisclaimerFromDate(property, value, hideClose = false) {
|
|
52
|
-
const dDate = this.ajustDate(value);
|
|
53
|
-
if (!this.isValidDate(dDate)) {
|
|
54
|
-
return { label: '', property: '', value: '' };
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
hideClose,
|
|
58
|
-
label: `${this.literals[property]}: ${dDate.toLocaleDateString()}`,
|
|
59
|
-
property: `${property}`,
|
|
60
|
-
value: `${this.dateToQueryParam(dDate)}`
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
makeDisclaimerFromMultiSelect(property, value, length = 0, hideClose = false, tradValue = false) {
|
|
64
|
-
let lstLabels = '';
|
|
65
|
-
let lstValues = '';
|
|
66
|
-
if (!value) {
|
|
67
|
-
return { label: '', property: '', value: '' };
|
|
68
|
-
}
|
|
69
|
-
if (value.length === 0 || (length > 0 && value.length === length)) {
|
|
70
|
-
lstLabels = this.literals['all'];
|
|
71
|
-
lstValues = 'all';
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
value.map(item => {
|
|
75
|
-
if (lstLabels !== '') {
|
|
76
|
-
lstLabels = `${lstLabels}, `;
|
|
77
|
-
}
|
|
78
|
-
if (lstValues !== '') {
|
|
79
|
-
lstValues = `${lstValues},`;
|
|
80
|
-
}
|
|
81
|
-
lstLabels = `${lstLabels}${tradValue ? this.literals[item] : item}`;
|
|
82
|
-
lstValues = `${lstValues}${item}`;
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
hideClose,
|
|
87
|
-
label: `${this.literals[property]}: ${lstLabels}`,
|
|
88
|
-
property: `${property}`,
|
|
89
|
-
value: `${lstValues}`
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
makeDisclaimerFromMultiSelectNumber(property, value, options, length = 0, hideClose = false) {
|
|
93
|
-
let lstLabels = '';
|
|
94
|
-
let lstValues = '';
|
|
95
|
-
let opt = null;
|
|
96
|
-
if (!value || !options) {
|
|
97
|
-
return { label: '', property: '', value: '' };
|
|
98
|
-
}
|
|
99
|
-
if (value.length === 0 || (length > 0 && value.length === length)) {
|
|
100
|
-
lstLabels = this.literals['all'];
|
|
101
|
-
lstValues = 'all';
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
value.map(item => {
|
|
105
|
-
if (lstLabels !== '') {
|
|
106
|
-
lstLabels = `${lstLabels}, `;
|
|
107
|
-
}
|
|
108
|
-
if (lstValues !== '') {
|
|
109
|
-
lstValues = `${lstValues},`;
|
|
110
|
-
}
|
|
111
|
-
opt = options.find(itOpt => itOpt.value === item);
|
|
112
|
-
lstLabels = `${lstLabels}${opt ? opt.label : item}`;
|
|
113
|
-
lstValues = `${lstValues}${item}`;
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
return {
|
|
117
|
-
hideClose,
|
|
118
|
-
label: `${this.literals[property]}: ${lstLabels}`,
|
|
119
|
-
property: `${property}`,
|
|
120
|
-
value: `${lstValues}`
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
makeDisclaimerFromCheckboxGroup(property, value, length = 0, hideClose = false) {
|
|
124
|
-
let lstLabels = '';
|
|
125
|
-
let lstValues = '';
|
|
126
|
-
if (!value) {
|
|
127
|
-
return { label: '', property: '', value: '' };
|
|
128
|
-
}
|
|
129
|
-
if (value.length === 0) {
|
|
130
|
-
lstLabels = this.literals['none'];
|
|
131
|
-
lstValues = 'none';
|
|
132
|
-
}
|
|
133
|
-
else if (length > 0 && value.length === length) {
|
|
134
|
-
lstLabels = this.literals['all'];
|
|
135
|
-
lstValues = 'all';
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
value.map(checkParam => {
|
|
139
|
-
if (lstLabels !== '') {
|
|
140
|
-
lstLabels = `${lstLabels}, `;
|
|
141
|
-
}
|
|
142
|
-
if (lstValues !== '') {
|
|
143
|
-
lstValues = `${lstValues},`;
|
|
144
|
-
}
|
|
145
|
-
lstLabels = `${lstLabels}${this.literals[checkParam]}`;
|
|
146
|
-
lstValues = `${lstValues}${checkParam}`;
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
return {
|
|
150
|
-
hideClose,
|
|
151
|
-
label: `${this.literals[property]}: ${lstLabels}`,
|
|
152
|
-
property: `${property}`,
|
|
153
|
-
value: `${lstValues}`
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
makeDisclaimerFromRangeCharacter(property, value, hideClose = false, validateEqual = true) {
|
|
157
|
-
if (value.valInitial === null || value.valInitial === undefined) {
|
|
158
|
-
value.valInitial = value.iniInitial;
|
|
159
|
-
}
|
|
160
|
-
if (value.valFinal === null || value.valFinal === undefined) {
|
|
161
|
-
value.valFinal = value.iniFinal;
|
|
162
|
-
}
|
|
163
|
-
if (validateEqual &&
|
|
164
|
-
value.iniInitial === value.valInitial &&
|
|
165
|
-
value.iniFinal === value.valFinal) {
|
|
166
|
-
return { label: '', property: '', value: '' };
|
|
167
|
-
}
|
|
168
|
-
return {
|
|
169
|
-
hideClose,
|
|
170
|
-
label: this.poI18nPipe.transform(this.literals['filterRange'], [this.literals[property], `'${value.valInitial}'`, `'${value.valFinal}'`]),
|
|
171
|
-
property: `${property}`,
|
|
172
|
-
value: `${value.valInitial};${value.valFinal}`
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
makeDisclaimerFromRangeNumber(property, value, hideClose = false, validateEqual = true) {
|
|
176
|
-
if (value.valInitial === null || value.valInitial === undefined) {
|
|
177
|
-
value.valInitial = value.iniInitial;
|
|
178
|
-
}
|
|
179
|
-
if (value.valFinal === null || value.valFinal === undefined) {
|
|
180
|
-
value.valFinal = value.iniFinal;
|
|
181
|
-
}
|
|
182
|
-
if (validateEqual &&
|
|
183
|
-
value.iniInitial === value.valInitial &&
|
|
184
|
-
value.iniFinal === value.valFinal) {
|
|
185
|
-
return { label: '', property: '', value: '' };
|
|
186
|
-
}
|
|
187
|
-
return {
|
|
188
|
-
hideClose,
|
|
189
|
-
label: this.poI18nPipe.transform(this.literals['filterRange'], [this.literals[property], value.valInitial, value.valFinal]),
|
|
190
|
-
property: `${property}`,
|
|
191
|
-
value: `${value.valInitial};${value.valFinal}`
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
makeDisclaimerFromDatepickerRange(property, value, hideClose = false) {
|
|
195
|
-
if (!value) {
|
|
196
|
-
return { label: '', property: '', value: '' };
|
|
197
|
-
}
|
|
198
|
-
let filterRangeDate = {
|
|
199
|
-
iniInitial: new Date(1900, 1, 1),
|
|
200
|
-
valInitial: this.ajustDate(value.start),
|
|
201
|
-
iniFinal: new Date(9999, 11, 31),
|
|
202
|
-
valFinal: this.ajustDate(value.end)
|
|
203
|
-
};
|
|
204
|
-
return this.makeDisclaimerFromRangeDate(property, filterRangeDate, hideClose, true);
|
|
205
|
-
}
|
|
206
|
-
makeDisclaimerFromRangeDate(property, value, hideClose = false, validateEqual = true) {
|
|
207
|
-
let valInitDate = this.ajustDate(value.valInitial);
|
|
208
|
-
let valFinalDate = this.ajustDate(value.valFinal);
|
|
209
|
-
if (!this.isValidDate(valInitDate)) {
|
|
210
|
-
valInitDate = value.iniInitial;
|
|
211
|
-
value.valInitial = value.iniInitial;
|
|
212
|
-
}
|
|
213
|
-
if (!this.isValidDate(valFinalDate)) {
|
|
214
|
-
valFinalDate = value.iniFinal;
|
|
215
|
-
value.valFinal = value.iniFinal;
|
|
216
|
-
}
|
|
217
|
-
if (validateEqual &&
|
|
218
|
-
this.dateToQueryParam(value.iniInitial) === this.dateToQueryParam(valInitDate) &&
|
|
219
|
-
this.dateToQueryParam(value.iniFinal) === this.dateToQueryParam(valFinalDate)) {
|
|
220
|
-
return { label: '', property: '', value: '' };
|
|
221
|
-
}
|
|
222
|
-
return {
|
|
223
|
-
hideClose,
|
|
224
|
-
label: this.poI18nPipe.transform(this.literals['filterRange'], [this.literals[property], valInitDate.toLocaleDateString(), valFinalDate.toLocaleDateString()]),
|
|
225
|
-
property: `${property}`,
|
|
226
|
-
value: `${this.dateToQueryParam(valInitDate)};${this.dateToQueryParam(valFinalDate)}`
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
atzCharFromDisclamer(disclaimers, property, defaultValue) {
|
|
230
|
-
let returnValue = defaultValue;
|
|
231
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
232
|
-
disclaimers.find((item) => {
|
|
233
|
-
if (item.property === property) {
|
|
234
|
-
if (item.value === null) {
|
|
235
|
-
return false;
|
|
236
|
-
}
|
|
237
|
-
returnValue = item.value;
|
|
238
|
-
return true;
|
|
239
|
-
}
|
|
240
|
-
return false;
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
return returnValue;
|
|
244
|
-
}
|
|
245
|
-
atzNumberFromDisclamer(disclaimers, property, defaultValue) {
|
|
246
|
-
let returnValue = defaultValue;
|
|
247
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
248
|
-
disclaimers.find((item) => {
|
|
249
|
-
if (item.property === property) {
|
|
250
|
-
if (item.value === null) {
|
|
251
|
-
return false;
|
|
252
|
-
}
|
|
253
|
-
returnValue = item.value;
|
|
254
|
-
return true;
|
|
255
|
-
}
|
|
256
|
-
return false;
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
return returnValue;
|
|
260
|
-
}
|
|
261
|
-
atzBooleanFromDisclamer(disclaimers, property, defaultValue) {
|
|
262
|
-
const returnValue = defaultValue;
|
|
263
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
264
|
-
const disclaimerFind = disclaimers.find((item) => item.property === property);
|
|
265
|
-
if (disclaimerFind && disclaimerFind.value !== null && disclaimerFind.value !== undefined) {
|
|
266
|
-
if (disclaimerFind.value === 'true') {
|
|
267
|
-
return true;
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
return returnValue;
|
|
275
|
-
}
|
|
276
|
-
atzDateFromDisclamer(disclaimers, property, defaultValue) {
|
|
277
|
-
let returnValue = this.ajustDate(defaultValue);
|
|
278
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
279
|
-
disclaimers.find((item) => {
|
|
280
|
-
if (item.property === property) {
|
|
281
|
-
if (item.value === null) {
|
|
282
|
-
return false;
|
|
283
|
-
}
|
|
284
|
-
returnValue = this.ajustDate(item.value);
|
|
285
|
-
return true;
|
|
286
|
-
}
|
|
287
|
-
return false;
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
return returnValue;
|
|
291
|
-
}
|
|
292
|
-
atzMultiSelectCharFromDisclamer(disclaimers, property, defaultValue) {
|
|
293
|
-
return this.atzMultiSelectFromDisclamer('char', disclaimers, property, defaultValue);
|
|
294
|
-
}
|
|
295
|
-
atzMultiSelectNumberFromDisclamer(disclaimers, property, defaultValue) {
|
|
296
|
-
return this.atzMultiSelectFromDisclamer('number', disclaimers, property, defaultValue);
|
|
297
|
-
}
|
|
298
|
-
atzMultiSelectFromDisclamer(type, disclaimers, property, defaultValue) {
|
|
299
|
-
let returnValue = [];
|
|
300
|
-
defaultValue.map(item => {
|
|
301
|
-
returnValue.push(item.value);
|
|
302
|
-
});
|
|
303
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
304
|
-
disclaimers.find((item) => {
|
|
305
|
-
if (item.property === property) {
|
|
306
|
-
if (item.value === null || item.value === 'all' || item.value === 'none') {
|
|
307
|
-
return false;
|
|
308
|
-
}
|
|
309
|
-
returnValue = [];
|
|
310
|
-
item.value.split(',').forEach(itemOpt => {
|
|
311
|
-
if (type === 'char') {
|
|
312
|
-
returnValue.push(itemOpt);
|
|
313
|
-
}
|
|
314
|
-
if (type === 'number') {
|
|
315
|
-
returnValue.push(+itemOpt);
|
|
316
|
-
}
|
|
317
|
-
});
|
|
318
|
-
return true;
|
|
319
|
-
}
|
|
320
|
-
return false;
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
return returnValue;
|
|
324
|
-
}
|
|
325
|
-
atzCheckboxFromDisclamer(disclaimers, property, options) {
|
|
326
|
-
let returnValue = [];
|
|
327
|
-
options.map(item => {
|
|
328
|
-
returnValue.push(item.value);
|
|
329
|
-
});
|
|
330
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
331
|
-
disclaimers.find((item) => {
|
|
332
|
-
if (item.property === property) {
|
|
333
|
-
if (item.value === null || item.value === 'all' || item.value === 'none') {
|
|
334
|
-
return false;
|
|
335
|
-
}
|
|
336
|
-
returnValue = [];
|
|
337
|
-
item.value.split(',').forEach(itemOpt => {
|
|
338
|
-
returnValue.push(itemOpt);
|
|
339
|
-
});
|
|
340
|
-
return true;
|
|
341
|
-
}
|
|
342
|
-
return false;
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
return returnValue;
|
|
346
|
-
}
|
|
347
|
-
atzRangeCharFromDisclamer(disclaimers, property, rangeChar) {
|
|
348
|
-
let value = '';
|
|
349
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
350
|
-
disclaimers.find((item) => {
|
|
351
|
-
if (item.property === property) {
|
|
352
|
-
if (item.value === null) {
|
|
353
|
-
return false;
|
|
354
|
-
}
|
|
355
|
-
value = item.value;
|
|
356
|
-
return true;
|
|
357
|
-
}
|
|
358
|
-
return false;
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
return this.atzRangeCharFromQueryParam(value, rangeChar);
|
|
362
|
-
}
|
|
363
|
-
atzRangeNumFromDisclamer(disclaimers, property, rangeNum) {
|
|
364
|
-
let value = '';
|
|
365
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
366
|
-
disclaimers.find((item) => {
|
|
367
|
-
if (item.property === property) {
|
|
368
|
-
if (item.value === null) {
|
|
369
|
-
return false;
|
|
370
|
-
}
|
|
371
|
-
value = item.value;
|
|
372
|
-
return true;
|
|
373
|
-
}
|
|
374
|
-
return false;
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
return this.atzRangeNumFromQueryParam(value, rangeNum);
|
|
378
|
-
}
|
|
379
|
-
atzDatepickerRangeFromDisclamer(disclaimers, property, rangeDate) {
|
|
380
|
-
let filterRangeDate = {
|
|
381
|
-
iniInitial: null,
|
|
382
|
-
valInitial: rangeDate ? this.ajustDate(rangeDate.start) : null,
|
|
383
|
-
iniFinal: null,
|
|
384
|
-
valFinal: rangeDate ? this.ajustDate(rangeDate.end) : null
|
|
385
|
-
};
|
|
386
|
-
filterRangeDate = this.atzRangeDateFromDisclamer(disclaimers, property, filterRangeDate);
|
|
387
|
-
if (filterRangeDate.valInitial === null || filterRangeDate.valFinal === null) {
|
|
388
|
-
return null;
|
|
389
|
-
}
|
|
390
|
-
return {
|
|
391
|
-
start: filterRangeDate.valInitial,
|
|
392
|
-
end: filterRangeDate.valFinal
|
|
393
|
-
};
|
|
394
|
-
}
|
|
395
|
-
atzRangeDateFromDisclamer(disclaimers, property, rangeDate) {
|
|
396
|
-
let value = '';
|
|
397
|
-
if (disclaimers && disclaimers.length > 0) {
|
|
398
|
-
disclaimers.find((item) => {
|
|
399
|
-
if (item.property === property) {
|
|
400
|
-
if (item.value === null) {
|
|
401
|
-
return false;
|
|
402
|
-
}
|
|
403
|
-
value = item.value;
|
|
404
|
-
return true;
|
|
405
|
-
}
|
|
406
|
-
return false;
|
|
407
|
-
});
|
|
408
|
-
}
|
|
409
|
-
return this.atzRangeDateFromQueryParam(value, rangeDate);
|
|
410
|
-
}
|
|
411
|
-
atzRangeCharFromQueryParam(value, rangeChar) {
|
|
412
|
-
rangeChar.valInitial = rangeChar.iniInitial;
|
|
413
|
-
rangeChar.valFinal = rangeChar.iniFinal;
|
|
414
|
-
if (!value || value === '') {
|
|
415
|
-
return rangeChar;
|
|
416
|
-
}
|
|
417
|
-
rangeChar.valInitial = value.split(';')[0];
|
|
418
|
-
rangeChar.valFinal = value.split(';')[1];
|
|
419
|
-
if (rangeChar.valFinal === null || rangeChar.valFinal === undefined) {
|
|
420
|
-
rangeChar.valFinal = rangeChar.iniFinal;
|
|
421
|
-
}
|
|
422
|
-
return rangeChar;
|
|
423
|
-
}
|
|
424
|
-
atzRangeNumFromQueryParam(value, rangeNum) {
|
|
425
|
-
rangeNum.valInitial = rangeNum.iniInitial;
|
|
426
|
-
rangeNum.valFinal = rangeNum.iniFinal;
|
|
427
|
-
if (!value || value === '') {
|
|
428
|
-
return rangeNum;
|
|
429
|
-
}
|
|
430
|
-
rangeNum.valInitial = +value.split(';')[0];
|
|
431
|
-
rangeNum.valFinal = +value.split(';')[1];
|
|
432
|
-
if (rangeNum.valFinal === null || rangeNum.valFinal === undefined) {
|
|
433
|
-
rangeNum.valFinal = rangeNum.iniFinal;
|
|
434
|
-
}
|
|
435
|
-
return rangeNum;
|
|
436
|
-
}
|
|
437
|
-
atzRangeDateFromQueryParam(value, rangeDate) {
|
|
438
|
-
rangeDate.valInitial = rangeDate.iniInitial;
|
|
439
|
-
rangeDate.valFinal = rangeDate.iniFinal;
|
|
440
|
-
if (!value || value === '') {
|
|
441
|
-
return rangeDate;
|
|
442
|
-
}
|
|
443
|
-
rangeDate.valInitial = this.queryParamToDate(value.split(';')[0]);
|
|
444
|
-
rangeDate.valFinal = this.queryParamToDate(value.split(';')[1]);
|
|
445
|
-
if (rangeDate.valFinal === null || rangeDate.valFinal === undefined) {
|
|
446
|
-
rangeDate.valFinal = rangeDate.iniFinal;
|
|
447
|
-
}
|
|
448
|
-
return rangeDate;
|
|
449
|
-
}
|
|
450
|
-
dateToQueryParam(date) {
|
|
451
|
-
if (date === null) {
|
|
452
|
-
return null;
|
|
453
|
-
}
|
|
454
|
-
const iDay = date.getDate();
|
|
455
|
-
const iMonth = date.getMonth() + 1;
|
|
456
|
-
const iYear = date.getFullYear();
|
|
457
|
-
return `${iYear}-${this.pad(iMonth)}-${this.pad(iDay)}`;
|
|
458
|
-
}
|
|
459
|
-
queryParamToDate(param) {
|
|
460
|
-
if (param === null) {
|
|
461
|
-
return null;
|
|
462
|
-
}
|
|
463
|
-
const iDay = +param.split('-')[2];
|
|
464
|
-
const iMonth = +param.split('-')[1];
|
|
465
|
-
const iYear = +param.split('-')[0];
|
|
466
|
-
return new Date(iYear, iMonth - 1, iDay);
|
|
467
|
-
}
|
|
468
|
-
isValidDate(date) {
|
|
469
|
-
return date instanceof Date && !isNaN(date.getTime());
|
|
470
|
-
}
|
|
471
|
-
ajustDate(param) {
|
|
472
|
-
if (param === null) {
|
|
473
|
-
return null;
|
|
474
|
-
}
|
|
475
|
-
if (param instanceof Date) {
|
|
476
|
-
return param;
|
|
477
|
-
}
|
|
478
|
-
if (!param) {
|
|
479
|
-
return param;
|
|
480
|
-
}
|
|
481
|
-
return this.queryParamToDate(param.split('T')[0]);
|
|
482
|
-
}
|
|
483
|
-
pad(number) {
|
|
484
|
-
if (number < 10) {
|
|
485
|
-
return '0' + number;
|
|
486
|
-
}
|
|
487
|
-
return number;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY2xhaW1lci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHRzLWJhY2tvZmZpY2UtdXRpbC9zcmMvbGliL3V0aWxzL2Rpc2NsYWltZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0VBR0U7QUFNRixNQUFNLE9BQU8sY0FBYztJQUt2QixZQUNJLGNBQXFDLEVBQ3JDLFVBQXNCLEVBQ3RCLFFBQWdCO1FBTHBCLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFPZixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWdCLEVBQUUsS0FBYSxFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxRQUFRLEdBQUcsS0FBSztRQUN6RyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLFFBQVEsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDM0IsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUVELE9BQU87WUFDSCxTQUFTO1lBQ1QsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxD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Q3JpYcOnw6NvOiAwNi8wOC8yMDE4XHJcbiovXHJcblxyXG5pbXBvcnQgeyBQb0Rpc2NsYWltZXIsIFBvSTE4blBpcGUsIFBvQ2hlY2tib3hHcm91cE9wdGlvbiwgUG9NdWx0aXNlbGVjdE9wdGlvbiwgUG9EYXRlcGlja2VyUmFuZ2UgfSBmcm9tICdAcG8tdWkvbmctY29tcG9uZW50cyc7XHJcbmltcG9ydCB7IElGaWx0ZXJSYW5nZUNoYXJhY3RlciwgSUZpbHRlclJhbmdlTnVtYmVyLCBJRmlsdGVyUmFuZ2VEYXRlIH0gZnJvbSAnLi4vLi4vbGliL2ludGVyZmFjZXMvZmlsdGVyLXJhbmdlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBEaXNjbGFpbWVyVXRpbCB7XHJcbiAgICBwb05vdGlmaWNhdGlvbjogUG9Ob3RpZmljYXRpb25TZXJ2aWNlO1xyXG4gICAgcG9JMThuUGlwZTogUG9JMThuUGlwZTtcclxuICAgIGxpdGVyYWxzOiBhbnkgPSB7fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwb05vdGlmaWNhdGlvbjogUG9Ob3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHBvSTE4blBpcGU6IFBvSTE4blBpcGUsXHJcbiAgICAgICAgbGl0ZXJhbHM6IE9iamVjdFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5wb05vdGlmaWNhdGlvbiA9IHBvTm90aWZpY2F0aW9uO1xyXG4gICAgICAgIHRoaXMucG9JMThuUGlwZSA9IHBvSTE4blBpcGU7XHJcbiAgICAgICAgdGhpcy5saXRlcmFscyA9IGxpdGVyYWxzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYWtlRGlzY2xhaW1lcihwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBoaWRlQ2xvc2UgPSBmYWxzZSwgdHJhZFZhbHVlID0gZmFsc2UsIHZsZEJsYW5rID0gZmFsc2UpOiBQb0Rpc2NsYWltZXIge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnLCB2YWx1ZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2bGRCbGFuayAmJiB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6ICcnLCBwcm9wZXJ0eTogJycsIHZhbHVlOiAnJyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaGlkZUNsb3NlLFxyXG4gICAgICAgICAgICBsYWJlbDogYCR7dGhpcy5saXRlcmFsc1twcm9wZXJ0eV19OiAke3RyYWRWYWx1ZSA/IHRoaXMubGl0ZXJhbHNbdmFsdWVdIDogdmFsdWV9YCxcclxuICAgICAgICAgICAgcHJvcGVydHk6IGAke3Byb3BlcnR5fWAsXHJcbiAgICAgICAgICAgIHZhbHVlOiBgJHt2YWx1ZX1gXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWFrZURpc2NsYWltZXJGcm9tTnVtYmVyKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGhpZGVDbG9zZSA9IGZhbHNlLCB2bGRCbGFuayA9IGZhbHNlKTogUG9EaXNjbGFpbWVyIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogJycsIHByb3BlcnR5OiAnJywgdmFsdWU6ICcnIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmxkQmxhbmsgJiYgdmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6ICcnLCBwcm9wZXJ0eTogJycsIHZhbHVlOiAnJyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaGlkZUNsb3NlLFxyXG4gICAgICAgICAgICBsYWJlbDogYCR7dGhpcy5saXRlcmFsc1twcm9wZXJ0eV19OiAke3ZhbHVlfWAsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBgJHtwcm9wZXJ0eX1gLFxyXG4gICAgICAgICAgICB2YWx1ZTogYCR7dmFsdWV9YFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VEaXNjbGFpbWVyRnJvbUJvb2xlYW4ocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4sIGhpZGVDbG9zZSA9IGZhbHNlKTogUG9EaXNjbGFpbWVyIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogJycsIHByb3BlcnR5OiAnJywgdmFsdWU6ICcnIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBoaWRlQ2xvc2UsXHJcbiAgICAgICAgICAgIGxhYmVsOiBgJHt0aGlzLmxpdGVyYWxzW3Byb3BlcnR5XX06ICR7dmFsdWUgPyB0aGlzLmxpdGVyYWxzWyd5ZXMnXSA6IHRoaXMubGl0ZXJhbHNbJ25vJ119YCxcclxuICAgICAgICAgICAgcHJvcGVydHk6IGAke3Byb3BlcnR5fWAsXHJcbiAgICAgICAgICAgIHZhbHVlOiBgJHt2YWx1ZX1gXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWFrZURpc2NsYWltZXJGcm9tRGF0ZShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogRGF0ZSwgaGlkZUNsb3NlID0gZmFsc2UpOiBQb0Rpc2NsYWltZXIge1xyXG4gICAgICAgIGNvbnN0IGREYXRlOiBEYXRlID0gdGhpcy5hanVzdERhdGUodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZERhdGUoZERhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnLCB2YWx1ZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGhpZGVDbG9zZSxcclxuICAgICAgICAgICAgbGFiZWw6IGAke3RoaXMubGl0ZXJhbHNbcHJvcGVydHldfTogJHtkRGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKX1gLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogYCR7cHJvcGVydHl9YCxcclxuICAgICAgICAgICAgdmFsdWU6IGAke3RoaXMuZGF0ZVRvUXVlcnlQYXJhbShkRGF0ZSl9YFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VEaXNjbGFpbWVyRnJvbU11bHRpU2VsZWN0KHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBBcnJheTxhbnk+LCBsZW5ndGggPSAwLFxyXG4gICAgICAgIGhpZGVDbG9zZSA9IGZhbHNlLCB0cmFkVmFsdWUgPSBmYWxzZSk6IFBvRGlzY2xhaW1lciB7XHJcbiAgICAgICAgbGV0IGxzdExhYmVscyA9ICcnO1xyXG4gICAgICAgIGxldCBsc3RWYWx1ZXMgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogJycsIHByb3BlcnR5OiAnJywgdmFsdWU6ICcnIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwIHx8IChsZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA9PT0gbGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBsc3RMYWJlbHMgPSB0aGlzLmxpdGVyYWxzWydhbGwnXTtcclxuICAgICAgICAgICAgbHN0VmFsdWVzID0gJ2FsbCc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxzdExhYmVscyAhPT0gJycpIHsgbHN0TGFiZWxzID0gYCR7bHN0TGFiZWxzfSwgYDsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGxzdFZhbHVlcyAhPT0gJycpIHsgbHN0VmFsdWVzID0gYCR7bHN0VmFsdWVzfSxgOyB9XHJcbiAgICAgICAgICAgICAgICBsc3RMYWJlbHMgPSBgJHtsc3RMYWJlbHN9JHt0cmFkVmFsdWUgPyB0aGlzLmxpdGVyYWxzW2l0ZW1dIDogaXRlbX1gO1xyXG4gICAgICAgICAgICAgICAgbHN0VmFsdWVzID0gYCR7bHN0VmFsdWVzfSR7aXRlbX1gO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGhpZGVDbG9zZSxcclxuICAgICAgICAgICAgbGFiZWw6IGAke3RoaXMubGl0ZXJhbHNbcHJvcGVydHldfTogJHtsc3RMYWJlbHN9YCxcclxuICAgICAgICAgICAgcHJvcGVydHk6IGAke3Byb3BlcnR5fWAsXHJcbiAgICAgICAgICAgIHZhbHVlOiBgJHtsc3RWYWx1ZXN9YFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VEaXNjbGFpbWVyRnJvbU11bHRpU2VsZWN0TnVtYmVyKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBBcnJheTxhbnk+LCBvcHRpb25zOiBBcnJheTxhbnk+LFxyXG4gICAgICAgIGxlbmd0aCA9IDAsIGhpZGVDbG9zZSA9IGZhbHNlKTogUG9EaXNjbGFpbWVyIHtcclxuICAgICAgICBsZXQgbHN0TGFiZWxzID0gJyc7XHJcbiAgICAgICAgbGV0IGxzdFZhbHVlcyA9ICcnO1xyXG4gICAgICAgIGxldCBvcHQgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlIHx8ICFvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnLCB2YWx1ZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgKGxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoID09PSBsZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIGxzdExhYmVscyA9IHRoaXMubGl0ZXJhbHNbJ2FsbCddO1xyXG4gICAgICAgICAgICBsc3RWYWx1ZXMgPSAnYWxsJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobHN0TGFiZWxzICE9PSAnJykgeyBsc3RMYWJlbHMgPSBgJHtsc3RMYWJlbHN9LCBgOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAobHN0VmFsdWVzICE9PSAnJykgeyBsc3RWYWx1ZXMgPSBgJHtsc3RWYWx1ZXN9LGA7IH1cclxuXHJcbiAgICAgICAgICAgICAgICBvcHQgPSBvcHRpb25zLmZpbmQoaXRPcHQgPT4gaXRPcHQudmFsdWUgPT09IGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgbHN0TGFiZWxzID0gYCR7bHN0TGFiZWxzfSR7b3B0ID8gb3B0LmxhYmVsIDogaXRlbX1gO1xyXG4gICAgICAgICAgICAgICAgbHN0VmFsdWVzID0gYCR7bHN0VmFsdWVzfSR7aXRlbX1gO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGhpZGVDbG9zZSxcclxuICAgICAgICAgICAgbGFiZWw6IGAke3RoaXMubGl0ZXJhbHNbcHJvcGVydHldfTogJHtsc3RMYWJlbHN9YCxcclxuICAgICAgICAgICAgcHJvcGVydHk6IGAke3Byb3BlcnR5fWAsXHJcbiAgICAgICAgICAgIHZhbHVlOiBgJHtsc3RWYWx1ZXN9YFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VEaXNjbGFpbWVyRnJvbUNoZWNrYm94R3JvdXAocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IEFycmF5PHN0cmluZz4sIGxlbmd0aCA9IDAsIGhpZGVDbG9zZSA9IGZhbHNlKTogUG9EaXNjbGFpbWVyIHtcclxuICAgICAgICBsZXQgbHN0TGFiZWxzID0gJyc7XHJcbiAgICAgICAgbGV0IGxzdFZhbHVlcyA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnLCB2YWx1ZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgbHN0TGFiZWxzID0gdGhpcy5saXRlcmFsc1snbm9uZSddO1xyXG4gICAgICAgICAgICBsc3RWYWx1ZXMgPSAnbm9uZSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA9PT0gbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxzdExhYmVscyA9IHRoaXMubGl0ZXJhbHNbJ2FsbCddO1xyXG4gICAgICAgICAgICBsc3RWYWx1ZXMgPSAnYWxsJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZS5tYXAoY2hlY2tQYXJhbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobHN0TGFiZWxzICE9PSAnJykgeyBsc3RMYWJlbHMgPSBgJHtsc3RMYWJlbHN9LCBgOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAobHN0VmFsdWVzICE9PSAnJykgeyBsc3RWYWx1ZXMgPSBgJHtsc3RWYWx1ZXN9LGA7IH1cclxuICAgICAgICAgICAgICAgIGxzdExhYmVscyA9IGAke2xzdExhYmVsc30ke3RoaXMubGl0ZXJhbHNbY2hlY2tQYXJhbV19YDtcclxuICAgICAgICAgICAgICAgIGxzdFZhbHVlcyA9IGAke2xzdFZhbHVlc30ke2NoZWNrUGFyYW19YDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBoaWRlQ2xvc2UsXHJcbiAgICAgICAgICAgIGxhYmVsOiBgJHt0aGlzLmxpdGVyYWxzW3Byb3BlcnR5XX06ICR7bHN0TGFiZWxzfWAsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBgJHtwcm9wZXJ0eX1gLFxyXG4gICAgICAgICAgICB2YWx1ZTogYCR7bHN0VmFsdWVzfWBcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYWtlRGlzY2xhaW1lckZyb21SYW5nZUNoYXJhY3Rlcihwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogSUZpbHRlclJhbmdlQ2hhcmFjdGVyLCBoaWRlQ2xvc2UgPSBmYWxzZSxcclxuICAgICAgICB2YWxpZGF0ZUVxdWFsID0gdHJ1ZSk6IFBvRGlzY2xhaW1lciB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnZhbEluaXRpYWwgPT09IG51bGwgfHwgdmFsdWUudmFsSW5pdGlhbCA9PT0gdW5kZWZpbmVkKSB7IHZhbHVlLnZhbEluaXRpYWwgPSB2YWx1ZS5pbmlJbml0aWFsOyB9XHJcbiAgICAgICAgaWYgKHZhbHVlLnZhbEZpbmFsID09PSBudWxsIHx8IHZhbHVlLnZhbEZpbmFsID09PSB1bmRlZmluZWQpIHsgdmFsdWUudmFsRmluYWwgPSB2YWx1ZS5pbmlGaW5hbDsgfVxyXG5cclxuICAgICAgICBpZiAodmFsaWRhdGVFcXVhbCAmJlxyXG4gICAgICAgICAgICB2YWx1ZS5pbmlJbml0aWFsID09PSB2YWx1ZS52YWxJbml0aWFsICYmXHJcbiAgICAgICAgICAgIHZhbHVlLmluaUZpbmFsID09PSB2YWx1ZS52YWxGaW5hbCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogJycsIHByb3BlcnR5OiAnJywgdmFsdWU6ICcnIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBoaWRlQ2xvc2UsXHJcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnBvSTE4blBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5saXRlcmFsc1snZmlsdGVyUmFuZ2UnXSxcclxuICAgICAgICAgICAgICAgIFt0aGlzLmxpdGVyYWxzW3Byb3BlcnR5XSwgYCcke3ZhbHVlLnZhbEluaXRpYWx9J2AsIGAnJHt2YWx1ZS52YWxGaW5hbH0nYF0pLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogYCR7cHJvcGVydHl9YCxcclxuICAgICAgICAgICAgdmFsdWU6IGAke3ZhbHVlLnZhbEluaXRpYWx9OyR7dmFsdWUudmFsRmluYWx9YFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VEaXNjbGFpbWVyRnJvbVJhbmdlTnVtYmVyKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBJRmlsdGVyUmFuZ2VOdW1iZXIsIGhpZGVDbG9zZSA9IGZhbHNlLFxyXG4gICAgICAgIHZhbGlkYXRlRXF1YWwgPSB0cnVlKTogUG9EaXNjbGFpbWVyIHtcclxuICAgICAgICBpZiAodmFsdWUudmFsSW5pdGlhbCA9PT0gbnVsbCB8fCB2YWx1ZS52YWxJbml0aWFsID09PSB1bmRlZmluZWQpIHsgdmFsdWUudmFsSW5pdGlhbCA9IHZhbHVlLmluaUluaXRpYWw7IH1cclxuICAgICAgICBpZiAodmFsdWUudmFsRmluYWwgPT09IG51bGwgfHwgdmFsdWUudmFsRmluYWwgPT09IHVuZGVmaW5lZCkgeyB2YWx1ZS52YWxGaW5hbCA9IHZhbHVlLmluaUZpbmFsOyB9XHJcblxyXG4gICAgICAgIGlmICh2YWxpZGF0ZUVxdWFsICYmXHJcbiAgICAgICAgICAgIHZhbHVlLmluaUluaXRpYWwgPT09IHZhbHVlLnZhbEluaXRpYWwgJiZcclxuICAgICAgICAgICAgdmFsdWUuaW5pRmluYWwgPT09IHZhbHVlLnZhbEZpbmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnLCB2YWx1ZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGhpZGVDbG9zZSxcclxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucG9JMThuUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpdGVyYWxzWydmaWx0ZXJSYW5nZSddLFxyXG4gICAgICAgICAgICAgICAgW3RoaXMubGl0ZXJhbHNbcHJvcGVydHldLCB2YWx1ZS52YWxJbml0aWFsLCB2YWx1ZS52YWxGaW5hbF0pLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogYCR7cHJvcGVydHl9YCxcclxuICAgICAgICAgICAgdmFsdWU6IGAke3ZhbHVlLnZhbEluaXRpYWx9OyR7dmFsdWUudmFsRmluYWx9YFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VEaXNjbGFpbWVyRnJvbURhdGVwaWNrZXJSYW5nZShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogUG9EYXRlcGlja2VyUmFuZ2UsIGhpZGVDbG9zZSA9IGZhbHNlKTogUG9EaXNjbGFpbWVyIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnLCB2YWx1ZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmaWx0ZXJSYW5nZURhdGUgPSB7XHJcbiAgICAgICAgICAgIGluaUluaXRpYWw6IG5ldyBEYXRlKDE5MDAsIDEsIDEpLFxyXG4gICAgICAgICAgICB2YWxJbml0aWFsOiB0aGlzLmFqdXN0RGF0ZSh2YWx1ZS5zdGFydCksXHJcbiAgICAgICAgICAgIGluaUZpbmFsOiBuZXcgRGF0ZSg5OTk5LCAxMSwgMzEpLFxyXG4gICAgICAgICAgICB2YWxGaW5hbDogdGhpcy5hanVzdERhdGUodmFsdWUuZW5kKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFrZURpc2NsYWltZXJGcm9tUmFuZ2VEYXRlKHByb3BlcnR5LCBmaWx0ZXJSYW5nZURhdGUsIGhpZGVDbG9zZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1ha2VEaXNjbGFpbWVyRnJvbVJhbmdlRGF0ZShwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogSUZpbHRlclJhbmdlRGF0ZSwgaGlkZUNsb3NlID0gZmFsc2UsIHZhbGlkYXRlRXF1YWwgPSB0cnVlKTogUG9EaXNjbGFpbWVyIHtcclxuICAgICAgICBsZXQgdmFsSW5pdERhdGU6IERhdGUgPSB0aGlzLmFqdXN0RGF0ZSh2YWx1ZS52YWxJbml0aWFsKTtcclxuICAgICAgICBsZXQgdmFsRmluYWxEYXRlOiBEYXRlID0gdGhpcy5hanVzdERhdGUodmFsdWUudmFsRmluYWwpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZERhdGUodmFsSW5pdERhdGUpKSB7XHJcbiAgICAgICAgICAgIHZhbEluaXREYXRlID0gdmFsdWUuaW5pSW5pdGlhbDtcclxuICAgICAgICAgICAgdmFsdWUudmFsSW5pdGlhbCA9IHZhbHVlLmluaUluaXRpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZSh2YWxGaW5hbERhdGUpKSB7XHJcbiAgICAgICAgICAgIHZhbEZpbmFsRGF0ZSA9IHZhbHVlLmluaUZpbmFsO1xyXG4gICAgICAgICAgICB2YWx1ZS52YWxGaW5hbCA9IHZhbHVlLmluaUZpbmFsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbGlkYXRlRXF1YWwgJiZcclxuICAgICAgICAgICAgdGhpcy5kYXRlVG9RdWVyeVBhcmFtKHZhbHVlLmluaUluaXRpYWwpID09PSB0aGlzLmRhdGVUb1F1ZXJ5UGFyYW0odmFsSW5pdERhdGUpICYmXHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRvUXVlcnlQYXJhbSh2YWx1ZS5pbmlGaW5hbCkgPT09IHRoaXMuZGF0ZVRvUXVlcnlQYXJhbSh2YWxGaW5hbERhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGxhYmVsOiAnJywgcHJvcGVydHk6ICcnLCB2YWx1ZTogJycgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGhpZGVDbG9zZSxcclxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucG9JMThuUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpdGVyYWxzWydmaWx0ZXJSYW5nZSddLFxyXG4gICAgICAgICAgICAgICAgW3RoaXMubGl0ZXJhbHNbcHJvcGVydHldLCB2YWxJbml0RGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKSwgdmFsRmluYWxEYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpXSksXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBgJHtwcm9wZXJ0eX1gLFxyXG4gICAgICAgICAgICB2YWx1ZTogYCR7dGhpcy5kYXRlVG9RdWVyeVBhcmFtKHZhbEluaXREYXRlKX07JHt0aGlzLmRhdGVUb1F1ZXJ5UGFyYW0odmFsRmluYWxEYXRlKX1gXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXR6Q2hhckZyb21EaXNjbGFtZXIoZGlzY2xhaW1lcnM6IEFycmF5PFBvRGlzY2xhaW1lcj4sIHByb3BlcnR5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChkaXNjbGFpbWVycyAmJiBkaXNjbGFpbWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRpc2NsYWltZXJzLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF0ek51bWJlckZyb21EaXNjbGFtZXIoZGlzY2xhaW1lcnM6IEFycmF5PFBvRGlzY2xhaW1lcj4sIHByb3BlcnR5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIGlmIChkaXNjbGFpbWVycyAmJiBkaXNjbGFpbWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRpc2NsYWltZXJzLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF0ekJvb2xlYW5Gcm9tRGlzY2xhbWVyKGRpc2NsYWltZXJzOiBBcnJheTxQb0Rpc2NsYWltZXI+LCBwcm9wZXJ0eTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKGRpc2NsYWltZXJzICYmIGRpc2NsYWltZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZGlzY2xhaW1lckZpbmQgPSBkaXNjbGFpbWVycy5maW5kKChpdGVtKSA9PiBpdGVtLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIGlmIChkaXNjbGFpbWVyRmluZCAmJiBkaXNjbGFpbWVyRmluZC52YWx1ZSAhPT0gbnVsbCAmJiBkaXNjbGFpbWVyRmluZC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlzY2xhaW1lckZpbmQudmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXR6RGF0ZUZyb21EaXNjbGFtZXIoZGlzY2xhaW1lcnM6IEFycmF5PFBvRGlzY2xhaW1lcj4sIHByb3BlcnR5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgICAgIGxldCByZXR1cm5WYWx1ZTogRGF0ZSA9IHRoaXMuYWp1c3REYXRlKGRlZmF1bHRWYWx1ZSk7XHJcblxyXG4gICAgICAgIGlmIChkaXNjbGFpbWVycyAmJiBkaXNjbGFpbWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRpc2NsYWltZXJzLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRoaXMuYWp1c3REYXRlKGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHpNdWx0aVNlbGVjdENoYXJGcm9tRGlzY2xhbWVyKGRpc2NsYWltZXJzOiBBcnJheTxQb0Rpc2NsYWltZXI+LCBwcm9wZXJ0eTogc3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbj4pOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHpNdWx0aVNlbGVjdEZyb21EaXNjbGFtZXIoJ2NoYXInLCBkaXNjbGFpbWVycywgcHJvcGVydHksIGRlZmF1bHRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF0ek11bHRpU2VsZWN0TnVtYmVyRnJvbURpc2NsYW1lcihkaXNjbGFpbWVyczogQXJyYXk8UG9EaXNjbGFpbWVyPiwgcHJvcGVydHk6IHN0cmluZyxcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24+KTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR6TXVsdGlTZWxlY3RGcm9tRGlzY2xhbWVyKCdudW1iZXInLCBkaXNjbGFpbWVycywgcHJvcGVydHksIGRlZmF1bHRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF0ek11bHRpU2VsZWN0RnJvbURpc2NsYW1lcih0eXBlOiBzdHJpbmcsIGRpc2NsYWltZXJzOiBBcnJheTxQb0Rpc2NsYWltZXI+LCBwcm9wZXJ0eTogc3RyaW5nLFxyXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbj4pOiBBcnJheTxhbnk+IHtcclxuXHJcbiAgICAgICAgbGV0IHJldHVyblZhbHVlID0gW107XHJcbiAgICAgICAgZGVmYXVsdFZhbHVlLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGRpc2NsYWltZXJzICYmIGRpc2NsYWltZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGlzY2xhaW1lcnMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucHJvcGVydHkgPT09IHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUgPT09IG51bGwgfHwgaXRlbS52YWx1ZSA9PT0gJ2FsbCcgfHwgaXRlbS52YWx1ZSA9PT0gJ25vbmUnKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUuc3BsaXQoJywnKS5mb3JFYWNoKGl0ZW1PcHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NoYXInKSB7IHJldHVyblZhbHVlLnB1c2goaXRlbU9wdCk7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7IHJldHVyblZhbHVlLnB1c2goK2l0ZW1PcHQpOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHpDaGVja2JveEZyb21EaXNjbGFtZXIoZGlzY2xhaW1lcnM6IEFycmF5PFBvRGlzY2xhaW1lcj4sIHByb3BlcnR5OiBzdHJpbmcsXHJcbiAgICAgICAgb3B0aW9uczogQXJyYXk8UG9DaGVja2JveEdyb3VwT3B0aW9uPik6IEFycmF5PHN0cmluZz4ge1xyXG5cclxuICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBbXTtcclxuICAgICAgICBvcHRpb25zLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGRpc2NsYWltZXJzICYmIGRpc2NsYWltZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGlzY2xhaW1lcnMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucHJvcGVydHkgPT09IHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUgPT09IG51bGwgfHwgaXRlbS52YWx1ZSA9PT0gJ2FsbCcgfHwgaXRlbS52YWx1ZSA9PT0gJ25vbmUnKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0udmFsdWUuc3BsaXQoJywnKS5mb3JFYWNoKGl0ZW1PcHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wdXNoKGl0ZW1PcHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXR6UmFuZ2VDaGFyRnJvbURpc2NsYW1lcihkaXNjbGFpbWVyczogQXJyYXk8UG9EaXNjbGFpbWVyPiwgcHJvcGVydHk6IHN0cmluZyxcclxuICAgICAgICByYW5nZUNoYXI6IElGaWx0ZXJSYW5nZUNoYXJhY3Rlcik6IElGaWx0ZXJSYW5nZUNoYXJhY3RlciB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChkaXNjbGFpbWVycyAmJiBkaXNjbGFpbWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRpc2NsYWltZXJzLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmF0elJhbmdlQ2hhckZyb21RdWVyeVBhcmFtKHZhbHVlLCByYW5nZUNoYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHpSYW5nZU51bUZyb21EaXNjbGFtZXIoZGlzY2xhaW1lcnM6IEFycmF5PFBvRGlzY2xhaW1lcj4sIHByb3BlcnR5OiBzdHJpbmcsXHJcbiAgICAgICAgcmFuZ2VOdW06IElGaWx0ZXJSYW5nZU51bWJlcik6IElGaWx0ZXJSYW5nZU51bWJlciB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChkaXNjbGFpbWVycyAmJiBkaXNjbGFpbWVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRpc2NsYWltZXJzLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmF0elJhbmdlTnVtRnJvbVF1ZXJ5UGFyYW0odmFsdWUsIHJhbmdlTnVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXR6RGF0ZXBpY2tlclJhbmdlRnJvbURpc2NsYW1lcihkaXNjbGFpbWVyczogQXJyYXk8UG9EaXNjbGFpbWVyPiwgcHJvcGVydHk6IHN0cmluZyxcclxuICAgICAgICByYW5nZURhdGU6IFBvRGF0ZXBpY2tlclJhbmdlKTogUG9EYXRlcGlja2VyUmFuZ2Uge1xyXG5cclxuICAgICAgICBsZXQgZmlsdGVyUmFuZ2VEYXRlID0ge1xyXG4gICAgICAgICAgICBpbmlJbml0aWFsOiBudWxsLFxyXG4gICAgICAgICAgICB2YWxJbml0aWFsOiByYW5nZURhdGUgPyB0aGlzLmFqdXN0RGF0ZShyYW5nZURhdGUuc3RhcnQpIDogbnVsbCxcclxuICAgICAgICAgICAgaW5pRmluYWw6IG51bGwsXHJcbiAgICAgICAgICAgIHZhbEZpbmFsOiByYW5nZURhdGUgPyB0aGlzLmFqdXN0RGF0ZShyYW5nZURhdGUuZW5kKSA6IG51bGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZpbHRlclJhbmdlRGF0ZSA9IHRoaXMuYXR6UmFuZ2VEYXRlRnJvbURpc2NsYW1lcihkaXNjbGFpbWVycywgcHJvcGVydHksIGZpbHRlclJhbmdlRGF0ZSk7XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJSYW5nZURhdGUudmFsSW5pdGlhbCA9PT0gbnVsbCB8fCBmaWx0ZXJSYW5nZURhdGUudmFsRmluYWwgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzdGFydDogZmlsdGVyUmFuZ2VEYXRlLnZhbEluaXRpYWwsXHJcbiAgICAgICAgICAgIGVuZDogZmlsdGVyUmFuZ2VEYXRlLnZhbEZpbmFsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHpSYW5nZURhdGVGcm9tRGlzY2xhbWVyKGRpc2NsYWltZXJzOiBBcnJheTxQb0Rpc2NsYWltZXI+LCBwcm9wZXJ0eTogc3RyaW5nLFxyXG4gICAgICAgIHJhbmdlRGF0ZTogSUZpbHRlclJhbmdlRGF0ZSk6IElGaWx0ZXJSYW5nZURhdGUge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoZGlzY2xhaW1lcnMgJiYgZGlzY2xhaW1lcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkaXNjbGFpbWVycy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSA9PT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5hdHpSYW5nZURhdGVGcm9tUXVlcnlQYXJhbSh2YWx1ZSwgcmFuZ2VEYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXR6UmFuZ2VDaGFyRnJvbVF1ZXJ5UGFyYW0odmFsdWU6IHN0cmluZywgcmFuZ2VDaGFyOiBJRmlsdGVyUmFuZ2VDaGFyYWN0ZXIpOiBJRmlsdGVyUmFuZ2VDaGFyYWN0ZXIge1xyXG4gICAgICAgIHJhbmdlQ2hhci52YWxJbml0aWFsID0gcmFuZ2VDaGFyLmluaUluaXRpYWw7XHJcbiAgICAgICAgcmFuZ2VDaGFyLnZhbEZpbmFsID0gcmFuZ2VDaGFyLmluaUZpbmFsO1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnJykgeyByZXR1cm4gcmFuZ2VDaGFyOyB9XHJcblxyXG4gICAgICAgIHJhbmdlQ2hhci52YWxJbml0aWFsID0gdmFsdWUuc3BsaXQoJzsnKVswXTtcclxuICAgICAgICByYW5nZUNoYXIudmFsRmluYWwgPSB2YWx1ZS5zcGxpdCgnOycpWzFdO1xyXG4gICAgICAgIGlmIChyYW5nZUNoYXIudmFsRmluYWwgPT09IG51bGwgfHwgcmFuZ2VDaGFyLnZhbEZpbmFsID09PSB1bmRlZmluZWQpIHsgcmFuZ2VDaGFyLnZhbEZpbmFsID0gcmFuZ2VDaGFyLmluaUZpbmFsOyB9XHJcblxyXG4gICAgICAgIHJldHVybiByYW5nZUNoYXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGF0elJhbmdlTnVtRnJvbVF1ZXJ5UGFyYW0odmFsdWU6IHN0cmluZywgcmFuZ2VOdW06IElGaWx0ZXJSYW5nZU51bWJlcik6IElGaWx0ZXJSYW5nZU51bWJlciB7XHJcbiAgICAgICAgcmFuZ2VOdW0udmFsSW5pdGlhbCA9IHJhbmdlTnVtLmluaUluaXRpYWw7XHJcbiAgICAgICAgcmFuZ2VOdW0udmFsRmluYWwgPSByYW5nZU51bS5pbmlGaW5hbDtcclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJycpIHsgcmV0dXJuIHJhbmdlTnVtOyB9XHJcblxyXG4gICAgICAgIHJhbmdlTnVtLnZhbEluaXRpYWwgPSArdmFsdWUuc3BsaXQoJzsnKVswXTtcclxuICAgICAgICByYW5nZU51bS52YWxGaW5hbCA9ICt2YWx1ZS5zcGxpdCgnOycpWzFdO1xyXG4gICAgICAgIGlmIChyYW5nZU51bS52YWxGaW5hbCA9PT0gbnVsbCB8fCByYW5nZU51bS52YWxGaW5hbCA9PT0gdW5kZWZpbmVkKSB7IHJhbmdlTnVtLnZhbEZpbmFsID0gcmFuZ2VOdW0uaW5pRmluYWw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJhbmdlTnVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhdHpSYW5nZURhdGVGcm9tUXVlcnlQYXJhbSh2YWx1ZTogc3RyaW5nLCByYW5nZURhdGU6IElGaWx0ZXJSYW5nZURhdGUpOiBJRmlsdGVyUmFuZ2VEYXRlIHtcclxuICAgICAgICByYW5nZURhdGUudmFsSW5pdGlhbCA9IHJhbmdlRGF0ZS5pbmlJbml0aWFsO1xyXG4gICAgICAgIHJhbmdlRGF0ZS52YWxGaW5hbCA9IHJhbmdlRGF0ZS5pbmlGaW5hbDtcclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJycpIHsgcmV0dXJuIHJhbmdlRGF0ZTsgfVxyXG5cclxuICAgICAgICByYW5nZURhdGUudmFsSW5pdGlhbCA9IHRoaXMucXVlcnlQYXJhbVRvRGF0ZSh2YWx1ZS5zcGxpdCgnOycpWzBdKTtcclxuICAgICAgICByYW5nZURhdGUudmFsRmluYWwgPSB0aGlzLnF1ZXJ5UGFyYW1Ub0RhdGUodmFsdWUuc3BsaXQoJzsnKVsxXSk7XHJcbiAgICAgICAgaWYgKHJhbmdlRGF0ZS52YWxGaW5hbCA9PT0gbnVsbCB8fCByYW5nZURhdGUudmFsRmluYWwgPT09IHVuZGVmaW5lZCkgeyByYW5nZURhdGUudmFsRmluYWwgPSByYW5nZURhdGUuaW5pRmluYWw7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJhbmdlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGF0ZVRvUXVlcnlQYXJhbShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoZGF0ZSA9PT0gbnVsbCkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgICAgICBjb25zdCBpRGF5ID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICAgICAgY29uc3QgaU1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcclxuICAgICAgICBjb25zdCBpWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGAke2lZZWFyfS0ke3RoaXMucGFkKGlNb250aCl9LSR7dGhpcy5wYWQoaURheSl9YDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcXVlcnlQYXJhbVRvRGF0ZShwYXJhbTogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAgICAgaWYgKHBhcmFtID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlEYXkgPSArcGFyYW0uc3BsaXQoJy0nKVsyXTtcclxuICAgICAgICBjb25zdCBpTW9udGggPSArcGFyYW0uc3BsaXQoJy0nKVsxXTtcclxuICAgICAgICBjb25zdCBpWWVhciA9ICtwYXJhbS5zcGxpdCgnLScpWzBdO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IERhdGUoaVllYXIsIGlNb250aCAtIDEsIGlEYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1ZhbGlkRGF0ZShkYXRlOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFqdXN0RGF0ZShwYXJhbTogYW55KTogRGF0ZSB7XHJcbiAgICAgICAgaWYgKHBhcmFtID09PSBudWxsKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICAgICAgaWYgKHBhcmFtIGluc3RhbmNlb2YgRGF0ZSkgeyByZXR1cm4gcGFyYW07IH1cclxuICAgICAgICBpZiAoIXBhcmFtKSB7IHJldHVybiBwYXJhbTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeVBhcmFtVG9EYXRlKHBhcmFtLnNwbGl0KCdUJylbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwYWQobnVtYmVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAobnVtYmVyIDwgMTApIHtcclxuICAgICAgICAgICAgcmV0dXJuICcwJyArIG51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcclxuICAgIH1cclxufVxyXG4iXX0=
|