@tricoteuses/assemblee 0.25.1 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/bugs/acteur-00010.js +9 -7
- package/lib/bugs/agenda-00002.js +6 -6
- package/lib/bugs/agenda-00002.mjs +1 -1
- package/lib/bugs/agenda-00008.js +6 -6
- package/lib/bugs/agenda-00011.js +5 -5
- package/lib/bugs.js +7 -5
- package/lib/cleaners/actes_legislatifs.js +3 -1
- package/lib/cleaners/acteurs.js +43 -4
- package/lib/cleaners/acteurs.mjs +25 -1
- package/lib/cleaners/amendements.js +2 -2
- package/lib/cleaners/amendements.mjs +3 -7
- package/lib/cleaners/documents.js +3 -1
- package/lib/cleaners/dossiers_legislatifs.js +3 -1
- package/lib/cleaners/organes.js +19 -2
- package/lib/cleaners/organes.mjs +18 -1
- package/lib/cleaners/reunions.js +3 -3
- package/lib/cleaners/scrutins.js +5 -3
- package/lib/cleaners/xml.js +3 -1
- package/lib/datasets.js +1 -1
- package/lib/datasets.mjs +1 -1
- package/lib/dates.js +1 -1
- package/lib/dates.mjs +1 -1
- package/lib/dossiers_legislatifs.js +3 -1
- package/lib/file_systems.js +11 -5
- package/lib/git.js +3 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -2
- package/lib/index.mjs +3 -2
- package/lib/inserters.js +3 -1
- package/lib/inserters.mjs +1 -1
- package/lib/loaders.js +1 -1
- package/lib/loaders.mjs +1 -1
- package/lib/parsers/documents.js +2 -2
- package/lib/parsers/documents.mjs +2 -2
- package/lib/parsers/recherche_amendements.js +4 -2
- package/lib/raw_types/acteurs_et_organes.d.ts +181 -13
- package/lib/raw_types/acteurs_et_organes.js +329 -62
- package/lib/raw_types/acteurs_et_organes.mjs +318 -55
- package/lib/raw_types/agendas.d.ts +2 -1
- package/lib/raw_types/agendas.js +8 -7
- package/lib/raw_types/agendas.mjs +4 -3
- package/lib/raw_types/amendements.d.ts +2 -2
- package/lib/raw_types/amendements.js +7 -7
- package/lib/raw_types/amendements.mjs +3 -3
- package/lib/raw_types/dossiers_legislatifs.d.ts +73 -714
- package/lib/raw_types/dossiers_legislatifs.js +177 -1666
- package/lib/raw_types/dossiers_legislatifs.mjs +169 -1640
- package/lib/raw_types/scrutins.js +4 -4
- package/lib/scripts/bugs_helper.js +2 -2
- package/lib/scripts/clean_data.js +4 -4
- package/lib/scripts/clean_data.mjs +2 -2
- package/lib/scripts/clean_reorganized_data.js +4 -4
- package/lib/scripts/clean_reorganized_data.mjs +1 -1
- package/lib/scripts/diff_amendements.js +2 -2
- package/lib/scripts/document_dossiers_legislatifs.js +10 -10
- package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
- package/lib/scripts/merge_scrutins.js +3 -1
- package/lib/scripts/parse_textes_lois.js +3 -1
- package/lib/scripts/raw_types_from_amendements.js +3 -1
- package/lib/scripts/raw_types_from_amendements.mjs +1 -1
- package/lib/scripts/reorganize_data.js +199 -140
- package/lib/scripts/reorganize_data.mjs +46 -2
- package/lib/scripts/retrieve_deputes_photos.js +4 -4
- package/lib/scripts/retrieve_documents.js +5 -3
- package/lib/scripts/retrieve_open_data.js +4 -2
- package/lib/scripts/retrieve_open_data.mjs +2 -2
- package/lib/scripts/retrieve_pending_amendments.js +168 -155
- package/lib/scripts/retrieve_senateurs_photos.js +2 -2
- package/lib/scripts/retrieve_textes_lois.js +6 -6
- package/lib/scripts/test_load.js +4 -2
- package/lib/scripts/test_load.mjs +2 -2
- package/lib/scripts/test_load_big_files.js +4 -2
- package/lib/scripts/test_load_big_files.mjs +2 -2
- package/lib/scripts/validate_json.js +2 -2
- package/lib/shared_types/codes_actes.d.ts +413 -0
- package/lib/shared_types/codes_actes.js +262 -0
- package/lib/shared_types/codes_actes.mjs +227 -0
- package/lib/types/acteurs_et_organes.d.ts +48 -27
- package/lib/types/acteurs_et_organes.js +134 -41
- package/lib/types/acteurs_et_organes.mjs +128 -35
- package/lib/types/agendas.js +4 -4
- package/lib/types/amendements.js +4 -4
- package/lib/types/dossiers_legislatifs.d.ts +1 -413
- package/lib/types/dossiers_legislatifs.js +14 -264
- package/lib/types/dossiers_legislatifs.mjs +6 -231
- package/lib/types/scrutins.js +4 -4
- package/lib/urls.js +1 -1
- package/lib/urls.mjs +1 -1
- package/package.json +6 -6
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.array.slice.js");
|
|
4
4
|
|
|
5
|
-
require("core-js/modules/es.object.to-string.js");
|
|
6
|
-
|
|
7
5
|
require("core-js/modules/es.function.name.js");
|
|
8
6
|
|
|
9
7
|
require("core-js/modules/es.array.from.js");
|
|
@@ -22,12 +20,12 @@ require("core-js/modules/web.dom-collections.iterator.js");
|
|
|
22
20
|
|
|
23
21
|
require("core-js/modules/es.array.is-array.js");
|
|
24
22
|
|
|
23
|
+
require("core-js/modules/es.regexp.exec.js");
|
|
24
|
+
|
|
25
25
|
require("core-js/modules/es.date.to-json.js");
|
|
26
26
|
|
|
27
27
|
require("core-js/modules/es.date.to-string.js");
|
|
28
28
|
|
|
29
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
30
|
-
|
|
31
29
|
require("core-js/modules/es.string.replace.js");
|
|
32
30
|
|
|
33
31
|
require("core-js/modules/es.string.trim.js");
|
|
@@ -36,6 +34,8 @@ require("core-js/modules/es.array.map.js");
|
|
|
36
34
|
|
|
37
35
|
require("core-js/modules/es.array.reduce.js");
|
|
38
36
|
|
|
37
|
+
require("core-js/modules/es.object.to-string.js");
|
|
38
|
+
|
|
39
39
|
require("core-js/modules/es.array.join.js");
|
|
40
40
|
|
|
41
41
|
require("core-js/modules/es.array.concat.js");
|
|
@@ -196,7 +196,7 @@ function reorganizeData(options) {
|
|
|
196
196
|
var gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
|
|
197
197
|
var validateRawData = !options["no-validate-raw"];
|
|
198
198
|
options.categories.map(function (datasetName) {
|
|
199
|
-
return _assert["default"].notStrictEqual(_datasets.EnabledDatasets[datasetName], undefined, "
|
|
199
|
+
return _assert["default"].notStrictEqual(_datasets.EnabledDatasets[datasetName], undefined, "Unknown name of dataset: ".concat(datasetName));
|
|
200
200
|
});
|
|
201
201
|
var enabledDatasets = options.categories.reduce(function (enabledDatasets, datasetName) {
|
|
202
202
|
return enabledDatasets | _datasets.EnabledDatasets[datasetName];
|
|
@@ -309,15 +309,64 @@ function reorganizeData(options) {
|
|
|
309
309
|
|
|
310
310
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
311
311
|
{
|
|
312
|
-
var
|
|
312
|
+
var deportsByActeurUid = {};
|
|
313
313
|
|
|
314
|
-
if (_fsExtra["default"].existsSync(_path["default"].join(originalJsonDirectoryOrFilePath, "
|
|
315
|
-
var _iterator6 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["
|
|
314
|
+
if (_fsExtra["default"].existsSync(_path["default"].join(originalJsonDirectoryOrFilePath, "deport"))) {
|
|
315
|
+
var _iterator6 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["deport"])),
|
|
316
316
|
_step6;
|
|
317
317
|
|
|
318
318
|
try {
|
|
319
319
|
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
320
|
-
var
|
|
320
|
+
var deportSplitPath = _step6.value;
|
|
321
|
+
var deportFilename = deportSplitPath[deportSplitPath.length - 1];
|
|
322
|
+
|
|
323
|
+
if (!deportFilename.endsWith(".json")) {
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
var deportOriginalFilePath = _path["default"].join.apply(_path["default"], [originalJsonDirectoryOrFilePath].concat(_toConsumableArray(deportSplitPath)));
|
|
328
|
+
|
|
329
|
+
if (options.verbose) {
|
|
330
|
+
console.log(" Loading \"deport\" file: ".concat(deportOriginalFilePath, "\u2026"));
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
var deportOriginalJson = _fsExtra["default"].readFileSync(deportOriginalFilePath, {
|
|
334
|
+
encoding: "utf8"
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
var deportOriginal = validateRawData ? _acteurs_et_organes.Convert.toDeport(deportOriginalJson) : JSON.parse(deportOriginalJson);
|
|
338
|
+
var deport = deportOriginal.deport;
|
|
339
|
+
var _deports = deportsByActeurUid[deport.acteurRef];
|
|
340
|
+
|
|
341
|
+
if (_deports === undefined) {
|
|
342
|
+
_deports = deportsByActeurUid[deport.acteurRef] = [];
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
_deports.push(deport);
|
|
346
|
+
}
|
|
347
|
+
} catch (err) {
|
|
348
|
+
_iterator6.e(err);
|
|
349
|
+
} finally {
|
|
350
|
+
_iterator6.f();
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
for (var _i = 0, _Object$values = Object.values(deportsByActeurUid); _i < _Object$values.length; _i++) {
|
|
354
|
+
var deports = _Object$values[_i];
|
|
355
|
+
deports.sort(function (a, b) {
|
|
356
|
+
return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
var mandatsByActeurUid = {};
|
|
362
|
+
|
|
363
|
+
if (_fsExtra["default"].existsSync(_path["default"].join(originalJsonDirectoryOrFilePath, "mandat"))) {
|
|
364
|
+
var _iterator7 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["mandat"])),
|
|
365
|
+
_step7;
|
|
366
|
+
|
|
367
|
+
try {
|
|
368
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
369
|
+
var mandatSplitPath = _step7.value;
|
|
321
370
|
var mandatFilename = mandatSplitPath[mandatSplitPath.length - 1];
|
|
322
371
|
|
|
323
372
|
if (!mandatFilename.endsWith(".json")) {
|
|
@@ -345,25 +394,25 @@ function reorganizeData(options) {
|
|
|
345
394
|
_mandats.push(mandat);
|
|
346
395
|
}
|
|
347
396
|
} catch (err) {
|
|
348
|
-
|
|
397
|
+
_iterator7.e(err);
|
|
349
398
|
} finally {
|
|
350
|
-
|
|
399
|
+
_iterator7.f();
|
|
351
400
|
}
|
|
352
401
|
|
|
353
|
-
for (var
|
|
354
|
-
var mandats = _Object$
|
|
402
|
+
for (var _i2 = 0, _Object$values2 = Object.values(mandatsByActeurUid); _i2 < _Object$values2.length; _i2++) {
|
|
403
|
+
var mandats = _Object$values2[_i2];
|
|
355
404
|
mandats.sort(function (a, b) {
|
|
356
405
|
return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
|
|
357
406
|
});
|
|
358
407
|
}
|
|
359
408
|
}
|
|
360
409
|
|
|
361
|
-
var
|
|
362
|
-
|
|
410
|
+
var _iterator8 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["acteur"])),
|
|
411
|
+
_step8;
|
|
363
412
|
|
|
364
413
|
try {
|
|
365
|
-
for (
|
|
366
|
-
var acteurSplitPath =
|
|
414
|
+
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
415
|
+
var acteurSplitPath = _step8.value;
|
|
367
416
|
var acteurFilename = acteurSplitPath[acteurSplitPath.length - 1];
|
|
368
417
|
|
|
369
418
|
if (!acteurFilename.endsWith(".json")) {
|
|
@@ -383,6 +432,16 @@ function reorganizeData(options) {
|
|
|
383
432
|
var acteurOriginal = validateRawData ? _acteurs_et_organes.Convert.toActeur(acteurOriginalJson) : JSON.parse(acteurOriginalJson);
|
|
384
433
|
var _acteur = acteurOriginal.acteur;
|
|
385
434
|
var _acteurUid = _acteur.uid["#text"];
|
|
435
|
+
var _deports2 = deportsByActeurUid[_acteurUid];
|
|
436
|
+
|
|
437
|
+
if (_deports2 !== undefined) {
|
|
438
|
+
_assert["default"].strictEqual(_acteur.deports, undefined);
|
|
439
|
+
|
|
440
|
+
_acteur.deports = {
|
|
441
|
+
deport: _deports2
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
|
|
386
445
|
var _mandats2 = mandatsByActeurUid[_acteurUid];
|
|
387
446
|
|
|
388
447
|
if (_mandats2 !== undefined) {
|
|
@@ -400,17 +459,17 @@ function reorganizeData(options) {
|
|
|
400
459
|
});
|
|
401
460
|
}
|
|
402
461
|
} catch (err) {
|
|
403
|
-
|
|
462
|
+
_iterator8.e(err);
|
|
404
463
|
} finally {
|
|
405
|
-
|
|
464
|
+
_iterator8.f();
|
|
406
465
|
}
|
|
407
466
|
|
|
408
|
-
var
|
|
409
|
-
|
|
467
|
+
var _iterator9 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDirectoryOrFilePath, ["organe"])),
|
|
468
|
+
_step9;
|
|
410
469
|
|
|
411
470
|
try {
|
|
412
|
-
for (
|
|
413
|
-
var organeSplitPath =
|
|
471
|
+
for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
|
|
472
|
+
var organeSplitPath = _step9.value;
|
|
414
473
|
var organeFilename = organeSplitPath[organeSplitPath.length - 1];
|
|
415
474
|
|
|
416
475
|
if (!organeFilename.endsWith(".json")) {
|
|
@@ -437,9 +496,9 @@ function reorganizeData(options) {
|
|
|
437
496
|
});
|
|
438
497
|
}
|
|
439
498
|
} catch (err) {
|
|
440
|
-
|
|
499
|
+
_iterator9.e(err);
|
|
441
500
|
} finally {
|
|
442
|
-
|
|
501
|
+
_iterator9.f();
|
|
443
502
|
}
|
|
444
503
|
}
|
|
445
504
|
break;
|
|
@@ -457,12 +516,12 @@ function reorganizeData(options) {
|
|
|
457
516
|
}
|
|
458
517
|
|
|
459
518
|
if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
|
|
460
|
-
var
|
|
461
|
-
|
|
519
|
+
var _iterator10 = _createForOfIteratorHelper(_datasets.datasets.agendas),
|
|
520
|
+
_step10;
|
|
462
521
|
|
|
463
522
|
try {
|
|
464
|
-
for (
|
|
465
|
-
var _dataset =
|
|
523
|
+
for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
|
|
524
|
+
var _dataset = _step10.value;
|
|
466
525
|
|
|
467
526
|
var _originalJsonDirectoryOrFilePath = _path["default"].join(dataDir, _dataset.filename);
|
|
468
527
|
|
|
@@ -485,12 +544,12 @@ function reorganizeData(options) {
|
|
|
485
544
|
|
|
486
545
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir);
|
|
487
546
|
|
|
488
|
-
var
|
|
489
|
-
|
|
547
|
+
var _iterator11 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir)),
|
|
548
|
+
_step11;
|
|
490
549
|
|
|
491
550
|
try {
|
|
492
|
-
for (
|
|
493
|
-
var _filename =
|
|
551
|
+
for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
|
|
552
|
+
var _filename = _step11.value;
|
|
494
553
|
|
|
495
554
|
if (_filename[0] === ".") {
|
|
496
555
|
continue;
|
|
@@ -499,9 +558,9 @@ function reorganizeData(options) {
|
|
|
499
558
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir, _filename));
|
|
500
559
|
}
|
|
501
560
|
} catch (err) {
|
|
502
|
-
|
|
561
|
+
_iterator11.e(err);
|
|
503
562
|
} finally {
|
|
504
|
-
|
|
563
|
+
_iterator11.f();
|
|
505
564
|
}
|
|
506
565
|
|
|
507
566
|
switch (_dataset.structure) {
|
|
@@ -513,30 +572,30 @@ function reorganizeData(options) {
|
|
|
513
572
|
|
|
514
573
|
var _originalData = validateRawData ? _agendas.Convert.toAgendas(_originalJson) : JSON.parse(_originalJson);
|
|
515
574
|
|
|
516
|
-
var
|
|
517
|
-
|
|
575
|
+
var _iterator12 = _createForOfIteratorHelper(_originalData.reunions.reunion),
|
|
576
|
+
_step12;
|
|
518
577
|
|
|
519
578
|
try {
|
|
520
|
-
for (
|
|
521
|
-
var reunion =
|
|
579
|
+
for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
|
|
580
|
+
var reunion = _step12.value;
|
|
522
581
|
writeReunionReorganizedJson(_datasetReorganizedDir, reunion);
|
|
523
582
|
}
|
|
524
583
|
} catch (err) {
|
|
525
|
-
|
|
584
|
+
_iterator12.e(err);
|
|
526
585
|
} finally {
|
|
527
|
-
|
|
586
|
+
_iterator12.f();
|
|
528
587
|
}
|
|
529
588
|
}
|
|
530
589
|
break;
|
|
531
590
|
|
|
532
591
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
533
592
|
{
|
|
534
|
-
var
|
|
535
|
-
|
|
593
|
+
var _iterator13 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath, ["reunion"])),
|
|
594
|
+
_step13;
|
|
536
595
|
|
|
537
596
|
try {
|
|
538
|
-
for (
|
|
539
|
-
var reunionSplitPath =
|
|
597
|
+
for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
|
|
598
|
+
var reunionSplitPath = _step13.value;
|
|
540
599
|
var reunionFilename = reunionSplitPath[reunionSplitPath.length - 1];
|
|
541
600
|
|
|
542
601
|
if (!reunionFilename.endsWith(".json")) {
|
|
@@ -558,9 +617,9 @@ function reorganizeData(options) {
|
|
|
558
617
|
writeReunionReorganizedJson(_datasetReorganizedDir, _reunion);
|
|
559
618
|
}
|
|
560
619
|
} catch (err) {
|
|
561
|
-
|
|
620
|
+
_iterator13.e(err);
|
|
562
621
|
} finally {
|
|
563
|
-
|
|
622
|
+
_iterator13.f();
|
|
564
623
|
}
|
|
565
624
|
}
|
|
566
625
|
break;
|
|
@@ -571,19 +630,19 @@ function reorganizeData(options) {
|
|
|
571
630
|
}
|
|
572
631
|
}
|
|
573
632
|
} catch (err) {
|
|
574
|
-
|
|
633
|
+
_iterator10.e(err);
|
|
575
634
|
} finally {
|
|
576
|
-
|
|
635
|
+
_iterator10.f();
|
|
577
636
|
}
|
|
578
637
|
}
|
|
579
638
|
|
|
580
639
|
if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
|
|
581
|
-
var
|
|
582
|
-
|
|
640
|
+
var _iterator14 = _createForOfIteratorHelper(_datasets.datasets.amendements),
|
|
641
|
+
_step14;
|
|
583
642
|
|
|
584
643
|
try {
|
|
585
|
-
for (
|
|
586
|
-
var _dataset2 =
|
|
644
|
+
for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
|
|
645
|
+
var _dataset2 = _step14.value;
|
|
587
646
|
|
|
588
647
|
var _originalJsonDirectoryOrFilePath2 = _path["default"].join(dataDir, _dataset2.filename);
|
|
589
648
|
|
|
@@ -606,12 +665,12 @@ function reorganizeData(options) {
|
|
|
606
665
|
|
|
607
666
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir2);
|
|
608
667
|
|
|
609
|
-
var
|
|
610
|
-
|
|
668
|
+
var _iterator15 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir2)),
|
|
669
|
+
_step15;
|
|
611
670
|
|
|
612
671
|
try {
|
|
613
|
-
for (
|
|
614
|
-
var _filename2 =
|
|
672
|
+
for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
|
|
673
|
+
var _filename2 = _step15.value;
|
|
615
674
|
|
|
616
675
|
if (_filename2[0] === ".") {
|
|
617
676
|
continue;
|
|
@@ -620,9 +679,9 @@ function reorganizeData(options) {
|
|
|
620
679
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir2, _filename2));
|
|
621
680
|
}
|
|
622
681
|
} catch (err) {
|
|
623
|
-
|
|
682
|
+
_iterator15.e(err);
|
|
624
683
|
} finally {
|
|
625
|
-
|
|
684
|
+
_iterator15.f();
|
|
626
685
|
}
|
|
627
686
|
|
|
628
687
|
switch (_dataset2.structure) {
|
|
@@ -634,43 +693,43 @@ function reorganizeData(options) {
|
|
|
634
693
|
|
|
635
694
|
var _originalData2 = validateRawData ? _amendements.Convert.toAmendements(_originalJson2) : JSON.parse(_originalJson2);
|
|
636
695
|
|
|
637
|
-
var
|
|
638
|
-
|
|
696
|
+
var _iterator16 = _createForOfIteratorHelper(_originalData2.textesEtAmendements.texteleg),
|
|
697
|
+
_step16;
|
|
639
698
|
|
|
640
699
|
try {
|
|
641
|
-
for (
|
|
642
|
-
var texteLegislatif =
|
|
700
|
+
for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
|
|
701
|
+
var texteLegislatif = _step16.value;
|
|
643
702
|
|
|
644
|
-
var
|
|
645
|
-
|
|
703
|
+
var _iterator17 = _createForOfIteratorHelper(texteLegislatif.amendements),
|
|
704
|
+
_step17;
|
|
646
705
|
|
|
647
706
|
try {
|
|
648
|
-
for (
|
|
649
|
-
var amendement =
|
|
707
|
+
for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
|
|
708
|
+
var amendement = _step17.value;
|
|
650
709
|
writeAmendementReorganizedJson(_datasetReorganizedDir2, amendement);
|
|
651
710
|
}
|
|
652
711
|
} catch (err) {
|
|
653
|
-
|
|
712
|
+
_iterator17.e(err);
|
|
654
713
|
} finally {
|
|
655
|
-
|
|
714
|
+
_iterator17.f();
|
|
656
715
|
}
|
|
657
716
|
}
|
|
658
717
|
} catch (err) {
|
|
659
|
-
|
|
718
|
+
_iterator16.e(err);
|
|
660
719
|
} finally {
|
|
661
|
-
|
|
720
|
+
_iterator16.f();
|
|
662
721
|
}
|
|
663
722
|
}
|
|
664
723
|
break;
|
|
665
724
|
|
|
666
725
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
667
726
|
{
|
|
668
|
-
var
|
|
669
|
-
|
|
727
|
+
var _iterator18 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath2)),
|
|
728
|
+
_step18;
|
|
670
729
|
|
|
671
730
|
try {
|
|
672
|
-
for (
|
|
673
|
-
var amendementSplitPath =
|
|
731
|
+
for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
|
|
732
|
+
var amendementSplitPath = _step18.value;
|
|
674
733
|
var amendementFilename = amendementSplitPath[amendementSplitPath.length - 1];
|
|
675
734
|
|
|
676
735
|
if (!amendementFilename.endsWith(".json")) {
|
|
@@ -692,9 +751,9 @@ function reorganizeData(options) {
|
|
|
692
751
|
writeAmendementReorganizedJson(_datasetReorganizedDir2, _amendement);
|
|
693
752
|
}
|
|
694
753
|
} catch (err) {
|
|
695
|
-
|
|
754
|
+
_iterator18.e(err);
|
|
696
755
|
} finally {
|
|
697
|
-
|
|
756
|
+
_iterator18.f();
|
|
698
757
|
}
|
|
699
758
|
}
|
|
700
759
|
break;
|
|
@@ -705,19 +764,19 @@ function reorganizeData(options) {
|
|
|
705
764
|
}
|
|
706
765
|
}
|
|
707
766
|
} catch (err) {
|
|
708
|
-
|
|
767
|
+
_iterator14.e(err);
|
|
709
768
|
} finally {
|
|
710
|
-
|
|
769
|
+
_iterator14.f();
|
|
711
770
|
}
|
|
712
771
|
}
|
|
713
772
|
|
|
714
773
|
if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
|
|
715
|
-
var
|
|
716
|
-
|
|
774
|
+
var _iterator19 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
|
|
775
|
+
_step19;
|
|
717
776
|
|
|
718
777
|
try {
|
|
719
|
-
for (
|
|
720
|
-
var _dataset3 =
|
|
778
|
+
for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {
|
|
779
|
+
var _dataset3 = _step19.value;
|
|
721
780
|
|
|
722
781
|
var _originalJsonDirectoryOrFilePath3 = _path["default"].join(dataDir, _dataset3.filename);
|
|
723
782
|
|
|
@@ -740,12 +799,12 @@ function reorganizeData(options) {
|
|
|
740
799
|
|
|
741
800
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir3);
|
|
742
801
|
|
|
743
|
-
var
|
|
744
|
-
|
|
802
|
+
var _iterator20 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir3)),
|
|
803
|
+
_step20;
|
|
745
804
|
|
|
746
805
|
try {
|
|
747
|
-
for (
|
|
748
|
-
var _filename3 =
|
|
806
|
+
for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {
|
|
807
|
+
var _filename3 = _step20.value;
|
|
749
808
|
|
|
750
809
|
if (_filename3[0] === ".") {
|
|
751
810
|
continue;
|
|
@@ -754,9 +813,9 @@ function reorganizeData(options) {
|
|
|
754
813
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir3, _filename3));
|
|
755
814
|
}
|
|
756
815
|
} catch (err) {
|
|
757
|
-
|
|
816
|
+
_iterator20.e(err);
|
|
758
817
|
} finally {
|
|
759
|
-
|
|
818
|
+
_iterator20.f();
|
|
760
819
|
}
|
|
761
820
|
|
|
762
821
|
var documentsDir = _path["default"].join(_datasetReorganizedDir3, "documents");
|
|
@@ -776,44 +835,44 @@ function reorganizeData(options) {
|
|
|
776
835
|
|
|
777
836
|
var _originalData3 = validateRawData ? _dossiers_legislatifs.Convert.toDossiersLegislatifs(_originalJson3) : JSON.parse(_originalJson3);
|
|
778
837
|
|
|
779
|
-
var
|
|
780
|
-
|
|
838
|
+
var _iterator21 = _createForOfIteratorHelper(_originalData3["export"].textesLegislatifs.document),
|
|
839
|
+
_step21;
|
|
781
840
|
|
|
782
841
|
try {
|
|
783
|
-
for (
|
|
784
|
-
var document =
|
|
842
|
+
for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {
|
|
843
|
+
var document = _step21.value;
|
|
785
844
|
writeDocumentReorganizedJson(documentsDir, document);
|
|
786
845
|
}
|
|
787
846
|
} catch (err) {
|
|
788
|
-
|
|
847
|
+
_iterator21.e(err);
|
|
789
848
|
} finally {
|
|
790
|
-
|
|
849
|
+
_iterator21.f();
|
|
791
850
|
}
|
|
792
851
|
|
|
793
|
-
var
|
|
794
|
-
|
|
852
|
+
var _iterator22 = _createForOfIteratorHelper(_originalData3["export"].dossiersLegislatifs.dossier),
|
|
853
|
+
_step22;
|
|
795
854
|
|
|
796
855
|
try {
|
|
797
|
-
for (
|
|
798
|
-
var dossierParlementaire =
|
|
856
|
+
for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {
|
|
857
|
+
var dossierParlementaire = _step22.value.dossierParlementaire;
|
|
799
858
|
writeDossierParlementaireReorganizedJson(dossiersDir, dossierParlementaire);
|
|
800
859
|
}
|
|
801
860
|
} catch (err) {
|
|
802
|
-
|
|
861
|
+
_iterator22.e(err);
|
|
803
862
|
} finally {
|
|
804
|
-
|
|
863
|
+
_iterator22.f();
|
|
805
864
|
}
|
|
806
865
|
}
|
|
807
866
|
break;
|
|
808
867
|
|
|
809
868
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
810
869
|
{
|
|
811
|
-
var
|
|
812
|
-
|
|
870
|
+
var _iterator23 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["document"])),
|
|
871
|
+
_step23;
|
|
813
872
|
|
|
814
873
|
try {
|
|
815
|
-
for (
|
|
816
|
-
var documentSplitPath =
|
|
874
|
+
for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {
|
|
875
|
+
var documentSplitPath = _step23.value;
|
|
817
876
|
var documentFilename = documentSplitPath[documentSplitPath.length - 1];
|
|
818
877
|
|
|
819
878
|
if (!documentFilename.endsWith(".json")) {
|
|
@@ -835,17 +894,17 @@ function reorganizeData(options) {
|
|
|
835
894
|
writeDocumentReorganizedJson(documentsDir, _document);
|
|
836
895
|
}
|
|
837
896
|
} catch (err) {
|
|
838
|
-
|
|
897
|
+
_iterator23.e(err);
|
|
839
898
|
} finally {
|
|
840
|
-
|
|
899
|
+
_iterator23.f();
|
|
841
900
|
}
|
|
842
901
|
|
|
843
|
-
var
|
|
844
|
-
|
|
902
|
+
var _iterator24 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath3, ["dossierParlementaire"])),
|
|
903
|
+
_step24;
|
|
845
904
|
|
|
846
905
|
try {
|
|
847
|
-
for (
|
|
848
|
-
var dossierParlementaireSplitPath =
|
|
906
|
+
for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {
|
|
907
|
+
var dossierParlementaireSplitPath = _step24.value;
|
|
849
908
|
var dossierParlementaireFilename = dossierParlementaireSplitPath[dossierParlementaireSplitPath.length - 1];
|
|
850
909
|
|
|
851
910
|
if (!dossierParlementaireFilename.endsWith(".json")) {
|
|
@@ -867,9 +926,9 @@ function reorganizeData(options) {
|
|
|
867
926
|
writeDossierParlementaireReorganizedJson(dossiersDir, _dossierParlementaire);
|
|
868
927
|
}
|
|
869
928
|
} catch (err) {
|
|
870
|
-
|
|
929
|
+
_iterator24.e(err);
|
|
871
930
|
} finally {
|
|
872
|
-
|
|
931
|
+
_iterator24.f();
|
|
873
932
|
}
|
|
874
933
|
}
|
|
875
934
|
break;
|
|
@@ -880,19 +939,19 @@ function reorganizeData(options) {
|
|
|
880
939
|
}
|
|
881
940
|
}
|
|
882
941
|
} catch (err) {
|
|
883
|
-
|
|
942
|
+
_iterator19.e(err);
|
|
884
943
|
} finally {
|
|
885
|
-
|
|
944
|
+
_iterator19.f();
|
|
886
945
|
}
|
|
887
946
|
}
|
|
888
947
|
|
|
889
948
|
if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
|
|
890
|
-
var
|
|
891
|
-
|
|
949
|
+
var _iterator25 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
|
|
950
|
+
_step25;
|
|
892
951
|
|
|
893
952
|
try {
|
|
894
|
-
for (
|
|
895
|
-
var _dataset4 =
|
|
953
|
+
for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {
|
|
954
|
+
var _dataset4 = _step25.value;
|
|
896
955
|
|
|
897
956
|
var _originalJsonDirectoryOrFilePath4 = _path["default"].join(dataDir, _dataset4.filename);
|
|
898
957
|
|
|
@@ -915,12 +974,12 @@ function reorganizeData(options) {
|
|
|
915
974
|
|
|
916
975
|
_fsExtra["default"].ensureDirSync(_datasetReorganizedDir4);
|
|
917
976
|
|
|
918
|
-
var
|
|
919
|
-
|
|
977
|
+
var _iterator26 = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(_datasetReorganizedDir4)),
|
|
978
|
+
_step26;
|
|
920
979
|
|
|
921
980
|
try {
|
|
922
|
-
for (
|
|
923
|
-
var _filename4 =
|
|
981
|
+
for (_iterator26.s(); !(_step26 = _iterator26.n()).done;) {
|
|
982
|
+
var _filename4 = _step26.value;
|
|
924
983
|
|
|
925
984
|
if (_filename4[0] === ".") {
|
|
926
985
|
continue;
|
|
@@ -929,9 +988,9 @@ function reorganizeData(options) {
|
|
|
929
988
|
_fsExtra["default"].removeSync(_path["default"].join(_datasetReorganizedDir4, _filename4));
|
|
930
989
|
}
|
|
931
990
|
} catch (err) {
|
|
932
|
-
|
|
991
|
+
_iterator26.e(err);
|
|
933
992
|
} finally {
|
|
934
|
-
|
|
993
|
+
_iterator26.f();
|
|
935
994
|
}
|
|
936
995
|
|
|
937
996
|
switch (_dataset4.structure) {
|
|
@@ -943,30 +1002,30 @@ function reorganizeData(options) {
|
|
|
943
1002
|
|
|
944
1003
|
var _originalData4 = validateRawData ? _scrutins.Convert.toScrutins(_originalJson4) : JSON.parse(_originalJson4);
|
|
945
1004
|
|
|
946
|
-
var
|
|
947
|
-
|
|
1005
|
+
var _iterator27 = _createForOfIteratorHelper(_originalData4.scrutins.scrutin),
|
|
1006
|
+
_step27;
|
|
948
1007
|
|
|
949
1008
|
try {
|
|
950
|
-
for (
|
|
951
|
-
var scrutin =
|
|
1009
|
+
for (_iterator27.s(); !(_step27 = _iterator27.n()).done;) {
|
|
1010
|
+
var scrutin = _step27.value;
|
|
952
1011
|
writeScrutinReorganizedJson(_datasetReorganizedDir4, scrutin);
|
|
953
1012
|
}
|
|
954
1013
|
} catch (err) {
|
|
955
|
-
|
|
1014
|
+
_iterator27.e(err);
|
|
956
1015
|
} finally {
|
|
957
|
-
|
|
1016
|
+
_iterator27.f();
|
|
958
1017
|
}
|
|
959
1018
|
}
|
|
960
1019
|
break;
|
|
961
1020
|
|
|
962
1021
|
case _datasets.DatasetStructure.SegmentedFiles:
|
|
963
1022
|
{
|
|
964
|
-
var
|
|
965
|
-
|
|
1023
|
+
var _iterator28 = _createForOfIteratorHelper((0, _file_systems.walkDir)(_originalJsonDirectoryOrFilePath4)),
|
|
1024
|
+
_step28;
|
|
966
1025
|
|
|
967
1026
|
try {
|
|
968
|
-
for (
|
|
969
|
-
var scrutinSplitPath =
|
|
1027
|
+
for (_iterator28.s(); !(_step28 = _iterator28.n()).done;) {
|
|
1028
|
+
var scrutinSplitPath = _step28.value;
|
|
970
1029
|
var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
|
|
971
1030
|
|
|
972
1031
|
if (!scrutinFilename.endsWith(".json")) {
|
|
@@ -988,9 +1047,9 @@ function reorganizeData(options) {
|
|
|
988
1047
|
writeScrutinReorganizedJson(_datasetReorganizedDir4, _scrutin);
|
|
989
1048
|
}
|
|
990
1049
|
} catch (err) {
|
|
991
|
-
|
|
1050
|
+
_iterator28.e(err);
|
|
992
1051
|
} finally {
|
|
993
|
-
|
|
1052
|
+
_iterator28.f();
|
|
994
1053
|
}
|
|
995
1054
|
}
|
|
996
1055
|
break;
|
|
@@ -1001,9 +1060,9 @@ function reorganizeData(options) {
|
|
|
1001
1060
|
}
|
|
1002
1061
|
}
|
|
1003
1062
|
} catch (err) {
|
|
1004
|
-
|
|
1063
|
+
_iterator25.e(err);
|
|
1005
1064
|
} finally {
|
|
1006
|
-
|
|
1065
|
+
_iterator25.f();
|
|
1007
1066
|
}
|
|
1008
1067
|
} // Restore standard conversion of dates to JSON.
|
|
1009
1068
|
|
|
@@ -1071,4 +1130,4 @@ if (process.argv[1].endsWith("reorganize_data.ts")) {
|
|
|
1071
1130
|
process.exit(0);
|
|
1072
1131
|
}
|
|
1073
1132
|
}
|
|
1074
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwic3RkZXJyIiwidGVzdCIsInN0ZG91dCIsImNvbnNvbGUiLCJvdXRwdXQiLCJyZW1vdGUiLCJyZW9yZ2FuaXplRGF0YSIsIm9wdGlvbnMiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwidmFsaWRhdGVSYXdEYXRhIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImxvZyIsImJhc2VuYW1lIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwicmVhZGRpclN5bmMiLCJyZW1vdmVTeW5jIiwiYWN0ZXVyc1Jlb3JnYW5pemVkRGlyIiwibWtkaXJTeW5jIiwib3JnYW5lc1Jlb3JnYW5pemVkRGlyIiwic3RydWN0dXJlIiwiRGF0YXNldFN0cnVjdHVyZSIsIlNpbmdsZUZpbGUiLCJvcmlnaW5hbEpzb24iLCJyZWFkRmlsZVN5bmMiLCJvcmlnaW5hbERhdGEiLCJBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsIkpTT04iLCJwYXJzZSIsImFjdGV1cnMiLCJhY3RldXIiLCJyZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsInVpZCIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJvcmdhbmVzIiwib3JnYW5lIiwiU2VnbWVudGVkRmlsZXMiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJ2ZXJib3NlIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdCIsIm1hbmRhdCIsIm1hbmRhdHMiLCJhY3RldXJSZWYiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImFjdGV1clNwbGl0UGF0aCIsImFjdGV1ckZpbGVuYW1lIiwiYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCIsImFjdGV1ck9yaWdpbmFsSnNvbiIsImFjdGV1ck9yaWdpbmFsIiwidG9BY3RldXIiLCJhY3RldXJVaWQiLCJzdHJpY3RFcXVhbCIsImFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwib3JnYW5lU3BsaXRQYXRoIiwib3JnYW5lRmlsZW5hbWUiLCJvcmdhbmVPcmlnaW5hbEZpbGVQYXRoIiwib3JnYW5lT3JpZ2luYWxKc29uIiwib3JnYW5lT3JpZ2luYWwiLCJ0b09yZ2FuZSIsIm9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJBZ2VuZGFzUmF3Q29udmVydCIsInRvQWdlbmRhcyIsInJldW5pb25zIiwicmV1bmlvbiIsIndyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbiIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCIsInJldW5pb25PcmlnaW5hbEpzb24iLCJyZXVuaW9uT3JpZ2luYWwiLCJ0b1JldW5pb24iLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwiQW1lbmRlbWVudHNSYXdDb252ZXJ0IiwidG9BbWVuZGVtZW50cyIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsInRleHRlTGVnaXNsYXRpZiIsImFtZW5kZW1lbnQiLCJ3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24iLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgiLCJhbWVuZGVtZW50T3JpZ2luYWxKc29uIiwiYW1lbmRlbWVudE9yaWdpbmFsIiwidG9BbWVuZGVtZW50V3JhcHBlciIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnRzRGlyIiwiZG9zc2llcnNEaXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsInRleHRlc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uIiwiZG9zc2llciIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwid3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbiIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCIsImRvY3VtZW50T3JpZ2luYWxKc29uIiwiZG9jdW1lbnRPcmlnaW5hbCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsIlNjcnV0aW5zUmF3Q29udmVydCIsInRvU2NydXRpbnMiLCJzY3J1dGluIiwid3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoIiwic2NydXRpbk9yaWdpbmFsSnNvbiIsInNjcnV0aW5PcmlnaW5hbCIsInRvU2NydXRpbldyYXBwZXIiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZEaXIiLCJyZXVuaW9uc0RpciIsInNjcnV0aW5zRGlyIiwiYXJndiIsImV4aXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxrQkFBa0IsR0FBRyxDQUN6QjtBQUNFQyxFQUFBQSxLQUFLLEVBQUUsR0FEVDtBQUVFQyxFQUFBQSxJQUFJLEVBQUUsK0RBRlI7QUFHRUMsRUFBQUEsSUFBSSxFQUFFLE9BSFI7QUFJRUMsRUFBQUEsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0FBQ0VKLEVBQUFBLEtBQUssRUFBRSxHQURUO0FBRUVDLEVBQUFBLElBQUksRUFBRSxvQkFGUjtBQUdFQyxFQUFBQSxJQUFJLEVBQUUsUUFIUjtBQUlFQyxFQUFBQSxJQUFJLEVBQUVFO0FBSlIs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R0FBeEMsQ0FBakI7O0FBQ0FwQixzQkFBR3FCLGFBQUgsV0FBb0J2QixRQUFwQixZQUFxQ2lCLElBQUksQ0FBQ08sU0FBTCxDQUFlaUcsT0FBZixFQUF3QixJQUF4QixFQUE4QixDQUE5QixDQUFyQyxFQUF1RTtBQUNyRWxLLElBQUFBLFFBQVEsRUFBRTtBQUQyRCxHQUF2RTtBQUdEO0FBRUQ7OztBQUNBLElBQUlELE9BQU8sQ0FBQ2lMLElBQVIsQ0FBYSxDQUFiLEVBQWdCdEcsUUFBaEIsQ0FBeUIsb0JBQXpCLENBQUosRUFBb0Q7QUFDbEQsTUFBTWhFLE9BQU8sR0FBRyxpQ0FBZ0I1QixrQkFBaEIsQ0FBaEI7O0FBRUEsTUFBSTJCLGNBQWMsQ0FBQ0MsT0FBRCxDQUFsQixFQUE2QjtBQUMzQlgsSUFBQUEsT0FBTyxDQUFDa0wsSUFBUixDQUFhLENBQWI7QUFDRCxHQUZELE1BRU87QUFDTGxMLElBQUFBLE9BQU8sQ0FBQ2tMLElBQVIsQ0FBYSxDQUFiO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgYWRkIC5gLCB7XG4gICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiTm91dmVsbGUgbW9pc3NvblwiJywge1xuICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgaWYgKFxuICAgICAgICAoY2hpbGRQcm9jZXNzIGFzIENoaWxkUHJvY2Vzcykuc3RkZXJyID09PSBudWxsIHx8XG4gICAgICAgICEvbm90aGluZyB0byBjb21taXQvLnRlc3QoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLnN0ZG91dClcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIHRocm93IGNoaWxkUHJvY2Vzc1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKChFbmFibGVkRGF0YXNldHMgYXMgYW55KSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYMOZbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkpIGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJhY3RldXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoYWN0ZXVyc1Jlb3JnYW5pemVkRGlyKVxuICAgICAgY29uc3Qgb3JnYW5lc1Jlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJvcmdhbmVzXCIpXG4gICAgICBmcy5ta2RpclN5bmMob3JnYW5lc1Jlb3JnYW5pemVkRGlyKVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1ci51aWRbXCIjdGV4dFwiXSArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5vcmdhbmVzLm9yZ2FuZSkge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgbWFuZGF0c0J5QWN0ZXVyVWlkOiB7XG4gICAgICAgICAgICAgIFthY3RldXJVaWQ6IHN0cmluZ106IHsgdWlkOiBzdHJpbmcgfVtdXG4gICAgICAgICAgICB9ID0ge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4ob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCJtYW5kYXRcIiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgW1wibWFuZGF0XCJdLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgICAgbWFuZGF0U3BsaXRQYXRoW21hbmRhdFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgIGlmICghbWFuZGF0RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAuLi5tYW5kYXRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICBgICBMb2FkaW5nIFwibWFuZGF0XCIgZmlsZTogJHttYW5kYXRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgICAgbWFuZGF0T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b01hbmRhdChtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdCA9IG1hbmRhdE9yaWdpbmFsLm1hbmRhdFxuICAgICAgICAgICAgICAgIGxldCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdXG4gICAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXSA9IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hbmRhdHMucHVzaChtYW5kYXQpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdHMgb2YgT2JqZWN0LnZhbHVlcyhtYW5kYXRzQnlBY3RldXJVaWQpKSB7XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgYS51aWQubGVuZ3RoID09PSBiLnVpZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBhLnVpZC5sb2NhbGVDb21wYXJlKGIudWlkKVxuICAgICAgICAgICAgICAgICAgICA6IGEudWlkLmxlbmd0aCAtIGIudWlkLmxlbmd0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wiYWN0ZXVyXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFjdGV1clwiIGZpbGU6ICR7YWN0ZXVyT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhY3RldXJPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXIgPSBhY3RldXJPcmlnaW5hbC5hY3RldXJcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyVWlkID0gYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdXG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIGlmIChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSkge1xuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG59XG4iXX0=
|
|
1133
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsImNvbW1pdCIsInJlbW90ZXMiLCJlcnJvciIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwic3RkZXJyIiwidGVzdCIsInN0ZG91dCIsImNvbnNvbGUiLCJvdXRwdXQiLCJyZW1vdGUiLCJyZW9yZ2FuaXplRGF0YSIsIm9wdGlvbnMiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwidmFsaWRhdGVSYXdEYXRhIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwicGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImxvZyIsImJhc2VuYW1lIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwicmVhZGRpclN5bmMiLCJyZW1vdmVTeW5jIiwiYWN0ZXVyc1Jlb3JnYW5pemVkRGlyIiwibWtkaXJTeW5jIiwib3JnYW5lc1Jlb3JnYW5pemVkRGlyIiwic3RydWN0dXJlIiwiRGF0YXNldFN0cnVjdHVyZSIsIlNpbmdsZUZpbGUiLCJvcmlnaW5hbEpzb24iLCJyZWFkRmlsZVN5bmMiLCJvcmlnaW5hbERhdGEiLCJBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsIkpTT04iLCJwYXJzZSIsImFjdGV1cnMiLCJhY3RldXIiLCJyZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsInVpZCIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJvcmdhbmVzIiwib3JnYW5lIiwiU2VnbWVudGVkRmlsZXMiLCJkZXBvcnRzQnlBY3RldXJVaWQiLCJleGlzdHNTeW5jIiwiZGVwb3J0U3BsaXRQYXRoIiwiZGVwb3J0RmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsImRlcG9ydE9yaWdpbmFsRmlsZVBhdGgiLCJ2ZXJib3NlIiwiZGVwb3J0T3JpZ2luYWxKc29uIiwiZGVwb3J0T3JpZ2luYWwiLCJ0b0RlcG9ydCIsImRlcG9ydCIsImRlcG9ydHMiLCJhY3RldXJSZWYiLCJwdXNoIiwiT2JqZWN0IiwidmFsdWVzIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hbmRhdHNCeUFjdGV1clVpZCIsIm1hbmRhdFNwbGl0UGF0aCIsIm1hbmRhdEZpbGVuYW1lIiwibWFuZGF0T3JpZ2luYWxGaWxlUGF0aCIsIm1hbmRhdE9yaWdpbmFsSnNvbiIsIm1hbmRhdE9yaWdpbmFsIiwidG9NYW5kYXQiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwid3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uIiwicmV1bmlvblNwbGl0UGF0aCIsInJldW5pb25GaWxlbmFtZSIsInJldW5pb25PcmlnaW5hbEZpbGVQYXRoIiwicmV1bmlvbk9yaWdpbmFsSnNvbiIsInJldW5pb25PcmlnaW5hbCIsInRvUmV1bmlvbiIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzRXRBbWVuZGVtZW50cyIsInRleHRlbGVnIiwidGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudCIsIndyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbiIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCIsImFtZW5kZW1lbnRPcmlnaW5hbEpzb24iLCJhbWVuZGVtZW50T3JpZ2luYWwiLCJ0b0FtZW5kZW1lbnRXcmFwcGVyIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudHNEaXIiLCJkb3NzaWVyc0RpciIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwiU2NydXRpbnNSYXdDb252ZXJ0IiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInJldW5pb25zRGlyIiwic2NydXRpbnNEaXIiLCJhcmd2IiwiZXhpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGtCQUFrQixHQUFHLENBQ3pCO0FBQ0VDLEVBQUFBLEtBQUssRUFBRSxHQURUO0FBRUVDLEVBQUFBLElBQUksRUFBRSwrREFGUjtBQUdFQyxFQUFBQSxJQUFJLEVBQUUsT0FIUjtB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b0J2QixRQUFwQixZQUFxQ2lCLElBQUksQ0FBQ08sU0FBTCxDQUFlMEcsT0FBZixFQUF3QixJQUF4QixFQUE4QixDQUE5QixDQUFyQyxFQUF1RTtBQUNyRTNLLElBQUFBLFFBQVEsRUFBRTtBQUQyRCxHQUF2RTtBQUdEO0FBRUQ7OztBQUNBLElBQUlELE9BQU8sQ0FBQzBMLElBQVIsQ0FBYSxDQUFiLEVBQWdCL0csUUFBaEIsQ0FBeUIsb0JBQXpCLENBQUosRUFBb0Q7QUFDbEQsTUFBTWhFLE9BQU8sR0FBRyxpQ0FBZ0I1QixrQkFBaEIsQ0FBaEI7O0FBRUEsTUFBSTJCLGNBQWMsQ0FBQ0MsT0FBRCxDQUFsQixFQUE2QjtBQUMzQlgsSUFBQUEsT0FBTyxDQUFDMkwsSUFBUixDQUFhLENBQWI7QUFDRCxHQUZELE1BRU87QUFDTDNMLElBQUFBLE9BQU8sQ0FBQzJMLElBQVIsQ0FBYSxDQUFiO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MsIGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IHNwbGl0IGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiclwiLFxuICAgIGhlbHA6IFwicHVzaCBjb21taXQgdG8gZ2l2ZW4gcmVtb3RlXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJzXCIsXG4gICAgaGVscDogXCJkb24ndCBsb2cgYW55dGhpbmdcIixcbiAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJWXCIsXG4gICAgaGVscDogXCJkb24ndCB2YWxpZGF0ZSByYXcgZGF0YVwiLFxuICAgIG5hbWU6IFwibm8tdmFsaWRhdGUtcmF3XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgY29tbWl0OiBib29sZWFuLFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKGNvbW1pdCkge1xuICAgIGV4ZWNTeW5jKGBnaXQgYWRkIC5gLCB7XG4gICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIGV4ZWNTeW5jKCdnaXQgY29tbWl0IC1tIFwiTm91dmVsbGUgbW9pc3NvblwiJywge1xuICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgaWYgKFxuICAgICAgICAoY2hpbGRQcm9jZXNzIGFzIENoaWxkUHJvY2Vzcykuc3RkZXJyID09PSBudWxsIHx8XG4gICAgICAgICEvbm90aGluZyB0byBjb21taXQvLnRlc3QoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLnN0ZG91dClcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIHRocm93IGNoaWxkUHJvY2Vzc1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBjb25zdCBnaXRHcm91cFVybCA9IG9wdGlvbnMuY2xvbmVcbiAgICA/IG9wdGlvbnMuY2xvbmUudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCB2YWxpZGF0ZVJhd0RhdGEgPSAhb3B0aW9uc1tcIm5vLXZhbGlkYXRlLXJhd1wiXVxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXQobWFuZGF0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNvbW1pdEFuZFB1c2goZGF0YXNldFJlb3JnYW5pemVkRGlyLCBvcHRpb25zLmNvbW1pdCwgb3B0aW9ucy5yZW1vdGUpXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaChkYXRhc2V0UmVvcmdhbml6ZWREaXIsIG9wdGlvbnMuY29tbWl0LCBvcHRpb25zLnJlbW90ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIGlmIChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSkge1xuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9XG59XG4iXX0=
|