@magic-xpa/angular 4.1100.0-dev4110.165 → 4.1100.0-dev4110.167
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.
@@ -219,23 +219,18 @@ export class MgformatMagicDirective {
|
|
219
219
|
const dateArray = userInput.split(separator);
|
220
220
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
221
221
|
const isMonthInNumber = !isNaN(Number(month));
|
222
|
-
if (isMonthInNumber
|
223
|
-
if (day < 32 && Number(month) < 13) {
|
224
|
-
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
225
|
-
}
|
226
|
-
}
|
227
|
-
else if (day < 32) {
|
222
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
228
223
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
229
224
|
}
|
230
225
|
}
|
231
|
-
else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy')) {
|
226
|
+
else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy' || dateFormat == 'd/M/yyyy' || dateFormat == 'd-M-yyyy')) {
|
232
227
|
const dateArray = userInput.split(separator);
|
233
228
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
234
229
|
if ((day < 32 && month < 13)) {
|
235
230
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
236
231
|
}
|
237
232
|
}
|
238
|
-
else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy')) {
|
233
|
+
else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy' || dateFormat == 'M/d/yyyy' || dateFormat == 'M-d-yyyy')) {
|
239
234
|
const dateArray = userInput.split(separator);
|
240
235
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
241
236
|
if ((day < 32 && month < 13)) {
|
@@ -246,12 +241,7 @@ export class MgformatMagicDirective {
|
|
246
241
|
const dateArray = userInput.split(separator);
|
247
242
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
248
243
|
const isMonthInNumber = !isNaN(Number(month));
|
249
|
-
if (isMonthInNumber
|
250
|
-
if (day < 32 && Number(month) < 13) {
|
251
|
-
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
252
|
-
}
|
253
|
-
}
|
254
|
-
else if (day < 32) {
|
244
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
255
245
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
256
246
|
}
|
257
247
|
}
|
@@ -273,23 +263,18 @@ export class MgformatMagicDirective {
|
|
273
263
|
const dateArray = userInput.split(separator);
|
274
264
|
const [day, month, year] = this.getDateSegments4(dateArray);
|
275
265
|
const isMonthInNumber = !isNaN(Number(month));
|
276
|
-
if (isMonthInNumber
|
277
|
-
if (day < 32 && Number(month) < 13) {
|
278
|
-
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
279
|
-
}
|
280
|
-
}
|
281
|
-
else if (day < 32) {
|
266
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
282
267
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
283
268
|
}
|
284
269
|
}
|
285
|
-
else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy')) {
|
270
|
+
else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy' || dateFormat == 'd/M/yy' || dateFormat == 'd-M-yy')) {
|
286
271
|
const dateArray = userInput.split(separator);
|
287
272
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
288
273
|
if ((day < 32 && month < 13)) {
|
289
274
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
290
275
|
}
|
291
276
|
}
|
292
|
-
else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy')) {
|
277
|
+
else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy' || dateFormat == 'M/d/yy' || dateFormat == 'M-d-yy')) {
|
293
278
|
const dateArray = userInput.split(separator);
|
294
279
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
295
280
|
if ((day < 32 && month < 13)) {
|
@@ -313,24 +298,43 @@ export class MgformatMagicDirective {
|
|
313
298
|
else if ((dateFormat == 'dd/MMM/yy' || dateFormat == 'dd-MMM-yy')) {
|
314
299
|
const dateArray = userInput.split(separator);
|
315
300
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
316
|
-
|
301
|
+
const isMonthInNumber = !isNaN(Number(month));
|
302
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
317
303
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
318
304
|
}
|
319
305
|
}
|
320
306
|
else if ((dateFormat == 'yy/dd/MMM' || dateFormat == 'yy-dd-MMM')) {
|
321
307
|
const dateArray = userInput.split(separator);
|
322
308
|
const [day, month, year] = this.getDateSegments4(dateArray);
|
323
|
-
|
309
|
+
const isMonthInNumber = !isNaN(Number(month));
|
310
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
324
311
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
325
312
|
}
|
326
313
|
}
|
327
314
|
else if ((dateFormat == 'MMM/dd/yy' || dateFormat == 'MMM-dd-yy')) {
|
328
315
|
const dateArray = userInput.split(separator);
|
329
316
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
330
|
-
|
317
|
+
const isMonthInNumber = !isNaN(Number(month));
|
318
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
319
|
+
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
320
|
+
}
|
321
|
+
}
|
322
|
+
else if ((dateFormat == 'yyyy/MMM/dd' || dateFormat == 'yyyy-MMM-dd' || dateFormat == 'yy/MMM/dd' || dateFormat == 'yy-MMM-dd')) {
|
323
|
+
const dateArray = userInput.split(separator);
|
324
|
+
const [day, month, year] = this.getDateSegments3(dateArray);
|
325
|
+
const isMonthInNumber = !isNaN(Number(month));
|
326
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
331
327
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
332
328
|
}
|
333
329
|
}
|
330
|
+
else if (dateFormat == 'yyyy/MM' || dateFormat == 'yyyy-MM') {
|
331
|
+
const dateArray = userInput.split(separator);
|
332
|
+
const month = dateArray[1];
|
333
|
+
const year = Number(dateArray[0]);
|
334
|
+
if (Number(month) < 13) {
|
335
|
+
this.updateYear(1, month, year, separator, century, centuryVal, control);
|
336
|
+
}
|
337
|
+
}
|
334
338
|
}
|
335
339
|
updateYear(day, month, year, separator, century, centuryVal, control) {
|
336
340
|
let updatedYear = year.toString().length === 2 ? (year < century % 100 ? centuryVal + 1 : centuryVal) + '' + year :
|
@@ -563,4 +567,4 @@ MgformatMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: MgformatMagicDirec
|
|
563
567
|
type: HostListener,
|
564
568
|
args: ['change', ['$event']]
|
565
569
|
}] }); })();
|
566
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWdmb3JtYXQubWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tZ2Zvcm1hdC5tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFTbEUsTUFBTSxPQUFPLHNCQUFzQjtJQU9qQyxZQUNZLFFBQXdCLEVBQ3hCLEtBQXVCO1FBRHZCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBUG5DLGtCQUFhLEdBQVksS0FBSyxDQUFDO0lBUzNCLENBQUM7SUFFTCxlQUFlO1FBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUVoRixJQUFH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QUM7cUJBQzlCLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLEVBQUU7Z0JBQ3RYLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztxQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDakQsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQixJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNqRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNwRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztvQkFDdkIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUVuQztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksV0FBVyxFQUFHO2dCQUNyRyxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUMzQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxTQUFTLENBQUM7cUJBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2pELEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDckIsSUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDaEQsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDekQsSUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDaEQsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDekQsSUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7b0JBQ3ZCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFFbkM7aUJBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLGFBQWEsRUFBRztnQkFDekcsSUFBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDM0MsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsU0FBUyxDQUFDO3FCQUM1QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNqRCxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7cUJBQ3JCLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3pELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3pELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBRyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLEVBQUc7Z0JBQ3JHLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztxQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDakQsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQixJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNqRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNwRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMxRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztvQkFDdkIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUVuQztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksYUFBYSxFQUFHO2dCQUN6RyxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUMzQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUM7cUJBQzlCLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBRyxXQUFXLElBQUksSUFBSSxDQUFDLEtB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RUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUM7WUFDbEUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUU7WUFDbkUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLGFBQWEsSUFBSSxVQUFVLElBQUksYUFBYSxDQUFDLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsTUFBTSxlQUFlLEdBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFdkQsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO2dCQUMzQixJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDNUU7YUFDRjtpQkFBSyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxH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c0JBQXNCO2NBTGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTthQUN2QjtnR0FxQ1EsWUFBWTtrQkFEbEIsWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFNakMsT0FBTztrQkFETixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQVkxQixZQUFZO2tCQURsQixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQW1MMUIsYUFBYTtrQkFEbkIsWUFBWTttQkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUYXNrTWFnaWNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXNrLm1hZ2ljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyLCBSZWZQYXJhbX0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1BJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7TWFnaWNEaXJlY3RpdmV9IGZyb20gJy4vbWFnaWMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtNZ0RhdGVGb3JtYXR0ZXJ9IGZyb20gJy4uL3BpcGVzL2RhdGUubWFnaWMucGlwZSc7XHJcbmltcG9ydCB7aXNVbmRlZmluZWR9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtFbnZpcm9ubWVudCwgTGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS9lbmdpbmVcIjtcclxuLyoqXHJcbiAqIFBlcmZvcm0gTWFnaWMgdmFsaWRhdGlvbiBvbiBpbnB1dCBjb250cm9scyB3aGljaCBob2xkIGFscGhhbnVtZXJpYyBzdHJpbmdzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1ttZ0Zvcm1hdF0nXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE1nZm9ybWF0TWFnaWNEaXJlY3RpdmUge1xyXG5cclxuICBkYXRlUGFzdGVGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBtYWdpY0RpcjogTWFnaWNEaXJlY3RpdmUgLFxyXG4gICAgcHJvdGVjdGVkIF90YXNrOiBUYXNrTWFnaWNTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBjb250cm9sID0gdGhpcy5fdGFzay5nZXRGb3JtQ29udHJvbCh0aGlzLm1hZ2ljRGlyLnJvd0lkLCB0aGlzLm1hZ2ljRGlyLmlkICk7XHJcblxyXG4gICAgaWYoY29udHJvbCAhPSBudWxsICYmIHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAvLyBnZXQgdGhlIGZpcnN0IGRhdGUgY29udHJvbCdzIGZvcm1hdC5cclxuICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcbiAgICAgIGlmIChwaWMuZ2V0QXR0cigpID09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSApIHtcclxuICAgICAgICB0aGlzLmZvcm1hdERhdGUocGljKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvKipcclxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBwYXR0ZXJuXHJcbiAgICogT24gaW5wdXQsIHZlcmlmaWVzIHRoZSBpbnB1dCBtYXRjaGVzIHRoZSByZXF1aXJlZCBtYXNrXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbkZvY3VzRXZlbnQoJGV2ZW50KXtcclxuICAgIHRoaXMuY2FsY3VsYXRlUGF0dGVybigpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZmxhZyBpcyBuZWVkZWQgdG8gc2tpcCBleGVjdXRpb24gb2YgZGF0ZU1hc2tpbmcoKSBtZXRob2Qgd2hlbiB1c2VyIHBhc3RlIGRhdGUgaW4gaW5wdXQgY29udHJvbC5cclxuICAgICAqIFRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiBpcyBEQVRFLiBCdXQgdG8gY2hlY2sgdHlwZSBvZiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiwgd2VcclxuICAgICBuZWVkIHRvIGV4ZWN1dGUgZ2V0Q29udHJvbE1ldGFkYXRhKCkgbWV0aG9kLiBTbywgdG8gcmVkdWNlIHRoaXMgZXhlY3V0aW9uIG92ZXJsb2FkIHdlIHNldFxyXG4gICAgIFwiZGF0ZVBhc3RlRmxhZ1wiIGRpcmVjdGx5LlxyXG4gICAgICovXHJcbiAgICB0aGlzLmRhdGVQYXN0ZUZsYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbklucHV0RXZlbnQoZXZlbnQpe1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpe1xyXG4gICAgICBpZighdGhpcy5kYXRlUGFzdGVGbGFnKVxyXG4gICAgICAgIHRoaXMuZGF0ZU1hc2tpbmcoZXZlbnQpO1xyXG5cclxuICAgICAgdGhpcy5kYXRlUGFzdGVGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVBhdHRlcm4oKTtcclxuICB9XHJcblxyXG5cclxuICAvL1RoaXMgbWV0aG9kIGluc2VydHMgJy8nIGFzIGEgc2VwYXJhdG9yIHdoaWxlIGVudGVyaW5nIGRhdGUgaW4gdGhlIHRleHRib3guXHJcbiAgLy9FeGFtcGxlOiAxMC8xMC8yMDIzXHJcbiAgZGF0ZU1hc2tpbmcoZXZlbnQpe1xyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgbGV0IGN1cnNvclBvcyA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQuaW5jbHVkZXMoJy8nKT8gJy8nOictJztcclxuXHJcbiAgICBpZihjdXJzb3JQb3MgPj0gaW5wdXQudmFsdWUubGVuZ3RoKSB7XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05Ly1dL2csICcnKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXl5eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS9kZC95eXl5XCIgfHx0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU0teXl5eVwiIHx8dGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcIk1NLWRkLXl5eXlcIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAxJyArIHNlcGFyYXRvcjtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gMiAmJiB2YWx1ZVsxXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IDAgKyB2YWx1ZTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSAzICYmIHZhbHVlWzJdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMikgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoNSk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPj0gMTApXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDEwKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXl5eS9kZC9NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LU1NLWRkXCIgfHwgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXktZGQtTU1cIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMClcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTApO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvZGQvTU1cIiB8fHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJkZC1NTS15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1NTS1kZFwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS1kZC15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTVwiKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwMScgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA1ICYmIHZhbHVlWzRdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMykgKyAnMCcgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA2ICYmIHZhbHVlWzVdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDgpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDgpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJkZC9NTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiZGQvTU1NL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMScgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT1cInl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTU1cIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMCcgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDkpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJ5eXl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LWRkLU1NTVwiICkge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMSlcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTEpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJNTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAxJyArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiTU1NL2RkL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMyk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNSAmJiB2YWx1ZVs0XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMDEnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNiAmJiB2YWx1ZVs1XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMCcgKyB2YWx1ZS5zbGljZSg0KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihjdXJzb3JQb3MgPCBpbnB1dC52YWx1ZS5sZW5ndGggJiYgaW5wdXQudmFsdWUubGVuZ3RoID4gdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdC5sZW5ndGgpe1xyXG4gICAgICBsZXQgaW5wdXREYXRlID0gaW5wdXQudmFsdWU7XHJcbiAgICAgIGxldCBzdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0LTE7XHJcbiAgICAgIGxldCBlbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQtMTtcclxuICAgICAgbGV0IGluZGV4VG9SZW1vdmUgPSBpbnB1dC5zZWxlY3Rpb25TdGFydC0xO1xyXG5cclxuICAgICAgaW5wdXQudmFsdWUgPSBpbnB1dERhdGUuc2xpY2UoMCxpbmRleFRvUmVtb3ZlKSArIGlucHV0RGF0ZS5zbGljZShpbmRleFRvUmVtb3ZlICsgMSk7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHVwcGVyY2FzZS9sb3dlciBjYXNlXHJcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25DaGFuZ2VFdmVudChldmVudCl7XHJcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuX3Rhc2suZ2V0Rm9ybUNvbnRyb2wodGhpcy5tYWdpY0Rpci5yb3dJZCwgdGhpcy5tYWdpY0Rpci5pZCApO1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBjb25zdCBjZW50dXJ5ID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG5cclxuICAgIHN3aXRjaCAgKGF0dHIpXHJcbiAgICB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5mb3JtYXRBbHBoYVVuaWNvZGUgKGNvbnRyb2wpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmZvcm1hdEJvb2xlYW4oY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KGV2ZW50LnRhcmdldC52YWx1ZSwgY2VudHVyeSwgY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRm9ybWF0IHllYXIsIGlmIHVzZXIgZW50ZXJzIDIgZGlnaXRzIGluc3RlYWQgb2YgNCBkaWdpdHMgYXMgcGVyIHRoZSBjZW50dXJ5IGdpdmVuIGluIE1hZ2ljLmluaSBmaWxlICovXHJcbiAgZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KHVzZXJJbnB1dDogc3RyaW5nLCBjZW50dXJ5OiBudW1iZXIsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQ7XHJcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB1c2VySW5wdXQuaW5jbHVkZXMoJy8nKSA/ICcvJyA6IFwiLVwiO1xyXG4gICAgbGV0IGNlbnR1cnlWYWwgPSBwYXJzZUludChjZW50dXJ5LnRvU3RyaW5nKCkuc2xpY2UoMCwgMikpO1xyXG4gICAgaWYodXNlcklucHV0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gO1xyXG5cclxuICAgIGlmICgoZGF0ZUZvcm1hdCA9PSAnZGQvTU1NL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2RkLU1NTS15eXl5JykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG5cclxuICAgICAgaWYgKGlzTW9udGhJbk51bWJlciA9PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGRheSA8IDMyICYmIE51bWJlcihtb250aCkgPCAxMykge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZSBpZiAoZGF5IDwgMzIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdkZC9NTS95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTS15eXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMShkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTS9kZC95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNTS1kZC15eXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMihkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmICgoZGF0ZUZvcm1hdCA9PSAnTU1NL2RkL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NTS1kZC15eXl5JykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG5cclxuICAgICAgaWYgKGlzTW9udGhJbk51bWJlciA9PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGRheSA8IDMyICYmIE51bWJlcihtb250aCkgPCAxMykge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZSBpZiAoZGF5IDwgMzIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L01NL2RkJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LU1NLWRkJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMyhkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L2RkL01NJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LWRkLU1NJykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czQoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmICgoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L2RkL01NTScgfHwgZGF0ZUZvcm1hdCA9PSAneXl5eS1kZC1NTU0nKSkge1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG4gICAgICBjb25zdCBpc01vbnRoSW5OdW1iZXI6IGJvb2xlYW4gPSAhaXNOYU4oTnVtYmVyKG1vbnRoKSk7XHJcblxyXG4gICAgICBpZiAoaXNNb250aEluTnVtYmVyID09IHRydWUpIHtcclxuICAgICAgICBpZiAoZGF5IDwgMzIgJiYgTnVtYmVyKG1vbnRoKSA8IDEzKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNlIGlmIChkYXkgPCAzMikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTS15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAnTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NLWRkLXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMihkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eS9NTS9kZCcgfHwgZGF0ZUZvcm1hdCA9PSAneXktTU0tZGQnKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMzKGRhdGVBcnJheSk7XHJcblxyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5L2RkL01NJyB8fCBkYXRlRm9ybWF0ID09ICd5eS1kZC1NTScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czQoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAnZGQvTU1NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTU0teXknKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMxKGRhdGVBcnJheSk7XHJcblxyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5L2RkL01NTScgfHwgZGF0ZUZvcm1hdCA9PSAneXktZGQtTU1NJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NTS1kZC15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVZZWFyKGRheTpudW1iZXIsIG1vbnRoOnN0cmluZywgeWVhcjpudW1iZXIsIHNlcGFyYXRvcjpzdHJpbmcsIGNlbnR1cnk6bnVtYmVyLCBjZW50dXJ5VmFsOm51bWJlciwgY29udHJvbDpBYnN0cmFjdENvbnRyb2wpe1xyXG4gICAgbGV0IHVwZGF0ZWRZZWFyID0geWVhci50b1N0cmluZygpLmxlbmd0aCA9PT0gMiA/ICh5ZWFyIDwgY2VudHVyeSAlIDEwMCA/IGNlbnR1cnlWYWwgKyAxIDogY2VudHVyeVZhbCkgKyAnJyArIHllYXIgOlxyXG4gICAgICB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gKHllYXIgPCBjZW50dXJ5ICUgMTAwID8gY2VudHVyeVZhbCArIDEgOiBjZW50dXJ5VmFsKSArICcwJyArIHllYXIgOlxyXG4gICAgICAgIHllYXI7XHJcblxyXG4gICAgY29udHJvbC5zZXRWYWx1ZShuZXcgRGF0ZShgJHt1cGRhdGVkWWVhcn0ke3NlcGFyYXRvcn0ke21vbnRofSR7c2VwYXJhdG9yfSR7ZGF5fWApKVxyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVNlZ21lbnRzMShkYXRlQXJyYXkpe1xyXG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVBcnJheVswXSk7XHJcbiAgICBjb25zdCBtb250aCA9IGRhdGVBcnJheVsxXTtcclxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZUFycmF5WzJdKTtcclxuICAgIHJldHVybiBbZGF5LCBtb250aCwgeWVhcl07XHJcbiAgfVxyXG5cclxuICBnZXREYXRlU2VnbWVudHMyKGRhdGVBcnJheSl7XHJcbiAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZUFycmF5WzFdKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzBdO1xyXG4gICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlQXJyYXlbMl0pO1xyXG4gICAgcmV0dXJuIFtkYXksIG1vbnRoLCB5ZWFyXTtcclxuICB9XHJcblxyXG4gIGdldERhdGVTZWdtZW50czMoZGF0ZUFycmF5KXtcclxuICAgIGNvbnN0IGRheSA9IE51bWJlcihkYXRlQXJyYXlbMl0pO1xyXG4gICAgY29uc3QgbW9udGggPSBkYXRlQXJyYXlbMV07XHJcbiAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVBcnJheVswXSk7XHJcbiAgICByZXR1cm4gW2RheSwgbW9udGgsIHllYXJdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpe1xyXG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVBcnJheVsxXSk7XHJcbiAgICBjb25zdCBtb250aCA9IGRhdGVBcnJheVsyXTtcclxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZUFycmF5WzBdKTtcclxuICAgIHJldHVybiBbZGF5LCBtb250aCwgeWVhcl07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgY2FsY3VsYXRlUGF0dGVybiAoKVxyXG4gIHtcclxuICAgIGxldCBjb250cm9sID0gdGhpcy5fdGFzay5nZXRGb3JtQ29udHJvbCh0aGlzLm1hZ2ljRGlyLnJvd0lkLCB0aGlzLm1hZ2ljRGlyLmlkICk7XHJcblxyXG4gICAgaWYoY29udHJvbCAhPSBudWxsICkge1xyXG4gICAgICBsZXQgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuX3Rhc2suUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YSh0aGlzLm1hZ2ljRGlyLmlkKS5kYXRhVHlwZTtcclxuICAgICAgaWYgKGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBhdHRyID09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3Rhc2suR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMubWFnaWNEaXIuaWQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1BhdHRlcm5HZW5lcmF0aW9uTmVlZGVkKGF0dHIsIHBpYykpIHtcclxuICAgICAgICAgIGxldCBwYXR0ZXJuOiBzdHJpbmcgPSB0aGlzLmdlbmVyYXRlUGF0dGVybihhdHRyLCBwaWMpO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yID09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnBhdHRlcm4ocGF0dGVybikpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW2NvbnRyb2wudmFsaWRhdG9yLCBWYWxpZGF0b3JzLnBhdHRlcm4ocGF0dGVybildKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbGlkYXRvciA9PSBudWxsKVxyXG4gICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1heExlbmd0aChwaWMuZ2V0TWFza0xlbmd0aCgpKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHJlLXNldCBhbGwgdmFsaWRhdG9ycyBhZ2FpblxyXG4gICAgICAgICAgICAgIGlmIChwaWMuaXNGb3JtYXRFeHAoKSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHBpYy5nZXRNYXNrTGVuZ3RoKCkpKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLm1hZ2ljRGlyLnJvd0lkKSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tYWdpY0Rpci5yb3dJZCA9ICcwJztcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIHRoaXMuX3Rhc2suY3VzdG9tVmFsaWRhdG9yKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQpXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKHBpYy5nZXRNYXNrTGVuZ3RoKCkpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBjb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSkpO1xyXG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKHBpYzogUElDKTogdm9pZCB7XHJcbiAgICBsZXQgbWdEYXRlRm9ybWF0dGVyID0gbmV3IE1nRGF0ZUZvcm1hdHRlcigpO1xyXG4gICAgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9IG1nRGF0ZUZvcm1hdHRlci5Db252ZXJ0TWdEYXRlRm9ybWF0VG9Bbmd1bGFyKHBpYy5nZXRNYXNrKCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZm9ybWF0QWxwaGFVbmljb2RlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBzdHJpbmcgPSB0aGlzLl90YXNrLkdldFJhbmdlZFZhbHVlKHRoaXMubWFnaWNEaXIuaWQsIHZhbHVlKTtcclxuICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3Rhc2suR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMubWFnaWNEaXIuaWQpO1xyXG4gICAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHN3aXRjaCAobWFzay5jaGFyQ29kZUF0KGkpKSB7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlU3RyLlRvU3RyaW5nKCkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBmb3JtYXRCb29sZWFuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkICB7XHJcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IHRoaXMuX3Rhc2suR2V0UmFuZ2VkVmFsdWUgKHRoaXMubWFnaWNEaXIuaWQgLCB2YWx1ZSk7XHJcbiAgICAgIGlmIChuZXdWYWx1ZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgodmFsdWUudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZnJvbSAgZmxkJ3MgIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2VuZXJhdGVQYXR0ZXJuIChhdHRyaWJ1dGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHJpYnV0ZSlcclxuICAgIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgcGF0dGVybiA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuRm9yTnVtYmVyKHBpYyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgcGF0dGVybiA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuRm9yQWxwaGEocGljKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGF0dGVybjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZm9yIEFscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZW5lcmF0ZVBhdHRlcm5Gb3JOdW1iZXIocGljOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhdHRlcm5TdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlciAoKTtcclxuXHJcbiAgICBwYXR0ZXJuU3RyLkFwcGVuZCgnXicpO1xyXG4gICAgaWYgKHBpYy5pc05lZ2F0aXZlKCkpXHJcbiAgICAgIHBhdHRlcm5TdHIuQXBwZW5kKCctPycpO1xyXG4gICAgaWYgKHBpYy5nZXRXaG9sZXMoKSlcclxuICAgICAgcGF0dGVyblN0ci5BcHBlbmRGb3JtYXQoJ1xcXFxke3swfSx7MX19JywgMCwgcGljLmdldFdob2xlcygpKTtcclxuICAgIGlmIChwaWMuZ2V0RGVjKCkpXHJcbiAgICAgIHBhdHRlcm5TdHIuQXBwZW5kRm9ybWF0KCcoXFxcXC5cXFxcZHsxLHswfX0pPycsIHBpYy5nZXREZWMoKSk7XHJcbiAgICBwYXR0ZXJuU3RyLkFwcGVuZCgnJCcpO1xyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuU3RyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgaXNQYXR0ZXJuR2VuZXJhdGlvbk5lZWRlZCAoYXR0ciA6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBpYyA6IFBJQyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIHN3aXRjaCAoYXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgcmV0dXJuIChwaWMuZ2V0TWFza0NoYXJzKCkgPiAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZm9yIEFscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZW5lcmF0ZVBhdHRlcm5Gb3JBbHBoYShwaWMgOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNudDogbnVtYmVyID0gMDtcclxuICAgIGxldCBpbnB1dEFsbENoYXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgY2xvc2VTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCAgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCAgcGF0dGVybjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcblxyXG4gICAgcGF0dGVybi5BcHBlbmQoJ14nKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBtYXNrLmxlbmd0aDspXHJcbiAgICB7XHJcbiAgICAgIC8vc3RhcnQgbmV3IHN1YnNldCAsIGlmIG1hc2tbaV0gaXMgb25lIG9mIHRoZXNlLlxyXG4gICAgICBpZiAoaW5wdXRBbGxDaGFycyAmJiAobWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfTiB8fCBtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19VIHx8IG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX0xcclxuICAgICAgICB8fCBtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19YKSlcclxuICAgICAge1xyXG4gICAgICAgIHBhdHRlcm4uQXBwZW5kKCcoJyk7XHJcbiAgICAgICAgY2xvc2VTZXQgPSB0cnVlO1xyXG4gICAgICAgIGlucHV0QWxsQ2hhcnMgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY250ID0gMDtcclxuICAgICAgc3dpdGNoIChtYXNrLmNoYXJDb2RlQXQoaSkpXHJcbiAgICAgIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWDpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXR0ZXJuLkFwcGVuZCgnLicpO1xyXG4gICAgICAgICAgbGV0IGlucHV0QWxsQ2hhcnNSZWY6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgICAgICAgIGxldCBkaXJzOiBzdHJpbmcgPSAgUElDSW50ZXJmYWNlLlBJQ19VLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBkaXJzICs9IFBJQ0ludGVyZmFjZS5QSUNfTC50b1N0cmluZygpO1xyXG4gICAgICAgICAgZGlycyArPSBQSUNJbnRlcmZhY2UuUElDX1gudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNudCA9IHRoaXMuZ2V0RGlyZWN0aXZlQ291bnQobWFzaywgaSwgZGlycywgaW5wdXRBbGxDaGFyc1JlZik7XHJcbiAgICAgICAgICBpbnB1dEFsbENoYXJzID0gaW5wdXRBbGxDaGFyc1JlZi52YWx1ZTtcclxuICAgICAgICAgIGkgKz0gY250O1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTjpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXR0ZXJuLkFwcGVuZCgnXFxcXGQnKTtcclxuICAgICAgICAgIGxldCBpbnB1dEFsbENoYXJzUmVmOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbTxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgICBjbnQgPSB0aGlzLmdldERpcmVjdGl2ZUNvdW50KG1hc2ssIGksIFBJQ0ludGVyZmFjZS5QSUNfTC50b1N0cmluZygpLCBpbnB1dEFsbENoYXJzUmVmKTtcclxuICAgICAgICAgIGlucHV0QWxsQ2hhcnMgPSBpbnB1dEFsbENoYXJzUmVmLnZhbHVlO1xyXG4gICAgICAgICAgaSArPSBjbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBwYXR0ZXJuLkFwcGVuZChtYXNrW2ldKTtcclxuICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjbnQgPiAwKVxyXG4gICAgICAgIHBhdHRlcm4uQXBwZW5kRm9ybWF0KCd7ezB9LHsxfX0nLCBpbnB1dEFsbENoYXJzID8gY250IDogMCwgY250KTtcclxuICAgICAgaWYgKGNsb3NlU2V0KVxyXG4gICAgICAgIHBhdHRlcm4uQXBwZW5kKCcpJyk7XHJcbiAgICAgIGNsb3NlU2V0ID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG4gICAgcGF0dGVybi5BcHBlbmQoJyQnKTtcclxuICAgIHJldHVybiBwYXR0ZXJuLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0RGlyZWN0aXZlQ291bnQobWFzazogc3RyaW5nLCBpZHg6IG51bWJlciwgcGF0dGVybjogc3RyaW5nLCBjaGFuZ2VJblBhdHRlcm46IFJlZlBhcmFtPGJvb2xlYW4+ICk6IG51bWJlciAge1xyXG5cclxuICAgIGNoYW5nZUluUGF0dGVybi52YWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IHBhdHRlcm5Db3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvLyBmaW5kIG1heCBjaGFyc1xyXG4gICAgd2hpbGUgKGlkeCA8IG1hc2subGVuZ3RoICYmIHRoaXMuSXNQYXR0ZXJuTWF0Y2hlcyhtYXNrLmNoYXJDb2RlQXQoaWR4KS50b1N0cmluZygpLCBwYXR0ZXJuKSlcclxuICAgIHsgcGF0dGVybkNvdW50Kys7IGlkeCsrOyB9XHJcblxyXG5cclxuICAgIGlmIChpZHggPCBtYXNrLmxlbmd0aClcclxuICAgICAgY2hhbmdlSW5QYXR0ZXJuLnZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcGF0dGVybkNvdW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIElzUGF0dGVybk1hdGNoZXMobWFzazogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICBmb3IgKGxldCBpOm51bWJlciA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aDsgaSsrKVxyXG4gICAgICBpZiAobWFzayA9PSBwYXR0ZXJuW2ldKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
570
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWdmb3JtYXQubWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tZ2Zvcm1hdC5tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFTbEUsTUFBTSxPQUFPLHNCQUFzQjtJQU9qQyxZQUNZLFFBQXdCLEVBQ3hCLEtBQXVCO1FBRHZCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBUG5DLGtCQUFhLEdBQVksS0FBSyxDQUFDO0lBUzNCLENBQUM7SUFFTCxlQUFlO1FBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUVoRixJQUFH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QUM7cUJBQzlCLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLEVBQUU7Z0JBQ3RYLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztxQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDakQsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQixJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNqRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNwRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztvQkFDdkIsS0FBSyxDQUFD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LElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBRyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLEVBQUc7Z0JBQ3JHLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ25ELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3pELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUN2QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBRW5DO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBRyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxhQUFhLEVBQUc7Z0JBQ3pHLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ25ELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3pELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO1NBQ0Y7UUFDRCxJQUFHLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBQztZQUM1RixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzVCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxjQUFjLEdBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxZQUFZLEdBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxjQUFjLEdBQUMsQ0FBQyxDQUFDO1lBRTNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEYsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFPTSxhQUFhLENBQUMsS0FBSztRQUN4QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQ2hGLElBQUksSUFBSSxHQUFxQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDdEcsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFeEcsUUFBUyxJQUFJLEVBQ2I7WUFDRSxLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUM1QixLQUFLLGdCQUFnQixDQUFDLE9BQU87Z0JBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBRSxPQUFPLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUIsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDakUsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUdELHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsT0FBZSxFQUFFLE9BQXdCO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEQsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBRyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDdEIsT0FBUTtRQUVWLElBQUksQ0FBQyxVQUFVLElBQUksYUFBYSxJQUFJLFVBQVUsSUFBSSxhQUFhLENBQUMsRUFBRTtZQUNoRSxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RCxNQUFNLGVBQWUsR0FBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsZUFBZSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUN6RixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxFQUFDO1lBQzFILE1BQU0sU0FBUyxHQUFhLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVELElBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBQztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM1RTtTQUVGO2FBQUssSUFBRyxDQUFDLFVBQVUsSUFBSSxZQUFZLElBQUksVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUMxSCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUksQ0FBQyxVQUFVLElBQUksYUFBYSxJQUFJLFVBQVUsSUFBSSxhQUFhLENBQUMsRUFBRTtZQUN0RSxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RCxNQUFNLGVBQWUsR0FBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsZUFBZSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUN6RixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUM7WUFDbEUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUU7WUFDbkUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLGFBQWEsSUFBSSxVQUFVLElBQUksYUFBYSxDQUFDLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsTUFBTSxlQUFlLEdBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLGVBQWUsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRTtnQkFDekYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM1RTtTQUVGO2FBQUssSUFBRyxDQUFDLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksUUFBUSxJQUFJLFVBQVUsSUFBSSxRQUFRLENBQUMsRUFBQztZQUNsSCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLElBQUksUUFBUSxDQUFDLEVBQUM7WUFDbEgsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUM7WUFDOUQsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUM7WUFDOUQsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVB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QyxLQUFLLElBQUksQ0FBQyxHQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs0RkE1cEJVLHNCQUFzQjsyREFBdEIsc0JBQXNCO3lHQUF0Qix3QkFBb0Isd0ZBQXBCLG1CQUFlLHdGQUFmLHdCQUFvQiwwRkFBcEIseUJBQXFCOzt1RkFBckIsc0JBQXNCO2NBTGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTthQUN2QjtnR0FxQ1EsWUFBWTtrQkFEbEIsWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFNakMsT0FBTztrQkFETixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQVkxQixZQUFZO2tCQURsQixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQW1MMUIsYUFBYTtrQkFEbkIsWUFBWTttQkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUYXNrTWFnaWNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXNrLm1hZ2ljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyLCBSZWZQYXJhbX0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1BJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7TWFnaWNEaXJlY3RpdmV9IGZyb20gJy4vbWFnaWMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtNZ0RhdGVGb3JtYXR0ZXJ9IGZyb20gJy4uL3BpcGVzL2RhdGUubWFnaWMucGlwZSc7XHJcbmltcG9ydCB7aXNVbmRlZmluZWR9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtFbnZpcm9ubWVudCwgTGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS9lbmdpbmVcIjtcclxuLyoqXHJcbiAqIFBlcmZvcm0gTWFnaWMgdmFsaWRhdGlvbiBvbiBpbnB1dCBjb250cm9scyB3aGljaCBob2xkIGFscGhhbnVtZXJpYyBzdHJpbmdzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1ttZ0Zvcm1hdF0nXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE1nZm9ybWF0TWFnaWNEaXJlY3RpdmUge1xyXG5cclxuICBkYXRlUGFzdGVGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBtYWdpY0RpcjogTWFnaWNEaXJlY3RpdmUgLFxyXG4gICAgcHJvdGVjdGVkIF90YXNrOiBUYXNrTWFnaWNTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBjb250cm9sID0gdGhpcy5fdGFzay5nZXRGb3JtQ29udHJvbCh0aGlzLm1hZ2ljRGlyLnJvd0lkLCB0aGlzLm1hZ2ljRGlyLmlkICk7XHJcblxyXG4gICAgaWYoY29udHJvbCAhPSBudWxsICYmIHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAvLyBnZXQgdGhlIGZpcnN0IGRhdGUgY29udHJvbCdzIGZvcm1hdC5cclxuICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcbiAgICAgIGlmIChwaWMuZ2V0QXR0cigpID09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSApIHtcclxuICAgICAgICB0aGlzLmZvcm1hdERhdGUocGljKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvKipcclxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBwYXR0ZXJuXHJcbiAgICogT24gaW5wdXQsIHZlcmlmaWVzIHRoZSBpbnB1dCBtYXRjaGVzIHRoZSByZXF1aXJlZCBtYXNrXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbkZvY3VzRXZlbnQoJGV2ZW50KXtcclxuICAgIHRoaXMuY2FsY3VsYXRlUGF0dGVybigpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZmxhZyBpcyBuZWVkZWQgdG8gc2tpcCBleGVjdXRpb24gb2YgZGF0ZU1hc2tpbmcoKSBtZXRob2Qgd2hlbiB1c2VyIHBhc3RlIGRhdGUgaW4gaW5wdXQgY29udHJvbC5cclxuICAgICAqIFRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiBpcyBEQVRFLiBCdXQgdG8gY2hlY2sgdHlwZSBvZiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiwgd2VcclxuICAgICBuZWVkIHRvIGV4ZWN1dGUgZ2V0Q29udHJvbE1ldGFkYXRhKCkgbWV0aG9kLiBTbywgdG8gcmVkdWNlIHRoaXMgZXhlY3V0aW9uIG92ZXJsb2FkIHdlIHNldFxyXG4gICAgIFwiZGF0ZVBhc3RlRmxhZ1wiIGRpcmVjdGx5LlxyXG4gICAgICovXHJcbiAgICB0aGlzLmRhdGVQYXN0ZUZsYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbklucHV0RXZlbnQoZXZlbnQpe1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpe1xyXG4gICAgICBpZighdGhpcy5kYXRlUGFzdGVGbGFnKVxyXG4gICAgICAgIHRoaXMuZGF0ZU1hc2tpbmcoZXZlbnQpO1xyXG5cclxuICAgICAgdGhpcy5kYXRlUGFzdGVGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVBhdHRlcm4oKTtcclxuICB9XHJcblxyXG5cclxuICAvL1RoaXMgbWV0aG9kIGluc2VydHMgJy8nIGFzIGEgc2VwYXJhdG9yIHdoaWxlIGVudGVyaW5nIGRhdGUgaW4gdGhlIHRleHRib3guXHJcbiAgLy9FeGFtcGxlOiAxMC8xMC8yMDIzXHJcbiAgZGF0ZU1hc2tpbmcoZXZlbnQpe1xyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgbGV0IGN1cnNvclBvcyA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQuaW5jbHVkZXMoJy8nKT8gJy8nOictJztcclxuXHJcbiAgICBpZihjdXJzb3JQb3MgPj0gaW5wdXQudmFsdWUubGVuZ3RoKSB7XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05Ly1dL2csICcnKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXl5eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS9kZC95eXl5XCIgfHx0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU0teXl5eVwiIHx8dGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcIk1NLWRkLXl5eXlcIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAxJyArIHNlcGFyYXRvcjtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gMiAmJiB2YWx1ZVsxXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IDAgKyB2YWx1ZTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSAzICYmIHZhbHVlWzJdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMikgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoNSk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPj0gMTApXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDEwKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXl5eS9kZC9NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LU1NLWRkXCIgfHwgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXktZGQtTU1cIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMClcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTApO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvZGQvTU1cIiB8fHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJkZC1NTS15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1NTS1kZFwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS1kZC15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTVwiKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwMScgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA1ICYmIHZhbHVlWzRdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMykgKyAnMCcgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA2ICYmIHZhbHVlWzVdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDgpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDgpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJkZC9NTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiZGQvTU1NL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMScgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT1cInl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTU1cIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMCcgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDkpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJ5eXl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LWRkLU1NTVwiICkge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMSlcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTEpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJNTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAxJyArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiTU1NL2RkL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMyk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNSAmJiB2YWx1ZVs0XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMDEnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNiAmJiB2YWx1ZVs1XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMCcgKyB2YWx1ZS5zbGljZSg0KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihjdXJzb3JQb3MgPCBpbnB1dC52YWx1ZS5sZW5ndGggJiYgaW5wdXQudmFsdWUubGVuZ3RoID4gdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdC5sZW5ndGgpe1xyXG4gICAgICBsZXQgaW5wdXREYXRlID0gaW5wdXQudmFsdWU7XHJcbiAgICAgIGxldCBzdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0LTE7XHJcbiAgICAgIGxldCBlbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQtMTtcclxuICAgICAgbGV0IGluZGV4VG9SZW1vdmUgPSBpbnB1dC5zZWxlY3Rpb25TdGFydC0xO1xyXG5cclxuICAgICAgaW5wdXQudmFsdWUgPSBpbnB1dERhdGUuc2xpY2UoMCxpbmRleFRvUmVtb3ZlKSArIGlucHV0RGF0ZS5zbGljZShpbmRleFRvUmVtb3ZlICsgMSk7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHVwcGVyY2FzZS9sb3dlciBjYXNlXHJcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25DaGFuZ2VFdmVudChldmVudCl7XHJcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuX3Rhc2suZ2V0Rm9ybUNvbnRyb2wodGhpcy5tYWdpY0Rpci5yb3dJZCwgdGhpcy5tYWdpY0Rpci5pZCApO1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBjb25zdCBjZW50dXJ5ID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG5cclxuICAgIHN3aXRjaCAgKGF0dHIpXHJcbiAgICB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5mb3JtYXRBbHBoYVVuaWNvZGUgKGNvbnRyb2wpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmZvcm1hdEJvb2xlYW4oY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KGV2ZW50LnRhcmdldC52YWx1ZSwgY2VudHVyeSwgY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRm9ybWF0IHllYXIsIGlmIHVzZXIgZW50ZXJzIDIgZGlnaXRzIGluc3RlYWQgb2YgNCBkaWdpdHMgYXMgcGVyIHRoZSBjZW50dXJ5IGdpdmVuIGluIE1hZ2ljLmluaSBmaWxlICovXHJcbiAgZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KHVzZXJJbnB1dDogc3RyaW5nLCBjZW50dXJ5OiBudW1iZXIsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQ7XHJcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB1c2VySW5wdXQuaW5jbHVkZXMoJy8nKSA/ICcvJyA6IFwiLVwiO1xyXG4gICAgbGV0IGNlbnR1cnlWYWwgPSBwYXJzZUludChjZW50dXJ5LnRvU3RyaW5nKCkuc2xpY2UoMCwgMikpO1xyXG4gICAgaWYodXNlcklucHV0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gO1xyXG5cclxuICAgIGlmICgoZGF0ZUZvcm1hdCA9PSAnZGQvTU1NL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2RkLU1NTS15eXl5JykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2RkLU1NLXl5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2QvTS95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdkLU0teXl5eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTS9kZC95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNTS1kZC15eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNL2QveXl5eScgfHwgZGF0ZUZvcm1hdCA9PSAnTS1kLXl5eXknKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMyKGRhdGVBcnJheSk7XHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZiAoKGRhdGVGb3JtYXQgPT0gJ01NTS9kZC95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNTU0tZGQteXl5eScpKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMyKGRhdGVBcnJheSk7XHJcbiAgICAgIGNvbnN0IGlzTW9udGhJbk51bWJlcjogYm9vbGVhbiA9ICFpc05hTihOdW1iZXIobW9udGgpKTtcclxuICAgICAgaWYgKChpc01vbnRoSW5OdW1iZXIgJiYgZGF5IDwgMzIgJiYgTnVtYmVyKG1vbnRoKSA8IDEzKSB8fCAoIWlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMikpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L01NL2RkJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LU1NLWRkJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMyhkYXRlQXJyYXkpO1xyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5eXkvZGQvTU0nIHx8IGRhdGVGb3JtYXQgPT0gJ3l5eXktZGQtTU0nKSkge1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG4gICAgICBpZiAoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAneXl5eS9kZC9NTU0nIHx8IGRhdGVGb3JtYXQgPT0gJ3l5eXktZGQtTU1NJykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czQoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTS15eScgfHwgZGF0ZUZvcm1hdCA9PSAnZC9NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkLU0teXknKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMxKGRhdGVBcnJheSk7XHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAnTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NLWRkLXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNL2QveXknIHx8IGRhdGVGb3JtYXQgPT0gJ00tZC15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eS9NTS9kZCcgfHwgZGF0ZUZvcm1hdCA9PSAneXktTU0tZGQnKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMzKGRhdGVBcnJheSk7XHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAneXkvZGQvTU0nIHx8IGRhdGVGb3JtYXQgPT0gJ3l5LWRkLU1NJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NTS95eScgfHwgZGF0ZUZvcm1hdCA9PSAnZGQtTU1NLXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMShkYXRlQXJyYXkpO1xyXG4gICAgICBjb25zdCBpc01vbnRoSW5OdW1iZXI6IGJvb2xlYW4gPSAhaXNOYU4oTnVtYmVyKG1vbnRoKSk7XHJcbiAgICAgIGlmICgoaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyICYmIE51bWJlcihtb250aCkgPCAxMykgfHwgKCFpc01vbnRoSW5OdW1iZXIgJiYgZGF5IDwgMzIpKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAneXkvZGQvTU1NJyB8fCBkYXRlRm9ybWF0ID09ICd5eS1kZC1NTU0nKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHM0KGRhdGVBcnJheSk7XHJcbiAgICAgIGNvbnN0IGlzTW9udGhJbk51bWJlcjogYm9vbGVhbiA9ICFpc05hTihOdW1iZXIobW9udGgpKTtcclxuICAgICAgaWYgKChpc01vbnRoSW5OdW1iZXIgJiYgZGF5IDwgMzIgJiYgTnVtYmVyKG1vbnRoKSA8IDEzKSB8fCAoIWlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMikpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NTS1kZC15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5eXkvTU1NL2RkJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LU1NTS1kZCcgfHxkYXRlRm9ybWF0ID09ICd5eS9NTU0vZGQnIHx8IGRhdGVGb3JtYXQgPT0gJ3l5LU1NTS1kZCcpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czMoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoZGF0ZUZvcm1hdCA9PSAneXl5eS9NTScgfHwgZGF0ZUZvcm1hdCA9PSAneXl5eS1NTScpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzFdO1xyXG4gICAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVBcnJheVswXSk7XHJcbiAgICAgIGlmIChOdW1iZXIobW9udGgpIDwgMTMpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoMSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVllYXIoZGF5Om51bWJlciwgbW9udGg6c3RyaW5nLCB5ZWFyOm51bWJlciwgc2VwYXJhdG9yOnN0cmluZywgY2VudHVyeTpudW1iZXIsIGNlbnR1cnlWYWw6bnVtYmVyLCBjb250cm9sOkFic3RyYWN0Q29udHJvbCl7XHJcbiAgICBsZXQgdXBkYXRlZFllYXIgPSB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyID8gKHllYXIgPCBjZW50dXJ5ICUgMTAwID8gY2VudHVyeVZhbCArIDEgOiBjZW50dXJ5VmFsKSArICcnICsgeWVhciA6XHJcbiAgICAgIHllYXIudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyAoeWVhciA8IGNlbnR1cnkgJSAxMDAgPyBjZW50dXJ5VmFsICsgMSA6IGNlbnR1cnlWYWwpICsgJzAnICsgeWVhciA6XHJcbiAgICAgICAgeWVhcjtcclxuXHJcbiAgICBjb250cm9sLnNldFZhbHVlKG5ldyBEYXRlKGAke3VwZGF0ZWRZZWFyfSR7c2VwYXJhdG9yfSR7bW9udGh9JHtzZXBhcmF0b3J9JHtkYXl9YCkpXHJcbiAgfVxyXG5cclxuICBnZXREYXRlU2VnbWVudHMxKGRhdGVBcnJheSl7XHJcbiAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZUFycmF5WzBdKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzFdO1xyXG4gICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlQXJyYXlbMl0pO1xyXG4gICAgcmV0dXJuIFtkYXksIG1vbnRoLCB5ZWFyXTtcclxuICB9XHJcblxyXG4gIGdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KXtcclxuICAgIGNvbnN0IGRheSA9IE51bWJlcihkYXRlQXJyYXlbMV0pO1xyXG4gICAgY29uc3QgbW9udGggPSBkYXRlQXJyYXlbMF07XHJcbiAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVBcnJheVsyXSk7XHJcbiAgICByZXR1cm4gW2RheSwgbW9udGgsIHllYXJdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVNlZ21lbnRzMyhkYXRlQXJyYXkpe1xyXG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVBcnJheVsyXSk7XHJcbiAgICBjb25zdCBtb250aCA9IGRhdGVBcnJheVsxXTtcclxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZUFycmF5WzBdKTtcclxuICAgIHJldHVybiBbZGF5LCBtb250aCwgeWVhcl07XHJcbiAgfVxyXG5cclxuICBnZXREYXRlU2VnbWVudHM0KGRhdGVBcnJheSl7XHJcbiAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZUFycmF5WzFdKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzJdO1xyXG4gICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlQXJyYXlbMF0pO1xyXG4gICAgcmV0dXJuIFtkYXksIG1vbnRoLCB5ZWFyXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjYWxjdWxhdGVQYXR0ZXJuICgpXHJcbiAge1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuXHJcbiAgICBpZihjb250cm9sICE9IG51bGwgKSB7XHJcbiAgICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5fdGFzay5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKHRoaXMubWFnaWNEaXIuaWQpLmRhdGFUeXBlO1xyXG4gICAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUGF0dGVybkdlbmVyYXRpb25OZWVkZWQoYXR0ciwgcGljKSkge1xyXG4gICAgICAgICAgbGV0IHBhdHRlcm46IHN0cmluZyA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuKGF0dHIsIHBpYyk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC52YWxpZGF0b3IgPT0gbnVsbClcclxuICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChhdHRyID09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yID09IG51bGwpXHJcbiAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHBpYy5nZXRNYXNrTGVuZ3RoKCkpKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gcmUtc2V0IGFsbCB2YWxpZGF0b3JzIGFnYWluXHJcbiAgICAgICAgICAgICAgaWYgKHBpYy5pc0Zvcm1hdEV4cCgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHRoaXMubWFnaWNEaXIucm93SWQpKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1hZ2ljRGlyLnJvd0lkID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFtjb250cm9sLnZhbGlkYXRvciwgdGhpcy5fdGFzay5jdXN0b21WYWxpZGF0b3IodGhpcy5tYWdpY0Rpci5yb3dJZCwgdGhpcy5tYWdpY0Rpci5pZCldKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFtjb250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1heExlbmd0aChwaWMuZ2V0TWFza0xlbmd0aCgpKSk7XHJcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGUocGljOiBQSUMpOiB2b2lkIHtcclxuICAgIGxldCBtZ0RhdGVGb3JtYXR0ZXIgPSBuZXcgTWdEYXRlRm9ybWF0dGVyKCk7XHJcbiAgICB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID0gbWdEYXRlRm9ybWF0dGVyLkNvbnZlcnRNZ0RhdGVGb3JtYXRUb0FuZ3VsYXIocGljLmdldE1hc2soKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBmb3JtYXRBbHBoYVVuaWNvZGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgbmV3VmFsdWU6IHN0cmluZyA9IHRoaXMuX3Rhc2suR2V0UmFuZ2VkVmFsdWUodGhpcy5tYWdpY0Rpci5pZCwgdmFsdWUpO1xyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbClcclxuICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcbiAgICAgIGxldCBtYXNrOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgICBsZXQgdmFsdWVTdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgc3dpdGNoIChtYXNrLmNoYXJDb2RlQXQoaSkpIHtcclxuICAgICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19VOlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHZhbHVlU3RyLkFwcGVuZCh2YWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWVTdHIuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGZvcm1hdEJvb2xlYW4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQgIHtcclxuICAgIGxldCB2YWx1ZTogc3RyaW5nID0gY29udHJvbC52YWx1ZTtcclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuZXdWYWx1ZTogc3RyaW5nID0gdGhpcy5fdGFzay5HZXRSYW5nZWRWYWx1ZSAodGhpcy5tYWdpY0Rpci5pZCAsIHZhbHVlKTtcclxuICAgICAgaWYgKG5ld1ZhbHVlLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aCh2YWx1ZS50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmcm9tICBmbGQncyAgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZW5lcmF0ZVBhdHRlcm4gKGF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSwgcGljOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhdHRlcm46IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIHN3aXRjaCAoYXR0cmlidXRlKVxyXG4gICAge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBwYXR0ZXJuID0gdGhpcy5nZW5lcmF0ZVBhdHRlcm5Gb3JOdW1iZXIocGljKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBwYXR0ZXJuID0gdGhpcy5nZW5lcmF0ZVBhdHRlcm5Gb3JBbHBoYShwaWMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmb3IgQWxwaGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdlbmVyYXRlUGF0dGVybkZvck51bWJlcihwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcGF0dGVyblN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyICgpO1xyXG5cclxuICAgIHBhdHRlcm5TdHIuQXBwZW5kKCdeJyk7XHJcbiAgICBpZiAocGljLmlzTmVnYXRpdmUoKSlcclxuICAgICAgcGF0dGVyblN0ci5BcHBlbmQoJy0/Jyk7XHJcbiAgICBpZiAocGljLmdldFdob2xlcygpKVxyXG4gICAgICBwYXR0ZXJuU3RyLkFwcGVuZEZvcm1hdCgnXFxcXGR7ezB9LHsxfX0nLCAwLCBwaWMuZ2V0V2hvbGVzKCkpO1xyXG4gICAgaWYgKHBpYy5nZXREZWMoKSlcclxuICAgICAgcGF0dGVyblN0ci5BcHBlbmRGb3JtYXQoJyhcXFxcLlxcXFxkezEsezB9fSk/JywgcGljLmdldERlYygpKTtcclxuICAgIHBhdHRlcm5TdHIuQXBwZW5kKCckJyk7XHJcblxyXG4gICAgcmV0dXJuIHBhdHRlcm5TdHIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBpc1BhdHRlcm5HZW5lcmF0aW9uTmVlZGVkIChhdHRyIDogU3RvcmFnZUF0dHJpYnV0ZSwgcGljIDogUElDKTogYm9vbGVhbiB7XHJcblxyXG4gICAgc3dpdGNoIChhdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICByZXR1cm4gKHBpYy5nZXRNYXNrQ2hhcnMoKSA+IDApID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmb3IgQWxwaGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdlbmVyYXRlUGF0dGVybkZvckFscGhhKHBpYyA6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY250OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlucHV0QWxsQ2hhcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjbG9zZVNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0ICBtYXNrOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgbGV0ICBwYXR0ZXJuOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICBwYXR0ZXJuLkFwcGVuZCgnXicpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG1hc2subGVuZ3RoOylcclxuICAgIHtcclxuICAgICAgLy9zdGFydCBuZXcgc3Vic2V0ICwgaWYgbWFza1tpXSBpcyBvbmUgb2YgdGhlc2UuXHJcbiAgICAgIGlmIChpbnB1dEFsbENoYXJzICYmIChtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19OIHx8IG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX1UgfHwgbWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfTFxyXG4gICAgICAgIHx8IG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX1gpKVxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQoJygnKTtcclxuICAgICAgICBjbG9zZVNldCA9IHRydWU7XHJcbiAgICAgICAgaW5wdXRBbGxDaGFycyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbnQgPSAwO1xyXG4gICAgICBzd2l0Y2ggKG1hc2suY2hhckNvZGVBdChpKSlcclxuICAgICAge1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19VOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19YOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhdHRlcm4uQXBwZW5kKCcuJyk7XHJcbiAgICAgICAgICBsZXQgaW5wdXRBbGxDaGFyc1JlZjogUmVmUGFyYW08Ym9vbGVhbj4gPSBuZXcgUmVmUGFyYW08Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgICAgICAgbGV0IGRpcnM6IHN0cmluZyA9ICBQSUNJbnRlcmZhY2UuUElDX1UudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGRpcnMgKz0gUElDSW50ZXJmYWNlLlBJQ19MLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBkaXJzICs9IFBJQ0ludGVyZmFjZS5QSUNfWC50b1N0cmluZygpO1xyXG4gICAgICAgICAgY250ID0gdGhpcy5nZXREaXJlY3RpdmVDb3VudChtYXNrLCBpLCBkaXJzLCBpbnB1dEFsbENoYXJzUmVmKTtcclxuICAgICAgICAgIGlucHV0QWxsQ2hhcnMgPSBpbnB1dEFsbENoYXJzUmVmLnZhbHVlO1xyXG4gICAgICAgICAgaSArPSBjbnQ7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19OOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhdHRlcm4uQXBwZW5kKCdcXFxcZCcpO1xyXG4gICAgICAgICAgbGV0IGlucHV0QWxsQ2hhcnNSZWY6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgICAgICAgIGNudCA9IHRoaXMuZ2V0RGlyZWN0aXZlQ291bnQobWFzaywgaSwgUElDSW50ZXJmYWNlLlBJQ19MLnRvU3RyaW5nKCksIGlucHV0QWxsQ2hhcnNSZWYpO1xyXG4gICAgICAgICAgaW5wdXRBbGxDaGFycyA9IGlucHV0QWxsQ2hhcnNSZWYudmFsdWU7XHJcbiAgICAgICAgICBpICs9IGNudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHBhdHRlcm4uQXBwZW5kKG1hc2tbaV0pO1xyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNudCA+IDApXHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmRGb3JtYXQoJ3t7MH0sezF9fScsIGlucHV0QWxsQ2hhcnMgPyBjbnQgOiAwLCBjbnQpO1xyXG4gICAgICBpZiAoY2xvc2VTZXQpXHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQoJyknKTtcclxuICAgICAgY2xvc2VTZXQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcbiAgICBwYXR0ZXJuLkFwcGVuZCgnJCcpO1xyXG4gICAgcmV0dXJuIHBhdHRlcm4uVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBnZXREaXJlY3RpdmVDb3VudChtYXNrOiBzdHJpbmcsIGlkeDogbnVtYmVyLCBwYXR0ZXJuOiBzdHJpbmcsIGNoYW5nZUluUGF0dGVybjogUmVmUGFyYW08Ym9vbGVhbj4gKTogbnVtYmVyICB7XHJcblxyXG4gICAgY2hhbmdlSW5QYXR0ZXJuLnZhbHVlID0gZmFsc2U7XHJcbiAgICBsZXQgcGF0dGVybkNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIGZpbmQgbWF4IGNoYXJzXHJcbiAgICB3aGlsZSAoaWR4IDwgbWFzay5sZW5ndGggJiYgdGhpcy5Jc1BhdHRlcm5NYXRjaGVzKG1hc2suY2hhckNvZGVBdChpZHgpLnRvU3RyaW5nKCksIHBhdHRlcm4pKVxyXG4gICAgeyBwYXR0ZXJuQ291bnQrKzsgaWR4Kys7IH1cclxuXHJcblxyXG4gICAgaWYgKGlkeCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICBjaGFuZ2VJblBhdHRlcm4udmFsdWUgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuQ291bnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgSXNQYXR0ZXJuTWF0Y2hlcyhtYXNrOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGZvciAobGV0IGk6bnVtYmVyID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoOyBpKyspXHJcbiAgICAgIGlmIChtYXNrID09IHBhdHRlcm5baV0pXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
@@ -3558,23 +3558,18 @@ class MgformatMagicDirective {
|
|
3558
3558
|
const dateArray = userInput.split(separator);
|
3559
3559
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
3560
3560
|
const isMonthInNumber = !isNaN(Number(month));
|
3561
|
-
if (isMonthInNumber
|
3562
|
-
if (day < 32 && Number(month) < 13) {
|
3563
|
-
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3564
|
-
}
|
3565
|
-
}
|
3566
|
-
else if (day < 32) {
|
3561
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
3567
3562
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3568
3563
|
}
|
3569
3564
|
}
|
3570
|
-
else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy')) {
|
3565
|
+
else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy' || dateFormat == 'd/M/yyyy' || dateFormat == 'd-M-yyyy')) {
|
3571
3566
|
const dateArray = userInput.split(separator);
|
3572
3567
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
3573
3568
|
if ((day < 32 && month < 13)) {
|
3574
3569
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3575
3570
|
}
|
3576
3571
|
}
|
3577
|
-
else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy')) {
|
3572
|
+
else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy' || dateFormat == 'M/d/yyyy' || dateFormat == 'M-d-yyyy')) {
|
3578
3573
|
const dateArray = userInput.split(separator);
|
3579
3574
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
3580
3575
|
if ((day < 32 && month < 13)) {
|
@@ -3585,12 +3580,7 @@ class MgformatMagicDirective {
|
|
3585
3580
|
const dateArray = userInput.split(separator);
|
3586
3581
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
3587
3582
|
const isMonthInNumber = !isNaN(Number(month));
|
3588
|
-
if (isMonthInNumber
|
3589
|
-
if (day < 32 && Number(month) < 13) {
|
3590
|
-
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3591
|
-
}
|
3592
|
-
}
|
3593
|
-
else if (day < 32) {
|
3583
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
3594
3584
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3595
3585
|
}
|
3596
3586
|
}
|
@@ -3612,23 +3602,18 @@ class MgformatMagicDirective {
|
|
3612
3602
|
const dateArray = userInput.split(separator);
|
3613
3603
|
const [day, month, year] = this.getDateSegments4(dateArray);
|
3614
3604
|
const isMonthInNumber = !isNaN(Number(month));
|
3615
|
-
if (isMonthInNumber
|
3616
|
-
if (day < 32 && Number(month) < 13) {
|
3617
|
-
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3618
|
-
}
|
3619
|
-
}
|
3620
|
-
else if (day < 32) {
|
3605
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
3621
3606
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3622
3607
|
}
|
3623
3608
|
}
|
3624
|
-
else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy')) {
|
3609
|
+
else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy' || dateFormat == 'd/M/yy' || dateFormat == 'd-M-yy')) {
|
3625
3610
|
const dateArray = userInput.split(separator);
|
3626
3611
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
3627
3612
|
if ((day < 32 && month < 13)) {
|
3628
3613
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3629
3614
|
}
|
3630
3615
|
}
|
3631
|
-
else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy')) {
|
3616
|
+
else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy' || dateFormat == 'M/d/yy' || dateFormat == 'M-d-yy')) {
|
3632
3617
|
const dateArray = userInput.split(separator);
|
3633
3618
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
3634
3619
|
if ((day < 32 && month < 13)) {
|
@@ -3652,24 +3637,43 @@ class MgformatMagicDirective {
|
|
3652
3637
|
else if ((dateFormat == 'dd/MMM/yy' || dateFormat == 'dd-MMM-yy')) {
|
3653
3638
|
const dateArray = userInput.split(separator);
|
3654
3639
|
const [day, month, year] = this.getDateSegments1(dateArray);
|
3655
|
-
|
3640
|
+
const isMonthInNumber = !isNaN(Number(month));
|
3641
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
3656
3642
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3657
3643
|
}
|
3658
3644
|
}
|
3659
3645
|
else if ((dateFormat == 'yy/dd/MMM' || dateFormat == 'yy-dd-MMM')) {
|
3660
3646
|
const dateArray = userInput.split(separator);
|
3661
3647
|
const [day, month, year] = this.getDateSegments4(dateArray);
|
3662
|
-
|
3648
|
+
const isMonthInNumber = !isNaN(Number(month));
|
3649
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
3663
3650
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3664
3651
|
}
|
3665
3652
|
}
|
3666
3653
|
else if ((dateFormat == 'MMM/dd/yy' || dateFormat == 'MMM-dd-yy')) {
|
3667
3654
|
const dateArray = userInput.split(separator);
|
3668
3655
|
const [day, month, year] = this.getDateSegments2(dateArray);
|
3669
|
-
|
3656
|
+
const isMonthInNumber = !isNaN(Number(month));
|
3657
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
3658
|
+
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3659
|
+
}
|
3660
|
+
}
|
3661
|
+
else if ((dateFormat == 'yyyy/MMM/dd' || dateFormat == 'yyyy-MMM-dd' || dateFormat == 'yy/MMM/dd' || dateFormat == 'yy-MMM-dd')) {
|
3662
|
+
const dateArray = userInput.split(separator);
|
3663
|
+
const [day, month, year] = this.getDateSegments3(dateArray);
|
3664
|
+
const isMonthInNumber = !isNaN(Number(month));
|
3665
|
+
if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
|
3670
3666
|
this.updateYear(day, month, year, separator, century, centuryVal, control);
|
3671
3667
|
}
|
3672
3668
|
}
|
3669
|
+
else if (dateFormat == 'yyyy/MM' || dateFormat == 'yyyy-MM') {
|
3670
|
+
const dateArray = userInput.split(separator);
|
3671
|
+
const month = dateArray[1];
|
3672
|
+
const year = Number(dateArray[0]);
|
3673
|
+
if (Number(month) < 13) {
|
3674
|
+
this.updateYear(1, month, year, separator, century, centuryVal, control);
|
3675
|
+
}
|
3676
|
+
}
|
3673
3677
|
}
|
3674
3678
|
updateYear(day, month, year, separator, century, centuryVal, control) {
|
3675
3679
|
let updatedYear = year.toString().length === 2 ? (year < century % 100 ? centuryVal + 1 : centuryVal) + '' + year :
|