@media-quest/builder 0.0.4 → 0.0.5

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.
@@ -981,7 +981,7 @@ var BuilderCondition = class _BuilderCondition extends BuilderObject {
981
981
  }
982
982
  return { isValid: true };
983
983
  }
984
- toEngineCondition() {
984
+ toEngineCondition(modulePrefix) {
985
985
  const val = this.value;
986
986
  const op = this._operator;
987
987
  const v = this._variable;
@@ -996,7 +996,7 @@ var BuilderCondition = class _BuilderCondition extends BuilderObject {
996
996
  kind: "numeric-condition",
997
997
  value: val.value,
998
998
  valueLabel: val.label,
999
- referenceId: v.varId,
999
+ referenceId: modulePrefix + "_" + v.varId,
1000
1000
  referenceLabel: v.label,
1001
1001
  operator: "eq"
1002
1002
  };
@@ -1081,8 +1081,7 @@ var BuilderCondition = class _BuilderCondition extends BuilderObject {
1081
1081
  var ConditionGroupType = {
1082
1082
  all: true,
1083
1083
  any: true,
1084
- count: true,
1085
- range: true
1084
+ count: true
1086
1085
  };
1087
1086
  var BuilderConditionGroup = class _BuilderConditionGroup extends BuilderObject {
1088
1087
  static isConditionGroupType = (value) => {
@@ -1139,7 +1138,7 @@ var BuilderConditionGroup = class _BuilderConditionGroup extends BuilderObject {
1139
1138
  kind: "condition-group"
1140
1139
  };
1141
1140
  }
1142
- toEngineConditionComplex() {
1141
+ toEngineConditionComplex(modulePrefix) {
1143
1142
  const comp = {
1144
1143
  kind: "complex-condition",
1145
1144
  all: [],
@@ -1148,7 +1147,7 @@ var BuilderConditionGroup = class _BuilderConditionGroup extends BuilderObject {
1148
1147
  };
1149
1148
  const conditions = [];
1150
1149
  this.conditions.forEach((c) => {
1151
- const maybeSimple = c.toEngineCondition();
1150
+ const maybeSimple = c.toEngineCondition(modulePrefix);
1152
1151
  if (maybeSimple) {
1153
1152
  conditions.push(maybeSimple);
1154
1153
  }
@@ -1312,248 +1311,6 @@ var JumpToActionManager = class {
1312
1311
  }
1313
1312
  };
1314
1313
 
1315
- // src/rulebuilder/Builder-rule.ts
1316
- var import_engine3 = require("@media-quest/engine");
1317
-
1318
- // src/rulebuilder/RuleBuilder-test-utils.ts
1319
- var RuleBuilderTestUtils;
1320
- ((RuleBuilderTestUtils2) => {
1321
- RuleBuilderTestUtils2.createOptions = () => [
1322
- BuilderOption.create(0, "Nei"),
1323
- BuilderOption.create(1, "Ja"),
1324
- BuilderOption.create(9, "Vet ikke")
1325
- ];
1326
- RuleBuilderTestUtils2.excludeByTagAction = (tag) => {
1327
- const pageCount = Math.floor(Math.random() * 10);
1328
- const action = {
1329
- kind: "exclude-by-tag",
1330
- tag,
1331
- description: "Description for tag: " + tag,
1332
- pageCount
1333
- };
1334
- return action;
1335
- };
1336
- RuleBuilderTestUtils2.excludeByPageIdAction = (pageId, pageNumber) => {
1337
- const action = {
1338
- kind: "exclude-by-pageId",
1339
- mainText: "",
1340
- pageId,
1341
- pageNumber
1342
- };
1343
- return action;
1344
- };
1345
- RuleBuilderTestUtils2.jumpToPageAction = (pageId, pageNumber) => {
1346
- const action = {
1347
- kind: "jump-to-page",
1348
- mainText: "TEXT: " + pageId,
1349
- pageId,
1350
- pageNumber
1351
- };
1352
- return action;
1353
- };
1354
- RuleBuilderTestUtils2.excludeByTagActionList = () => {
1355
- const list = [
1356
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag1"),
1357
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag2"),
1358
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag3"),
1359
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag4"),
1360
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag5"),
1361
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag6"),
1362
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag7"),
1363
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag8"),
1364
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag9"),
1365
- (0, RuleBuilderTestUtils2.excludeByTagAction)("tag10")
1366
- ];
1367
- return list;
1368
- };
1369
- RuleBuilderTestUtils2.createRuleVariable = (id, pageNumber) => new QuestionVariable(id, "Har du " + id + "?", (0, RuleBuilderTestUtils2.createOptions)(), pageNumber);
1370
- RuleBuilderTestUtils2.createBuilderVariables_A_H = () => [
1371
- (0, RuleBuilderTestUtils2.createRuleVariable)("a", 3),
1372
- (0, RuleBuilderTestUtils2.createRuleVariable)("b", 4),
1373
- (0, RuleBuilderTestUtils2.createRuleVariable)("c", 5),
1374
- (0, RuleBuilderTestUtils2.createRuleVariable)("d", 6),
1375
- (0, RuleBuilderTestUtils2.createRuleVariable)("e", 7),
1376
- (0, RuleBuilderTestUtils2.createRuleVariable)("f", 8),
1377
- (0, RuleBuilderTestUtils2.createRuleVariable)("g", 9),
1378
- (0, RuleBuilderTestUtils2.createRuleVariable)("h", 10)
1379
- ];
1380
- RuleBuilderTestUtils2.createConditionDto = (variable) => {
1381
- const operator = Math.random() > 0 ? "equal" : "notEqual";
1382
- const opt = variable.options[0];
1383
- return {
1384
- kind: "condition",
1385
- name: "condition 1",
1386
- variableId: variable.varId,
1387
- operator,
1388
- value: opt.value
1389
- };
1390
- };
1391
- RuleBuilderTestUtils2.createConditionGroupDto = (conditions) => {
1392
- return {
1393
- kind: "condition-group",
1394
- conditions,
1395
- type: "all",
1396
- name: "random-group-name"
1397
- };
1398
- };
1399
- RuleBuilderTestUtils2.createBuilderRuleDto = () => {
1400
- const variables = (0, RuleBuilderTestUtils2.createBuilderVariables_A_H)();
1401
- const condition0 = (0, RuleBuilderTestUtils2.createConditionDto)(variables[0]);
1402
- const condition1 = (0, RuleBuilderTestUtils2.createConditionDto)(variables[1]);
1403
- const condition3 = (0, RuleBuilderTestUtils2.createConditionDto)(variables[3]);
1404
- const condition5 = (0, RuleBuilderTestUtils2.createConditionDto)(variables[5]);
1405
- const group = (0, RuleBuilderTestUtils2.createConditionGroupDto)([condition0, condition3]);
1406
- const rule = {
1407
- name: "rule-name",
1408
- conditions: [condition1, group, condition5],
1409
- excludeTags: [],
1410
- excludePages: [],
1411
- jumpToPage: false,
1412
- type: "all"
1413
- };
1414
- return [];
1415
- };
1416
- RuleBuilderTestUtils2.createExcludeByPageIdList = () => [
1417
- ExcludeByPageIdSelectItem.create(
1418
- {
1419
- kind: "exclude-by-pageId",
1420
- pageId: "page_a",
1421
- pageNumber: 5,
1422
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1423
- },
1424
- false
1425
- ),
1426
- ExcludeByPageIdSelectItem.create(
1427
- {
1428
- kind: "exclude-by-pageId",
1429
- pageId: "page_b",
1430
- pageNumber: 5,
1431
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1432
- },
1433
- true
1434
- ),
1435
- ExcludeByPageIdSelectItem.create(
1436
- {
1437
- kind: "exclude-by-pageId",
1438
- pageId: "page_c",
1439
- pageNumber: 5,
1440
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1441
- },
1442
- false
1443
- ),
1444
- ExcludeByPageIdSelectItem.create(
1445
- {
1446
- kind: "exclude-by-pageId",
1447
- pageId: "page_d",
1448
- pageNumber: 5,
1449
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1450
- },
1451
- false
1452
- ),
1453
- ExcludeByPageIdSelectItem.create(
1454
- {
1455
- kind: "exclude-by-pageId",
1456
- pageId: "page_e",
1457
- pageNumber: 5,
1458
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1459
- },
1460
- true
1461
- ),
1462
- ExcludeByPageIdSelectItem.create(
1463
- {
1464
- kind: "exclude-by-pageId",
1465
- pageId: "page_f",
1466
- pageNumber: 5,
1467
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1468
- },
1469
- false
1470
- ),
1471
- ExcludeByPageIdSelectItem.create(
1472
- {
1473
- kind: "exclude-by-pageId",
1474
- pageId: "page_g",
1475
- pageNumber: 5,
1476
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1477
- },
1478
- true
1479
- ),
1480
- ExcludeByPageIdSelectItem.create(
1481
- {
1482
- kind: "exclude-by-pageId",
1483
- pageId: "page_h",
1484
- pageNumber: 5,
1485
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1486
- },
1487
- false
1488
- ),
1489
- ExcludeByPageIdSelectItem.create(
1490
- {
1491
- kind: "exclude-by-pageId",
1492
- pageId: "page_i",
1493
- pageNumber: 5,
1494
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1495
- },
1496
- false
1497
- ),
1498
- ExcludeByPageIdSelectItem.create(
1499
- {
1500
- kind: "exclude-by-pageId",
1501
- pageId: "page_j",
1502
- pageNumber: 5,
1503
- mainText: "Har du noen gang v\xE6rt deprimeri?? "
1504
- },
1505
- true
1506
- )
1507
- ];
1508
- RuleBuilderTestUtils2.createExcludeByTagList = () => [
1509
- ExcludeByTagSelectItem.create(
1510
- {
1511
- kind: "exclude-by-tag",
1512
- tag: "Can_read",
1513
- pageCount: 5,
1514
- description: ""
1515
- },
1516
- false
1517
- ),
1518
- ExcludeByTagSelectItem.create(
1519
- {
1520
- kind: "exclude-by-tag",
1521
- tag: "Is grownup",
1522
- pageCount: 1,
1523
- description: ""
1524
- },
1525
- true
1526
- ),
1527
- ExcludeByTagSelectItem.create(
1528
- {
1529
- kind: "exclude-by-tag",
1530
- tag: "speaks english",
1531
- pageCount: 3,
1532
- description: ""
1533
- },
1534
- false
1535
- ),
1536
- ExcludeByTagSelectItem.create(
1537
- {
1538
- kind: "exclude-by-tag",
1539
- tag: "has work",
1540
- pageCount: 7,
1541
- description: ""
1542
- },
1543
- false
1544
- ),
1545
- ExcludeByTagSelectItem.create(
1546
- {
1547
- kind: "exclude-by-tag",
1548
- tag: "is-depressed",
1549
- pageCount: 2,
1550
- description: ""
1551
- },
1552
- false
1553
- )
1554
- ];
1555
- })(RuleBuilderTestUtils || (RuleBuilderTestUtils = {}));
1556
-
1557
1314
  // src/rulebuilder/Builder-rule.ts
1558
1315
  var BuilderRule = class _BuilderRule extends BuilderObject {
1559
1316
  constructor(dto, _ruleInput) {
@@ -1651,18 +1408,18 @@ var BuilderRule = class _BuilderRule extends BuilderObject {
1651
1408
  };
1652
1409
  return dto;
1653
1410
  }
1654
- toEngineRule() {
1411
+ toEngineRule(modulePrefix) {
1655
1412
  const conditions = [];
1656
1413
  this._conditions.forEach((c) => {
1657
1414
  if (c) {
1658
1415
  if (c instanceof BuilderCondition) {
1659
- const simpleCondition = c.toEngineCondition();
1416
+ const simpleCondition = c.toEngineCondition(modulePrefix);
1660
1417
  if (simpleCondition) {
1661
1418
  conditions.push(simpleCondition);
1662
1419
  }
1663
1420
  }
1664
1421
  if (c instanceof BuilderConditionGroup) {
1665
- const complexCondition = c.toEngineConditionComplex();
1422
+ const complexCondition = c.toEngineConditionComplex(modulePrefix);
1666
1423
  if (complexCondition)
1667
1424
  conditions.push(complexCondition);
1668
1425
  }
@@ -1704,9 +1461,7 @@ var BuilderRule = class _BuilderRule extends BuilderObject {
1704
1461
  };
1705
1462
  pageQueCommands.push(excludeTagsCommand);
1706
1463
  }
1707
- const id = import_engine3.DUtil.randomObjectId();
1708
1464
  const rule = {
1709
- id: "",
1710
1465
  description: this.name,
1711
1466
  all,
1712
1467
  some,
@@ -1725,34 +1480,34 @@ var AbstractThemeCompiler = class {
1725
1480
  };
1726
1481
 
1727
1482
  // src/theme/standard-props.ts
1728
- var import_engine4 = require("@media-quest/engine");
1483
+ var import_engine3 = require("@media-quest/engine");
1729
1484
  var DStateProps;
1730
1485
  ((DStateProps2) => {
1731
- DStateProps2.mediaBlockedBySequence = new import_engine4.BooleanStateProperty(
1486
+ DStateProps2.mediaBlockedBySequence = new import_engine3.BooleanStateProperty(
1732
1487
  "media-blocked-by-autoplay-sequence",
1733
1488
  false,
1734
1489
  "Should be true if the page is in a autoplay-sequence. The autoplay-sequence will always block other media."
1735
1490
  );
1736
- DStateProps2.inputBlockingBySequence = new import_engine4.BooleanStateProperty("input-blocked-by-autoplay-sequence", false, "");
1737
- DStateProps2.mediaBlockedByAudio = new import_engine4.BooleanStateProperty("media-blocked-by-audio", false, "");
1738
- DStateProps2.inputBlockedByAudio = new import_engine4.BooleanStateProperty("input-blocked-by-audio", false, "");
1739
- DStateProps2.mediaBlockedByVideo = new import_engine4.BooleanStateProperty("media-blocked-by-video", false, "");
1740
- DStateProps2.inputBlockedByVideo = new import_engine4.BooleanStateProperty(
1491
+ DStateProps2.inputBlockingBySequence = new import_engine3.BooleanStateProperty("input-blocked-by-autoplay-sequence", false, "");
1492
+ DStateProps2.mediaBlockedByAudio = new import_engine3.BooleanStateProperty("media-blocked-by-audio", false, "");
1493
+ DStateProps2.inputBlockedByAudio = new import_engine3.BooleanStateProperty("input-blocked-by-audio", false, "");
1494
+ DStateProps2.mediaBlockedByVideo = new import_engine3.BooleanStateProperty("media-blocked-by-video", false, "");
1495
+ DStateProps2.inputBlockedByVideo = new import_engine3.BooleanStateProperty(
1741
1496
  "input-blocked-by-video",
1742
1497
  false,
1743
1498
  "Should be true if a video is playing, and this video is suppose to block user-input."
1744
1499
  );
1745
- DStateProps2.userPausedVideo = new import_engine4.BooleanStateProperty(
1500
+ DStateProps2.userPausedVideo = new import_engine3.BooleanStateProperty(
1746
1501
  "user-paused-video",
1747
1502
  false,
1748
1503
  "Should be true if user paused the video by pressing the pause-button."
1749
1504
  );
1750
- DStateProps2.videoIsPlaying = new import_engine4.BooleanStateProperty(
1505
+ DStateProps2.videoIsPlaying = new import_engine3.BooleanStateProperty(
1751
1506
  "video-is-playing",
1752
1507
  false,
1753
1508
  "Should be true if any video is playing on the page."
1754
1509
  );
1755
- DStateProps2.audioIsPlaying = new import_engine4.BooleanStateProperty(
1510
+ DStateProps2.audioIsPlaying = new import_engine3.BooleanStateProperty(
1756
1511
  "audio-is-playing",
1757
1512
  false,
1758
1513
  "Should be tru if any audio is playing on page"
@@ -1935,8 +1690,8 @@ var ThemeUtils;
1935
1690
  })(ThemeUtils || (ThemeUtils = {}));
1936
1691
 
1937
1692
  // src/theme/default-theme-compiler.ts
1938
- var import_engine5 = require("@media-quest/engine");
1939
- var U3 = import_engine5.DUtil;
1693
+ var import_engine4 = require("@media-quest/engine");
1694
+ var U3 = import_engine4.DUtil;
1940
1695
  var generateElementId = () => U3.randomString(32);
1941
1696
  var DefaultThemeCompiler = class extends AbstractThemeCompiler {
1942
1697
  name = "Ispe default theme.";
@@ -1949,8 +1704,8 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
1949
1704
  const ruleInput = builderSchema.getRuleInput();
1950
1705
  const pageQueRules = [];
1951
1706
  source.rules.forEach((rule) => {
1952
- const engineRule = BuilderRule.fromDto(rule, ruleInput).toEngineRule();
1953
- if (!import_engine5.Rule.isEmpty(engineRule)) {
1707
+ const engineRule = BuilderRule.fromDto(rule, ruleInput).toEngineRule(source.prefix);
1708
+ if (!import_engine4.Rule.isEmpty(engineRule)) {
1954
1709
  pageQueRules.push(engineRule);
1955
1710
  } else {
1956
1711
  console.groupCollapsed(this.TAG, "Throws away empty rule.");
@@ -1962,7 +1717,7 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
1962
1717
  return pageQueRules;
1963
1718
  }
1964
1719
  compile(source) {
1965
- const pages = source.pages.map((p) => this.compilePage(p, source.id));
1720
+ const pages = source.pages.map((p) => this.compilePage(p, source.prefix));
1966
1721
  const rules = this.compileRules(source);
1967
1722
  const dto = {
1968
1723
  backgroundColor: source.backgroundColor,
@@ -2024,7 +1779,7 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2024
1779
  };
2025
1780
  return dto;
2026
1781
  }
2027
- compilePage(page, _moduleId) {
1782
+ compilePage(page, modulePrefix) {
2028
1783
  const { nextButton, mainText, id, mainMedia, _type } = page;
2029
1784
  const elements = [];
2030
1785
  const audioResourcesDto = [];
@@ -2038,7 +1793,8 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2038
1793
  mainTextAudio = res.audioDto;
2039
1794
  }
2040
1795
  if (_type === "question") {
2041
- const { buttons, question } = this.compileQuestion(id, page);
1796
+ const variableId = modulePrefix + "_" + page.prefix;
1797
+ const { buttons, question } = this.compileQuestion(id, page, variableId);
2042
1798
  elements.push(...buttons, question);
2043
1799
  }
2044
1800
  if (_type === "info-page") {
@@ -2218,7 +1974,7 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2218
1974
  elements.push(pauseBtn);
2219
1975
  return { videoDto, elements };
2220
1976
  }
2221
- compileQuestion(pageId, page) {
1977
+ compileQuestion(pageId, page, variableId) {
2222
1978
  const q = page.defaultQuestion;
2223
1979
  const text = page.mainText.text;
2224
1980
  const question = {
@@ -2233,7 +1989,7 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2233
1989
  const buttons = q.options.map((o) => {
2234
1990
  const btns = this.compileButton(pageId, o, {
2235
1991
  kind: "response-button",
2236
- questionId: ""
1992
+ questionId: variableId
2237
1993
  });
2238
1994
  return btns;
2239
1995
  });
@@ -2294,8 +2050,8 @@ var DefaultThemeCompiler = class extends AbstractThemeCompiler {
2294
2050
  };
2295
2051
 
2296
2052
  // src/Builder-schema.ts
2297
- var import_engine6 = require("@media-quest/engine");
2298
- var U4 = import_engine6.DUtil;
2053
+ var import_engine5 = require("@media-quest/engine");
2054
+ var U4 = import_engine5.DUtil;
2299
2055
  var BuilderSchema = class _BuilderSchema {
2300
2056
  constructor(id, name, prefix) {
2301
2057
  this.id = id;
@@ -2443,17 +2199,16 @@ var BuilderSchema = class _BuilderSchema {
2443
2199
  this.pages.forEach((page, index) => {
2444
2200
  const pageVariables = page.getQuestionVariables(prefix, index);
2445
2201
  qVars.push(...pageVariables);
2446
- const pageId = page.prefix;
2447
2202
  const mainText = page.mainText.text;
2448
2203
  const jumpAction = {
2449
2204
  kind: "jump-to-page",
2450
- pageId,
2205
+ pageId: page.id,
2451
2206
  pageNumber: index,
2452
2207
  mainText: page.mainText.text
2453
2208
  };
2454
2209
  const excludePageAction = {
2455
2210
  kind: "exclude-by-pageId",
2456
- pageId,
2211
+ pageId: page.id,
2457
2212
  pageNumber: index,
2458
2213
  mainText
2459
2214
  };
@@ -2567,3 +2322,4 @@ var BuilderText = class _BuilderText extends BuilderObject {
2567
2322
  TagActionManager,
2568
2323
  TagCollection
2569
2324
  });
2325
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3B1YmxpYy1hcGkudHMiLCAiLi4vc3JjL0J1aWxkZXJPYmplY3QudHMiLCAiLi4vc3JjL3RoZW1lL2ljb24tdXJscy50cyIsICIuLi9zcmMvdGhlbWUvSURlZmF1bHRUaGVtZS50cyIsICIuLi9zcmMvQnVpbGRlci1vcHRpb24udHMiLCAiLi4vc3JjL0J1aWxkZXItcXVlc3Rpb24udHMiLCAiLi4vc3JjL0J1aWxkZXJNYWluVGV4dC50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvUnVsZVZhcmlhYmxlLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXBhZ2UudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL1NpbmdsZVNlbGVjdEl0ZW0udHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL1J1bGVJbnB1dC50cyIsICIuLi9zcmMvQnVpbGRlclRhZy50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItb3BlcmF0b3IudHMiLCAiLi4vc3JjL3J1bGVidWlsZGVyL2NvbmRpdGlvbi9CdWlsZGVyLWNvbmRpdGlvbi50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvY29uZGl0aW9uL0J1aWxkZXItY29uZGl0aW9uLWdyb3VwLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9tdWx0aS1zZWxlY3QtaXRlbS50cyIsICIuLi9zcmMvcnVsZWJ1aWxkZXIvdGFnLWFjdGlvbi1tYW5hZ2VyLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9wYWdlLWFjdGlvbi1tYW5hZ2VyLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9qdW1wLXRvLWFjdGlvbi1tYW5hZ2VyLnRzIiwgIi4uL3NyYy9ydWxlYnVpbGRlci9CdWlsZGVyLXJ1bGUudHMiLCAiLi4vc3JjL3RoZW1lL0Fic3RyYWN0VGhlbWVDb21waWxlci50cyIsICIuLi9zcmMvdGhlbWUvc3RhbmRhcmQtcHJvcHMudHMiLCAiLi4vc3JjL3RoZW1lL3RoZW1lLXV0aWxzLnRzIiwgIi4uL3NyYy90aGVtZS9kZWZhdWx0LXRoZW1lLWNvbXBpbGVyLnRzIiwgIi4uL3NyYy9CdWlsZGVyLXNjaGVtYS50cyIsICIuLi9zcmMvQnVpbGRlci10ZXh0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgeyB0eXBlIEJ1aWxkZXJPcHRpb25EdG8sIEJ1aWxkZXJPcHRpb24gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuZXhwb3J0IHsgdHlwZSBCdWlsZGVyUGFnZUR0bywgdHlwZSBCdWlsZGVyUGFnZVR5cGUsIEJ1aWxkZXJQYWdlIH0gZnJvbSBcIi4vQnVpbGRlci1wYWdlXCI7XG5leHBvcnQgeyB0eXBlIEJ1aWxkZXJRdWVzdGlvbkR0bywgQnVpbGRlclF1ZXN0aW9uLCB0eXBlIEJ1aWxkZXJRdWVzdGlvblR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5leHBvcnQgeyBCdWlsZGVyU2NoZW1hLCB0eXBlIEJ1aWxkZXJTY2hlbWFEdG8gfSBmcm9tIFwiLi9CdWlsZGVyLXNjaGVtYVwiO1xuZXhwb3J0IHsgQnVpbGRlclRleHQsIHR5cGUgQnVpbGRlclRleHREdG8gfSBmcm9tIFwiLi9CdWlsZGVyLXRleHRcIjtcbmV4cG9ydCB7IHR5cGUgQnVpbGRlck1haW5JbWFnZUR0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluSW1hZ2VEdG9cIjtcbmV4cG9ydCB7IEJ1aWxkZXJNYWluVGV4dCwgdHlwZSBCdWlsZGVyTWFpblRleHREdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpblRleHRcIjtcbmV4cG9ydCB7IHR5cGUgQnVpbGRlck1haW5WaWRlb0R0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluVmlkZW9EdG9cIjtcbmV4cG9ydCB7IHR5cGUgQnVpbGRlclRhZ0R0bywgQnVpbGRlclRhZywgVGFnQ29sbGVjdGlvbiB9IGZyb20gXCIuL0J1aWxkZXJUYWdcIjtcbmV4cG9ydCB7IHR5cGUgQXVkaW9GaWxlLCB0eXBlIEltYWdlRmlsZSwgdHlwZSBWaWRlb0ZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuXG4vLyBQdWJsaWMgQXBpIG9mIHJ1bGUtYnVpbGRlclxuZXhwb3J0ICogZnJvbSBcIi4vcnVsZWJ1aWxkZXJcIjtcbiIsICJpbXBvcnQgeyBEVXRpbCB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmNvbnN0IFUgPSBEVXRpbDtcbi8qKlxuICogQnVpbGRlciBvYmplY3RzIGFyZSBjb21wbGV4IG9iamVjdHMgdGhhdCBhcmUgZW1iZWRkZWQgaW5zaWRlXG4gKiBhIEJ1aWxkZXItc2NoZW1hLCBhbmQgbmVlZHMgdG8gYmUgc2VyaWFsaXplZCB0byBqc29uLiBPZnRlbiB0aGVzZSBvYmplY3RzXG4gKiBhcmUgdXNlZCBpbiBjb2xsZWN0aW9ucywgYW5kIHRoYXQgaXMgd2h5IG1vc3Qgb2YgdGhlbSBuZWVkIGFuIGlkLlxuICovXG50eXBlIEJ1aWxkZXJPYmplY3RUeXBlID1cbiAgfCBcImJ1aWxkZXItcGFnZVwiXG4gIHwgXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiXG4gIHwgXCJidWlsZGVyLXF1ZXN0aW9uXCJcbiAgfCBcImJ1aWxkZXItbWFpbi10ZXh0XCJcbiAgfCBcImJ1aWxkZXItdGV4dFwiXG4gIHwgXCJidWlsZGVyLXJ1bGVcIlxuICB8IFwiYnVpbGRlci10YWdcIlxuICB8IFwiYnVpbGRlci1jb25kaXRpb25cIlxuICB8IFwiYnVpbGRlci12YXJpYWJsZVwiXG4gIHwgXCJidWlsZGVyLWNvbmRpdGlvbi1ncm91cFwiO1xuXG5leHBvcnQgbmFtZXNwYWNlIEJ1aWxkZXJPYmplY3RJZCB7XG4gIGV4cG9ydCB0eXBlIFF1ZXN0aW9uT3B0aW9uSUQgPSBzdHJpbmcgJiB7IF9fT1BUSU9OX19JRF9fOiB0cnVlIH07XG4gIGV4cG9ydCB0eXBlIFF1ZXN0aW9uSUQgPSBzdHJpbmcgJiB7IF9fUVVFU1RJT05fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVmlkZW9GaWxlSUQgPSBzdHJpbmcgJiB7IF9fVklERU9fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgQXVkaW9GaWxlSUQgPSBzdHJpbmcgJiB7IF9fQVVESU9fX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgSW1hZ2VJRCA9IHN0cmluZyAmIHsgX19JTUFHRV9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBUZXh0SUQgPSBzdHJpbmcgJiB7IF9fVEVYVF9fSURfXzogdHJ1ZSB9O1xuICBleHBvcnQgdHlwZSBNYWluVGV4dElEID0gc3RyaW5nICYgeyBfX01BSU5fX1RFWFRfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgUGFnZUlEID0gc3RyaW5nICYgeyBfX1BBR0VfX0lEX186IHRydWUgfTtcbiAgZXhwb3J0IHR5cGUgVGFnSWQgPSBzdHJpbmcgJiB7IF9fVEFHX19JRF9fOiB0cnVlIH07XG5cbiAgZXhwb3J0IGNvbnN0IGNyZWF0ZVRhZ0lkID0gKCk6IFRhZ0lkID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXRhZ1wiKSBhcyBUYWdJZDtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgbWFpblRleHRJZCA9ICgpOiBNYWluVGV4dElEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLW1haW4tdGV4dFwiKSBhcyBNYWluVGV4dElEO1xuICB9O1xuICBleHBvcnQgY29uc3QgdGV4dElkID0gKCk6IFRleHRJRCA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUlkKFwiYnVpbGRlci10ZXh0XCIpIGFzIFRleHRJRDtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgcXVlc3Rpb25PcHRpb25JZCA9ICgpOiBRdWVzdGlvbk9wdGlvbklEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiKSBhcyBRdWVzdGlvbk9wdGlvbklEO1xuICB9O1xuICBleHBvcnQgY29uc3QgcXVlc3Rpb25JZCA9ICgpOiBRdWVzdGlvbklEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXF1ZXN0aW9uXCIpIGFzIFF1ZXN0aW9uSUQ7XG4gIH07XG4gIGV4cG9ydCBjb25zdCBwYWdlSWQgPSAoKTogUGFnZUlEID0+IHtcbiAgICByZXR1cm4gY3JlYXRlSWQoXCJidWlsZGVyLXBhZ2VcIikgYXMgUGFnZUlEO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUlkID0gKHR5cGU6IEJ1aWxkZXJPYmplY3RUeXBlKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpZCA9IFUucmFuZG9tU3RyaW5nKDI0KTtcbiAgICByZXR1cm4gdHlwZSArIFwiLVwiICsgaWQ7XG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCdWlsZGVyT2JqZWN0PFQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0VHlwZSwgRHRvIGV4dGVuZHMge30+IHtcbiAgLy8gYWJzdHJhY3QgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgYWJzdHJhY3QgcmVhZG9ubHkgb2JqZWN0VHlwZTogVDtcbiAgYWJzdHJhY3QgdG9Kc29uKCk6IER0bztcbiAgYWJzdHJhY3QgY2xvbmUoKTogRHRvO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JpZ2luYWxEdG86IER0bztcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGR0bzogRHRvKSB7XG4gICAgdGhpcy5vcmlnaW5hbER0byA9IGR0bztcbiAgICAvLyB0aGlzLm9iamVjdElkID0gZHRvLm9iamVjdElkO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IEljb25VcmxzID0ge1xuICBpc3BlV2hpdGVQbmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZpc3BlLWh2aXQucG5nP2FsdD1tZWRpYSZ0b2tlbj1mNmZlNjI4Yi0yZDk5LTQ3MmQtYTJlYS1lMDYyODczZTJlMjInLFxuICBwYXVzZVN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj00NzMzNzQ5MS1iYjBkLTRjNTYtOWM4OS1hMDczY2UxOWZhZDQnLFxuICBwYXVzZUNpcmNsZU91dGxpbmVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZwYXVzZV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49MTMzYWFiYzgtYWI5YS00ZWFhLTk5MTQtNGYwZjgyYzIyZWUyJyxcblxuICBwYXVzZUNpcmNsZUZpbGxlZFN2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBhdXNlX2NpcmNsZV9maWxsZWQtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPWFmM2YxMmMzLTMxOTktNDA5Ni04ZWQyLTc2MzQ3YjlhMGEwYScsXG4gIHBsYXlDaXJjbGVSZWd1bGFyOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheS1jaXJjbGUtcmVndWxhci5zdmc/YWx0PW1lZGlhJnRva2VuPTA4NjdiNjkwLWQ3ZmQtNDc1Yy04ZTkxLWIyZDdhZWNhNTRkMScsXG4gIHBsYXlBcnJvd1N2ZzpcbiAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9pc3BlLWJhY2tlbmQtZGV2LmFwcHNwb3QuY29tL28vcHVibGljLWFzc2V0cyUyRnBsYXlfYXJyb3ctMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTJmYTk1ZTFmLTYxZjctNGExOC1hZmIzLTIxMGVhYmFlODIyNycsXG4gIHBsYXlDaXJjbGVPdXRsaW5lOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGcGxheV9jaXJjbGVfb3V0bGluZS0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49M2E5ZjYyYzUtZGZhMi00MGVmLWE1MGUtY2YxYmRkMmQ0N2YyJyxcblxuICBzdG9wQ2lyY2xlU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGc3RvcF9jaXJjbGUtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPThmYmM4Yjg5LTI5YmItNDlhZC1hZTExLWI4ODgyYmEzY2E3NycsXG4gIHN0b3BTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZzdG9wLTI0cHguc3ZnP2FsdD1tZWRpYSZ0b2tlbj1kMmNkNDFmMS0xMzMxLTQyNDMtOWI3YS1kYzBmMGNjZDI1NWQnLFxuICByZXBsYXlDaXJjbGVTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZyZXBsYXktMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTNjMzVjY2Y0LWI0NjctNGU4MS04NWQ2LWIzNmFjNjQ3MzhhZCcsXG5cbiAgdm9sdW1lT2ZmU3ZnOlxuICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2lzcGUtYmFja2VuZC1kZXYuYXBwc3BvdC5jb20vby9wdWJsaWMtYXNzZXRzJTJGdm9sdW1lX29mZi0yNHB4LnN2Zz9hbHQ9bWVkaWEmdG9rZW49NGU0MWNjMTAtOWY0Yi00OTY3LWI0ZGYtZWQwNjgyZTY1N2E5JyxcbiAgdm9sdW1lVXBTdmc6XG4gICAgJ2h0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOSdcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBDc3NUaGVtZSB9IGZyb20gXCIuL2Nzcy10aGVtZVwiO1xuaW1wb3J0IHsgRFN0eWxlLCBEQ3NzIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IEljb25VcmxzIH0gZnJvbSBcIi4vaWNvbi11cmxzXCI7XG5cbnR5cGUgUFN0eWxlID0gUGFydGlhbDxEU3R5bGU+O1xuZXhwb3J0IGludGVyZmFjZSBJRGVmYXVsdFRoZW1lIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbWFnZTogeyBzdHlsZTogUFN0eWxlIH07XG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogc3RyaW5nO1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgICBjc3NEaXNhYmxlZDogUFN0eWxlO1xuICAgICAgY3NzRW5hYmxlZDogUFN0eWxlO1xuICAgIH07XG4gICAgcGF1c2VCdXR0b246IHtcbiAgICAgIGljb25Vcmw6IHN0cmluZztcbiAgICAgIGNzczogUFN0eWxlO1xuICAgICAgY3NzRGlzYWJsZWQ6IFBTdHlsZTtcbiAgICAgIGNzc0VuYWJsZWQ6IFBTdHlsZTtcbiAgICB9O1xuICAgIHZpZGVvRWxlbWVudDoge1xuICAgICAgY3NzOiBQU3R5bGU7XG4gICAgfTtcbiAgfTtcbiAgbWFpblRleHQ6IHtcbiAgICBub01lZGlhOiB7XG4gICAgICB0ZXh0OiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICAgIGF1ZGlvOiB7IGNzczogUFN0eWxlOyBjc3NEaXNhYmxlZDogUFN0eWxlOyBjc3NFbmFibGVkOiBQU3R5bGUgfTtcbiAgICB9O1xuICAgIHdpdGhNZWRpYToge1xuICAgICAgdGV4dDogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgICBhdWRpbzogeyBjc3M6IFBTdHlsZTsgY3NzRGlzYWJsZWQ6IFBTdHlsZTsgY3NzRW5hYmxlZDogUFN0eWxlIH07XG4gICAgfTtcbiAgfTtcbiAgLy8gbWFpblRleHRUaGVtZTogQnVpbGRlclRleHRUaGVtZTtcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWU7XG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lO1xuICAvLyBtYWluUXVlc3Rpb25UZXh0OiBCdWlsZGVyVGV4dFRoZW1lO1xuICBkb250S25vd0J1dHRvblRoZW1lPzogQnVpbGRlck9wdGlvblRoZW1lO1xuICBidXR0b25UaGVtZXM/OiBBcnJheTxCdWlsZGVyT3B0aW9uVGhlbWU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGl2OiBDc3NUaGVtZTtcbiAgdGV4dDE6IFBTdHlsZTtcbiAgdGV4dDI/OiBDc3NUaGVtZTtcbn1cblxubmFtZXNwYWNlIEJ1aWxkZXJPcHRpb25UaGVtZSB7XG4gIGNvbnN0IEdSRUVOID0gXCIjNzBBRDQ3XCI7XG4gIGNvbnN0IFlFTExPVyA9IFwiI0ZGQzAwMFwiO1xuICBjb25zdCBPUkFOR0UgPSBcIiNGNDkwMkNcIjtcbiAgY29uc3QgUkVEID0gXCIjRkYwMDAwXCI7XG4gIGNvbnN0IExJR0hUX0JMVUUgPSBcIiM0MjcxOUNcIjtcbiAgY29uc3QgV0hJVEUgPSBcIiNmZmZmZmZcIjtcbiAgY29uc3QgQkxVRSA9IFwiIzJGNTU5N1wiO1xuICBjb25zdCBCVE5fV0lEVEggPSAxOC41O1xuICBjb25zdCBCVE5fQk9SREVSX1dJRFRIID0gMztcbiAgY29uc3QgQlROX0JPUkRFUl9SQURJVVMgPSAxMDtcbiAgY29uc3QgQlROX0JPUkRFUl9TVFlMRTogRFN0eWxlW1wiYm9yZGVyU3R5bGVcIl0gPSBcInNvbGlkXCI7XG4gIGNvbnN0IEJUTl9IRUlHSFQgPSA5LjI7XG4gIGNvbnN0IEJUTl9TSE9SVF9XSURUSCA9IDEzLjc7XG4gIGNvbnN0IEZPTlRfV0VJR0hUOiBEU3R5bGVbXCJmb250V2VpZ2h0XCJdID0gNjAwO1xuICBjb25zdCBGT05UX1NJWkU6IERDc3MuUHhbXCJ2YWx1ZVwiXSA9IDM1O1xuXG4gIGV4cG9ydCBjb25zdCBibHVlQnV0dG9uID0gKCk6IEJ1aWxkZXJPcHRpb25UaGVtZSA9PiAoe1xuICAgIG5hbWU6IFwiYmx1ZS1idXR0b24tdGhlbWVcIixcbiAgICBkaXY6IHtcbiAgICAgIGNzczoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IEJMVUUsXG4gICAgICAgIGJvcmRlckNvbG9yOiBCTFVFLFxuICAgICAgICB0ZXh0Q29sb3I6IFdISVRFLFxuICAgICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICAgIGJvcmRlcldpZHRoOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiBCVE5fQk9SREVSX1dJRFRIIH0sXG4gICAgICAgIGJvcmRlclN0eWxlOiBCVE5fQk9SREVSX1NUWUxFLFxuICAgICAgICBib3JkZXJSYWRpdXM6IHsgdmFsdWU6IEJUTl9CT1JERVJfUkFESVVTLCBfdW5pdDogXCJweFwiIH0sXG4gICAgICAgIHBhZGRpbmc6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDQwIH0sXG4gICAgICAgIGg6IEJUTl9IRUlHSFQsXG4gICAgICAgIHc6IEJUTl9XSURUSCxcbiAgICAgICAgeDogMTAsXG4gICAgICAgIHk6IDgsXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgIH0sXG4gICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICBjc3NFbmFibGVkOiB7IG9wYWNpdHk6IDEsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICB9LFxuICAgIHRleHQxOiB7XG4gICAgICB5OiA1MCxcbiAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCUsIDUwJSlcIixcbiAgICAgIHRleHRDb2xvcjogV0hJVEUsXG4gICAgICBmb250U2l6ZTogeyBfdW5pdDogXCJweFwiLCB2YWx1ZTogRk9OVF9TSVpFIH0sXG4gICAgICB3OiA4NCxcbiAgICAgIHg6IDgsXG4gICAgICBmb250V2VpZ2h0OiBGT05UX1dFSUdIVCxcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRUaGVtZTogSURlZmF1bHRUaGVtZSA9IHtcbiAgbmFtZTogXCJkZWZhdWx0LXRoZW1lXCIsXG4gIHZpZGVvUGxheWVyOiB7XG4gICAgcGxheUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGxheUNpcmNsZVJlZ3VsYXIsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICBwYXVzZUJ1dHRvbjoge1xuICAgICAgaWNvblVybDogSWNvblVybHMucGF1c2VTdmcsXG4gICAgICBjc3M6IHsgdzogNSwgaDogNSwgeTogNDgsIHg6IDQgfSxcbiAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgfSxcbiAgICB2aWRlb0VsZW1lbnQ6IHsgY3NzOiB7IHc6IDEwMCwgaDogNDUsIHk6IDU1LCB4OiAwIH0gfSxcbiAgfSxcbiAgaW1hZ2U6IHsgc3R5bGU6IHsgaDogNTAsIHc6IDEwMCwgeDogMCB9IH0sXG4gIG1haW5UZXh0OiB7XG4gICAgbm9NZWRpYToge1xuICAgICAgdGV4dDoge1xuICAgICAgICBjc3M6IHtcbiAgICAgICAgICB3OiA4MCxcbiAgICAgICAgICB5OiAyNyxcbiAgICAgICAgICB4OiAxMCxcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgICAgdGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgICAgICAgZm9udFNpemU6IHsgX3VuaXQ6IFwicHhcIiwgdmFsdWU6IDMwIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7fSxcbiAgICAgICAgY3NzRW5hYmxlZDoge30sXG4gICAgICB9LFxuICAgICAgYXVkaW86IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgaDogNixcbiAgICAgICAgICB3OiA2LFxuICAgICAgICAgIHg6IDQsXG4gICAgICAgICAgeTogMzIsXG4gICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIixcbiAgICAgICAgICBvcGFjaXR5OiAwLjgsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNzc0Rpc2FibGVkOiB7IG9wYWNpdHk6IDAuMywgY3Vyc29yOiBcIm5vdC1hbGxvd2VkXCIgfSxcbiAgICAgICAgY3NzRW5hYmxlZDogeyBvcGFjaXR5OiAwLjgsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3aXRoTWVkaWE6IHtcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgY3NzOiB7XG4gICAgICAgICAgdzogODAsXG4gICAgICAgICAgeTogMjcsXG4gICAgICAgICAgeDogMTAsXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgICAgICAgIGZvbnRTaXplOiB7IF91bml0OiBcInB4XCIsIHZhbHVlOiAzMCB9LFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDoge30sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHt9LFxuICAgICAgfSxcbiAgICAgIGF1ZGlvOiB7XG4gICAgICAgIGNzczoge1xuICAgICAgICAgIGg6IDYsXG4gICAgICAgICAgdzogNixcbiAgICAgICAgICB4OiA0LFxuICAgICAgICAgIHk6IDMyLFxuICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICB9LFxuICAgICAgICBjc3NEaXNhYmxlZDogeyBvcGFjaXR5OiAwLjMsIGN1cnNvcjogXCJub3QtYWxsb3dlZFwiIH0sXG4gICAgICAgIGNzc0VuYWJsZWQ6IHsgb3BhY2l0eTogMC44LCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG5leHRCdXR0b25UaGVtZTogQnVpbGRlck9wdGlvblRoZW1lLmJsdWVCdXR0b24oKSxcbiAgcmVzcG9uc2VCdXR0b25zOiBCdWlsZGVyT3B0aW9uVGhlbWUuYmx1ZUJ1dHRvbigpLFxufTtcbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25UaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZSB9IGZyb20gXCIuL3RoZW1lL0lEZWZhdWx0VGhlbWVcIjtcbmltcG9ydCB7IEF1ZGlvRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlck9wdGlvbkR0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25PcHRpb25JRDtcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbGFiZWxBdWRpbz86IEF1ZGlvRmlsZTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJPcHRpb24gZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1xdWVzdGlvbi1vcHRpb25cIiwgQnVpbGRlck9wdGlvbkR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlID0gXCJidWlsZGVyLXF1ZXN0aW9uLW9wdGlvblwiO1xuICB0aGVtZTogQnVpbGRlck9wdGlvblRoZW1lID0gRGVmYXVsdFRoZW1lLnJlc3BvbnNlQnV0dG9ucztcblxuICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uT3B0aW9uSUQ7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGxhYmVsID0gXCJcIjtcbiAgcHJpdmF0ZSBfbGFiZWxBdWRpb0ZpbGU6IEF1ZGlvRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIGdldCBsYWJlbEF1ZGlvRmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxBdWRpb0ZpbGU7XG4gIH1cbiAgc2V0IGxhYmVsQXVkaW9GaWxlKGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UpIHtcbiAgICB0aGlzLl9sYWJlbEF1ZGlvRmlsZSA9IGF1ZGlvRmlsZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMudmFsdWUgPSBkdG8udmFsdWU7XG4gICAgdGhpcy5sYWJlbCA9IGR0by5sYWJlbDtcbiAgICAvLyB0aGlzLnRoZW1lID0gZHRvLnRoZW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHZhbHVlOiBudW1iZXIsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyT3B0aW9uRHRvID0ge1xuICAgICAgaWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGxhYmVsLFxuICAgIH07XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyT3B0aW9uRHRvKSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQnVpbGRlck9wdGlvbihkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyT3B0aW9uRHRvIHtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJPcHRpb25EdG8gPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGFiZWw6IHRoaXMubGFiZWwsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlck9wdGlvbkR0byB7XG4gICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbk9wdGlvbklkKCk7XG4gICAgY29uc3QgZHRvID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBjbG9uZUR0bzogQnVpbGRlck9wdGlvbkR0byA9IHsgLi4uZHRvLCBpZDogY2xvbmVJZCB9O1xuICAgIHJldHVybiBjbG9uZUR0bztcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlck9wdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT3B0aW9uIH0gZnJvbSBcIi4vQnVpbGRlci1vcHRpb25cIjtcbmltcG9ydCB7IEJ1aWxkZXJPYmplY3QsIEJ1aWxkZXJPYmplY3RJZCB9IGZyb20gXCIuL0J1aWxkZXJPYmplY3RcIjtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclF1ZXN0aW9uVHlwZSA9XG4gICAgfCBcInNlbGVjdC1vbmVcIlxuICAgIHwgXCJzZWxlY3QtbWFueVwiXG4gICAgfCBcInRleHRcIlxuICAgIHwgXCJjb2xvclwiXG4gICAgfCBcInJhZGlvXCJcbiAgICB8IFwiZW1haWxcIlxuICAgIHwgXCJ0aW1lXCJcbiAgICB8IFwiY2hlY2tib3hcIlxuICAgIHwgXCJ0ZXh0YXJlYVwiXG4gICAgfCBcImRhdGVcIlxuICAgIHwgXCJudW1lcmljLXJhbmdlXCJcbiAgICB8IFwiZHVyYXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUXVlc3Rpb25EdG8ge1xuICAgIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUXVlc3Rpb25JRDtcbiAgICBfdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgb3B0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyT3B0aW9uRHRvPjtcbiAgICBwcmVmaXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJRdWVzdGlvbiBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8XCJidWlsZGVyLXF1ZXN0aW9uXCIsIEJ1aWxkZXJRdWVzdGlvbkR0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGUgPSBcImJ1aWxkZXItcXVlc3Rpb25cIjtcbiAgICBpZDogQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgdHlwZTogQnVpbGRlclF1ZXN0aW9uVHlwZTtcbiAgICBxdWVzdGlvblRleHQgPSBcIlwiO1xuICAgIG9wdGlvbnM6IEJ1aWxkZXJPcHRpb25bXSA9IFtdO1xuICAgIHByZWZpeCA9IFwiXCI7XG5cbiAgICBzdGF0aWMgY3JlYXRlID0gKHR5cGU6IEJ1aWxkZXJRdWVzdGlvblR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucXVlc3Rpb25JZCgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlclF1ZXN0aW9uKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgX3R5cGU6IHR5cGUsXG4gICAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKTogQnVpbGRlclF1ZXN0aW9uIHtcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBuZXcgQnVpbGRlclF1ZXN0aW9uKGR0byk7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvKSB7XG4gICAgICAgIHN1cGVyKGR0byk7XG4gICAgICAgIHRoaXMuaWQgPSBkdG8uaWQgYXMgQnVpbGRlck9iamVjdElkLlF1ZXN0aW9uSUQ7XG4gICAgICAgIHRoaXMudHlwZSA9IGR0by5fdHlwZTtcbiAgICAgICAgdGhpcy5xdWVzdGlvblRleHQgPSBkdG8udGV4dDtcbiAgICAgICAgdGhpcy5wcmVmaXggPSBkdG8ucHJlZml4O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBkdG8ub3B0aW9ucy5tYXAoKG8pID0+IEJ1aWxkZXJPcHRpb24uZnJvbUpzb24obykpO1xuICAgIH1cblxuICAgIGFkZE9wdGlvbihsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBhdEluZGV4ID0gLTEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gQnVpbGRlck9wdGlvbi5jcmVhdGUodmFsdWUsIGxhYmVsKTtcbiAgICAgICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNwbGljZShhdEluZGV4LCAwLCBvcHRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIGRlbGV0ZU9wdGlvbihvcHRpb246IEJ1aWxkZXJPcHRpb24pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLmlkICE9PSBvcHRpb24uaWQpO1xuICAgICAgICBjb25zdCBkaWREZWxldGUgPSBmaWx0ZXJlZC5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBmaWx0ZXJlZDtcbiAgICAgICAgcmV0dXJuIGRpZERlbGV0ZTtcbiAgICB9XG5cbiAgICB0b0pzb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNKc29uID0gdGhpcy5vcHRpb25zLm1hcCgobykgPT4gby50b0pzb24oKSk7XG4gICAgICAgIGNvbnN0IGR0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxuICAgICAgICAgICAgX3R5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMucXVlc3Rpb25UZXh0LFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc0pzb24sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBkdG87XG4gICAgfVxuXG4gICAgY2xvbmUoKTogQnVpbGRlclF1ZXN0aW9uRHRvIHtcbiAgICAgICAgY29uc3QgY2xvbmVJZCA9IEJ1aWxkZXJPYmplY3RJZC5xdWVzdGlvbklkKCk7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNDbG9uZSA9IHRoaXMub3B0aW9ucy5tYXAoKG8pID0+IG8uY2xvbmUoKSk7XG4gICAgICAgIGNvbnN0IGNsb25lZER0bzogQnVpbGRlclF1ZXN0aW9uRHRvID0ge1xuICAgICAgICAgICAgLi4uZHRvLFxuICAgICAgICAgICAgaWQ6IGNsb25lSWQsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zQ2xvbmUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjbG9uZWREdG87XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBBdWRpb0ZpbGUgfSBmcm9tIFwiLi9tZWRpYS1maWxlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGF1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2U7XG4gICAgYXV0b3BsYXk6IGJvb2xlYW47XG4gICAgYXV0b3BsYXlEZWxheTogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlck1haW5UZXh0IGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItbWFpbi10ZXh0XCIsIEJ1aWxkZXJNYWluVGV4dER0bz4ge1xuICAgIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1tYWluLXRleHRcIiA9IFwiYnVpbGRlci1tYWluLXRleHRcIjtcbiAgICBhdXRvcGxheSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2F1ZGlvRmlsZTogQXVkaW9GaWxlIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBhdXRvcGxheURlbGF5ID0gMDtcblxuICAgIHRleHQgPSBcIlwiO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJNYWluVGV4dER0bykge1xuICAgICAgICBzdXBlcihkdG8pO1xuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBkdG8uYXVkaW9GaWxlID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5ID0gZHRvLmF1dG9wbGF5ID8/IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9wbGF5RGVsYXkgPSBkdG8uYXV0b3BsYXlEZWxheSA/PyAwO1xuICAgICAgICB0aGlzLnRleHQgPSBkdG8udGV4dCA/PyBcIlwiO1xuICAgIH1cblxuICAgIGdldCBhdXRvcGxheURlbGF5SW5TZWNvbmRzKCkge1xuICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuYXV0b3BsYXlEZWxheTtcbiAgICAgICAgY29uc3QgcyA9IGRlbGF5IC8gMTAwMDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gcy50b0ZpeGVkKDEpO1xuICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgIH1cblxuICAgIGdldCBkdXJhdGlvblRhZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1ZGlvRmlsZSkgcmV0dXJuIFwiXCI7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYXVkaW9GaWxlLmR1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgZHVyID0gdGhpcy5hdWRpb0ZpbGUuZHVyYXRpb24udG9GaXhlZCgxKTtcbiAgICAgICAgcmV0dXJuIFwiZHVyIFwiICsgZHVyICsgXCIgc1wiO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJNYWluVGV4dER0byk6IEJ1aWxkZXJNYWluVGV4dCB7XG4gICAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IEJ1aWxkZXJNYWluVGV4dChkdG8pO1xuICAgICAgICByZXR1cm4gbWFpblRleHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZHRvOiBCdWlsZGVyTWFpblRleHREdG8gPSB7XG4gICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXG4gICAgICAgICAgICBhdXRvcGxheURlbGF5OiAwLFxuICAgICAgICAgICAgYXVkaW9GaWxlOiBmYWxzZSxcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlck1haW5UZXh0KGR0byk7XG4gICAgfTtcblxuICAgIGNsb25lKCk6IEJ1aWxkZXJNYWluVGV4dER0byB7XG4gICAgICAgIGNvbnN0IGR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgICAgIGNvbnN0IGNsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkdG8pKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHRvSnNvbigpOiBCdWlsZGVyTWFpblRleHREdG8ge1xuICAgICAgICBjb25zdCBkdG86IEJ1aWxkZXJNYWluVGV4dER0byA9IHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIGF1ZGlvRmlsZTogdGhpcy5hdWRpb0ZpbGUsXG4gICAgICAgICAgICBhdXRvcGxheTogdGhpcy5hdXRvcGxheSxcbiAgICAgICAgICAgIGF1dG9wbGF5RGVsYXk6IHRoaXMuYXV0b3BsYXlEZWxheSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGR0bztcbiAgICB9XG4gICAgZ2V0IGF1ZGlvRmlsZSgpOiBBdWRpb0ZpbGUgfCBmYWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0ZpbGU7XG4gICAgfVxuICAgIHNldCBhdWRpb0ZpbGUoYXVkaW9GaWxlOiBBdWRpb0ZpbGUgfCBmYWxzZSkge1xuICAgICAgICBpZiAoYXVkaW9GaWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvcGxheURlbGF5ID0gMDtcbiAgICAgICAgICAgIHRoaXMuYXV0b3BsYXkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hdWRpb0ZpbGUgPSBhdWRpb0ZpbGU7XG4gICAgfVxufVxuIiwgImNvbnN0IEJ1aWxkZXJWYXJpYWJsZVR5cGUgPSB7XG4gIG51bWVyaWNXaXRoT3B0aW9uczogdHJ1ZSxcbiAgbnVtZXJpYzogdHJ1ZSxcbiAgbnVtZXJpY1JhbmdlOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRlUmFuZ2U6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIGR1cmF0aW9uOiB0cnVlLFxuICBib29sZWFuOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVpbGRlclZhcmlhYmxlVHlwZSA9IGtleW9mIHR5cGVvZiBCdWlsZGVyVmFyaWFibGVUeXBlO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRlclZhcmlhYmxlT3B0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZyxcbiAgICByZWFkb25seSB2YWx1ZTogbnVtYmVyLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblZhcmlhYmxlIHtcbiAgcmVhZG9ubHkga2luZDogXCJxdWVzdGlvbi12YXJpYWJsZVwiID0gXCJxdWVzdGlvbi12YXJpYWJsZVwiO1xuICByZWFkb25seSBkYXRhVHlwZTogQnVpbGRlclZhcmlhYmxlVHlwZSA9IFwibnVtZXJpY1dpdGhPcHRpb25zXCI7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhcklkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZyxcbiAgICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZU9wdGlvbj4sXG4gICAgcmVhZG9ubHkgcGFnZU51bWJlcjogbnVtYmVyLFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21WYXJpYWJsZSB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwiY29uZmlndXJhdGlvbi12YXJpYWJsZVwiID0gXCJjb25maWd1cmF0aW9uLXZhcmlhYmxlXCI7XG4gIHJlYWRvbmx5IGRhdGFUeXBlOiBCdWlsZGVyVmFyaWFibGVUeXBlID0gXCJudW1lcmljV2l0aE9wdGlvbnNcIjtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgdmFySWQ6IHN0cmluZyxcbiAgICByZWFkb25seSBsYWJlbDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IG9wdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlT3B0aW9uPixcbiAgKSB7fVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGVyVmFyaWFibGUgPSBRdWVzdGlvblZhcmlhYmxlIHwgQ3VzdG9tVmFyaWFibGU7XG4iLCAiaW1wb3J0IHR5cGUgeyBCdWlsZGVyUXVlc3Rpb25EdG8sIEJ1aWxkZXJRdWVzdGlvblR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyUXVlc3Rpb24gfSBmcm9tIFwiLi9CdWlsZGVyLXF1ZXN0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0LCBCdWlsZGVyT2JqZWN0SWQgfSBmcm9tIFwiLi9CdWlsZGVyT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJPcHRpb25EdG8gfSBmcm9tIFwiLi9CdWlsZGVyLW9wdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlck9wdGlvbiB9IGZyb20gXCIuL0J1aWxkZXItb3B0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluVmlkZW9EdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpblZpZGVvRHRvXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfSBmcm9tIFwiLi9CdWlsZGVyTWFpbkltYWdlRHRvXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJNYWluVGV4dER0byB9IGZyb20gXCIuL0J1aWxkZXJNYWluVGV4dFwiO1xuaW1wb3J0IHsgQnVpbGRlck1haW5UZXh0IH0gZnJvbSBcIi4vQnVpbGRlck1haW5UZXh0XCI7XG5pbXBvcnQgeyBCdWlsZGVyVmFyaWFibGVPcHRpb24sIFF1ZXN0aW9uVmFyaWFibGUgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IERVdGlsIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgVSA9IERVdGlsO1xuZXhwb3J0IHR5cGUgQnVpbGRlclBhZ2VUeXBlID0gXCJpbmZvLXBhZ2VcIiB8IFwicXVlc3Rpb25cIiB8IFwibXVsdGktc2VsZWN0XCIgfCBcImZvcm1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyUGFnZUR0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuUGFnZUlEO1xuICBwcmVmaXg6IHN0cmluZztcbiAgX3R5cGU6IEJ1aWxkZXJQYWdlVHlwZTtcbiAgbWFpblRleHQ6IEJ1aWxkZXJNYWluVGV4dER0bztcbiAgbmV4dEJ1dHRvbjogQnVpbGRlck9wdGlvbkR0bztcbiAgZGVmYXVsdFF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb25EdG87XG4gIHF1ZXN0aW9uczogQXJyYXk8QnVpbGRlclF1ZXN0aW9uRHRvPjtcbiAgbWFpbk1lZGlhPzogQnVpbGRlck1haW5JbWFnZUR0byB8IEJ1aWxkZXJNYWluVmlkZW9EdG87XG4gIGF1dG9wbGF5U2VxdWVuY2U6IEFycmF5PHN0cmluZz47XG4gIHRhZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJQYWdlIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcGFnZVwiLCBCdWlsZGVyUGFnZUR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItcGFnZVwiID0gXCJidWlsZGVyLXBhZ2VcIjtcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5QYWdlSUQ7XG4gIHByaXZhdGUgX3BhZ2VUeXBlOiBCdWlsZGVyUGFnZVR5cGU7XG4gIHByaXZhdGUgX3ByZWZpeCA9IFwiXCI7XG4gIHByaXZhdGUgX3F1ZXN0aW9uczogQXJyYXk8QnVpbGRlclF1ZXN0aW9uPiA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF90YWdzOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSBfYmFja2dyb3VuZENvbG9yID0gXCIjRkZGRkZGXCI7XG4gIG1haW5NZWRpYTogQnVpbGRlck1haW5WaWRlb0R0byB8IEJ1aWxkZXJNYWluSW1hZ2VEdG8gfCBmYWxzZSA9IGZhbHNlO1xuICBkZWZhdWx0UXVlc3Rpb246IEJ1aWxkZXJRdWVzdGlvbjtcbiAgbWFpblRleHQ6IEJ1aWxkZXJNYWluVGV4dDtcbiAgbmV4dEJ1dHRvbiA9IEJ1aWxkZXJPcHRpb24uY3JlYXRlKC0xLCBcIk5lc3RlXCIpO1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHR5cGU6IEJ1aWxkZXJQYWdlVHlwZSwgX3ByZWZpeDogc3RyaW5nKSB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQucGFnZUlkKCk7XG4gICAgY29uc3QgbWFpblRleHREdG86IEJ1aWxkZXJNYWluVGV4dER0byA9IHtcbiAgICAgIHRleHQ6IFwiXCIsXG4gICAgICBhdWRpb0ZpbGU6IGZhbHNlLFxuICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgYXV0b3BsYXlEZWxheTogMCxcbiAgICB9O1xuICAgIGNvbnN0IG5leHRCdXR0b25EdG8gPSBCdWlsZGVyT3B0aW9uLmNyZWF0ZSgtMSwgXCJwYWdlLW5leHQtYnV0dG9uLXRleHRcIikudG9Kc29uKCk7XG4gICAgY29uc3QgZGVmYXVsdFF1ZXN0aW9uRHRvID0gQnVpbGRlclF1ZXN0aW9uLmNyZWF0ZShcInNlbGVjdC1vbmVcIikudG9Kc29uKCk7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIF90eXBlOiB0eXBlLFxuICAgICAgYXV0b3BsYXlTZXF1ZW5jZTogW10sXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IGRlZmF1bHRRdWVzdGlvbkR0byxcbiAgICAgIGlkLFxuICAgICAgbmV4dEJ1dHRvbjogbmV4dEJ1dHRvbkR0byxcbiAgICAgIG1haW5UZXh0OiBtYWluVGV4dER0byxcbiAgICAgIHByZWZpeDogXCJcIixcbiAgICAgIHF1ZXN0aW9uczogW10sXG4gICAgICB0YWdzOiBbXSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnZSA9IG5ldyBCdWlsZGVyUGFnZShkdG8pO1xuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb24oZHRvOiBCdWlsZGVyUGFnZUR0byk6IEJ1aWxkZXJQYWdlIHtcbiAgICBjb25zdCBwYWdlID0gbmV3IEJ1aWxkZXJQYWdlKGR0byk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGR0bzogQnVpbGRlclBhZ2VEdG8pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMuaWQgPSBkdG8uaWQ7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSBkdG8uX3R5cGU7XG4gICAgdGhpcy5fcHJlZml4ID0gZHRvLnByZWZpeDtcbiAgICB0aGlzLm1haW5UZXh0ID0gQnVpbGRlck1haW5UZXh0LmZyb21Kc29uKGR0by5tYWluVGV4dCk7XG4gICAgdGhpcy5uZXh0QnV0dG9uID0gQnVpbGRlck9wdGlvbi5mcm9tSnNvbihkdG8ubmV4dEJ1dHRvbik7XG4gICAgdGhpcy5kZWZhdWx0UXVlc3Rpb24gPSBCdWlsZGVyUXVlc3Rpb24uZnJvbUpzb24oZHRvLmRlZmF1bHRRdWVzdGlvbik7XG4gICAgdGhpcy5fcXVlc3Rpb25zID0gZHRvLnF1ZXN0aW9ucy5tYXAoKHEpID0+IEJ1aWxkZXJRdWVzdGlvbi5mcm9tSnNvbihxKSk7XG4gICAgY29uc3QgdGFnTGlzdDogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KGR0by50YWdzKSA/IGR0by50YWdzIDogW107XG4gICAgdGhpcy5fdGFncyA9IG5ldyBTZXQodGFnTGlzdCk7XG4gICAgaWYgKGR0by5tYWluTWVkaWEpIHtcbiAgICAgIHRoaXMubWFpbk1lZGlhID0gZHRvLm1haW5NZWRpYTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cblxuICBpbnNlcnRRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCBhdEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZEluZGV4Rm4gPSBVLmlzSW5SYW5nZSgwLCB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoKTtcbiAgICBpZiAoIXZhbGlkSW5kZXhGbihhdEluZGV4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBoYXNRdWVzdGlvbiA9ICEhdGhpcy5fcXVlc3Rpb25zLmZpbmQoKHEpID0+IHEuaWQgPT09IHF1ZXN0aW9uLmlkKTtcbiAgICBpZiAoaGFzUXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fcXVlc3Rpb25zLnNwbGljZShhdEluZGV4LCAwLCBxdWVzdGlvbik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRRdWVzdGlvbih0eXBlOiBCdWlsZGVyUXVlc3Rpb25UeXBlLCBhdEluZGV4ID0gLTEpOiBCdWlsZGVyUXVlc3Rpb24ge1xuICAgIGNvbnN0IHF1ZXN0aW9uID0gQnVpbGRlclF1ZXN0aW9uLmNyZWF0ZSh0eXBlKTtcbiAgICBpZiAoYXRJbmRleCA8IHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGggJiYgYXRJbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKGF0SW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zLnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb247XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhIHF1ZXN0aW9uIGluIHF1ZXN0aW9ucy1hcnJheVxuICAgKiBAcGFyYW0gcXVlc3Rpb24gKHJlZmVyZW5jZSlcbiAgICogQHBhcmFtIHRvSW5kZXhcbiAgICovXG4gIG1vdmVRdWVzdGlvbihxdWVzdGlvbjogQnVpbGRlclF1ZXN0aW9uLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWxpZFRvSW5kZXhGbiA9IFUuaXNJblJhbmdlKDAsIHRoaXMuX3F1ZXN0aW9ucy5sZW5ndGgpO1xuICAgIGlmICghdmFsaWRUb0luZGV4Rm4odG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5fcXVlc3Rpb25zLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIGlmIChjdXJyZW50SW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3F1ZXN0aW9ucy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcbiAgICB0aGlzLl9xdWVzdGlvbnMuc3BsaWNlKHRvSW5kZXgsIDAsIHF1ZXN0aW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRlbGV0ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBCdWlsZGVyUXVlc3Rpb24pIHtcbiAgICB0aGlzLl9xdWVzdGlvbnMgPSB0aGlzLl9xdWVzdGlvbnMuZmlsdGVyKChxKSA9PiBxICE9PSBxdWVzdGlvbik7XG4gICAgLy8gVE9ETyBFTUlUIERFTEVURUQgUVVFU1RJT04uXG4gICAgdGhpcy51cGRhdGVSb3dzKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzKCkge1xuICAgIGlmICh0aGlzLl9wYWdlVHlwZSA9PT0gXCJxdWVzdGlvblwiIHx8IHRoaXMuX3BhZ2VUeXBlID09PSBcImluZm8tcGFnZVwiKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcImZvcm1cIiAmJiB0aGlzLl9xdWVzdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9xdWVzdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuYWRkUXVlc3Rpb24oXCJ0ZXh0XCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcGFnZVR5cGUgPT09IFwibXVsdGktc2VsZWN0XCIgJiYgdGhpcy5fcXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fcXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLmFkZFF1ZXN0aW9uKFwidGV4dFwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlVGFnKHRhZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFncy5kZWxldGUodGFnKTtcbiAgfVxuXG4gIHNldCBwYWdlVHlwZSh2YWx1ZTogQnVpbGRlclBhZ2VUeXBlKSB7XG4gICAgdGhpcy5fcGFnZVR5cGUgPSB2YWx1ZTtcbiAgICAvLyBUT0RPIEVtaXQgQWxsIHF1ZXN0aW9ucyB0aGF0IGFyZSBkZWxldGVkPyBMaXN0ZW4gZm9yIHJlbW92ZWQgdmFyaWFibGVzPz9cbiAgICB0aGlzLnVwZGF0ZVJvd3MoKTtcbiAgfVxuXG4gIGdldFF1ZXN0aW9uVmFyaWFibGVzKG1vZHVsZVByZWZpeDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIpOiBSZWFkb25seUFycmF5PFF1ZXN0aW9uVmFyaWFibGU+IHtcbiAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXN0aW9uVmFyaWFibGVbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BhZ2VUeXBlID09PSBcInF1ZXN0aW9uXCIpIHtcbiAgICAgIGNvbnN0IHBhZ2VQcmVmaXggPSB0aGlzLnByZWZpeDtcbiAgICAgIGNvbnN0IGlkID0gbW9kdWxlUHJlZml4ID8gbW9kdWxlUHJlZml4ICsgXCJfXCIgKyBwYWdlUHJlZml4IDogcGFnZVByZWZpeDtcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5tYWluVGV4dC50ZXh0O1xuICAgICAgY29uc3Qgb3AgPSB0aGlzLmRlZmF1bHRRdWVzdGlvbi5vcHRpb25zLm1hcCgobykgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IG8ubGFiZWw7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gby52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyVmFyaWFibGVPcHRpb24obGFiZWwsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2luZ2xlVmFyID0gbmV3IFF1ZXN0aW9uVmFyaWFibGUoaWQsIGxhYmVsLCBvcCwgcGFnZU51bWJlcik7XG4gICAgICB2YXJpYWJsZXMucHVzaChzaW5nbGVWYXIpO1xuICAgIH1cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0IHRhZ3MoKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3RhZ3NdO1xuICB9XG4gIGdldCBwYWdlVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZVR5cGU7XG4gIH1cblxuICBnZXQgcHJlZml4KCkge1xuICAgIHJldHVybiB0aGlzLl9wcmVmaXg7XG4gIH1cblxuICBzZXQgcHJlZml4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyUGFnZUR0byB7XG4gICAgY29uc3QgcXVlc3Rpb25zID0gdGhpcy5fcXVlc3Rpb25zLm1hcCgocSkgPT4gcS50b0pzb24oKSk7XG4gICAgY29uc3QgbWFpblRleHQgPSB0aGlzLm1haW5UZXh0LnRvSnNvbigpO1xuICAgIGNvbnN0IG5leHRCdXR0b24gPSB0aGlzLm5leHRCdXR0b24udG9Kc29uKCk7XG4gICAgY29uc3QgbWFpbk1lZGlhID0gdGhpcy5tYWluTWVkaWE7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyUGFnZUR0byA9IHtcbiAgICAgIF90eXBlOiB0aGlzLnBhZ2VUeXBlLFxuICAgICAgbWFpblRleHQsXG4gICAgICBhdXRvcGxheVNlcXVlbmNlOiBbXSxcbiAgICAgIG5leHRCdXR0b24sXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRhZ3M6IFsuLi50aGlzLnRhZ3NdLFxuICAgICAgcHJlZml4OiB0aGlzLl9wcmVmaXgsXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IHRoaXMuZGVmYXVsdFF1ZXN0aW9uLnRvSnNvbigpLFxuICAgICAgcXVlc3Rpb25zLFxuICAgIH07XG4gICAgaWYgKG1haW5NZWRpYSkge1xuICAgICAgZHRvLm1haW5NZWRpYSA9IG1haW5NZWRpYTtcbiAgICB9XG4gICAgcmV0dXJuIGR0bztcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJQYWdlRHRvIHtcbiAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRlZmF1bHRRdWVzdGlvbkNsb25lID0gdGhpcy5kZWZhdWx0UXVlc3Rpb24uY2xvbmUoKTtcbiAgICBjb25zdCBtYWluVGV4dENsb25lID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm1haW5UZXh0KSk7XG4gICAgLy8gY29uc3QgcGFnZXNDbG9uZSA9IHRoaXNcbiAgICBjb25zdCBxdWVzdGlvbnNDbG9uZSA9IHRoaXMucXVlc3Rpb25zLm1hcCgocSkgPT4gcS5jbG9uZSgpKTtcbiAgICBjb25zdCBuZXdJZCA9IEJ1aWxkZXJPYmplY3RJZC5wYWdlSWQoKTtcbiAgICBjb25zdCBjbG9uZTogQnVpbGRlclBhZ2VEdG8gPSB7XG4gICAgICAuLi5kdG8sXG4gICAgICBpZDogbmV3SWQsXG4gICAgICBkZWZhdWx0UXVlc3Rpb246IGRlZmF1bHRRdWVzdGlvbkNsb25lLFxuICAgICAgbWFpblRleHQ6IG1haW5UZXh0Q2xvbmUsXG4gICAgICBxdWVzdGlvbnM6IHF1ZXN0aW9uc0Nsb25lLFxuICAgIH07XG4gICAgLy8gY29uc3QgY2xvbmVEdG9cbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBnZXQgYmFja2dyb3VuZENvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3I7XG4gIH1cblxuICBzZXQgYmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcbiAgICB9XG4gIH1cblxuICBnZXQgcXVlc3Rpb25zKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclF1ZXN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXN0aW9ucztcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJWYXJpYWJsZSwgQnVpbGRlclZhcmlhYmxlT3B0aW9uIH0gZnJvbSBcIi4vUnVsZVZhcmlhYmxlXCI7XG5pbXBvcnQgeyBCdWlsZGVyT3BlcmF0b3IgfSBmcm9tIFwiLi9jb25kaXRpb24vQnVpbGRlci1vcGVyYXRvclwiO1xuaW1wb3J0IHsgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNpbmdsZVNlbGVjdEl0ZW08VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3RMYWJlbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9vbFRpcDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VhcmNoU3RyaW5nO1xuICBnZXQgc2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0TGFiZWw7XG4gIH1cbiAgZ2V0IHRvb2x0aXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xUaXA7XG4gIH1cblxuICBnZXQgc2VhcmNoU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdHJpbmc7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgZGF0YTogVCkge1xuICAgIHRoaXMuX3NlbGVjdExhYmVsID0gdGhpcy5nZXRTZWxlY3RMYWJlbCgpO1xuICAgIHRoaXMuX3Rvb2xUaXAgPSB0aGlzLmdldFRvb2x0aXAoKTtcbiAgICB0aGlzLl9zZWFyY2hTdHJpbmcgPSB0aGlzLmdldFNlYXJjaFN0cmluZygpO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRUb29sdGlwKCk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBSdWxlVmFyaWFibGVTZWxlY3RJdGVtIGV4dGVuZHMgU2luZ2xlU2VsZWN0SXRlbTxCdWlsZGVyVmFyaWFibGU+IHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGUgPSAoZGF0YTogQnVpbGRlclZhcmlhYmxlKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBSdWxlVmFyaWFibGVTZWxlY3RJdGVtKGRhdGEpO1xuICB9O1xuICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PFJ1bGVPcHRpb25TZWxlY3RJdGVtPjtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZGF0YTogQnVpbGRlclZhcmlhYmxlKSB7XG4gICAgc3VwZXIoZGF0YSk7XG4gICAgdGhpcy5vcHRpb25zID0gZGF0YS5vcHRpb25zLm1hcChSdWxlT3B0aW9uU2VsZWN0SXRlbS5jcmVhdGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudmFySWQgKyB0aGlzLmRhdGEubGFiZWw7XG4gIH1cblxuICBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEudmFySWQ7XG4gIH1cblxuICBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sYWJlbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVsZU9wdGlvblNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEJ1aWxkZXJWYXJpYWJsZU9wdGlvbj4ge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChvcHRpb246IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbikgPT4ge1xuICAgIHJldHVybiBuZXcgUnVsZU9wdGlvblNlbGVjdEl0ZW0ob3B0aW9uKTtcbiAgfTtcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihvcHRpb246IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbikge1xuICAgIHN1cGVyKG9wdGlvbik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sYWJlbCArIFwiKFwiICsgdGhpcy5kYXRhLnZhbHVlICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVyYXRvclNlbGVjdEl0ZW0gZXh0ZW5kcyBTaW5nbGVTZWxlY3RJdGVtPEJ1aWxkZXJPcGVyYXRvciB8IFwiXCI+IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFUSA9IG5ldyBPcGVyYXRvclNlbGVjdEl0ZW0oXCJlcXVhbFwiKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT1RfRVEgPSBuZXcgT3BlcmF0b3JTZWxlY3RJdGVtKFwibm90RXF1YWxcIik7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbVN5bWJvbCA9IChcbiAgICBzeW1ib2w6IEJ1aWxkZXJPcGVyYXRvciB8IE9taXQ8c3RyaW5nLCBCdWlsZGVyT3BlcmF0b3I+LFxuICApOiBPcGVyYXRvclNlbGVjdEl0ZW0gfCBmYWxzZSA9PiB7XG4gICAgaWYgKHN5bWJvbCA9PT0gXCJlcXVhbFwiKSB7XG4gICAgICByZXR1cm4gT3BlcmF0b3JTZWxlY3RJdGVtLkVRO1xuICAgIH1cbiAgICBpZiAoc3ltYm9sID09PSBcIm5vdEVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBPcGVyYXRvclNlbGVjdEl0ZW0uTk9UX0VRO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG4gIHByaXZhdGUgY29uc3RydWN0b3Iob3BlcmF0b3I6IEJ1aWxkZXJPcGVyYXRvcikge1xuICAgIHN1cGVyKG9wZXJhdG9yKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWFyY2hTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5kYXRhO1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCJlcXVhbFwiKSB7XG4gICAgICByZXR1cm4gXCJFcXVhbHNcIjtcbiAgICB9XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIk5vdCBlcXVhbHNcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5kYXRhO1xuICAgIGlmIChvcGVyYXRvciA9PT0gXCJlcXVhbFwiKSB7XG4gICAgICByZXR1cm4gXCJFcXVhbHNcIjtcbiAgICB9XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIm5vdEVxdWFsXCIpIHtcbiAgICAgIHJldHVybiBcIk5vdCBlcXVhbHNcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEp1bXBUb1BhZ2VTZWxlY3RJdGVtIGV4dGVuZHMgU2luZ2xlU2VsZWN0SXRlbTxKdW1wVG9QYWdlQWN0aW9uPiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlID0gKHBhZ2VEYXRhOiBKdW1wVG9QYWdlQWN0aW9uKSA9PiBuZXcgSnVtcFRvUGFnZVNlbGVjdEl0ZW0ocGFnZURhdGEpO1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocGFnZURhdGE6IEp1bXBUb1BhZ2VBY3Rpb24pIHtcbiAgICBzdXBlcihwYWdlRGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlSWQgKyB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VJZCArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlTnVtYmVyICsgXCIpXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFpblRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFF1ZXN0aW9uVmFyaWFibGUsIEN1c3RvbVZhcmlhYmxlLCBCdWlsZGVyVmFyaWFibGUgfSBmcm9tIFwiLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiwgRXhjbHVkZUJ5VGFnQWN0aW9uLCBKdW1wVG9QYWdlQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuaW1wb3J0IHsgSnVtcFRvUGFnZVNlbGVjdEl0ZW0gfSBmcm9tIFwiLi9TaW5nbGVTZWxlY3RJdGVtXCI7XG5cbi8qKlxuICogVE9ETyBDcmF0ZSBmaWx0ZXJzIGZvciBcImNhcmRpbmFsaXR5XCIgb3IgXCJvcmRlclwiIG9mIGEgdmFyaWFibGU7XG4gKiBSZXR1cm4gbGVnYWwgbGlzdHMgb2YgdmFyaWFibGVzLlxuICovXG5leHBvcnQgY2xhc3MgUnVsZUlucHV0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcXVlc3Rpb25WYXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2N1c3RvbVZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxDdXN0b21WYXJpYWJsZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VJZEFjdGlvbnM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5UGFnZUFjdGlvbj4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhZ0FjdGlvbnM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnQWN0aW9uPixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfanVtcEFjdGlvbnM6IFJlYWRvbmx5QXJyYXk8SnVtcFRvUGFnZUFjdGlvbj5cbiAgICApIHt9XG5cbiAgICBnZXQgcXVlc3Rpb25WYXJzKCk6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlc3Rpb25WYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0Q29uZGl0aW9uSW5wdXQoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+IHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnF1ZXN0aW9uVmFycywgLi4udGhpcy5jdXN0b21WYXJzXTtcbiAgICB9XG5cbiAgICBnZXRKdW1wVG9QYWdlT3B0aW9ucygpOiBSZWFkb25seUFycmF5PEp1bXBUb1BhZ2VTZWxlY3RJdGVtPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9qdW1wQWN0aW9ucy5tYXAoSnVtcFRvUGFnZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICB9XG5cbiAgICBnZXQgY3VzdG9tVmFycygpOiBSZWFkb25seUFycmF5PEN1c3RvbVZhcmlhYmxlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21WYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IGV4Y2x1ZGVCeVBhZ2VJZEFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlSWRBY3Rpb25zO1xuICAgIH1cblxuICAgIGdldCBleGNsdWRlQnlUYWdBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFnQWN0aW9ucztcbiAgICB9XG4gICAgZ2V0IGp1bXBUb1BhZ2VBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fanVtcEFjdGlvbnM7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3RJZCwgQnVpbGRlck9iamVjdCB9IGZyb20gJy4vQnVpbGRlck9iamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclRhZ0R0byB7XG4gIHJlYWRvbmx5IGlkOiBCdWlsZGVyT2JqZWN0SWQuVGFnSWQ7XG4gIHJlYWRvbmx5IHRhZzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclRhZyBleHRlbmRzIEJ1aWxkZXJPYmplY3Q8J2J1aWxkZXItdGFnJywgQnVpbGRlclRhZ0R0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiAnYnVpbGRlci10YWcnID0gJ2J1aWxkZXItdGFnJztcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UYWdJZDtcbiAgdGFnVGV4dCA9ICcnO1xuICB0YWdEZXNjcmlwdGlvbiA9ICcnO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWF9MRU5HVEggPSAyMDtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSU5fTEVOR1RIID0gMTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGNyZWF0ZSA9ICh0YWc6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgY29uc3QgaWQgPSBCdWlsZGVyT2JqZWN0SWQuY3JlYXRlVGFnSWQoKTtcbiAgICBjb25zdCBkdG86IEJ1aWxkZXJUYWdEdG8gPSB7XG4gICAgICBpZCxcbiAgICAgIHRhZyxcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJUYWcoZHRvKTtcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tRHRvID0gKGR0bzogQnVpbGRlclRhZ0R0bykgPT4ge1xuICAgIHJldHVybiBuZXcgQnVpbGRlclRhZyhkdG8pO1xuICB9O1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyVGFnRHRvKSB7XG4gICAgY29uc3QgaWQgPSBkdG8uaWQgPz8gQnVpbGRlck9iamVjdElkLmNyZWF0ZVRhZ0lkKCk7XG4gICAgY29uc3Qgd2l0aElkID0geyAuLi5kdG8sIGlkIH07XG4gICAgc3VwZXIod2l0aElkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy50YWdUZXh0ID0gZHRvLnRhZyA/PyAnJztcbiAgICB0aGlzLnRhZ0Rlc2NyaXB0aW9uID0gZHRvLmRlc2NyaXB0aW9uID8/ICcnO1xuICB9XG4gIGNsb25lKCk6IEJ1aWxkZXJUYWdEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJUYWdEdG8ge1xuICAgIHJldHVybiB7IHRhZzogdGhpcy50YWdUZXh0LCBkZXNjcmlwdGlvbjogdGhpcy50YWdEZXNjcmlwdGlvbiwgaWQ6IHRoaXMuaWQgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFnQ29sbGVjdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPEJ1aWxkZXJUYWc+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGFncyA9IG5ldyBTZXQ8QnVpbGRlclRhZz4oKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBjcmVhdGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb2xsZWN0aW9uKFtdKTtcbiAgfTtcblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBjb25zdCBsaXN0ID0gWy4uLnRoaXMuX3RhZ3NdO1xuICAgIHJldHVybiBsaXN0W1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXRpYWxUYWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWc+KSB7XG4gICAgaW5pdGlhbFRhZ3MuZm9yRWFjaCh0YWcgPT4ge1xuICAgICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQodGFnczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnRHRvPikge1xuICAgIGNvbnN0IGR0b0xpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4gPSBBcnJheS5pc0FycmF5KHRhZ3MpXG4gICAgICA/IHRhZ3NcbiAgICAgIDogW107XG4gICAgY29uc3QgYWxsID0gZHRvTGlzdC5tYXAoQnVpbGRlclRhZy5mcm9tRHRvKTtcbiAgICBhbGwuZm9yRWFjaCh0YWcgPT4ge1xuICAgICAgdGhpcy5fdGFncy5hZGQodGFnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZCh0YWc6IEJ1aWxkZXJUYWcpIHtcbiAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGlzIHRhZyBmcm9tIGNvbGxlY3Rpb247XG4gICAqIEBwYXJhbSB0YWdcbiAgICovXG4gIGRlbGV0ZSh0YWc6IEJ1aWxkZXJUYWcpIHtcbiAgICB0aGlzLl90YWdzLmRlbGV0ZSh0YWcpO1xuICB9XG5cbiAgdG9Kc29uKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclRhZ0R0bz4ge1xuICAgIGNvbnN0IGxpc3QgPSBbLi4udGhpcy5fdGFnc107XG4gICAgY29uc3QgZHRvTGlzdCA9IGxpc3QubWFwKHQgPT4gdC50b0pzb24oKSk7XG4gICAgcmV0dXJuIGR0b0xpc3Q7XG4gIH1cblxuICBkZWxldGVBbGwodGFnczogSXRlcmFibGU8QnVpbGRlclRhZz4pIHtcbiAgICBjb25zdCBsID0gdGFnc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgY29uc3QgYXNMaXN0ID0gWy4uLnRhZ3NdO1xuICAgIGFzTGlzdC5mb3JFYWNoKHQgPT4ge1xuICAgICAgdGhpcy5kZWxldGUodCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJjb25zdCBCdWlsZGVyT3BlcmF0b3JTeW1ib2xzID0ge1xuICBlcXVhbDogdHJ1ZSxcbiAgbm90RXF1YWw6IHRydWUsXG4gIGxlc3NUaGFuOiB0cnVlLFxuICBsZXNzVGhhbk9yRXF1YWw6IHRydWUsXG4gIGdyZWF0ZXJUaGFuOiB0cnVlLFxuICBncmVhdGVyVGhhbk9yRXF1YWw6IHRydWUsXG4gIGJldHdlZW46IHRydWUsXG4gIG5vdEJldHdlZW46IHRydWUsXG4gIGluOiB0cnVlLFxuICBub3RJbjogdHJ1ZSxcbiAgbWlzc2luZzogdHJ1ZSxcbiAgbm90TWlzc2luZzogdHJ1ZSxcbiAgY29udGFpbnM6IHRydWUsXG4gIG5vdENvbnRhaW5zOiB0cnVlLFxuICBlbXB0eTogdHJ1ZSxcbiAgbm90RW1wdHk6IHRydWUsXG4gIHN0YXJ0c1dpdGg6IHRydWUsXG4gIGVuZHNXaXRoOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQnVpbGRlck9wZXJhdG9yID0ga2V5b2YgdHlwZW9mIEJ1aWxkZXJPcGVyYXRvclN5bWJvbHM7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQnVpbGRlck9wZXJhdG9yIHtcbiAgZXhwb3J0IGNvbnN0IGlzID0gKHN5bWJvbD86IHN0cmluZyk6IHN5bWJvbCBpcyBCdWlsZGVyT3BlcmF0b3IgPT4ge1xuICAgIGlmICh0eXBlb2Ygc3ltYm9sICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhCdWlsZGVyT3BlcmF0b3JTeW1ib2xzKS5pbmNsdWRlcyhzeW1ib2wpO1xuICB9O1xufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vQnVpbGRlck9iamVjdFwiO1xuaW1wb3J0IHsgQnVpbGRlck9wZXJhdG9yIH0gZnJvbSBcIi4vQnVpbGRlci1vcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyVmFyaWFibGUsIEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB9IGZyb20gXCIuLi9SdWxlVmFyaWFibGVcIjtcbmltcG9ydCB7IE9wZXJhdG9yU2VsZWN0SXRlbSwgUnVsZU9wdGlvblNlbGVjdEl0ZW0sIFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0gfSBmcm9tIFwiLi4vU2luZ2xlU2VsZWN0SXRlbVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gIHJlYWRvbmx5IGtpbmQ6IFwiY29uZGl0aW9uXCI7XG4gIHJlYWRvbmx5IG9wZXJhdG9yOiBCdWlsZGVyT3BlcmF0b3IgfCBcIlwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhcmlhYmxlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyQ29uZGl0aW9uIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItY29uZGl0aW9uXCIsIEJ1aWxkZXJDb25kaXRpb25EdG8+IHtcbiAgcmVhZG9ubHkgb2JqZWN0VHlwZTogXCJidWlsZGVyLWNvbmRpdGlvblwiID0gXCJidWlsZGVyLWNvbmRpdGlvblwiO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5VTUJFUl9PUEVSQVRPUlM6IFJlYWRvbmx5QXJyYXk8T3BlcmF0b3JTZWxlY3RJdGVtPiA9IFtcbiAgICBPcGVyYXRvclNlbGVjdEl0ZW0uRVEsXG4gICAgT3BlcmF0b3JTZWxlY3RJdGVtLk5PVF9FUSxcbiAgXTtcblxuICBwcml2YXRlIGluaXRpYWxEdG86IEJ1aWxkZXJDb25kaXRpb25EdG87XG4gIG5hbWUgPSBcIlwiO1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlID0gKHZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSA9PiB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gbmV3IEJ1aWxkZXJDb25kaXRpb24oXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgIG9wZXJhdG9yOiBcIlwiLFxuICAgICAgICB2YXJpYWJsZUlkOiBcIlwiLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH0sXG4gICAgICB2YXJpYWJsZUxpc3QsXG4gICAgKTtcbiAgICByZXR1cm4gY29uZGl0aW9uO1xuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJDb25kaXRpb25EdG8sIHZhcmlhYmxlczogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+KSA9PiB7XG4gICAgY29uc3QgX2R0bzogQnVpbGRlckNvbmRpdGlvbkR0byA9IHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBkdG8ubmFtZSA/PyBcIlwiLFxuICAgICAgdmFsdWU6IGR0by52YWx1ZSA/PyBcIlwiLFxuICAgICAgb3BlcmF0b3I6IGR0by5vcGVyYXRvciA/PyBcIlwiLFxuICAgICAgdmFyaWFibGVJZDogZHRvLnZhcmlhYmxlSWQgPz8gXCJcIixcbiAgICB9O1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEJ1aWxkZXJDb25kaXRpb24oX2R0bywgdmFyaWFibGVzKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG4gIHByaXZhdGUgX3ZhcmlhYmxlOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIiA9IFwiXCI7XG4gIHByaXZhdGUgX3ZhbHVlOiBCdWlsZGVyVmFyaWFibGVPcHRpb24gfCBmYWxzZSA9IGZhbHNlO1xuICBwcml2YXRlIF92YXJpYWJsZUxpc3Q6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPiA9IFtdO1xuXG4gIC8qKlxuICAgKiBDYW4gb25seSBzZXQgdmFyaWFibGVzIHRoYXQgZXhpc3QgaW4gdmFyaWFibGVMaXN0LlxuICAgKiBAcGFyYW0gdmFyaWFibGVcbiAgICovXG4gIHNldCB2YXJpYWJsZSh2YXJpYWJsZTogQnVpbGRlclZhcmlhYmxlIHwgZmFsc2UpIHtcbiAgICBpZiAodmFyaWFibGUgPT09IHRoaXMuX3ZhcmlhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3ZhcmlhYmxlID0gdmFyaWFibGU7XG4gICAgdGhpcy5fb3BlcmF0b3IgPSBcIlwiO1xuICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG4gIH1cblxuICBnZXQgdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhcmlhYmxlVmFsdWU6IEJ1aWxkZXJWYXJpYWJsZU9wdGlvbiB8IGZhbHNlKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YXJpYWJsZVZhbHVlO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiB7IGlzVmFsaWQ6IHRydWUgfSB8IHsgaXNWYWxpZDogZmFsc2U7IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5fdmFyaWFibGVMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IFwiSGFzIG5vIHZhcmlhYmxlTGlzdCB0byBjaGVjayBkdG8gYWdhaW5zdC5cIixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBcIlZhcmlhYmxlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCBmcm9tIHZhcmlhYmxlTGlzdC5cIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9vcGVyYXRvcikge1xuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIG1lc3NhZ2U6IFwiT3BlcmF0b3IgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkXCIgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3ZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogXCJWYWx1ZSAoQnVpbGRlclZhcmlhYmxlT3B0aW9uKSBpcyBub3QgaW5pdGlhbGl6ZWRcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgdG9FbmdpbmVDb25kaXRpb24obW9kdWxlUHJlZml4OiBzdHJpbmcpOiBDb25kaXRpb24uU2ltcGxlIHwgZmFsc2Uge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMudmFsdWU7XG4gICAgY29uc3Qgb3AgPSB0aGlzLl9vcGVyYXRvcjtcbiAgICBjb25zdCB2ID0gdGhpcy5fdmFyaWFibGU7XG4gICAgaWYgKCF2YWwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIW9wKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF2KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG9wID09PSBcImVxdWFsXCIpIHtcbiAgICAgIGNvbnN0IGVuZ2luZUNvbmRpdGlvbjogQ29uZGl0aW9uLlNpbXBsZSA9IHtcbiAgICAgICAga2luZDogXCJudW1lcmljLWNvbmRpdGlvblwiLFxuICAgICAgICB2YWx1ZTogdmFsLnZhbHVlLFxuICAgICAgICB2YWx1ZUxhYmVsOiB2YWwubGFiZWwsXG4gICAgICAgIHJlZmVyZW5jZUlkOiBtb2R1bGVQcmVmaXggKyBcIl9cIiArIHYudmFySWQsXG4gICAgICAgIHJlZmVyZW5jZUxhYmVsOiB2LmxhYmVsLFxuICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBlbmdpbmVDb25kaXRpb247XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZFZhcmlhYmxlSW5Vbml2ZXJzZSh2YXJpYWJsZUlkOiBzdHJpbmcpOiBCdWlsZGVyVmFyaWFibGUgfCBmYWxzZSB7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB2YXJpYWJsZUlkKTtcbiAgICByZXR1cm4gdiA/PyBmYWxzZTtcbiAgfVxuXG4gIHNldCBvcGVyYXRvcihvcGVyYXRvcjogQnVpbGRlck9wZXJhdG9yIHwgXCJcIikge1xuICAgIGlmIChCdWlsZGVyT3BlcmF0b3IuaXMob3BlcmF0b3IpKSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcGVyYXRvciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9wZXJhdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoZHRvOiBCdWlsZGVyQ29uZGl0aW9uRHRvLCB2YXJpYWJsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclZhcmlhYmxlPikge1xuICAgIHN1cGVyKGR0byk7XG4gICAgdGhpcy5pbml0aWFsRHRvID0gZHRvO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3NldFZhcmlhYmxlTGlzdCh2YXJpYWJsZXMpO1xuICB9XG5cbiAgZ2V0IHZhcmlhYmxlU2VsZWN0SXRlbXNJblVuaXZlcnNlKCk6IFJlYWRvbmx5QXJyYXk8UnVsZVZhcmlhYmxlU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZUxpc3QubWFwKFJ1bGVWYXJpYWJsZVNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgfVxuXG4gIGdldCBvcGVyYXRvcnNTZWxlY3RJdGVtcygpOiBSZWFkb25seUFycmF5PE9wZXJhdG9yU2VsZWN0SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZSA/IEJ1aWxkZXJDb25kaXRpb24uTlVNQkVSX09QRVJBVE9SUyA6IFtdO1xuICB9XG5cbiAgZ2V0IHNlbGVjdFZhbHVlSXRlbXMoKTogUmVhZG9ubHlBcnJheTxSdWxlT3B0aW9uU2VsZWN0SXRlbT4ge1xuICAgIGlmICghdGhpcy5fdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgb3B0ID0gdGhpcy5fdmFyaWFibGUub3B0aW9ucy5tYXAoUnVsZU9wdGlvblNlbGVjdEl0ZW0uY3JlYXRlKTtcbiAgICByZXR1cm4gb3B0O1xuICB9XG5cbiAgY2xvbmUoKTogQnVpbGRlckNvbmRpdGlvbkR0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYXJpYWJsZUxpc3QodmFyaWFibGVzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pOiBib29sZWFuIHtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZXM7XG4gICAgY29uc3QgdiA9IHRoaXMuX3ZhcmlhYmxlTGlzdC5maW5kKCh2KSA9PiB2LnZhcklkID09PSB0aGlzLm9yaWdpbmFsRHRvLnZhcmlhYmxlSWQpO1xuICAgIGlmICghdikge1xuICAgICAgdGhpcy5fdmFyaWFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX29wZXJhdG9yID0gXCJcIjtcbiAgICAgIHRoaXMuX3ZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3ZhcmlhYmxlID0gdjtcbiAgICBjb25zdCBvcCA9IHRoaXMub3JpZ2luYWxEdG8ub3BlcmF0b3I7XG5cbiAgICBpZiAoIUJ1aWxkZXJPcGVyYXRvci5pcyhvcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fb3BlcmF0b3IgPSBvcDtcbiAgICBjb25zdCBtYXliZU9wdGlvbiA9IHYub3B0aW9ucy5maW5kKChvcCkgPT4gb3AudmFsdWUgPT09IHRoaXMub3JpZ2luYWxEdG8udmFsdWUpO1xuICAgIGlmICghbWF5YmVPcHRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSBtYXliZU9wdGlvbjtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyQ29uZGl0aW9uRHRvIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IHZhcmlhYmxlSWQgPSB0aGlzLl92YXJpYWJsZSA/IHRoaXMuX3ZhcmlhYmxlLnZhcklkIDogXCJcIjtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuX29wZXJhdG9yID8gdGhpcy5fb3BlcmF0b3IgOiBcIlwiO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fdmFsdWUgPyB0aGlzLl92YWx1ZS52YWx1ZSA6IFwiXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uXCIsXG4gICAgICBuYW1lLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICB2YXJpYWJsZUlkLFxuICAgICAgdmFsdWUsXG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJ1aWxkZXJDb25kaXRpb24sIHR5cGUgQnVpbGRlckNvbmRpdGlvbkR0byB9IGZyb20gXCIuL0J1aWxkZXItY29uZGl0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclZhcmlhYmxlIH0gZnJvbSBcIi4uL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuY29uc3QgQ29uZGl0aW9uR3JvdXBUeXBlID0ge1xuICBhbGw6IHRydWUsXG4gIGFueTogdHJ1ZSxcbiAgY291bnQ6IHRydWUsXG59O1xuXG5leHBvcnQgdHlwZSBDb25kaXRpb25Hcm91cFR5cGUgPSBrZXlvZiB0eXBlb2YgQ29uZGl0aW9uR3JvdXBUeXBlO1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICByZWFkb25seSBraW5kOiBcImNvbmRpdGlvbi1ncm91cFwiO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSB0eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkR0bz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyQ29uZGl0aW9uR3JvdXAgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiwgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvPiB7XG4gIHN0YXRpYyByZWFkb25seSBpc0NvbmRpdGlvbkdyb3VwVHlwZSA9ICh2YWx1ZTogc3RyaW5nIHwgc3ltYm9sKTogdmFsdWUgaXMgQ29uZGl0aW9uR3JvdXBUeXBlID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkVmFsdWVzID0gT2JqZWN0LmtleXMoQ29uZGl0aW9uR3JvdXBUeXBlKTtcbiAgICByZXR1cm4gdmFsaWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpO1xuICB9O1xuXG4gIHJlYWRvbmx5IG9iamVjdFR5cGU6IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIiA9IFwiYnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIjtcbiAgcHJpdmF0ZSBfdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlO1xuICBuYW1lID0gXCJcIjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZGl0aW9uczogQXJyYXk8QnVpbGRlckNvbmRpdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhcmlhYmxlTGlzdDogUmVhZG9ubHlBcnJheTxCdWlsZGVyVmFyaWFibGU+O1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZnJvbUR0byA9IChkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pID0+IHtcbiAgICByZXR1cm4gbmV3IEJ1aWxkZXJDb25kaXRpb25Hcm91cChkdG8sIHZhcmlhYmxlTGlzdCk7XG4gIH07XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0bywgdmFyaWFibGVMaXN0OiBSZWFkb25seUFycmF5PEJ1aWxkZXJWYXJpYWJsZT4pIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIHRoaXMubmFtZSA9IGR0by5uYW1lO1xuICAgIHRoaXMuX3R5cGUgPSBkdG8udHlwZTtcbiAgICBjb25zdCBjb25kaXRpb25MaXN0ID0gQXJyYXkuaXNBcnJheShkdG8uY29uZGl0aW9ucykgPyBkdG8uY29uZGl0aW9ucyA6IFtdO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMgPSBjb25kaXRpb25MaXN0Lm1hcCgoZHRvKSA9PiBCdWlsZGVyQ29uZGl0aW9uLmZyb21EdG8oZHRvLCB2YXJpYWJsZUxpc3QpKTtcbiAgICB0aGlzLl92YXJpYWJsZUxpc3QgPSB2YXJpYWJsZUxpc3Q7XG4gIH1cbiAgZ2V0IGNvbmRpdGlvbnMoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnM7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgYWRkQ29uZGl0aW9uKCk6IEJ1aWxkZXJDb25kaXRpb24ge1xuICAgIGNvbnN0IG5ld0NvbmRpdGlvbnMgPSBCdWlsZGVyQ29uZGl0aW9uLmNyZWF0ZSh0aGlzLl92YXJpYWJsZUxpc3QpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChuZXdDb25kaXRpb25zKTtcbiAgICByZXR1cm4gbmV3Q29uZGl0aW9ucztcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbihjb25kaXRpb246IEJ1aWxkZXJDb25kaXRpb24pOiBib29sZWFuIHtcbiAgICAvLyB0aGlzLl9jb25kaXRpb25zLlxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29uZGl0aW9ucy5pbmRleE9mKGNvbmRpdGlvbik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8ge1xuICAgIHJldHVybiB0aGlzLnRvSnNvbigpO1xuICB9XG5cbiAgdG9Kc29uKCk6IEJ1aWxkZXJDb25kaXRpb25Hcm91cER0byB7XG4gICAgY29uc3QgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvPiA9IFsuLi50aGlzLl9jb25kaXRpb25zLm1hcCgoYykgPT4gYy50b0pzb24oKSldO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBjb25kaXRpb25zLFxuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIGtpbmQ6IFwiY29uZGl0aW9uLWdyb3VwXCIsXG4gICAgfTtcbiAgfVxuXG4gIHRvRW5naW5lQ29uZGl0aW9uQ29tcGxleChtb2R1bGVQcmVmaXg6IHN0cmluZyk6IENvbmRpdGlvbi5Db21wbGV4IHwgZmFsc2Uge1xuICAgIGNvbnN0IGNvbXA6IENvbmRpdGlvbi5Db21wbGV4ID0ge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgYWxsOiBbXSxcbiAgICAgIHNvbWU6IFtdLFxuICAgICAgbmFtZTogXCJcIixcbiAgICB9O1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IENvbmRpdGlvbi5TaW1wbGVbXSA9IFtdO1xuICAgIHRoaXMuY29uZGl0aW9ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjb25zdCBtYXliZVNpbXBsZSA9IGMudG9FbmdpbmVDb25kaXRpb24obW9kdWxlUHJlZml4KTtcbiAgICAgIGlmIChtYXliZVNpbXBsZSkge1xuICAgICAgICBjb25kaXRpb25zLnB1c2gobWF5YmVTaW1wbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLl90eXBlID09PSBcImFsbFwiKSB7XG4gICAgICByZXR1cm4geyAuLi5jb21wLCBhbGw6IGNvbmRpdGlvbnMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFwiYW55XCIpIHtcbiAgICAgIHJldHVybiB7IC4uLmNvbXAsIHNvbWU6IGNvbmRpdGlvbnMgfTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIklOVkFMSUQgQ09NUExFWCBDT05ESVRJT04uIFRPRE8gSU1QTEVNRU5UIHJhbmdlLCBhbmQgY291bnQuXCIpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldCB0eXBlKCk6IENvbmRpdGlvbkdyb3VwVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgc2V0IHR5cGUoY29uZGl0aW9uR3JvdXBUeXBlOiBDb25kaXRpb25Hcm91cFR5cGUpIHtcbiAgICBpZiAoQnVpbGRlckNvbmRpdGlvbkdyb3VwLmlzQ29uZGl0aW9uR3JvdXBUeXBlKGNvbmRpdGlvbkdyb3VwVHlwZSkpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBjb25kaXRpb25Hcm91cFR5cGU7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgRXhjbHVkZUJ5UGFnZUFjdGlvbiwgRXhjbHVkZUJ5VGFnQWN0aW9uIH0gZnJvbSBcIi4vUnVsZUFjdGlvblwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTXVsdGlTZWxlY3RJdGVtPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1NlbGVjdGVkSW5pdGlhbGx5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdExhYmVsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rvb2xUaXA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2VhcmNoU3RyaW5nO1xuICAgIHB1YmxpYyBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIGdldCBzZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0TGFiZWw7XG4gICAgfVxuICAgIGdldCB0b29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9vbFRpcDtcbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoU3RyaW5nO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgZGF0YTogVCwgaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc1NlbGVjdGVkSW5pdGlhbGx5ID0gaXNTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gaXNTZWxlY3RlZDtcbiAgICAgICAgdGhpcy5fc2VhcmNoU3RyaW5nID0gdGhpcy5nZXRTZWFyY2hTdHJpbmcoKTtcbiAgICAgICAgdGhpcy5fdG9vbFRpcCA9IHRoaXMuZ2V0VG9vbHRpcCgpO1xuICAgICAgICB0aGlzLl9zZWxlY3RMYWJlbCA9IHRoaXMuZ2V0U2VsZWN0TGFiZWwoKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlbGVjdExhYmVsKCk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VG9vbHRpcCgpOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtIGV4dGVuZHMgTXVsdGlTZWxlY3RJdGVtPEV4Y2x1ZGVCeVRhZ0FjdGlvbj4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgY3JlYXRlID0gKHRhZ0RhdGE6IEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEV4Y2x1ZGVCeVRhZ1NlbGVjdEl0ZW0odGFnRGF0YSwgaXNTZWxlY3RlZCk7XG4gICAgfTtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGF0YTogRXhjbHVkZUJ5VGFnQWN0aW9uLCBpc1NlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgICAgIHN1cGVyKGRhdGEsIGlzU2VsZWN0ZWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgZ2V0U2VhcmNoU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEudGFnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRTZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnRhZyArIFwiIChcIiArIHRoaXMuZGF0YS5wYWdlQ291bnQgKyBcIilcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnRhZyArIFwiICAodXNlZCBpbiBcIiArIHRoaXMuZGF0YS5wYWdlQ291bnQgKyBcIiBwYWdlcylcIjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtIGV4dGVuZHMgTXVsdGlTZWxlY3RJdGVtPEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+IHtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZSA9IChydWxlQWN0aW9uUGFnZTogRXhjbHVkZUJ5UGFnZUFjdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEV4Y2x1ZGVCeVBhZ2VJZFNlbGVjdEl0ZW0ocnVsZUFjdGlvblBhZ2UsIGlzU2VsZWN0ZWQpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGF0YTogRXhjbHVkZUJ5UGFnZUFjdGlvbiwgaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICBzdXBlcihkYXRhLCBpc1NlbGVjdGVkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGdldFNlYXJjaFN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnBhZ2VJZCArIHRoaXMuZGF0YS5tYWluVGV4dDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U2VsZWN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlSWQgKyBcIiAoXCIgKyB0aGlzLmRhdGEucGFnZU51bWJlciArIFwiKVwiO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWFpblRleHQ7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtIH0gZnJvbSBcIi4vbXVsdGktc2VsZWN0LWl0ZW1cIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVRhZ0FjdGlvbiB9IGZyb20gXCIuL1J1bGVBY3Rpb25cIjtcblxuZXhwb3J0IGNsYXNzIFRhZ0FjdGlvbk1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbml0aWFsU2VsZWN0aW9uOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgc2VsZWN0SXRlbXM6IFJlYWRvbmx5QXJyYXk8RXhjbHVkZUJ5VGFnU2VsZWN0SXRlbT47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHZhbGlkT3B0aW9uczogUnVsZUlucHV0W1wiX3RhZ0FjdGlvbnNcIl0sXG4gICAgcmVhZG9ubHkgaW5pdGlhbFNlbGVjdGlvbjogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICApIHtcbiAgICB0aGlzLl9pbml0aWFsU2VsZWN0aW9uID0gbmV3IFNldChbLi4uaW5pdGlhbFNlbGVjdGlvbl0pO1xuICAgIHRoaXMuc2VsZWN0SXRlbXMgPSB2YWxpZE9wdGlvbnMubWFwKChvcHQpID0+IHtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLl9pbml0aWFsU2VsZWN0aW9uLmhhcyhvcHQudGFnKTtcbiAgICAgIHJldHVybiBFeGNsdWRlQnlUYWdTZWxlY3RJdGVtLmNyZWF0ZShvcHQsIGlzU2VsZWN0ZWQpO1xuICAgIH0pO1xuICB9XG4gIGdldEN1cnJlbnRTZWxlY3Rpb24oKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpLm1hcCgoaXRtKSA9PiBpdG0uZGF0YS50YWcpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIGdldEVuZ2luZUFjdGlvbnMoKTogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlUYWdBY3Rpb24+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xuICAgIGNvbnN0IHRhZ0FjdGlvbnMgPSBzZWxlY3RlZC5tYXAoKHMpID0+IHMuZGF0YSk7XG4gICAgcmV0dXJuIFsuLi50YWdBY3Rpb25zXTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtIH0gZnJvbSBcIi4vbXVsdGktc2VsZWN0LWl0ZW1cIjtcbmltcG9ydCB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24gfSBmcm9tIFwiLi9SdWxlQWN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBQYWdlQWN0aW9uTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxTZWxlY3Rpb246IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBzZWxlY3RJdGVtczogUmVhZG9ubHlBcnJheTxFeGNsdWRlQnlQYWdlSWRTZWxlY3RJdGVtPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSB2YWxpZE9wdGlvbnM6IFJ1bGVJbnB1dFtcIl9wYWdlSWRBY3Rpb25zXCJdLFxuICAgIHJlYWRvbmx5IGluaXRpYWxTZWxlY3Rpb246IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFNlbGVjdGlvbiA9IG5ldyBTZXQoWy4uLmluaXRpYWxTZWxlY3Rpb25dKTtcbiAgICB0aGlzLnNlbGVjdEl0ZW1zID0gdmFsaWRPcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5faW5pdGlhbFNlbGVjdGlvbi5oYXMob3B0LnBhZ2VJZCk7XG4gICAgICByZXR1cm4gRXhjbHVkZUJ5UGFnZUlkU2VsZWN0SXRlbS5jcmVhdGUob3B0LCBpc1NlbGVjdGVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTZWxlY3Rpb24oKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpLm1hcCgoaXRtKSA9PiBpdG0uZGF0YS5wYWdlSWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIGdldEVuZ2luZUFjdGlvbigpOiBSZWFkb25seUFycmF5PEV4Y2x1ZGVCeVBhZ2VBY3Rpb24+IHtcbiAgICBjb25zdCBzZWxlY3RJdGVtcyA9IHRoaXMuc2VsZWN0SXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xuICAgIGNvbnN0IGFjdGlvbnMgPSBzZWxlY3RJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSk7XG4gICAgcmV0dXJuIFsuLi5hY3Rpb25zXTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBKdW1wVG9QYWdlU2VsZWN0SXRlbSB9IGZyb20gXCIuL1NpbmdsZVNlbGVjdEl0ZW1cIjtcblxuZXhwb3J0IGNsYXNzIEp1bXBUb0FjdGlvbk1hbmFnZXIge1xuICByZWFkb25seSBvcHRpb25zOiBSZWFkb25seUFycmF5PEp1bXBUb1BhZ2VTZWxlY3RJdGVtPjtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWQ6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRPcHRpb25zOiBSdWxlSW5wdXRbXCJfanVtcEFjdGlvbnNcIl0sXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsU2VsZWN0aW9uOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdmFsaWRPcHRpb25zLm1hcChKdW1wVG9QYWdlU2VsZWN0SXRlbS5jcmVhdGUpO1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5maW5kU2VsZWN0ZWQoaW5pdGlhbFNlbGVjdGlvbik7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCk6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2Uge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQ6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2UpIHtcbiAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMuZmluZFNlbGVjdGVkKHNlbGVjdGVkKTtcbiAgfVxuICBnZXRTZWxlY3RlZFBhZ2VJZCgpOiBzdHJpbmcgfCBmYWxzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkID8gdGhpcy5fc2VsZWN0ZWQuZGF0YS5wYWdlSWQgOiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGZpbmRTZWxlY3RlZCh2YWx1ZTogdW5rbm93bik6IEp1bXBUb1BhZ2VTZWxlY3RJdGVtIHwgZmFsc2Uge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBKdW1wVG9QYWdlU2VsZWN0SXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKCh2KSA9PiB2ID09PSB2YWx1ZSkgfHwgZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCgodikgPT4gdi5kYXRhLnBhZ2VJZCA9PT0gdmFsdWUpIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyQ29uZGl0aW9uLCB0eXBlIEJ1aWxkZXJDb25kaXRpb25EdG8gfSBmcm9tIFwiLi9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb25cIjtcbmltcG9ydCB7XG4gIEJ1aWxkZXJDb25kaXRpb25Hcm91cCxcbiAgdHlwZSBCdWlsZGVyQ29uZGl0aW9uR3JvdXBEdG8sXG4gIHR5cGUgQ29uZGl0aW9uR3JvdXBUeXBlLFxufSBmcm9tIFwiLi9jb25kaXRpb24vQnVpbGRlci1jb25kaXRpb24tZ3JvdXBcIjtcbmltcG9ydCB0eXBlIHsgUnVsZUlucHV0IH0gZnJvbSBcIi4vUnVsZUlucHV0XCI7XG5pbXBvcnQgeyBCdWlsZGVyT2JqZWN0IH0gZnJvbSBcIi4uL0J1aWxkZXJPYmplY3RcIjtcbmltcG9ydCB7IFRhZ0FjdGlvbk1hbmFnZXIgfSBmcm9tIFwiLi90YWctYWN0aW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IFBhZ2VBY3Rpb25NYW5hZ2VyIH0gZnJvbSBcIi4vcGFnZS1hY3Rpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgSnVtcFRvQWN0aW9uTWFuYWdlciB9IGZyb20gXCIuL2p1bXAtdG8tYWN0aW9uLW1hbmFnZXJcIjtcbmltcG9ydCB7IENvbmRpdGlvbiwgUGFnZVF1ZUNvbW1hbmQsIFBhZ2VRdWVSdWxlcyB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclJ1bGVEdG8ge1xuICByZWFkb25seSB0eXBlOiBDb25kaXRpb25Hcm91cFR5cGU7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uZGl0aW9uczogUmVhZG9ubHlBcnJheTxCdWlsZGVyQ29uZGl0aW9uRHRvIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvPjtcbiAgcmVhZG9ubHkgZXhjbHVkZVRhZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgZXhjbHVkZVBhZ2VzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IGp1bXBUb1BhZ2U6IHN0cmluZyB8IGZhbHNlO1xufVxuZXhwb3J0IGNsYXNzIEJ1aWxkZXJSdWxlIGV4dGVuZHMgQnVpbGRlck9iamVjdDxcImJ1aWxkZXItcnVsZVwiLCBCdWlsZGVyUnVsZUR0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlOiBcImJ1aWxkZXItcnVsZVwiID0gXCJidWlsZGVyLXJ1bGVcIjtcbiAgcHJpdmF0ZSBfdHlwZTogQ29uZGl0aW9uR3JvdXBUeXBlID0gXCJhbGxcIjtcbiAgcHVibGljIG5hbWUgPSBcIlJ1bGUgbmFtZVwiO1xuICAvLyBwdWJsaWMgY291bnROdW1iZXIgPSAxO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25kaXRpb25zOiBBcnJheTxCdWlsZGVyQ29uZGl0aW9uIHwgQnVpbGRlckNvbmRpdGlvbkdyb3VwPiA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhZ0FjdGlvbk1hbmFnZXI6IFRhZ0FjdGlvbk1hbmFnZXI7XG4gIHByaXZhdGUgX3BhZ2VBY3Rpb25NYW5hZ2VyOiBQYWdlQWN0aW9uTWFuYWdlcjtcbiAgcmVhZG9ubHkganVtcFRvQWN0aW9uTWFuYWdlcjogSnVtcFRvQWN0aW9uTWFuYWdlcjtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBmcm9tRHRvID0gKGR0bzogQnVpbGRlclJ1bGVEdG8sIGlucHV0OiBSdWxlSW5wdXQpOiBCdWlsZGVyUnVsZSA9PiB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyUnVsZShkdG8sIGlucHV0KTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkdG86IEJ1aWxkZXJSdWxlRHRvLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3J1bGVJbnB1dDogUnVsZUlucHV0LFxuICApIHtcbiAgICBzdXBlcihkdG8pO1xuICAgIGNvbnN0IGNvbmRpdGlvbklucHV0ID0gdGhpcy5fcnVsZUlucHV0LmdldENvbmRpdGlvbklucHV0KCk7XG4gICAgdGhpcy5uYW1lID0gZHRvLm5hbWUgPz8gXCJcIjtcbiAgICB0aGlzLl90eXBlID0gZHRvLnR5cGUgPz8gXCJhbnlcIjtcbiAgICB0aGlzLl9jb25kaXRpb25zID0gZHRvLmNvbmRpdGlvbnMucmVkdWNlPEFycmF5PEJ1aWxkZXJDb25kaXRpb24gfCBCdWlsZGVyQ29uZGl0aW9uR3JvdXA+PigoYWNjLCBjdXJyKSA9PiB7XG4gICAgICBpZiAoY3Vyci5raW5kID09PSBcImNvbmRpdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IEJ1aWxkZXJDb25kaXRpb24uZnJvbUR0byhjdXJyLCBjb25kaXRpb25JbnB1dCk7XG4gICAgICAgIGFjYy5wdXNoKGNvbmRpdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoY3Vyci5raW5kID09PSBcImNvbmRpdGlvbi1ncm91cFwiKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbkdyb3VwID0gQnVpbGRlckNvbmRpdGlvbkdyb3VwLmZyb21EdG8oY3VyciwgY29uZGl0aW9uSW5wdXQpO1xuICAgICAgICBhY2MucHVzaChjb25kaXRpb25Hcm91cCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICAvLyBUT0RPIENIRUNLIFdJVEggQ1VSUkVOVCBPUFRJT05TLlxuICAgIHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyID0gbmV3IFBhZ2VBY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuZXhjbHVkZUJ5UGFnZUlkQWN0aW9ucywgZHRvLmV4Y2x1ZGVQYWdlcyk7XG4gICAgLy8gdGhpcy5leGNsdWRlQnlQYWdlSWREdG9MaXN0LnB1c2goLi4uZHRvLmV4Y2x1ZGVQYWdlcyk7XG4gICAgdGhpcy5fdGFnQWN0aW9uTWFuYWdlciA9IG5ldyBUYWdBY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuZXhjbHVkZUJ5VGFnQWN0aW9ucywgZHRvLmV4Y2x1ZGVUYWdzKTtcblxuICAgIHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlciA9IG5ldyBKdW1wVG9BY3Rpb25NYW5hZ2VyKF9ydWxlSW5wdXQuanVtcFRvUGFnZUFjdGlvbnMsIGR0by5qdW1wVG9QYWdlKTtcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zKCk6IFJlYWRvbmx5QXJyYXk8QnVpbGRlckNvbmRpdGlvbkdyb3VwIHwgQnVpbGRlckNvbmRpdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zO1xuICB9XG5cbiAgZ2V0VGFnQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5zZWxlY3RJdGVtcztcbiAgfVxuXG4gIGdldFZhbGlkUGFnZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLnNlbGVjdEl0ZW1zO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbkNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHNldCB0eXBlKHR5cGU6IENvbmRpdGlvbkdyb3VwVHlwZSkge1xuICAgIGlmIChCdWlsZGVyQ29uZGl0aW9uR3JvdXAuaXNDb25kaXRpb25Hcm91cFR5cGUodHlwZSkpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgZGVsZXRlQ29uZGl0aW9uKGNvbmRpdGlvbjogQnVpbGRlckNvbmRpdGlvbiB8IEJ1aWxkZXJDb25kaXRpb25Hcm91cCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fY29uZGl0aW9ucy5pbmRleE9mKGNvbmRpdGlvbik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jb25kaXRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKTogQnVpbGRlckNvbmRpdGlvbiB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gQnVpbGRlckNvbmRpdGlvbi5jcmVhdGUodGhpcy5fcnVsZUlucHV0LmdldENvbmRpdGlvbklucHV0KCkpO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMucHVzaChjb25kaXRpb24pO1xuICAgIHJldHVybiBjb25kaXRpb247XG4gIH1cblxuICBhZGRDb25kaXRpb25Hcm91cCgpOiBCdWlsZGVyQ29uZGl0aW9uR3JvdXAge1xuICAgIGNvbnN0IGR0bzogQnVpbGRlckNvbmRpdGlvbkdyb3VwRHRvID0ge1xuICAgICAga2luZDogXCJjb25kaXRpb24tZ3JvdXBcIixcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgICB0eXBlOiBcImFsbFwiLFxuICAgICAgY29uZGl0aW9uczogW10sXG4gICAgfTtcbiAgICBjb25zdCBuZXdHcm91cCA9IEJ1aWxkZXJDb25kaXRpb25Hcm91cC5mcm9tRHRvKGR0bywgdGhpcy5fcnVsZUlucHV0LnF1ZXN0aW9uVmFycyk7XG4gICAgdGhpcy5fY29uZGl0aW9ucy5wdXNoKG5ld0dyb3VwKTtcbiAgICByZXR1cm4gbmV3R3JvdXA7XG4gIH1cblxuICBjbG9uZSgpOiBCdWlsZGVyUnVsZUR0byB7XG4gICAgcmV0dXJuIHRoaXMudG9Kc29uKCk7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclJ1bGVEdG8ge1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB0aGlzLl9jb25kaXRpb25zLm1hcCgoYykgPT4gYy50b0pzb24oKSk7XG4gICAgY29uc3QgZXhjbHVkZVBhZ2VzID0gdGhpcy5fcGFnZUFjdGlvbk1hbmFnZXIuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGV4Y2x1ZGVUYWdzID0gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgY29uc3QganVtcFRvUGFnZSA9IHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlci5nZXRTZWxlY3RlZFBhZ2VJZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclJ1bGVEdG8gPSB7XG4gICAgICB0eXBlOiB0aGlzLl90eXBlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgY29uZGl0aW9ucyxcbiAgICAgIGV4Y2x1ZGVQYWdlcyxcbiAgICAgIGp1bXBUb1BhZ2UsXG4gICAgICBleGNsdWRlVGFncyxcbiAgICB9O1xuICAgIHJldHVybiBkdG87XG4gIH1cbiAgdG9FbmdpbmVSdWxlKG1vZHVsZVByZWZpeDogc3RyaW5nKTogUGFnZVF1ZVJ1bGVzIHtcbiAgICBjb25zdCBjb25kaXRpb25zOiBDb25kaXRpb25bXSA9IFtdO1xuICAgIHRoaXMuX2NvbmRpdGlvbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBCdWlsZGVyQ29uZGl0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc2ltcGxlQ29uZGl0aW9uID0gYy50b0VuZ2luZUNvbmRpdGlvbihtb2R1bGVQcmVmaXgpO1xuICAgICAgICAgIGlmIChzaW1wbGVDb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChzaW1wbGVDb25kaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIEJ1aWxkZXJDb25kaXRpb25Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGNvbXBsZXhDb25kaXRpb24gPSBjLnRvRW5naW5lQ29uZGl0aW9uQ29tcGxleChtb2R1bGVQcmVmaXgpO1xuICAgICAgICAgIGlmIChjb21wbGV4Q29uZGl0aW9uKSBjb25kaXRpb25zLnB1c2goY29tcGxleENvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgYWxsOiBDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBzb21lOiBDb25kaXRpb25bXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJhbGxcIikge1xuICAgICAgYWxsID0gWy4uLmNvbmRpdGlvbnNdO1xuICAgIH1cbiAgICBjb25zdCBwYWdlUXVlQ29tbWFuZHM6IEFycmF5PFBhZ2VRdWVDb21tYW5kPiA9IFtdO1xuICAgIGNvbnN0IG1heWJlSnVtcFRvUGFnZSA9IHRoaXMuanVtcFRvQWN0aW9uTWFuYWdlci5zZWxlY3RlZDtcbiAgICBpZiAobWF5YmVKdW1wVG9QYWdlKSB7XG4gICAgICBjb25zdCBqdW1wQ29tbWFuZDogUGFnZVF1ZUNvbW1hbmQgPSB7XG4gICAgICAgIGtpbmQ6IFwiUEFHRV9RVUVfSlVNUF9UT19QQUdFX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgcGFnZUlkOiBtYXliZUp1bXBUb1BhZ2UuZGF0YS5wYWdlSWQgfSxcbiAgICAgIH07XG4gICAgICBwYWdlUXVlQ29tbWFuZHMucHVzaChqdW1wQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhjbHVkZVBhZ2VCeUlkTGlzdCA9IHRoaXMuX3BhZ2VBY3Rpb25NYW5hZ2VyLmdldEVuZ2luZUFjdGlvbigpLm1hcCgoYSkgPT4gYS5wYWdlSWQpO1xuICAgIGlmIChleGNsdWRlUGFnZUJ5SWRMaXN0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgY29tbWFuZDogUGFnZVF1ZUNvbW1hbmQgPSB7XG4gICAgICAgIGtpbmQ6IFwiUEFHRV9RVUVfRVhDTFVERV9CWV9QQUdFX0lEX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHRhcmdldElkOiBcIlBBR0VfUVVFXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgcGFnZUlkczogWy4uLmV4Y2x1ZGVQYWdlQnlJZExpc3RdIH0sXG4gICAgICB9O1xuICAgICAgcGFnZVF1ZUNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgfVxuICAgIGNvbnN0IGV4Y2x1ZGVUYWdzID0gdGhpcy5fdGFnQWN0aW9uTWFuYWdlci5nZXRFbmdpbmVBY3Rpb25zKCkubWFwKCh0YWdBKSA9PiB0YWdBLnRhZyk7XG4gICAgaWYgKGV4Y2x1ZGVUYWdzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZXhjbHVkZVRhZ3NDb21tYW5kOiBQYWdlUXVlQ29tbWFuZCA9IHtcbiAgICAgICAga2luZDogXCJQQUdFX1FVRV9FWENMVURFX0JZX1RBR19DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJQQUdFX1FVRVwiLFxuICAgICAgICB0YXJnZXRJZDogXCJQQUdFX1FVRVwiLFxuICAgICAgICBwYXlsb2FkOiB7IHRhZ0lkczogWy4uLmV4Y2x1ZGVUYWdzXSB9LFxuICAgICAgfTtcbiAgICAgIHBhZ2VRdWVDb21tYW5kcy5wdXNoKGV4Y2x1ZGVUYWdzQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZTogUGFnZVF1ZVJ1bGVzID0ge1xuICAgICAgZGVzY3JpcHRpb246IHRoaXMubmFtZSxcbiAgICAgIGFsbCxcbiAgICAgIHNvbWUsXG4gICAgICBvbkZhaWx1cmU6IFtdLFxuICAgICAgb25TdWNjZXNzOiBwYWdlUXVlQ29tbWFuZHMsXG4gICAgfTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQnVpbGRlclNjaGVtYUR0byB9IGZyb20gXCIuLi9CdWlsZGVyLXNjaGVtYVwiO1xuaW1wb3J0IHsgU2NoZW1hRHRvIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGhlbWVDb21waWxlcjxUaGVtZVNjaGVtYT4ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHRoZW1lOiBUaGVtZVNjaGVtYSkge31cbiAgYWJzdHJhY3QgY29tcGlsZShzY2hlbWE6IEJ1aWxkZXJTY2hlbWFEdG8pOiBTY2hlbWFEdG87XG59XG4iLCAiaW1wb3J0IHsgRFN0YXRlLCBCb29sZWFuU3RhdGVQcm9wZXJ0eSB9IGZyb20gXCJAbWVkaWEtcXVlc3QvZW5naW5lXCI7XG5cbmV4cG9ydCBuYW1lc3BhY2UgRFN0YXRlUHJvcHMge1xuICBleHBvcnQgY29uc3QgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZSA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcIm1lZGlhLWJsb2NrZWQtYnktYXV0b3BsYXktc2VxdWVuY2VcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIHRoZSBwYWdlIGlzIGluIGEgYXV0b3BsYXktc2VxdWVuY2UuIFRoZSBhdXRvcGxheS1zZXF1ZW5jZSB3aWxsIGFsd2F5cyBibG9jayBvdGhlciBtZWRpYS5cIixcbiAgKTtcbiAgZXhwb3J0IGNvbnN0IGlucHV0QmxvY2tpbmdCeVNlcXVlbmNlID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwiaW5wdXQtYmxvY2tlZC1ieS1hdXRvcGxheS1zZXF1ZW5jZVwiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeUF1ZGlvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwibWVkaWEtYmxvY2tlZC1ieS1hdWRpb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBpbnB1dEJsb2NrZWRCeUF1ZGlvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwiaW5wdXQtYmxvY2tlZC1ieS1hdWRpb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBtZWRpYUJsb2NrZWRCeVZpZGVvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFwibWVkaWEtYmxvY2tlZC1ieS12aWRlb1wiLCBmYWxzZSwgXCJcIik7XG4gIGV4cG9ydCBjb25zdCBpbnB1dEJsb2NrZWRCeVZpZGVvID0gbmV3IEJvb2xlYW5TdGF0ZVByb3BlcnR5KFxuICAgIFwiaW5wdXQtYmxvY2tlZC1ieS12aWRlb1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgYSB2aWRlbyBpcyBwbGF5aW5nLCBhbmQgdGhpcyB2aWRlbyBpcyBzdXBwb3NlIHRvIGJsb2NrIHVzZXItaW5wdXQuXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCB1c2VyUGF1c2VkVmlkZW8gPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJ1c2VyLXBhdXNlZC12aWRlb1wiLFxuICAgIGZhbHNlLFxuICAgIFwiU2hvdWxkIGJlIHRydWUgaWYgdXNlciBwYXVzZWQgdGhlIHZpZGVvIGJ5IHByZXNzaW5nIHRoZSBwYXVzZS1idXR0b24uXCIsXG4gICk7XG4gIGV4cG9ydCBjb25zdCB2aWRlb0lzUGxheWluZyA9IG5ldyBCb29sZWFuU3RhdGVQcm9wZXJ0eShcbiAgICBcInZpZGVvLWlzLXBsYXlpbmdcIixcbiAgICBmYWxzZSxcbiAgICBcIlNob3VsZCBiZSB0cnVlIGlmIGFueSB2aWRlbyBpcyBwbGF5aW5nIG9uIHRoZSBwYWdlLlwiLFxuICApO1xuICBleHBvcnQgY29uc3QgYXVkaW9Jc1BsYXlpbmcgPSBuZXcgQm9vbGVhblN0YXRlUHJvcGVydHkoXG4gICAgXCJhdWRpby1pcy1wbGF5aW5nXCIsXG4gICAgZmFsc2UsXG4gICAgXCJTaG91bGQgYmUgdHJ1IGlmIGFueSBhdWRpbyBpcyBwbGF5aW5nIG9uIHBhZ2VcIixcbiAgKTtcbiAgY29uc3QgX3Byb3BzID0ge1xuICAgIGlucHV0QmxvY2tlZEJ5QXVkaW8sXG4gICAgbWVkaWFCbG9ja2VkQnlBdWRpbyxcbiAgICBpbnB1dEJsb2NraW5nQnlTZXF1ZW5jZSxcbiAgICBtZWRpYUJsb2NrZWRCeVNlcXVlbmNlLFxuICAgIGlucHV0QmxvY2tlZEJ5VmlkZW8sXG4gICAgbWVkaWFCbG9ja2VkQnlWaWRlbyxcbiAgICB1c2VyUGF1c2VkVmlkZW8sXG4gICAgdmlkZW9Jc1BsYXlpbmcsXG4gIH07XG5cbiAgY29uc3QgZGlzYWJsZUF1ZGlvSWNvblF1ZXJ5OiBEU3RhdGUuU3RhdGVRdWVyeSA9IHtcbiAgICBuYW1lOiBcImRpc2FibGUtQXVkaW9cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwiYXVkaW8tY29udHJvbHMtYXJlLWJsb2NrZWRcIixcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgIF0sXG4gICAgICBhbGw6IFtdLFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGhpZGVWaWRlb1BsYXlRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJoaWRlLXZpZGVvLXBsYXktYnV0dG9uXCIsXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICBraW5kOiBcImNvbXBsZXgtY29uZGl0aW9uXCIsXG4gICAgICBuYW1lOiBcInZpZGVvLWlzLXBsYXlpbmctY29uZGl0aW9uXCIsXG4gICAgICBhbGw6IFt2aWRlb0lzUGxheWluZy5nZXRJc1RydWVDb25kaXRpb24oKV0sXG4gICAgICBzb21lOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGhpZGVWaWRlb1BhdXNlUXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiaGlkZS12aWRlby1wYXVzZS1idXR0b25cIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwidmlkZW8taXMtbm90LXBsYXlpbmctY29uZGl0aW9uXCIsXG4gICAgICBhbGw6IFt2aWRlb0lzUGxheWluZy5nZXRJc0ZhbHNlQ29uZGl0aW9uKCldLFxuICAgICAgc29tZTogW10sXG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBkaXNhYmxlVmlkZW9QbGF5UXVlcnk6IERTdGF0ZS5TdGF0ZVF1ZXJ5ID0ge1xuICAgIG5hbWU6IFwiZGlzYWJsZS12aWRlb1wiLFxuICAgIGNvbmRpdGlvbjoge1xuICAgICAga2luZDogXCJjb21wbGV4LWNvbmRpdGlvblwiLFxuICAgICAgbmFtZTogXCJ2aWRlby1wbGF5IHNoYWxsIGJlIGRpc2FibGVkXCIsXG4gICAgICBhbGw6IFt1c2VyUGF1c2VkVmlkZW8uZ2V0SXNGYWxzZUNvbmRpdGlvbigpXSxcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgbWVkaWFCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgYXVkaW9Jc1BsYXlpbmcuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIGNvbnN0IGRpc2FibGVVc2VySW5wdXRRdWVyeTogRFN0YXRlLlN0YXRlUXVlcnkgPSB7XG4gICAgbmFtZTogXCJkaXNhYmxlLXVzZXItaW5wdXRcIixcbiAgICBjb25kaXRpb246IHtcbiAgICAgIGtpbmQ6IFwiY29tcGxleC1jb25kaXRpb25cIixcbiAgICAgIG5hbWU6IFwiVXNlciBpbnB1dCBzaGFsbCBiZSBkaXNhYmxlZCAoUmVzcG9uc2UtYnV0dG9ucywgRm9ybUNvbnRyb2xzLi4uKVwiLFxuICAgICAgYWxsOiBbXSxcbiAgICAgIHNvbWU6IFtcbiAgICAgICAgaW5wdXRCbG9ja2VkQnlBdWRpby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgaW5wdXRCbG9ja2VkQnlWaWRlby5nZXRJc1RydWVDb25kaXRpb24oKSxcbiAgICAgICAgaW5wdXRCbG9ja2luZ0J5U2VxdWVuY2UuZ2V0SXNUcnVlQ29uZGl0aW9uKCksXG4gICAgICBdLFxuICAgIH0sXG4gIH07XG4gIGV4cG9ydCBjb25zdCBfUXVlcmllcyA9IHtcbiAgICBkaXNhYmxlQXVkaW9JY29uUXVlcnksXG4gICAgZGlzYWJsZVZpZGVvUGxheVF1ZXJ5LFxuICAgIGRpc2FibGVVc2VySW5wdXRRdWVyeSxcbiAgICBoaWRlVmlkZW9QYXVzZVF1ZXJ5LFxuICAgIGhpZGVWaWRlb1BsYXlRdWVyeSxcbiAgfTtcbiAgZXhwb3J0IGNvbnN0IGFsbERlZmF1bHRQcm9wZXJ0aWVzID0gT2JqZWN0LnZhbHVlcyhfcHJvcHMpO1xuICBleHBvcnQgY29uc3QgYWxsRGVmYXVsdFF1ZXJpZXMgPSBPYmplY3QudmFsdWVzKF9RdWVyaWVzKTtcbn1cbiIsICJpbXBvcnQgeyBEQ29tbWFuZCwgRWxlbWVudENvbW1hbmQgfSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgRFN0eWxlIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmltcG9ydCB7IERFbGVtZW50RHRvIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcblxuZXhwb3J0IG5hbWVzcGFjZSBUaGVtZVV0aWxzIHtcbiAgZXhwb3J0IGNvbnN0IGRpc2FibGVDbGlja0NvbW1hbmRzID0gKGVsZW1lbnRJZDogc3RyaW5nLCBzdHlsZUNoYW5nZXM6IFBhcnRpYWw8RFN0eWxlPik6IEVsZW1lbnRDb21tYW5kW10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9ESVNBQkxFX0NMSUNLX0NPTU1BTkRcIixcbiAgICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgICAgdGFyZ2V0SWQ6IGVsZW1lbnRJZCxcbiAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHN0eWxlQ2hhbmdlcyB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBlbmFibGVDbGlja0NvbW1hbmRzID0gKGVsZW1lbnRJZDogc3RyaW5nLCBzdHlsZUNoYW5nZXM6IFBhcnRpYWw8RFN0eWxlPik6IEVsZW1lbnRDb21tYW5kW10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9FTkFCTEVfQ0xJQ0tfQ09NTUFORFwiLFxuICAgICAgICB0YXJnZXQ6IFwiRUxFTUVOVFwiLFxuICAgICAgICB0YXJnZXRJZDogZWxlbWVudElkLFxuICAgICAgICBwYXlsb2FkOiB7fSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtpbmQ6IFwiRUxFTUVOVF9TVFlMRV9DT01NQU5EXCIsXG4gICAgICAgIHRhcmdldDogXCJFTEVNRU5UXCIsXG4gICAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICAgIHBheWxvYWQ6IHsgY2hhbmdlczogc3R5bGVDaGFuZ2VzIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH07XG4gIGV4cG9ydCBjb25zdCBoaWRlQ29tbWFuZCA9IChlbGVtZW50SWQ6IHN0cmluZyk6IEVsZW1lbnRDb21tYW5kID0+IHtcbiAgICBjb25zdCBoaWRlQ29tbWFuZDogRENvbW1hbmQgPSB7XG4gICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHsgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiB9IH0sXG4gICAgfTtcbiAgICByZXR1cm4gaGlkZUNvbW1hbmQ7XG4gIH07XG4gIGV4cG9ydCBjb25zdCBzaG93Q29tbWFuZCA9IChlbGVtZW50SWQ6IHN0cmluZyk6IEVsZW1lbnRDb21tYW5kID0+IHtcbiAgICBjb25zdCBzaG93Q29tbWFuZDogRENvbW1hbmQgPSB7XG4gICAgICBraW5kOiBcIkVMRU1FTlRfU1RZTEVfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVMRU1FTlRcIixcbiAgICAgIHRhcmdldElkOiBlbGVtZW50SWQsXG4gICAgICBwYXlsb2FkOiB7IGNoYW5nZXM6IHsgdmlzaWJpbGl0eTogXCJ2aXNpYmxlXCIgfSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHNob3dDb21tYW5kO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBzcGFjZUV2ZW5seVggPSA8VCBleHRlbmRzIFBpY2s8REVsZW1lbnREdG8sIFwic3R5bGVcIj4+KFxuICAgIGl0ZW1zOiBSZWFkb25seUFycmF5PFQ+LFxuICAgIG9wdGlvbnM6IHsgc3RhcnRBdDogbnVtYmVyOyBlbmRBdDogbnVtYmVyOyBkZWZhdWx0SXRlbVdpZHRoOiBudW1iZXIgfSA9IHtcbiAgICAgIHN0YXJ0QXQ6IDAsXG4gICAgICBlbmRBdDogMTAwLFxuICAgICAgZGVmYXVsdEl0ZW1XaWR0aDogNSxcbiAgICB9LFxuICApOiBSZWFkb25seUFycmF5PFQ+ID0+IHtcbiAgICBjb25zdCBzdGFydEF0ID0gb3B0aW9ucz8uc3RhcnRBdCA/PyAwO1xuICAgIGNvbnN0IGVuZEF0ID0gb3B0aW9ucz8uZW5kQXQgPz8gMTAwO1xuICAgIGNvbnN0IHJhbmdlID0gTWF0aC5hYnMoZW5kQXQgLSBzdGFydEF0KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IG1hcmdpbkNvdW50ID0gaXRlbXMubGVuZ3RoICsgMTtcbiAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBvcHRpb25zLmRlZmF1bHRJdGVtV2lkdGggPz8gMTUwIC8gbWFyZ2luQ291bnQ7XG5cbiAgICBsZXQgdG90YWxXaWR0aE9mRWxlbWVudHMgPSBpdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGNvbnN0IHcgPSBjdXJyLnN0eWxlLncgPz8gZGVmYXVsdFdpZHRoO1xuICAgICAgcmV0dXJuIHByZXYgKyB3O1xuICAgIH0sIDApO1xuXG4gICAgbGV0IGN1cnNvciA9IHN0YXJ0QXQ7XG4gICAgY29uc3QgcmVzdCA9IE1hdGgubWF4KHJhbmdlIC0gdG90YWxXaWR0aE9mRWxlbWVudHMsIDApO1xuICAgIGNvbnN0IG1hcmdpbiA9IHJlc3QgLyBtYXJnaW5Db3VudDtcblxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGN1cnNvciA9IGN1cnNvciArIG1hcmdpbjtcbiAgICAgIGNvbnN0IHcgPSBpdGVtLnN0eWxlLncgPz8gZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3QgeCA9IGN1cnNvcjtcbiAgICAgIGN1cnNvciA9IGN1cnNvciArIHc7XG4gICAgICBpdGVtLnN0eWxlLncgPSB3O1xuICAgICAgaXRlbS5zdHlsZS54ID0geDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpdGVtcztcbiAgfTtcblxuICBleHBvcnQgY29uc3QgY2VudGVyWSA9ICgpOiBQaWNrPERTdHlsZSwgXCJ5XCIgfCBcInRyYW5zZm9ybVwiPiA9PiAoe1xuICAgIHk6IDUwLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCUsIDUwJSlcIixcbiAgfSk7XG4gIGV4cG9ydCBjb25zdCBjZW50ZXJYID0gKCk6IFBpY2s8RFN0eWxlLCBcInhcIiB8IFwidHJhbnNmb3JtXCI+ID0+ICh7XG4gICAgeDogNTAsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtNTAlLCAwJSlcIixcbiAgfSk7XG5cbiAgZXhwb3J0IGNvbnN0IGNlbnRlclhZID0gKCk6IFBpY2s8RFN0eWxlLCBcInhcIiB8IFwieVwiIHwgXCJ0cmFuc2Zvcm1cIj4gPT4gKHtcbiAgICB4OiA1MCxcbiAgICB5OiA1MCxcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC01MCUsIDUwJSlcIixcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQWJzdHJhY3RUaGVtZUNvbXBpbGVyIH0gZnJvbSBcIi4vQWJzdHJhY3RUaGVtZUNvbXBpbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJTY2hlbWFEdG8gfSBmcm9tIFwiLi4vQnVpbGRlci1zY2hlbWFcIjtcbmltcG9ydCB7IEJ1aWxkZXJTY2hlbWEgfSBmcm9tIFwiLi4vQnVpbGRlci1zY2hlbWFcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlclBhZ2VEdG8gfSBmcm9tIFwiLi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBEU3RhdGVQcm9wcyB9IGZyb20gXCIuL3N0YW5kYXJkLXByb3BzXCI7XG5pbXBvcnQgeyBUaGVtZVV0aWxzIH0gZnJvbSBcIi4vdGhlbWUtdXRpbHNcIjtcbmltcG9ydCB7IERlZmF1bHRUaGVtZSwgdHlwZSBJRGVmYXVsdFRoZW1lIH0gZnJvbSBcIi4vSURlZmF1bHRUaGVtZVwiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyTWFpbkltYWdlRHRvIH0gZnJvbSBcIi4uL0J1aWxkZXJNYWluSW1hZ2VEdG9cIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRlck1haW5WaWRlb0R0byB9IGZyb20gXCIuLi9CdWlsZGVyTWFpblZpZGVvRHRvXCI7XG5pbXBvcnQge1xuICBEQXVkaW9EdG8sXG4gIERBdXRvUGxheVNlcXVlbmNlLFxuICBEQ29tbWFuZCxcbiAgRERpdkR0byxcbiAgREVsZW1lbnREdG8sXG4gIERJbWdEdG8sXG4gIERUZXh0RHRvLFxuICBEVXRpbCxcbiAgRFZpZGVvRHRvLFxuICBGYWN0LFxuICBQYWdlRHRvLFxuICBQYWdlUXVlQ29tbWFuZCxcbiAgUnVsZSxcbiAgU2NoZW1hRHRvLFxufSBmcm9tIFwiQG1lZGlhLXF1ZXN0L2VuZ2luZVwiO1xuaW1wb3J0IHsgQXVkaW9GaWxlIH0gZnJvbSBcIi4uL21lZGlhLWZpbGVzXCI7XG5pbXBvcnQgeyBCdWlsZGVyUnVsZSB9IGZyb20gXCIuLi9ydWxlYnVpbGRlclwiO1xuXG5jb25zdCBVID0gRFV0aWw7XG5jb25zdCBnZW5lcmF0ZUVsZW1lbnRJZCA9ICgpID0+IFUucmFuZG9tU3RyaW5nKDMyKTtcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGhlbWVDb21waWxlciBleHRlbmRzIEFic3RyYWN0VGhlbWVDb21waWxlcjxJRGVmYXVsdFRoZW1lPiB7XG4gIHJlYWRvbmx5IG5hbWUgPSBcIklzcGUgZGVmYXVsdCB0aGVtZS5cIjtcbiAgcHJpdmF0ZSByZWFkb25seSBUQUcgPSBcIlsgREVGQVVMVF9USEVNRV9DT01QSUxFUiBdOiBcIjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoRGVmYXVsdFRoZW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZVJ1bGVzKHNvdXJjZTogQnVpbGRlclNjaGVtYUR0byk6IFJ1bGU8UGFnZVF1ZUNvbW1hbmQsIG5ldmVyPltdIHtcbiAgICBjb25zdCBidWlsZGVyU2NoZW1hID0gQnVpbGRlclNjaGVtYS5mcm9tSnNvbihzb3VyY2UpO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IGJ1aWxkZXJTY2hlbWEuZ2V0UnVsZUlucHV0KCk7XG4gICAgY29uc3QgcGFnZVF1ZVJ1bGVzOiBSdWxlPFBhZ2VRdWVDb21tYW5kLCBuZXZlcj5bXSA9IFtdO1xuICAgIHNvdXJjZS5ydWxlcy5mb3JFYWNoKChydWxlKSA9PiB7XG4gICAgICBjb25zdCBlbmdpbmVSdWxlID0gQnVpbGRlclJ1bGUuZnJvbUR0byhydWxlLCBydWxlSW5wdXQpLnRvRW5naW5lUnVsZShzb3VyY2UucHJlZml4KTtcbiAgICAgIGlmICghUnVsZS5pc0VtcHR5KGVuZ2luZVJ1bGUpKSB7XG4gICAgICAgIHBhZ2VRdWVSdWxlcy5wdXNoKGVuZ2luZVJ1bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZCh0aGlzLlRBRywgXCJUaHJvd3MgYXdheSBlbXB0eSBydWxlLlwiKTtcbiAgICAgICAgY29uc29sZS5sb2cocnVsZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJ1bGVJbnB1dCk7XG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcGFnZVF1ZVJ1bGVzO1xuICB9XG5cbiAgY29tcGlsZShzb3VyY2U6IEJ1aWxkZXJTY2hlbWFEdG8pOiBTY2hlbWFEdG8ge1xuICAgIGNvbnN0IHBhZ2VzID0gc291cmNlLnBhZ2VzLm1hcCgocCkgPT4gdGhpcy5jb21waWxlUGFnZShwLCBzb3VyY2UucHJlZml4KSk7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLmNvbXBpbGVSdWxlcyhzb3VyY2UpO1xuICAgIGNvbnN0IGR0bzogU2NoZW1hRHRvID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiBzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuICAgICAgYmFzZUhlaWdodDogc291cmNlLmJhc2VIZWlnaHQsXG4gICAgICBiYXNlV2lkdGg6IHNvdXJjZS5iYXNlV2lkdGgsXG4gICAgICBpZDogc291cmNlLmlkLFxuICAgICAgcGFnZVNlcXVlbmNlczogW10sXG4gICAgICBwYWdlcyxcbiAgICAgIHByZWRlZmluZWRGYWN0czogW10sXG4gICAgICBwcmVmaXg6IHNvdXJjZS5wcmVmaXgsXG4gICAgICBydWxlcyxcbiAgICAgIHN0YXRlRnJvbUV2ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIlZJREVPX0VOREVEX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy52aWRlb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJWSURFT19QQVVTRURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMudmlkZW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeVZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIlZJREVPX1BMQVlfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMudmlkZW9Jc1BsYXlpbmcuZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25FdmVudDogXCJBVURJT19QTEFZX0VWRU5UXCIsXG4gICAgICAgICAgdGhlbkV4ZWN1dGU6IFtcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLmF1ZGlvSXNQbGF5aW5nLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeUF1ZGlvLmdldFNldFRydWVDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9uRXZlbnQ6IFwiQVVESU9fRU5ERURfRVZFTlRcIixcbiAgICAgICAgICB0aGVuRXhlY3V0ZTogW1xuICAgICAgICAgICAgRFN0YXRlUHJvcHMuYXVkaW9Jc1BsYXlpbmcuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5tZWRpYUJsb2NrZWRCeUF1ZGlvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkV2ZW50OiBcIkFVRElPX1BBVVNFRF9FVkVOVFwiLFxuICAgICAgICAgIHRoZW5FeGVjdXRlOiBbXG4gICAgICAgICAgICBEU3RhdGVQcm9wcy5hdWRpb0lzUGxheWluZy5nZXRTZXRGYWxzZUNvbW1hbmQoKSxcbiAgICAgICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5QXVkaW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzdGF0ZVByb3BzOiBEU3RhdGVQcm9wcy5hbGxEZWZhdWx0UHJvcGVydGllcy5tYXAoKGRlZikgPT4gZGVmLnByb3BEZWZpbml0aW9uKSxcbiAgICAgIHN0YXRlUXVlcmllczogRFN0YXRlUHJvcHMuYWxsRGVmYXVsdFF1ZXJpZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHByaXZhdGUgY29tcGlsZVBhZ2UocGFnZTogQnVpbGRlclBhZ2VEdG8sIG1vZHVsZVByZWZpeDogc3RyaW5nKTogUGFnZUR0byB7XG4gICAgLy8gY29uc29sZS5sb2coX21vZHVsZUlkKTtcbiAgICAvLyBjb25zdCB0ZXh0RWxlbWVudFxuICAgIGNvbnN0IHsgbmV4dEJ1dHRvbiwgbWFpblRleHQsIGlkLCBtYWluTWVkaWEsIF90eXBlIH0gPSBwYWdlO1xuICAgIGNvbnN0IGVsZW1lbnRzOiBERWxlbWVudER0b1tdID0gW107XG4gICAgY29uc3QgYXVkaW9SZXNvdXJjZXNEdG86IERBdWRpb0R0b1tdID0gW107XG4gICAgY29uc3QgdmlkZW9SZXNvdXJjZXM6IERWaWRlb0R0b1tdID0gW107XG4gICAgbGV0IG1haW5WaWRlbzogRFZpZGVvRHRvIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgbWFpblRleHRBdWRpbzogREF1ZGlvRHRvIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGlmIChwYWdlLm1haW5UZXh0LmF1ZGlvRmlsZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5jb21waWxlTWFpblRleHRBdWRpbyhwYWdlLm1haW5UZXh0LmF1ZGlvRmlsZSk7XG4gICAgICBlbGVtZW50cy5wdXNoKC4uLnJlcy5lbGVtZW50cyk7XG4gICAgICBhdWRpb1Jlc291cmNlc0R0by5wdXNoKHJlcy5hdWRpb0R0byk7XG4gICAgICBtYWluVGV4dEF1ZGlvID0gcmVzLmF1ZGlvRHRvO1xuICAgIH1cblxuICAgIGlmIChfdHlwZSA9PT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkID0gbW9kdWxlUHJlZml4ICsgXCJfXCIgKyBwYWdlLnByZWZpeDtcbiAgICAgIGNvbnN0IHsgYnV0dG9ucywgcXVlc3Rpb24gfSA9IHRoaXMuY29tcGlsZVF1ZXN0aW9uKGlkLCBwYWdlLCB2YXJpYWJsZUlkKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXN0aW9uKTtcbiAgICAgIGVsZW1lbnRzLnB1c2goLi4uYnV0dG9ucywgcXVlc3Rpb24pO1xuICAgIH1cblxuICAgIGlmIChfdHlwZSA9PT0gXCJpbmZvLXBhZ2VcIikge1xuICAgICAgY29uc3QgaW5mb1RleHQgPSBtYWluVGV4dC50ZXh0O1xuICAgICAgY29uc3QgbmV4dEJ0bkVsZW1lbnQ6IERFbGVtZW50RHRvID0gdGhpcy5jb21waWxlQnV0dG9uKGlkLCBuZXh0QnV0dG9uLCB7XG4gICAgICAgIGtpbmQ6IFwibmV4dC1idXR0b25cIixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZWxlbWVudDogREVsZW1lbnREdG8gPSB7XG4gICAgICAgIHRleHQ6IGluZm9UZXh0LFxuICAgICAgICBfdGFnOiBcInBcIixcbiAgICAgICAgaWQ6IGdlbmVyYXRlRWxlbWVudElkKCksXG4gICAgICAgIHN0eWxlOiBEZWZhdWx0VGhlbWUubWFpblRleHQud2l0aE1lZGlhLnRleHQuY3NzLFxuICAgICAgfTtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICBlbGVtZW50cy5wdXNoKG5leHRCdG5FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKG1haW5NZWRpYSAmJiBtYWluTWVkaWEua2luZCA9PT0gXCJtYWluLWltYWdlXCIpIHtcbiAgICAgIGNvbnN0IG1haW5JbWFnZUVsZW1lbnQgPSB0aGlzLmNvbXBpbGVJbWFnZShtYWluTWVkaWEpO1xuICAgICAgZWxlbWVudHMucHVzaChtYWluSW1hZ2VFbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKG1haW5NZWRpYSAmJiBtYWluTWVkaWEua2luZCA9PT0gXCJtYWluLXZpZGVvXCIpIHtcbiAgICAgIGNvbnN0IHZpZGVvT3V0cHV0ID0gdGhpcy5jb21waWxlVmlkZW8obWFpbk1lZGlhKTtcbiAgICAgIG1haW5WaWRlbyA9IHZpZGVvT3V0cHV0LnZpZGVvRHRvO1xuICAgICAgZWxlbWVudHMucHVzaCguLi52aWRlb091dHB1dC5lbGVtZW50cyk7XG4gICAgICB2aWRlb1Jlc291cmNlcy5wdXNoKHZpZGVvT3V0cHV0LnZpZGVvRHRvKTtcbiAgICB9XG4gICAgY29uc3QgbWFpblZpZGVvSWQgPSBtYWluVmlkZW8gPyBtYWluVmlkZW8uaWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgYXV0b1BsYXlTZXF1ZW5jZTogREF1dG9QbGF5U2VxdWVuY2UgPSB7XG4gICAgICBibG9ja1VzZXJJbnB1dDogdHJ1ZSxcbiAgICAgIGlkOiBcIjFcIixcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIHN0YXJ0Q29tbWFuZHM6IFtcbiAgICAgICAgRFN0YXRlUHJvcHMubWVkaWFCbG9ja2VkQnlTZXF1ZW5jZS5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgICBEU3RhdGVQcm9wcy5pbnB1dEJsb2NraW5nQnlTZXF1ZW5jZS5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIGVuZENvbW1hbmRzOiBbXG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5U2VxdWVuY2UuZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLmlucHV0QmxvY2tpbmdCeVNlcXVlbmNlLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgaWYgKG1haW5WaWRlbyAmJiBwYWdlLm1haW5NZWRpYSAmJiBwYWdlLm1haW5NZWRpYS5raW5kID09PSBcIm1haW4tdmlkZW9cIiAmJiBwYWdlLm1haW5NZWRpYS5tb2RlID09PSBcImF1dG9wbGF5XCIpIHtcbiAgICAgIGF1dG9QbGF5U2VxdWVuY2UuaXRlbXMucHVzaCh7XG4gICAgICAgIGtpbmQ6IFwiYXV0b3BsYXktdmlkZW9cIixcbiAgICAgICAgdmlkZW9JZDogbWFpblZpZGVvLmlkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1haW5UZXh0QXVkaW8gJiYgcGFnZS5tYWluVGV4dC5hdXRvcGxheSkge1xuICAgICAgYXV0b1BsYXlTZXF1ZW5jZS5pdGVtcy5wdXNoKHtcbiAgICAgICAga2luZDogXCJhdXRvcGxheS1hdWRpb1wiLFxuICAgICAgICBhdWRpb0lkOiBtYWluVGV4dEF1ZGlvLmlkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUR0bzogUGFnZUR0byA9IHtcbiAgICAgIGF1ZGlvOiBhdWRpb1Jlc291cmNlc0R0byxcbiAgICAgIGF1dG9QbGF5U2VxdWVuY2U6IGF1dG9QbGF5U2VxdWVuY2UsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmVkXCIsXG4gICAgICBlbGVtZW50cyxcbiAgICAgIGlkLFxuICAgICAgbWFpblZpZGVvSWQsXG4gICAgICB0YWdzOiBbXSxcbiAgICAgIHZpZGVvOiB2aWRlb1Jlc291cmNlcyxcbiAgICB9O1xuICAgIHJldHVybiBwYWdlRHRvO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21waWxlSW1hZ2UoaW1hZ2U6IEJ1aWxkZXJNYWluSW1hZ2VEdG8pIHtcbiAgICBjb25zdCBpbWc6IERJbWdEdG8gPSB7XG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgaWQ6IGltYWdlLmZpbGUuaWQsXG4gICAgICBzdHlsZTogdGhpcy50aGVtZS5pbWFnZS5zdHlsZSxcbiAgICAgIHVybDogaW1hZ2UuZmlsZS5kb3dubG9hZFVybCxcbiAgICB9O1xuICAgIHJldHVybiBpbWc7XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVNYWluVGV4dEF1ZGlvKGF1ZGlvRmlsZTogQXVkaW9GaWxlKToge1xuICAgIGF1ZGlvRHRvOiBEQXVkaW9EdG87XG4gICAgZWxlbWVudHM6IERFbGVtZW50RHRvW107XG4gIH0ge1xuICAgIGNvbnN0IHQgPSB0aGlzLnRoZW1lLm1haW5UZXh0O1xuICAgIGNvbnN0IGF1ZGlvSWQgPSBhdWRpb0ZpbGUuaWQ7XG4gICAgY29uc3QgaWNvblVybCA9XG4gICAgICBcImh0dHBzOi8vZmlyZWJhc2VzdG9yYWdlLmdvb2dsZWFwaXMuY29tL3YwL2IvaXNwZS1iYWNrZW5kLWRldi5hcHBzcG90LmNvbS9vL3B1YmxpYy1hc3NldHMlMkZ2b2x1bWVfdXAtMjRweC5zdmc/YWx0PW1lZGlhJnRva2VuPTU1MWJkMGE2LWE1MTUtNGY4Ny1hMjQ1LWRhNDMzZjQ4MzNmOVwiO1xuXG4gICAgY29uc3QgYnV0dG9uSWQgPSBVLnJhbmRvbVN0cmluZygzMCk7XG4gICAgY29uc3QgcGxheU1haW5UZXh0QXVkaW86IERJbWdEdG8gPSB7XG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgdXJsOiBpY29uVXJsLFxuICAgICAgc3R5bGU6IHsgLi4udC53aXRoTWVkaWEuYXVkaW8uY3NzIH0sXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIkFVRElPX1BMQVlfQ09NTUFORFwiLFxuICAgICAgICAgIHRhcmdldDogXCJBVURJT1wiLFxuICAgICAgICAgIHRhcmdldElkOiBhdWRpb0lkLFxuICAgICAgICAgIHBheWxvYWQ6IHsgdm9sdW1lOiAxIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgb25TdGF0ZUNoYW5nZTogW1xuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlOYW1lOiBEU3RhdGVQcm9wcy5fUXVlcmllcy5kaXNhYmxlQXVkaW9JY29uUXVlcnkubmFtZSxcbiAgICAgICAgICB3aGVuVHJ1ZTogWy4uLlRoZW1lVXRpbHMuZGlzYWJsZUNsaWNrQ29tbWFuZHMoYnV0dG9uSWQsIHQud2l0aE1lZGlhLmF1ZGlvLmNzc0Rpc2FibGVkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKGJ1dHRvbklkLCB0LndpdGhNZWRpYS5hdWRpby5jc3NFbmFibGVkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgYXVkaW9EdG86IERBdWRpb0R0byA9IHtcbiAgICAgIF90YWc6IFwiYXVkaW9cIixcbiAgICAgIC8vIGV2ZW50SGFuZGxlcnM6IFtdLFxuICAgICAgaWQ6IGF1ZGlvRmlsZS5pZCxcbiAgICAgIHVybDogYXVkaW9GaWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgcmV0dXJuIHsgYXVkaW9EdG8sIGVsZW1lbnRzOiBbcGxheU1haW5UZXh0QXVkaW9dIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVWaWRlbyh2aWRlbzogQnVpbGRlck1haW5WaWRlb0R0bykge1xuICAgIGNvbnN0IHQgPSB0aGlzLnRoZW1lLnZpZGVvUGxheWVyO1xuICAgIGNvbnN0IHZpZGVvSWQgPSB2aWRlby5maWxlLmlkO1xuICAgIGNvbnN0IHBsYXlCdXR0b25JZCA9IFwicGxheS1idG4tZm9yXCIgKyB2aWRlb0lkO1xuICAgIGNvbnN0IHBhdXNlQnV0dG9uSWQgPSBcInBhdXNlLWJ0bi1mb3JcIiArIHZpZGVvSWQ7XG4gICAgY29uc3QgZWxlbWVudHM6IERFbGVtZW50RHRvW10gPSBbXTtcbiAgICBjb25zdCB2aWRlb0R0bzogRFZpZGVvRHRvID0ge1xuICAgICAgX3RhZzogXCJ2aWRlb1wiLFxuICAgICAgaWQ6IHZpZGVvLmZpbGUuaWQsXG4gICAgICBzdHlsZTogdC52aWRlb0VsZW1lbnQuY3NzLFxuICAgICAgdXJsOiB2aWRlby5maWxlLmRvd25sb2FkVXJsLFxuICAgIH07XG4gICAgY29uc3QgcGxheUJ0bjogREltZ0R0byA9IHtcbiAgICAgIGlkOiBwbGF5QnV0dG9uSWQsXG4gICAgICBfdGFnOiBcImltZ1wiLFxuICAgICAgdXJsOiB0LnBsYXlCdXR0b24uaWNvblVybCxcbiAgICAgIHN0eWxlOiB7IC4uLnQucGxheUJ1dHRvbi5jc3MsIC4uLnQucGxheUJ1dHRvbi5jc3NFbmFibGVkIH0sXG4gICAgICBvbkNsaWNrOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBcIlZJREVPX1BMQVlfQ09NTUFORFwiLFxuICAgICAgICAgIHRhcmdldDogXCJWSURFT1wiLFxuICAgICAgICAgIHRhcmdldElkOiB2aWRlb0lkLFxuICAgICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBUT0RPIENoZWNrIGlmIHRoaXMgdmlkZW8gc2hhbGwgYmxvY2sgb3RoZXIgbWVkaWEgZmlyc3Q/XG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0VHJ1ZUNvbW1hbmQoKSxcbiAgICAgICAgRFN0YXRlUHJvcHMudXNlclBhdXNlZFZpZGVvLmdldFNldEZhbHNlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuZGlzYWJsZVZpZGVvUGxheVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFsuLi5UaGVtZVV0aWxzLmRpc2FibGVDbGlja0NvbW1hbmRzKHBsYXlCdXR0b25JZCwgdC5wbGF5QnV0dG9uLmNzc0Rpc2FibGVkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKHBsYXlCdXR0b25JZCwgdC5wbGF5QnV0dG9uLmNzc0VuYWJsZWQpXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuaGlkZVZpZGVvUGxheVF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlblRydWU6IFtUaGVtZVV0aWxzLmhpZGVDb21tYW5kKHBsYXlCdXR0b25JZCldLFxuICAgICAgICAgIHdoZW5GYWxzZTogW1RoZW1lVXRpbHMuc2hvd0NvbW1hbmQocGxheUJ1dHRvbklkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgcGF1c2VCdG46IERJbWdEdG8gPSB7XG4gICAgICBpZDogcGF1c2VCdXR0b25JZCxcbiAgICAgIF90YWc6IFwiaW1nXCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICAuLi50LnBhdXNlQnV0dG9uLmNzcyxcbiAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgLi4udC5wYXVzZUJ1dHRvbi5jc3NFbmFibGVkLFxuICAgICAgfSxcbiAgICAgIHVybDogdC5wYXVzZUJ1dHRvbi5pY29uVXJsLFxuICAgICAgb25DbGljazogW1xuICAgICAgICB7XG4gICAgICAgICAga2luZDogXCJWSURFT19QQVVTRV9DT01NQU5EXCIsXG4gICAgICAgICAgdGFyZ2V0OiBcIlZJREVPXCIsXG4gICAgICAgICAgdGFyZ2V0SWQ6IHZpZGVvSWQsXG4gICAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIERTdGF0ZVByb3BzLm1lZGlhQmxvY2tlZEJ5VmlkZW8uZ2V0U2V0RmFsc2VDb21tYW5kKCksXG4gICAgICAgIERTdGF0ZVByb3BzLnVzZXJQYXVzZWRWaWRlby5nZXRTZXRUcnVlQ29tbWFuZCgpLFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuaGlkZVZpZGVvUGF1c2VRdWVyeS5uYW1lLFxuICAgICAgICAgIHdoZW5UcnVlOiBbVGhlbWVVdGlscy5oaWRlQ29tbWFuZChwYXVzZUJ1dHRvbklkKV0sXG4gICAgICAgICAgd2hlbkZhbHNlOiBbVGhlbWVVdGlscy5zaG93Q29tbWFuZChwYXVzZUJ1dHRvbklkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgZWxlbWVudHMucHVzaChwbGF5QnRuKTtcbiAgICBlbGVtZW50cy5wdXNoKHBhdXNlQnRuKTtcbiAgICByZXR1cm4geyB2aWRlb0R0bywgZWxlbWVudHMgfTtcbiAgfVxuICBwcml2YXRlIGNvbXBpbGVRdWVzdGlvbihcbiAgICBwYWdlSWQ6IHN0cmluZyxcbiAgICBwYWdlOiBCdWlsZGVyUGFnZUR0byxcbiAgICB2YXJpYWJsZUlkOiBzdHJpbmcsXG4gICk6IHtcbiAgICBxdWVzdGlvbjogRFRleHREdG87XG4gICAgYnV0dG9uczogRERpdkR0b1tdO1xuICB9IHtcbiAgICAvLyBUT0RPIFJFRkFDVE9SRSBERUZBVUxUIFFVRVNUSU9OIFRPIC0gKFJFTU9WRSBVU0UgVEVYVDEpXG4gICAgLy8gY29uc29sZS5sb2cocGFnZSk7XG4gICAgY29uc3QgcSA9IHBhZ2UuZGVmYXVsdFF1ZXN0aW9uO1xuICAgIGNvbnN0IHRleHQgPSBwYWdlLm1haW5UZXh0LnRleHQ7XG5cbiAgICBjb25zdCBxdWVzdGlvbjogRFRleHREdG8gPSB7XG4gICAgICBfdGFnOiBcInBcIixcbiAgICAgIHRleHQsXG4gICAgICBldmVudEhhbmRsZXJzOiBbXSxcbiAgICAgIGlkOiBVLnJhbmRvbVN0cmluZygzMCksXG4gICAgICBvbkNsaWNrOiBbXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtdLFxuICAgICAgc3R5bGU6IERlZmF1bHRUaGVtZS5tYWluVGV4dC53aXRoTWVkaWEudGV4dC5jc3MsXG4gICAgfTtcbiAgICBjb25zdCBidXR0b25zID0gcS5vcHRpb25zLm1hcCgobykgPT4ge1xuICAgICAgY29uc3QgYnRucyA9IHRoaXMuY29tcGlsZUJ1dHRvbihwYWdlSWQsIG8sIHtcbiAgICAgICAga2luZDogXCJyZXNwb25zZS1idXR0b25cIixcbiAgICAgICAgcXVlc3Rpb25JZDogdmFyaWFibGVJZCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGJ0bnM7XG4gICAgfSk7XG4gICAgVGhlbWVVdGlscy5zcGFjZUV2ZW5seVgoYnV0dG9ucyk7XG4gICAgcmV0dXJuIHsgcXVlc3Rpb24sIGJ1dHRvbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGlsZUJ1dHRvbihcbiAgICBwYWdlSWQ6IHN0cmluZyxcbiAgICBidXR0b25EdG86IEJ1aWxkZXJQYWdlRHRvW1wibmV4dEJ1dHRvblwiXSxcbiAgICBvcHRpb25zOiB7IGtpbmQ6IFwicmVzcG9uc2UtYnV0dG9uXCI7IHF1ZXN0aW9uSWQ6IHN0cmluZyB9IHwgeyBraW5kOiBcIm5leHQtYnV0dG9uXCIgfSxcbiAgKSB7XG4gICAgY29uc3QgZmFjdHNDb2xsZWN0ZWQ6IEZhY3RbXSA9IFtdO1xuICAgIGNvbnN0IHsgaWQsIHZhbHVlLCBsYWJlbCB9ID0gYnV0dG9uRHRvO1xuXG4gICAgY29uc3QgeyBkaXYsIHRleHQxIH0gPSBEZWZhdWx0VGhlbWUucmVzcG9uc2VCdXR0b25zO1xuICAgIGlmIChvcHRpb25zLmtpbmQgPT09IFwicmVzcG9uc2UtYnV0dG9uXCIpIHtcbiAgICAgIGNvbnN0IGZhY3Q6IEZhY3QgPSB7XG4gICAgICAgIGtpbmQ6IFwibnVtZXJpYy1mYWN0XCIsXG4gICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICByZWZlcmVuY2VJZDogb3B0aW9ucy5xdWVzdGlvbklkLFxuICAgICAgICByZWZlcmVuY2VMYWJlbDogXCJRdWVzdGlvbklkOiBcIiArIG9wdGlvbnMucXVlc3Rpb25JZCxcbiAgICAgIH07XG4gICAgICBmYWN0c0NvbGxlY3RlZC5wdXNoKGZhY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IG9uQ2xpY2tIYW5kbGVyOiBEQ29tbWFuZCA9IHtcbiAgICAgIGtpbmQ6IFwiRU5HSU5FX0xFQVZFX1BBR0VfQ09NTUFORFwiLFxuICAgICAgdGFyZ2V0OiBcIkVOR0lORVwiLFxuICAgICAgdGFyZ2V0SWQ6IFwiRU5HSU5FXCIsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIHBhZ2VJZCxcbiAgICAgICAgZmFjdHNDb2xsZWN0ZWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgYnRuOiBERGl2RHRvID0ge1xuICAgICAgaWQsXG4gICAgICBfdGFnOiBcImRpdlwiLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIF90YWc6IFwicFwiLFxuICAgICAgICAgIGlkOiBVLnJhbmRvbVN0cmluZygzMCksXG4gICAgICAgICAgdGV4dDogbGFiZWwsXG4gICAgICAgICAgc3R5bGU6IHRleHQxLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG9uU3RhdGVDaGFuZ2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogRFN0YXRlUHJvcHMuX1F1ZXJpZXMuZGlzYWJsZVVzZXJJbnB1dFF1ZXJ5Lm5hbWUsXG4gICAgICAgICAgd2hlbkZhbHNlOiBbLi4uVGhlbWVVdGlscy5lbmFibGVDbGlja0NvbW1hbmRzKGlkLCBkaXYuY3NzRW5hYmxlZCldLFxuICAgICAgICAgIHdoZW5UcnVlOiBbLi4uVGhlbWVVdGlscy5kaXNhYmxlQ2xpY2tDb21tYW5kcyhpZCwgZGl2LmNzc0Rpc2FibGVkKV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3R5bGU6IHsgLi4uZGl2LmNzcywgLi4uZGl2LmNzc0VuYWJsZWQgfSxcbiAgICAgIG9uQ2xpY2s6IFtvbkNsaWNrSGFuZGxlcl0sXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5raW5kID09PSBcIm5leHQtYnV0dG9uXCIpIHtcbiAgICAgIGJ0bi5zdHlsZS54ID0gNTA7XG4gICAgICBidG4uc3R5bGUueSA9IDg7XG4gICAgICBidG4uc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoLTUwJSwgMCUpXCI7XG4gICAgfVxuICAgIHJldHVybiBidG47XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJ1aWxkZXJQYWdlRHRvLCBCdWlsZGVyUGFnZVR5cGUgfSBmcm9tIFwiLi9CdWlsZGVyLXBhZ2VcIjtcbmltcG9ydCB7IEJ1aWxkZXJQYWdlIH0gZnJvbSBcIi4vQnVpbGRlci1wYWdlXCI7XG5pbXBvcnQgeyBSdWxlSW5wdXQgfSBmcm9tIFwiLi9ydWxlYnVpbGRlci9SdWxlSW5wdXRcIjtcbmltcG9ydCB0eXBlIHsgUXVlc3Rpb25WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyL1J1bGVWYXJpYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21WYXJpYWJsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV4Y2x1ZGVCeVBhZ2VBY3Rpb24sIEV4Y2x1ZGVCeVRhZ0FjdGlvbiwgSnVtcFRvUGFnZUFjdGlvbiB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkZXJUYWdEdG8gfSBmcm9tIFwiLi9CdWlsZGVyVGFnXCI7XG5pbXBvcnQgeyBCdWlsZGVyVGFnLCBUYWdDb2xsZWN0aW9uIH0gZnJvbSBcIi4vQnVpbGRlclRhZ1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZGVyUnVsZUR0byB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBCdWlsZGVyUnVsZSB9IGZyb20gXCIuL3J1bGVidWlsZGVyXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGhlbWVDb21waWxlciB9IGZyb20gXCIuL3RoZW1lL2RlZmF1bHQtdGhlbWUtY29tcGlsZXJcIjtcbmltcG9ydCB7IEltYWdlRmlsZSB9IGZyb20gXCIuL21lZGlhLWZpbGVzXCI7XG5pbXBvcnQgeyBTY2hlbWFEdG8sIERVdGlsIH0gZnJvbSBcIkBtZWRpYS1xdWVzdC9lbmdpbmVcIjtcbmNvbnN0IFUgPSBEVXRpbDtcbi8vIHR5cGUgU2NoZW1hSGFzaCA9IHN0cmluZyAmIHsgX19NRDVfX0hBU0g6IHRydWUgfTtcbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclNjaGVtYUR0byB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSBtYWluSW1hZ2U6IEltYWdlRmlsZSB8IGZhbHNlO1xuICByZWFkb25seSBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYWdlczogQnVpbGRlclBhZ2VEdG9bXTtcbiAgcmVhZG9ubHkgYmFzZUhlaWdodDogbnVtYmVyO1xuICByZWFkb25seSBiYXNlV2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgcnVsZXM6IFJlYWRvbmx5QXJyYXk8QnVpbGRlclJ1bGVEdG8+O1xuICByZWFkb25seSB0YWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWdEdG8+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUJ1aWxkT3V0cHV0IHtcbiAgc2NoZW1hOiBTY2hlbWFEdG87XG4gIGNvZGVib29rOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzY2hlbWFDb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyU2NoZW1hIHtcbiAgYmFzZUhlaWdodCA9IDEzMDA7XG4gIGJhc2VXaWR0aCA9IDEwMjQ7XG4gIGJhY2tncm91bmRDb2xvciA9IFwiIzAwMDAwMFwiO1xuICBwYWdlczogQnVpbGRlclBhZ2VbXSA9IFtdO1xuICBtYWluSW1hZ2U6IEltYWdlRmlsZSB8IGZhbHNlID0gZmFsc2U7XG4gIHByaXZhdGUgX3J1bGVzOiBCdWlsZGVyUnVsZVtdID0gW107XG4gIGdldCBydWxlcygpOiBSZWFkb25seUFycmF5PEJ1aWxkZXJSdWxlPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9ydWxlc107XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWdDb2xsZWN0aW9uOiBUYWdDb2xsZWN0aW9uID0gVGFnQ29sbGVjdGlvbi5jcmVhdGUoKTtcbiAgZ2V0IHRhZ3MoKTogUmVhZG9ubHlBcnJheTxCdWlsZGVyVGFnPiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl90YWdDb2xsZWN0aW9uXTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBCdWlsZGVyU2NoZW1hKGlkLCBuYW1lLCBwcmVmaXgpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbihkdG86IEJ1aWxkZXJTY2hlbWFEdG8pOiBCdWlsZGVyU2NoZW1hIHtcbiAgICBjb25zdCBzY2hlbWEgPSBuZXcgQnVpbGRlclNjaGVtYShkdG8uaWQsIGR0by5uYW1lLCBkdG8ucHJlZml4KTtcbiAgICBjb25zdCBwYWdlcyA9IGR0by5wYWdlcy5tYXAoQnVpbGRlclBhZ2UuZnJvbUpzb24pO1xuICAgIHNjaGVtYS5fdGFnQ29sbGVjdGlvbi5pbml0KGR0by50YWdzKTtcbiAgICBzY2hlbWEuYmFja2dyb3VuZENvbG9yID0gZHRvLmJhY2tncm91bmRDb2xvcjtcbiAgICBzY2hlbWEuYmFzZUhlaWdodCA9IGR0by5iYXNlSGVpZ2h0O1xuICAgIHNjaGVtYS5iYXNlV2lkdGggPSBkdG8uYmFzZVdpZHRoO1xuICAgIHNjaGVtYS5wYWdlcyA9IHBhZ2VzO1xuICAgIHNjaGVtYS5iYWNrZ3JvdW5kQ29sb3IgPSBkdG8uYmFja2dyb3VuZENvbG9yO1xuICAgIHNjaGVtYS5tYWluSW1hZ2UgPSBkdG8ubWFpbkltYWdlID8/IGZhbHNlO1xuICAgIGNvbnN0IHJ1bGVzRHRvID0gZHRvLnJ1bGVzID8/IFtdO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IHNjaGVtYS5nZXRSdWxlSW5wdXQoKTtcbiAgICBzY2hlbWEuX3J1bGVzID0gcnVsZXNEdG8ubWFwKChyKSA9PiBCdWlsZGVyUnVsZS5mcm9tRHRvKHIsIHJ1bGVJbnB1dCkpO1xuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICB0b0pzb24oKTogQnVpbGRlclNjaGVtYUR0byB7XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzLm1hcCgocCkgPT4gcC50b0pzb24oKSk7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuX3RhZ0NvbGxlY3Rpb24udG9Kc29uKCk7XG4gICAgY29uc3QgcnVsZXMgPSB0aGlzLl9ydWxlcy5tYXAoKHJ1bGUpID0+IHJ1bGUudG9Kc29uKCkpO1xuXG4gICAgY29uc3QgZHRvOiBCdWlsZGVyU2NoZW1hRHRvID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJhc2VIZWlnaHQ6IHRoaXMuYmFzZUhlaWdodCxcbiAgICAgIGJhc2VXaWR0aDogdGhpcy5iYXNlV2lkdGgsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhZ2VzLFxuICAgICAgcnVsZXMsXG4gICAgICB0YWdzLFxuICAgICAgbWFpbkltYWdlOiB0aGlzLm1haW5JbWFnZSxcbiAgICAgIHByZWZpeDogdGhpcy5wcmVmaXgsXG4gICAgfTtcbiAgICByZXR1cm4gZHRvO1xuICB9XG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgcHJlZml4OiBzdHJpbmcsXG4gICkge31cblxuICBhZGRQYWdlKHR5cGU6IEJ1aWxkZXJQYWdlVHlwZSwgYXRJbmRleCA9IC0xKTogQnVpbGRlclBhZ2Uge1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBCdWlsZGVyUGFnZS5jcmVhdGUodHlwZSwgXCJcIik7XG4gICAgaWYgKGF0SW5kZXggPj0gMCAmJiBhdEluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIG5ld1BhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gobmV3UGFnZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQYWdlO1xuICB9XG5cbiAgaW5zZXJ0UGFnZShwYWdlOiBCdWlsZGVyUGFnZSwgYXRJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0UGFnZUF0SW5kZXgocGFnZSwgYXRJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydFBhZ2VBdEluZGV4KHBhZ2U6IEJ1aWxkZXJQYWdlLCBhdEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpc1ZhbGlkSW5kZXggPSBVLmlzSW5SYW5nZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCAtIDEpO1xuICAgIGlmICghaXNWYWxpZEluZGV4KGF0SW5kZXgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0cyA9ICEhdGhpcy5wYWdlcy5maW5kKChwKSA9PiBwLmlkID09PSBwYWdlLmlkKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucGFnZXMuc3BsaWNlKGF0SW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYWRkUnVsZSgpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0UnVsZUlucHV0KCk7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLl9ydWxlcy5sZW5ndGggKyAxO1xuICAgIGNvbnN0IG5hbWUgPSBcIlJ1bGUtbnVtYmVyOiBcIiArIGNvdW50O1xuICAgIGNvbnN0IHJ1bGUgPSBCdWlsZGVyUnVsZS5mcm9tRHRvKFxuICAgICAge1xuICAgICAgICBjb25kaXRpb25zOiBbXSxcbiAgICAgICAgdHlwZTogXCJhbGxcIixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXhjbHVkZVRhZ3M6IFtdLFxuICAgICAgICBqdW1wVG9QYWdlOiBmYWxzZSxcbiAgICAgICAgZXhjbHVkZVBhZ2VzOiBbXSxcbiAgICAgIH0sXG4gICAgICBpbnB1dCxcbiAgICApO1xuICAgIHRoaXMuX3J1bGVzLnB1c2gocnVsZSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cbiAgZGVsZXRlUnVsZShydWxlOiBCdWlsZGVyUnVsZSkge1xuICAgIHRoaXMuX3J1bGVzID0gdGhpcy5fcnVsZXMuZmlsdGVyKChyKSA9PiByICE9PSBydWxlKTtcbiAgfVxuXG4gIG1vdmVQYWdlKHBhZ2U6IEJ1aWxkZXJQYWdlLCB0b0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZihwYWdlKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzVmFsaWRJbmRleCA9IFUuaXNJblJhbmdlKDAsIHRoaXMucGFnZXMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKCFpc1ZhbGlkSW5kZXgodG9JbmRleCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ01vdmluZyBmcm9tIDonICsgaW5kZXggKyAnIHRvOiAnICsgdG9JbmRleCk7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKHRvSW5kZXgsIDAsIHBhZ2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGVsZXRlUGFnZShwYWdlOiBCdWlsZGVyUGFnZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5wYWdlcy5maWx0ZXIoKHApID0+IHAgIT09IHBhZ2UpO1xuICAgIGNvbnN0IGRpZERlbGV0ZSA9IGZpbHRlcmVkLmxlbmd0aCA9PT0gdGhpcy5wYWdlcy5sZW5ndGggLSAxO1xuICAgIHRoaXMucGFnZXMgPSBmaWx0ZXJlZDtcbiAgICByZXR1cm4gZGlkRGVsZXRlO1xuICB9XG5cbiAgcmVldmFsdWF0ZVJ1bGVzKCkge1xuICAgIGNvbnNvbGUubG9nKFwiUmVldmFsdWF0aW9uZyBydWxlc0lucHV0XCIpO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRSdWxlSW5wdXQoKTtcbiAgICBjb25zdCBydWxlc0R0byA9IHRoaXMuX3J1bGVzLm1hcCgocikgPT4gci50b0pzb24oKSk7XG4gICAgdGhpcy5fcnVsZXMgPSBydWxlc0R0by5tYXAoKGR0bykgPT4gQnVpbGRlclJ1bGUuZnJvbUR0byhkdG8sIGlucHV0KSk7XG4gIH1cblxuICBnZXRSdWxlSW5wdXQoKTogUnVsZUlucHV0IHtcbiAgICBjb25zdCBxVmFyczogUXVlc3Rpb25WYXJpYWJsZVtdID0gW107XG4gICAgY29uc3QgY1ZhcnM6IEN1c3RvbVZhcmlhYmxlW10gPSBbXTtcbiAgICBjb25zdCBwYWdlSWRBY3Rpb25zOiBFeGNsdWRlQnlQYWdlQWN0aW9uW10gPSBbXTtcbiAgICBjb25zdCB0YWdBY3Rpb25zOiBFeGNsdWRlQnlUYWdBY3Rpb25bXSA9IHRoaXMudGFncy5tYXAoKHQpID0+IHtcbiAgICAgIGNvbnN0IHRhZyA9IHQudGFnVGV4dDtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRoaXMucGFnZXMucmVkdWNlKChjb3VudCwgY3VycikgPT4ge1xuICAgICAgICByZXR1cm4gY3Vyci50YWdzLmluY2x1ZGVzKHRhZykgPyBjb3VudCArIDEgOiBjb3VudDtcbiAgICAgIH0sIDApO1xuICAgICAgY29uc3QgZXhjbHVkZUJ5VGFnRHRvOiBFeGNsdWRlQnlUYWdBY3Rpb24gPSB7XG4gICAgICAgIGtpbmQ6IFwiZXhjbHVkZS1ieS10YWdcIixcbiAgICAgICAgcGFnZUNvdW50LFxuICAgICAgICB0YWcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0LnRhZ0Rlc2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBleGNsdWRlQnlUYWdEdG87XG4gICAgfSk7XG4gICAgY29uc3QganVtcEFjdGlvbnM6IEp1bXBUb1BhZ2VBY3Rpb25bXSA9IFtdO1xuICAgIGNvbnN0IHByZWZpeCA9IFwiXCI7XG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKChwYWdlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFnZVZhcmlhYmxlcyA9IHBhZ2UuZ2V0UXVlc3Rpb25WYXJpYWJsZXMocHJlZml4LCBpbmRleCk7XG4gICAgICBxVmFycy5wdXNoKC4uLnBhZ2VWYXJpYWJsZXMpO1xuICAgICAgY29uc3QgbWFpblRleHQgPSBwYWdlLm1haW5UZXh0LnRleHQ7XG4gICAgICBjb25zdCBqdW1wQWN0aW9uOiBKdW1wVG9QYWdlQWN0aW9uID0ge1xuICAgICAgICBraW5kOiBcImp1bXAtdG8tcGFnZVwiLFxuICAgICAgICBwYWdlSWQ6IHBhZ2UuaWQsXG4gICAgICAgIHBhZ2VOdW1iZXI6IGluZGV4LFxuICAgICAgICBtYWluVGV4dDogcGFnZS5tYWluVGV4dC50ZXh0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVQYWdlQWN0aW9uOiBFeGNsdWRlQnlQYWdlQWN0aW9uID0ge1xuICAgICAgICBraW5kOiBcImV4Y2x1ZGUtYnktcGFnZUlkXCIsXG4gICAgICAgIHBhZ2VJZDogcGFnZS5pZCxcbiAgICAgICAgcGFnZU51bWJlcjogaW5kZXgsXG4gICAgICAgIG1haW5UZXh0LFxuICAgICAgfTtcbiAgICAgIGp1bXBBY3Rpb25zLnB1c2goanVtcEFjdGlvbik7XG4gICAgICBwYWdlSWRBY3Rpb25zLnB1c2goZXhjbHVkZVBhZ2VBY3Rpb24pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJ1bGVJbnB1dCA9IG5ldyBSdWxlSW5wdXQocVZhcnMsIGNWYXJzLCBwYWdlSWRBY3Rpb25zLCB0YWdBY3Rpb25zLCBqdW1wQWN0aW9ucyk7XG5cbiAgICByZXR1cm4gcnVsZUlucHV0O1xuICB9XG5cbiAgZGVsZXRlVGFncyh0YWdzOiBSZWFkb25seUFycmF5PEJ1aWxkZXJUYWc+KSB7XG4gICAgdGhpcy5fdGFnQ29sbGVjdGlvbi5kZWxldGVBbGwodGFncyk7XG4gIH1cblxuICBhZGRUYWcoYnVpbGRlclRhZzogQnVpbGRlclRhZykge1xuICAgIHRoaXMuX3RhZ0NvbGxlY3Rpb24uYWRkKGJ1aWxkZXJUYWcpO1xuICB9XG5cbiAgLy8gZ2V0SGFzaCgpOiBTY2hlbWFIYXNoIHtcbiAgLy8gICAgIGNvbnN0IG1kNSA9IE1ENSh0aGlzLnRvSnNvbigpKTtcbiAgLy8gICAgIHJldHVyblxuICAvLyB9XG5cbiAgLy8gaGFzQ2hhbmdlZChoYXNoOiBTY2hlbWFIYXNoKTogYm9vbGVhbiB7XG4gIC8vICAgICByZXR1cm4gaGFzaCAhPT0gdGhpcy5nZXRIYXNoKCk7XG4gIC8vIH1cblxuICBwcml2YXRlIGdldFF1ZXN0aW9uVmFyaWFibGVzKHdpdGhNb2R1bGVQcmVmaXggPSBmYWxzZSk6IFJlYWRvbmx5QXJyYXk8UXVlc3Rpb25WYXJpYWJsZT4ge1xuICAgIGNvbnN0IHByZWZpeCA9IHdpdGhNb2R1bGVQcmVmaXggPyB0aGlzLnByZWZpeCA6IFwiXCI7XG4gICAgY29uc3QgYWxsID0gdGhpcy5wYWdlc1xuICAgICAgLm1hcCgocGFnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHBhZ2UuZ2V0UXVlc3Rpb25WYXJpYWJsZXMocHJlZml4LCBpbmRleCk7XG4gICAgICB9KVxuICAgICAgLmZsYXQoMSk7XG4gICAgcmV0dXJuIGFsbDtcbiAgfVxuXG4gIGNvbXBpbGUoKTogU2NoZW1hQnVpbGRPdXRwdXQge1xuICAgIGNvbnN0IG1vZHVsZUR0byA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgaW1wID0gbmV3IERlZmF1bHRUaGVtZUNvbXBpbGVyKCk7XG4gICAgY29uc3Qgc2NoZW1hID0gaW1wLmNvbXBpbGUobW9kdWxlRHRvKTtcblxuICAgIHJldHVybiB7IGNvZGVib29rOiB7fSwgc2NoZW1hLCBzY2hlbWFDb25maWc6IHt9IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCdWlsZGVyT2JqZWN0SWQsIEJ1aWxkZXJPYmplY3QgfSBmcm9tICcuL0J1aWxkZXJPYmplY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJUZXh0RHRvIHtcbiAgcmVhZG9ubHkgaWQ6IEJ1aWxkZXJPYmplY3RJZC5UZXh0SUQ7XG4gIHRleHQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0cmFuc2xhdGlvblJlcXVpcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlclRleHQgZXh0ZW5kcyBCdWlsZGVyT2JqZWN0PCdidWlsZGVyLXRleHQnLCBCdWlsZGVyVGV4dER0bz4ge1xuICByZWFkb25seSBvYmplY3RUeXBlID0gJ2J1aWxkZXItdGV4dCc7XG4gIGlkOiBCdWlsZGVyT2JqZWN0SWQuVGV4dElEO1xuICB0ZXh0ID0gJyc7XG4gIG5hbWUgPSAnJztcbiAgdHJhbnNsYXRlUmVxdWlyZWQgPSBmYWxzZTtcbiAgLy8gYXVkaW86IHtpZDogQn1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkdG86IEJ1aWxkZXJUZXh0RHRvKSB7XG4gICAgc3VwZXIoZHRvKTtcbiAgICB0aGlzLmlkID0gZHRvLmlkO1xuICAgIHRoaXMudHJhbnNsYXRlUmVxdWlyZWQgPSBkdG8udHJhbnNsYXRpb25SZXF1aXJlZDtcbiAgICB0aGlzLm5hbWUgPSBkdG8ubmFtZTtcbiAgICB0aGlzLnRleHQgPSBkdG8udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGlkID0gQnVpbGRlck9iamVjdElkLnRleHRJZCgpO1xuICAgIGNvbnN0IGR0bzogQnVpbGRlclRleHREdG8gPSB7XG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIHRyYW5zbGF0aW9uUmVxdWlyZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyVGV4dChkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uKGR0bzogQnVpbGRlclRleHREdG8pIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBCdWlsZGVyVGV4dChkdG8pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIGNsb25lKCk6IEJ1aWxkZXJUZXh0RHRvIHtcbiAgICBjb25zdCBuZXdJZCA9IEJ1aWxkZXJPYmplY3RJZC50ZXh0SWQoKTtcbiAgICBjb25zdCBkdG8gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IHdpdGhOZXdJZDogQnVpbGRlclRleHREdG8gPSB7IC4uLmR0bywgaWQ6IG5ld0lkIH07XG4gICAgcmV0dXJuIHdpdGhOZXdJZDtcbiAgfVxuXG4gIHRvSnNvbigpOiBCdWlsZGVyVGV4dER0byB7XG4gICAgY29uc3QgZHRvOiBCdWlsZGVyVGV4dER0byA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgdHJhbnNsYXRpb25SZXF1aXJlZDogdGhpcy50cmFuc2xhdGVSZXF1aXJlZFxuICAgIH07XG4gICAgcmV0dXJuIGR0bztcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsb0JBQXNCO0FBRXRCLElBQU0sSUFBSTtBQWtCSCxJQUFVO0FBQUEsQ0FBVixDQUFVQSxxQkFBVjtBQVdFLEVBQU1BLGlCQUFBLGNBQWMsTUFBYTtBQUN0QyxXQUFPLFNBQVMsYUFBYTtBQUFBLEVBQy9CO0FBRU8sRUFBTUEsaUJBQUEsYUFBYSxNQUFrQjtBQUMxQyxXQUFPLFNBQVMsbUJBQW1CO0FBQUEsRUFDckM7QUFDTyxFQUFNQSxpQkFBQSxTQUFTLE1BQWM7QUFDbEMsV0FBTyxTQUFTLGNBQWM7QUFBQSxFQUNoQztBQUVPLEVBQU1B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RVosWUFBWSxLQUFxQjtBQUN2QyxVQUFNLEdBQUc7QUFDVCxTQUFLLEtBQUssSUFBSTtBQUNkLFNBQUssb0JBQW9CLElBQUk7QUFDN0IsU0FBSyxPQUFPLElBQUk7QUFDaEIsU0FBSyxPQUFPLElBQUk7QUFBQSxFQUNsQjtBQUFBLEVBRUEsT0FBYyxPQUFPLE1BQWM7QUFDakMsVUFBTSxLQUFLLGdCQUFnQixPQUFPO0FBQ2xDLFVBQU0sTUFBc0I7QUFBQSxNQUMxQjtBQUFBLE1BQ0E7QUFBQSxNQUNBLE1BQU07QUFBQSxNQUNOLHFCQUFxQjtBQUFBLElBQ3ZCO0FBQ0EsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxPQUFjLFNBQVMsS0FBcUI7QUFDMUMsVUFBTSxXQUFXLElBQUksYUFBWSxHQUFHO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBQUEsRUFFQSxRQUF3QjtBQUN0QixVQUFNLFFBQVEsZ0JBQWdCLE9BQU87QUFDckMsVUFBTSxNQUFNLEtBQUssT0FBTztBQUN4QixVQUFNLFlBQTRCLEVBQUUsR0FBRyxLQUFLLElBQUksTUFBTTtBQUN0RCxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsU0FBeUI7QUFDdkIsVUFBTSxNQUFzQjtBQUFBLE1BQzFCLElBQUksS0FBSztBQUFBLE1BQ1QsTUFBTSxLQUFLO0FBQUEsTUFDWCxNQUFNLEtBQUs7QUFBQSxNQUNYLHFCQUFxQixLQUFLO0FBQUEsSUFDNUI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogWyJCdWlsZGVyT2JqZWN0SWQiLCAiQnVpbGRlck9wdGlvblRoZW1lIiwgImltcG9ydF9lbmdpbmUiLCAiVSIsICJsYWJlbCIsICJCdWlsZGVyT3BlcmF0b3IiLCAidiIsICJvcCIsICJkdG8iLCAiaW1wb3J0X2VuZ2luZSIsICJEU3RhdGVQcm9wcyIsICJUaGVtZVV0aWxzIiwgImhpZGVDb21tYW5kIiwgInNob3dDb21tYW5kIiwgImltcG9ydF9lbmdpbmUiLCAiVSIsICJpbXBvcnRfZW5naW5lIiwgIlUiXQp9Cg==