footprintjs 0.10.3 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/esm/lib/builder/FlowChartBuilder.js +18 -11
  2. package/dist/esm/lib/builder/index.js +1 -1
  3. package/dist/esm/lib/builder/types.js +7 -4
  4. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  5. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +6 -2
  6. package/dist/esm/lib/engine/handlers/ExtractorRunner.js +3 -4
  7. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +3 -3
  8. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -2
  9. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +9 -6
  10. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +46 -23
  11. package/dist/esm/types/lib/builder/FlowChartBuilder.d.ts +1 -0
  12. package/dist/esm/types/lib/builder/index.d.ts +1 -1
  13. package/dist/esm/types/lib/builder/types.d.ts +15 -69
  14. package/dist/esm/types/lib/engine/graph/StageNode.d.ts +4 -2
  15. package/dist/esm/types/lib/engine/handlers/ExtractorRunner.d.ts +1 -1
  16. package/dist/lib/builder/FlowChartBuilder.js +18 -11
  17. package/dist/lib/builder/index.js +1 -1
  18. package/dist/lib/builder/types.js +7 -4
  19. package/dist/lib/engine/graph/StageNode.js +1 -1
  20. package/dist/lib/engine/handlers/ChildrenExecutor.js +6 -2
  21. package/dist/lib/engine/handlers/ExtractorRunner.js +3 -4
  22. package/dist/lib/engine/handlers/RuntimeStructureManager.js +3 -3
  23. package/dist/lib/engine/handlers/SelectorHandler.js +6 -2
  24. package/dist/lib/engine/handlers/SubflowExecutor.js +9 -6
  25. package/dist/lib/engine/traversal/FlowchartTraverser.js +46 -23
  26. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -0
  27. package/dist/types/lib/builder/index.d.ts +1 -1
  28. package/dist/types/lib/builder/types.d.ts +15 -69
  29. package/dist/types/lib/engine/graph/StageNode.d.ts +4 -2
  30. package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +1 -1
  31. package/package.json +1 -1
@@ -266,6 +266,7 @@ export class FlowChartBuilder {
266
266
  this._stepCounter = 0;
267
267
  this._stageDescriptions = new Map();
268
268
  this._stageStepMap = new Map();
269
+ this._knownStageIds = new Set();
269
270
  if (buildTimeExtractor) {
270
271
  this._buildTimeExtractor = buildTimeExtractor;
271
272
  }
@@ -338,6 +339,7 @@ export class FlowChartBuilder {
338
339
  this._rootSpec = spec;
339
340
  this._cursor = node;
340
341
  this._cursorSpec = spec;
342
+ this._knownStageIds.add(id);
341
343
  this._appendDescriptionLine(name, description);
342
344
  return this;
343
345
  }
@@ -356,6 +358,7 @@ export class FlowChartBuilder {
356
358
  curSpec.next = spec;
357
359
  this._cursor = node;
358
360
  this._cursorSpec = spec;
361
+ this._knownStageIds.add(id);
359
362
  this._appendDescriptionLine(name, description);
360
363
  return this;
361
364
  }
@@ -386,6 +389,7 @@ export class FlowChartBuilder {
386
389
  curSpec.next = spec;
387
390
  this._cursor = node;
388
391
  this._cursorSpec = spec;
392
+ this._knownStageIds.add(id);
389
393
  this._appendDescriptionLine(name, description);
390
394
  return this;
391
395
  }
@@ -407,6 +411,7 @@ export class FlowChartBuilder {
407
411
  curSpec.next = spec;
408
412
  this._cursor = node;
409
413
  this._cursorSpec = spec;
414
+ this._knownStageIds.add(id);
410
415
  this._stepCounter++;
411
416
  this._stageStepMap.set(name, this._stepCounter);
412
417
  return new DeciderList(this, node, spec, this._descriptionParts, this._stageDescriptions, this._stepCounter, description);
@@ -436,17 +441,17 @@ export class FlowChartBuilder {
436
441
  }
437
442
  // ── Parallel (Fork) ──
438
443
  addListOfFunction(children, options) {
439
- var _a, _b;
444
+ var _a;
440
445
  const cur = this._needCursor();
441
446
  const curSpec = this._needCursorSpec();
442
- const forkId = (_a = cur.id) !== null && _a !== void 0 ? _a : cur.name;
447
+ const forkId = cur.id;
443
448
  curSpec.type = 'fork';
444
449
  if (options === null || options === void 0 ? void 0 : options.failFast)
445
450
  cur.failFast = true;
446
451
  for (const { id, name, fn } of children) {
447
452
  if (!id)
448
453
  fail(`child id required under '${cur.name}'`);
449
- if ((_b = cur.children) === null || _b === void 0 ? void 0 : _b.some((c) => c.id === id)) {
454
+ if ((_a = cur.children) === null || _a === void 0 ? void 0 : _a.some((c) => c.id === id)) {
450
455
  fail(`duplicate child id '${id}' under '${cur.name}'`);
451
456
  }
452
457
  const node = { name: name !== null && name !== void 0 ? name : id, id };
@@ -474,14 +479,14 @@ export class FlowChartBuilder {
474
479
  }
475
480
  // ── Subflow Mounting ──
476
481
  addSubFlowChart(id, subflow, mountName, options) {
477
- var _a, _b;
482
+ var _a;
478
483
  const cur = this._needCursor();
479
484
  const curSpec = this._needCursorSpec();
480
485
  if ((_a = cur.children) === null || _a === void 0 ? void 0 : _a.some((c) => c.id === id)) {
481
486
  fail(`duplicate child id '${id}' under '${cur.name}'`);
482
487
  }
483
488
  const subflowName = mountName || id;
484
- const forkId = (_b = cur.id) !== null && _b !== void 0 ? _b : cur.name;
489
+ const forkId = cur.id;
485
490
  const prefixedRoot = this._prefixNodeTree(subflow.root, id);
486
491
  if (!this._subflowDefs.has(id)) {
487
492
  this._subflowDefs.set(id, { root: prefixedRoot });
@@ -564,7 +569,10 @@ export class FlowChartBuilder {
564
569
  fail(`loopTo already defined at '${cur.name}'`);
565
570
  if (cur.next)
566
571
  fail(`cannot set loopTo when next is already defined at '${cur.name}'`);
567
- cur.next = { name: stageId, id: stageId };
572
+ if (!this._knownStageIds.has(stageId)) {
573
+ fail(`loopTo('${stageId}') target not found — did you pass a stage name instead of id?`);
574
+ }
575
+ cur.next = { name: stageId, id: stageId, isLoopRef: true };
568
576
  curSpec.loopTarget = stageId;
569
577
  curSpec.next = { name: stageId, id: stageId, type: 'stage' };
570
578
  const targetStep = this._stageStepMap.get(stageId);
@@ -638,16 +646,15 @@ export class FlowChartBuilder {
638
646
  const idOf = (k) => (k || '').replace(/[^a-zA-Z0-9_]/g, '_') || '_';
639
647
  const root = (_a = this._root) !== null && _a !== void 0 ? _a : fail('empty tree; call start() first');
640
648
  const walk = (n) => {
641
- var _a, _b, _c;
642
- const nid = idOf((_a = n.id) !== null && _a !== void 0 ? _a : n.name);
649
+ const nid = idOf(n.id);
643
650
  lines.push(`${nid}["${n.name}"]`);
644
651
  for (const c of n.children || []) {
645
- const cid = idOf((_b = c.id) !== null && _b !== void 0 ? _b : c.name);
652
+ const cid = idOf(c.id);
646
653
  lines.push(`${nid} --> ${cid}`);
647
654
  walk(c);
648
655
  }
649
656
  if (n.next) {
650
- const mid = idOf((_c = n.next.id) !== null && _c !== void 0 ? _c : n.next.name);
657
+ const mid = idOf(n.next.id);
651
658
  lines.push(`${nid} --> ${mid}`);
652
659
  walk(n.next);
653
660
  }
@@ -748,4 +755,4 @@ export function specToStageNode(spec) {
748
755
  };
749
756
  return inflate(spec);
750
757
  }
751
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NoYXJ0QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYnVpbGRlci9GbG93Q2hhcnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQWtCSCxnRkFBZ0Y7QUFDaEYsbUJBQW1CO0FBQ25CLGdGQUFnRjtBQUVoRixNQUFNLElBQUksR0FBRyxDQUFDLEdBQVcsRUFBUyxFQUFFO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUYsZ0ZBQWdGO0FBQ2hGLGNBQWM7QUFDZCxnRkFBZ0Y7QUFFaEY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFhdEIsWUFDRSxPQUF1QyxFQUN2QyxPQUFnQyxFQUNoQyxPQUFvQyxFQUNwQyx5QkFBbUMsRUFBRSxFQUNyQywwQkFBK0MsSUFBSSxHQUFHLEVBQUUsRUFDeEQsa0JBQWtCLEdBQUcsQ0FBQyxFQUN0QixrQkFBMkI7UUFoQlosY0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFPOUIsbUJBQWMsR0FBZ0QsRUFBRSxDQUFDO1FBV2hGLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUMvQyxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsRUFBVSxFQUNWLElBQVksRUFDWixFQUF3QyxFQUN4QyxXQUFv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QyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUMzQyxDQUFDLENBQUE7S0FBQSxDQUFDO0lBQ0gsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmxvd0NoYXJ0QnVpbGRlciDigJQgRmx1ZW50IEFQSSBmb3IgY29uc3RydWN0aW5nIGZsb3djaGFydCBleGVjdXRpb24gZ3JhcGhzLlxuICpcbiAqIEJ1aWxkcyBTdGFnZU5vZGUgdHJlZXMgYW5kIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSAoSlNPTikgaW4gdGFuZGVtLlxuICogWmVybyBkZXBlbmRlbmNpZXMgb24gb2xkIGNvZGUg4oCUIG9ubHkgaW1wb3J0cyBmcm9tIGxvY2FsIHR5cGVzLlxuICpcbiAqIFRoZSBidWlsZGVyIGNyZWF0ZXMgdHdvIHBhcmFsbGVsIHN0cnVjdHVyZXM6XG4gKiAxLiBTdGFnZU5vZGUgdHJlZSDigJQgcnVudGltZSBncmFwaCB3aXRoIGVtYmVkZGVkIGZ1bmN0aW9uc1xuICogMi4gU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIOKAlCBKU09OLXNhZmUgc3RydWN0dXJlIGZvciB2aXN1YWxpemF0aW9uXG4gKlxuICogVGhlIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSBtZXRob2QgaXMgaW50ZW50aW9uYWxseSBvbWl0dGVkIOKAlFxuICogaXQgYmVsb25ncyBpbiB0aGUgcnVubmVyIGxheWVyIChQaGFzZSA1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEJ1aWxkVGltZUV4dHJhY3RvcixcbiAgRmxvd0NoYXJ0LFxuICBGbG93Q2hhcnRTcGVjLFxuICBJTG9nZ2VyLFxuICBQaXBlbGluZVN0YWdlRnVuY3Rpb24sXG4gIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSxcbiAgU2ltcGxpZmllZFBhcmFsbGVsU3BlYyxcbiAgU3RhZ2VOb2RlLFxuICBTdHJlYW1IYW5kbGVycyxcbiAgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcixcbiAgU3RyZWFtVG9rZW5IYW5kbGVyLFxuICBTdWJmbG93TW91bnRPcHRpb25zLFxuICBUcmF2ZXJzYWxFeHRyYWN0b3IsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEludGVybmFsIGhlbHBlcnNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBmYWlsID0gKG1zZzogc3RyaW5nKTogbmV2ZXIgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoYFtGbG93Q2hhcnRCdWlsZGVyXSAke21zZ31gKTtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRGVjaWRlckxpc3Rcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEZsdWVudCBoZWxwZXIgcmV0dXJuZWQgYnkgYWRkRGVjaWRlckZ1bmN0aW9uIHRvIGFkZCBicmFuY2hlcy5cbiAqIGBlbmQoKWAgc2V0cyBgZGVjaWRlckZuID0gdHJ1ZWAg4oCUIHRoZSBmbiBJUyB0aGUgZGVjaWRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIERlY2lkZXJMaXN0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGI6IEZsb3dDaGFydEJ1aWxkZXI8VE91dCwgVFNjb3BlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJOb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJTcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgZGVmYXVsdElkPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50RGVzY3JpcHRpb25QYXJ0czogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50U3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzZXJ2ZWRTdGVwTnVtYmVyOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjaWRlckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaERlc2NJbmZvOiBBcnJheTx7IGlkOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVpbGRlcjogRmxvd0NoYXJ0QnVpbGRlcjxUT3V0LCBUU2NvcGU+LFxuICAgIGN1ck5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGN1clNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSxcbiAgICBwYXJlbnREZXNjcmlwdGlvblBhcnRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHBhcmVudFN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpLFxuICAgIHJlc2VydmVkU3RlcE51bWJlciA9IDAsXG4gICAgZGVjaWRlckRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLmIgPSBidWlsZGVyO1xuICAgIHRoaXMuY3VyTm9kZSA9IGN1ck5vZGU7XG4gICAgdGhpcy5jdXJTcGVjID0gY3VyU3BlYztcbiAgICB0aGlzLnBhcmVudERlc2NyaXB0aW9uUGFydHMgPSBwYXJlbnREZXNjcmlwdGlvblBhcnRzO1xuICAgIHRoaXMucGFyZW50U3RhZ2VEZXNjcmlwdGlvbnMgPSBwYXJlbnRTdGFnZURlc2NyaXB0aW9ucztcbiAgICB0aGlzLnJlc2VydmVkU3RlcE51bWJlciA9IHJlc2VydmVkU3RlcE51bWJlcjtcbiAgICB0aGlzLmRlY2lkZXJEZXNjcmlwdGlvbiA9IGRlY2lkZXJEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGFkZEZ1bmN0aW9uQnJhbmNoKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZuPzogUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICk6IERlY2lkZXJMaXN0PFRPdXQsIFRTY29wZT4ge1xuICAgIGlmICh0aGlzLmJyYW5jaElkcy5oYXMoaWQpKSBmYWlsKGBkdXBsaWNhdGUgZGVjaWRlciBicmFuY2ggaWQgJyR7aWR9JyB1bmRlciAnJHt0aGlzLmN1ck5vZGUubmFtZX0nYCk7XG4gICAgdGhpcy5icmFuY2hJZHMuYWRkKGlkKTtcblxuICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0geyBuYW1lOiBuYW1lID8/IGlkLCBpZCB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgbm9kZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIGlmIChmbikge1xuICAgICAgbm9kZS5mbiA9IGZuO1xuICAgICAgdGhpcy5iLl9hZGRUb01hcChuYW1lLCBmbik7XG4gICAgfVxuXG4gICAgbGV0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHsgbmFtZTogbmFtZSA/PyBpZCwgaWQsIHR5cGU6ICdzdGFnZScgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHNwZWMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICBzcGVjID0gdGhpcy5iLl9hcHBseUV4dHJhY3RvclRvTm9kZShzcGVjKTtcblxuICAgIHRoaXMuY3VyTm9kZS5jaGlsZHJlbiA9IHRoaXMuY3VyTm9kZS5jaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmN1ck5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICB0aGlzLmN1clNwZWMuY2hpbGRyZW4gPSB0aGlzLmN1clNwZWMuY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5jdXJTcGVjLmNoaWxkcmVuLnB1c2goc3BlYyk7XG5cbiAgICB0aGlzLmJyYW5jaERlc2NJbmZvLnB1c2goeyBpZCwgZGVzY3JpcHRpb24gfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRTdWJGbG93Q2hhcnRCcmFuY2goXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdWJmbG93OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPixcbiAgICBtb3VudE5hbWU/OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gICk6IERlY2lkZXJMaXN0PFRPdXQsIFRTY29wZT4ge1xuICAgIGlmICh0aGlzLmJyYW5jaElkcy5oYXMoaWQpKSBmYWlsKGBkdXBsaWNhdGUgZGVjaWRlciBicmFuY2ggaWQgJyR7aWR9JyB1bmRlciAnJHt0aGlzLmN1ck5vZGUubmFtZX0nYCk7XG4gICAgdGhpcy5icmFuY2hJZHMuYWRkKGlkKTtcblxuICAgIGNvbnN0IHN1YmZsb3dOYW1lID0gbW91bnROYW1lIHx8IGlkO1xuICAgIGNvbnN0IHByZWZpeGVkUm9vdCA9IHRoaXMuYi5fcHJlZml4Tm9kZVRyZWUoc3ViZmxvdy5yb290LCBpZCk7XG5cbiAgICBpZiAoIXRoaXMuYi5fc3ViZmxvd0RlZnMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5iLl9zdWJmbG93RGVmcy5zZXQoaWQsIHsgcm9vdDogcHJlZml4ZWRSb290IH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0ge1xuICAgICAgbmFtZTogc3ViZmxvd05hbWUsXG4gICAgICBpZCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICBzdWJmbG93SWQ6IGlkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucykgbm9kZS5zdWJmbG93TW91bnRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHtcbiAgICAgIG5hbWU6IHN1YmZsb3dOYW1lLFxuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIGlkLFxuICAgICAgaXNTdWJmbG93Um9vdDogdHJ1ZSxcbiAgICAgIHN1YmZsb3dJZDogaWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHN1YmZsb3dTdHJ1Y3R1cmU6IHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlLFxuICAgIH07XG5cbiAgICB0aGlzLmN1ck5vZGUuY2hpbGRyZW4gPSB0aGlzLmN1ck5vZGUuY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5jdXJOb2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgdGhpcy5jdXJTcGVjLmNoaWxkcmVuID0gdGhpcy5jdXJTcGVjLmNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuY3VyU3BlYy5jaGlsZHJlbi5wdXNoKHNwZWMpO1xuXG4gICAgdGhpcy5iLl9tZXJnZVN0YWdlTWFwKHN1YmZsb3cuc3RhZ2VNYXAsIGlkKTtcbiAgICB0aGlzLmIuX21lcmdlU3ViZmxvd3Moc3ViZmxvdy5zdWJmbG93cywgaWQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRCcmFuY2hMaXN0KFxuICAgIGJyYW5jaGVzOiBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcbiAgICB9PixcbiAgKTogRGVjaWRlckxpc3Q8VE91dCwgVFNjb3BlPiB7XG4gICAgZm9yIChjb25zdCB7IGlkLCBuYW1lLCBmbiB9IG9mIGJyYW5jaGVzKSB7XG4gICAgICB0aGlzLmFkZEZ1bmN0aW9uQnJhbmNoKGlkLCBuYW1lLCBmbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0RGVmYXVsdChpZDogc3RyaW5nKTogRGVjaWRlckxpc3Q8VE91dCwgVFNjb3BlPiB7XG4gICAgdGhpcy5kZWZhdWx0SWQgPSBpZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGVuZCgpOiBGbG93Q2hhcnRCdWlsZGVyPFRPdXQsIFRTY29wZT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jdXJOb2RlLmNoaWxkcmVuO1xuICAgIGlmICghY2hpbGRyZW4gfHwgY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtGbG93Q2hhcnRCdWlsZGVyXSBkZWNpZGVyIGF0ICcke3RoaXMuY3VyTm9kZS5uYW1lfScgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGJyYW5jaGApO1xuICAgIH1cblxuICAgIHRoaXMuY3VyTm9kZS5kZWNpZGVyRm4gPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuZGVmYXVsdElkKSB7XG4gICAgICBjb25zdCBkZWZhdWx0Q2hpbGQgPSBjaGlsZHJlbi5maW5kKChjKSA9PiBjLmlkID09PSB0aGlzLmRlZmF1bHRJZCk7XG4gICAgICBpZiAoZGVmYXVsdENoaWxkKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goeyAuLi5kZWZhdWx0Q2hpbGQsIGlkOiAnZGVmYXVsdCcgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJTcGVjLmJyYW5jaElkcyA9IGNoaWxkcmVuXG4gICAgICAubWFwKChjKSA9PiBjLmlkKVxuICAgICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyAmJiBpZC5sZW5ndGggPiAwKTtcbiAgICB0aGlzLmN1clNwZWMudHlwZSA9ICdkZWNpZGVyJztcblxuICAgIGlmICh0aGlzLnJlc2VydmVkU3RlcE51bWJlciA+IDApIHtcbiAgICAgIGNvbnN0IGRlY2lkZXJMYWJlbCA9IHRoaXMuY3VyTm9kZS5uYW1lO1xuICAgICAgY29uc3QgYnJhbmNoSWRMaXN0ID0gdGhpcy5icmFuY2hEZXNjSW5mby5tYXAoKGIpID0+IGIuaWQpLmpvaW4oJywgJyk7XG4gICAgICBjb25zdCBtYWluTGluZSA9IHRoaXMuZGVjaWRlckRlc2NyaXB0aW9uXG4gICAgICAgID8gYCR7dGhpcy5yZXNlcnZlZFN0ZXBOdW1iZXJ9LiAke2RlY2lkZXJMYWJlbH0g4oCUICR7dGhpcy5kZWNpZGVyRGVzY3JpcHRpb259YFxuICAgICAgICA6IGAke3RoaXMucmVzZXJ2ZWRTdGVwTnVtYmVyfS4gJHtkZWNpZGVyTGFiZWx9IOKAlCBEZWNpZGVzIGJldHdlZW46ICR7YnJhbmNoSWRMaXN0fWA7XG4gICAgICB0aGlzLnBhcmVudERlc2NyaXB0aW9uUGFydHMucHVzaChtYWluTGluZSk7XG5cbiAgICAgIGlmICh0aGlzLmRlY2lkZXJEZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnBhcmVudFN0YWdlRGVzY3JpcHRpb25zLnNldCh0aGlzLmN1ck5vZGUubmFtZSwgdGhpcy5kZWNpZGVyRGVzY3JpcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLmJyYW5jaERlc2NJbmZvKSB7XG4gICAgICAgIGNvbnN0IGJyYW5jaFRleHQgPSBicmFuY2guZGVzY3JpcHRpb247XG4gICAgICAgIGlmIChicmFuY2hUZXh0KSB7XG4gICAgICAgICAgdGhpcy5wYXJlbnREZXNjcmlwdGlvblBhcnRzLnB1c2goYCAgIOKGkiAke2JyYW5jaC5pZH06ICR7YnJhbmNoVGV4dH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnJhbmNoLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5wYXJlbnRTdGFnZURlc2NyaXB0aW9ucy5zZXQoYnJhbmNoLmlkLCBicmFuY2guZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYjtcbiAgfVxufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNlbGVjdG9yRm5MaXN0IChzY29wZS1iYXNlZCBzZWxlY3RvciDigJQgbWlycm9ycyBEZWNpZGVyTGlzdClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgU2VsZWN0b3JGbkxpc3Q8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYjogRmxvd0NoYXJ0QnVpbGRlcjxUT3V0LCBUU2NvcGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IGN1ck5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IGN1clNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudERlc2NyaXB0aW9uUGFydHM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudFN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc2VydmVkU3RlcE51bWJlcjogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdG9yRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoRGVzY0luZm86IEFycmF5PHsgaWQ6IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfT4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBidWlsZGVyOiBGbG93Q2hhcnRCdWlsZGVyPFRPdXQsIFRTY29wZT4sXG4gICAgY3VyTm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY3VyU3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLFxuICAgIHBhcmVudERlc2NyaXB0aW9uUGFydHM6IHN0cmluZ1tdID0gW10sXG4gICAgcGFyZW50U3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCksXG4gICAgcmVzZXJ2ZWRTdGVwTnVtYmVyID0gMCxcbiAgICBzZWxlY3RvckRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLmIgPSBidWlsZGVyO1xuICAgIHRoaXMuY3VyTm9kZSA9IGN1ck5vZGU7XG4gICAgdGhpcy5jdXJTcGVjID0gY3VyU3BlYztcbiAgICB0aGlzLnBhcmVudERlc2NyaXB0aW9uUGFydHMgPSBwYXJlbnREZXNjcmlwdGlvblBhcnRzO1xuICAgIHRoaXMucGFyZW50U3RhZ2VEZXNjcmlwdGlvbnMgPSBwYXJlbnRTdGFnZURlc2NyaXB0aW9ucztcbiAgICB0aGlzLnJlc2VydmVkU3RlcE51bWJlciA9IHJlc2VydmVkU3RlcE51bWJlcjtcbiAgICB0aGlzLnNlbGVjdG9yRGVzY3JpcHRpb24gPSBzZWxlY3RvckRlc2NyaXB0aW9uO1xuICB9XG5cbiAgYWRkRnVuY3Rpb25CcmFuY2goXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPixcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgKTogU2VsZWN0b3JGbkxpc3Q8VE91dCwgVFNjb3BlPiB7XG4gICAgaWYgKHRoaXMuYnJhbmNoSWRzLmhhcyhpZCkpIGZhaWwoYGR1cGxpY2F0ZSBzZWxlY3RvciBicmFuY2ggaWQgJyR7aWR9JyB1bmRlciAnJHt0aGlzLmN1ck5vZGUubmFtZX0nYCk7XG4gICAgdGhpcy5icmFuY2hJZHMuYWRkKGlkKTtcblxuICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0geyBuYW1lOiBuYW1lID8/IGlkLCBpZCB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgbm9kZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIGlmIChmbikge1xuICAgICAgbm9kZS5mbiA9IGZuO1xuICAgICAgdGhpcy5iLl9hZGRUb01hcChuYW1lLCBmbik7XG4gICAgfVxuXG4gICAgbGV0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHsgbmFtZTogbmFtZSA/PyBpZCwgaWQsIHR5cGU6ICdzdGFnZScgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHNwZWMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICBzcGVjID0gdGhpcy5iLl9hcHBseUV4dHJhY3RvclRvTm9kZShzcGVjKTtcblxuICAgIHRoaXMuY3VyTm9kZS5jaGlsZHJlbiA9IHRoaXMuY3VyTm9kZS5jaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmN1ck5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICB0aGlzLmN1clNwZWMuY2hpbGRyZW4gPSB0aGlzLmN1clNwZWMuY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5jdXJTcGVjLmNoaWxkcmVuLnB1c2goc3BlYyk7XG5cbiAgICB0aGlzLmJyYW5jaERlc2NJbmZvLnB1c2goeyBpZCwgZGVzY3JpcHRpb24gfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRTdWJGbG93Q2hhcnRCcmFuY2goXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdWJmbG93OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPixcbiAgICBtb3VudE5hbWU/OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gICk6IFNlbGVjdG9yRm5MaXN0PFRPdXQsIFRTY29wZT4ge1xuICAgIGlmICh0aGlzLmJyYW5jaElkcy5oYXMoaWQpKSBmYWlsKGBkdXBsaWNhdGUgc2VsZWN0b3IgYnJhbmNoIGlkICcke2lkfScgdW5kZXIgJyR7dGhpcy5jdXJOb2RlLm5hbWV9J2ApO1xuICAgIHRoaXMuYnJhbmNoSWRzLmFkZChpZCk7XG5cbiAgICBjb25zdCBzdWJmbG93TmFtZSA9IG1vdW50TmFtZSB8fCBpZDtcbiAgICBjb25zdCBwcmVmaXhlZFJvb3QgPSB0aGlzLmIuX3ByZWZpeE5vZGVUcmVlKHN1YmZsb3cucm9vdCwgaWQpO1xuXG4gICAgaWYgKCF0aGlzLmIuX3N1YmZsb3dEZWZzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMuYi5fc3ViZmxvd0RlZnMuc2V0KGlkLCB7IHJvb3Q6IHByZWZpeGVkUm9vdCB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHtcbiAgICAgIG5hbWU6IHN1YmZsb3dOYW1lLFxuICAgICAgaWQsXG4gICAgICBpc1N1YmZsb3dSb290OiB0cnVlLFxuICAgICAgc3ViZmxvd0lkOiBpZCxcbiAgICAgIHN1YmZsb3dOYW1lLFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMpIG5vZGUuc3ViZmxvd01vdW50T3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBzcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSB7XG4gICAgICBuYW1lOiBzdWJmbG93TmFtZSxcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICBpZCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICBzdWJmbG93SWQ6IGlkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgICBzdWJmbG93U3RydWN0dXJlOiBzdWJmbG93LmJ1aWxkVGltZVN0cnVjdHVyZSxcbiAgICB9O1xuXG4gICAgdGhpcy5jdXJOb2RlLmNoaWxkcmVuID0gdGhpcy5jdXJOb2RlLmNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuY3VyTm9kZS5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgIHRoaXMuY3VyU3BlYy5jaGlsZHJlbiA9IHRoaXMuY3VyU3BlYy5jaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmN1clNwZWMuY2hpbGRyZW4ucHVzaChzcGVjKTtcblxuICAgIHRoaXMuYi5fbWVyZ2VTdGFnZU1hcChzdWJmbG93LnN0YWdlTWFwLCBpZCk7XG4gICAgdGhpcy5iLl9tZXJnZVN1YmZsb3dzKHN1YmZsb3cuc3ViZmxvd3MsIGlkKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQnJhbmNoTGlzdChcbiAgICBicmFuY2hlczogQXJyYXk8e1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGZuPzogUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG4gICAgfT4sXG4gICk6IFNlbGVjdG9yRm5MaXN0PFRPdXQsIFRTY29wZT4ge1xuICAgIGZvciAoY29uc3QgeyBpZCwgbmFtZSwgZm4gfSBvZiBicmFuY2hlcykge1xuICAgICAgdGhpcy5hZGRGdW5jdGlvbkJyYW5jaChpZCwgbmFtZSwgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGVuZCgpOiBGbG93Q2hhcnRCdWlsZGVyPFRPdXQsIFRTY29wZT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jdXJOb2RlLmNoaWxkcmVuO1xuICAgIGlmICghY2hpbGRyZW4gfHwgY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFtGbG93Q2hhcnRCdWlsZGVyXSBzZWxlY3RvciBhdCAnJHt0aGlzLmN1ck5vZGUubmFtZX0nIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBicmFuY2hgKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1ck5vZGUuc2VsZWN0b3JGbiA9IHRydWU7XG5cbiAgICB0aGlzLmN1clNwZWMuYnJhbmNoSWRzID0gY2hpbGRyZW5cbiAgICAgIC5tYXAoKGMpID0+IGMuaWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnICYmIGlkLmxlbmd0aCA+IDApO1xuICAgIHRoaXMuY3VyU3BlYy50eXBlID0gJ2RlY2lkZXInO1xuICAgIHRoaXMuY3VyU3BlYy5oYXNTZWxlY3RvciA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5yZXNlcnZlZFN0ZXBOdW1iZXIgPiAwKSB7XG4gICAgICBjb25zdCBzZWxlY3RvckxhYmVsID0gdGhpcy5jdXJOb2RlLm5hbWU7XG4gICAgICBjb25zdCBicmFuY2hJZExpc3QgPSB0aGlzLmJyYW5jaERlc2NJbmZvLm1hcCgoYikgPT4gYi5pZCkuam9pbignLCAnKTtcbiAgICAgIGNvbnN0IG1haW5MaW5lID0gdGhpcy5zZWxlY3RvckRlc2NyaXB0aW9uXG4gICAgICAgID8gYCR7dGhpcy5yZXNlcnZlZFN0ZXBOdW1iZXJ9LiAke3NlbGVjdG9yTGFiZWx9IOKAlCAke3RoaXMuc2VsZWN0b3JEZXNjcmlwdGlvbn1gXG4gICAgICAgIDogYCR7dGhpcy5yZXNlcnZlZFN0ZXBOdW1iZXJ9LiAke3NlbGVjdG9yTGFiZWx9IOKAlCBTZWxlY3RzIGZyb206ICR7YnJhbmNoSWRMaXN0fWA7XG4gICAgICB0aGlzLnBhcmVudERlc2NyaXB0aW9uUGFydHMucHVzaChtYWluTGluZSk7XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdG9yRGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5wYXJlbnRTdGFnZURlc2NyaXB0aW9ucy5zZXQodGhpcy5jdXJOb2RlLm5hbWUsIHRoaXMuc2VsZWN0b3JEZXNjcmlwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHRoaXMuYnJhbmNoRGVzY0luZm8pIHtcbiAgICAgICAgY29uc3QgYnJhbmNoVGV4dCA9IGJyYW5jaC5kZXNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGJyYW5jaFRleHQpIHRoaXMucGFyZW50RGVzY3JpcHRpb25QYXJ0cy5wdXNoKGAgICDihpIgJHticmFuY2guaWR9OiAke2JyYW5jaFRleHR9YCk7XG4gICAgICAgIGlmIChicmFuY2guZGVzY3JpcHRpb24pIHRoaXMucGFyZW50U3RhZ2VEZXNjcmlwdGlvbnMuc2V0KGJyYW5jaC5pZCwgYnJhbmNoLmRlc2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iO1xuICB9XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0QnVpbGRlclxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBGbG93Q2hhcnRCdWlsZGVyPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBwcml2YXRlIF9yb290PzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHByaXZhdGUgX3Jvb3RTcGVjPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBwcml2YXRlIF9jdXJzb3I/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgcHJpdmF0ZSBfY3Vyc29yU3BlYz86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgcHJpdmF0ZSBfc3RhZ2VNYXAgPSBuZXcgTWFwPHN0cmluZywgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+KCk7XG4gIF9zdWJmbG93RGVmcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+KCk7XG4gIHByaXZhdGUgX3N0cmVhbUhhbmRsZXJzOiBTdHJlYW1IYW5kbGVycyA9IHt9O1xuICBwcml2YXRlIF9leHRyYWN0b3I/OiBUcmF2ZXJzYWxFeHRyYWN0b3I7XG4gIHByaXZhdGUgX2J1aWxkVGltZUV4dHJhY3Rvcj86IEJ1aWxkVGltZUV4dHJhY3Rvcjxhbnk+O1xuICBwcml2YXRlIF9idWlsZFRpbWVFeHRyYWN0b3JFcnJvcnM6IEFycmF5PHsgbWVzc2FnZTogc3RyaW5nOyBlcnJvcjogdW5rbm93biB9PiA9IFtdO1xuICBwcml2YXRlIF9lbmFibGVOYXJyYXRpdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbG9nZ2VyPzogSUxvZ2dlcjtcbiAgcHJpdmF0ZSBfZGVzY3JpcHRpb25QYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfc3RlcENvdW50ZXIgPSAwO1xuICBwcml2YXRlIF9zdGFnZURlc2NyaXB0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIHByaXZhdGUgX3N0YWdlU3RlcE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgX2lucHV0U2NoZW1hPzogdW5rbm93bjtcbiAgcHJpdmF0ZSBfb3V0cHV0U2NoZW1hPzogdW5rbm93bjtcbiAgcHJpdmF0ZSBfb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xuXG4gIGNvbnN0cnVjdG9yKGJ1aWxkVGltZUV4dHJhY3Rvcj86IEJ1aWxkVGltZUV4dHJhY3Rvcjxhbnk+KSB7XG4gICAgaWYgKGJ1aWxkVGltZUV4dHJhY3Rvcikge1xuICAgICAgdGhpcy5fYnVpbGRUaW1lRXh0cmFjdG9yID0gYnVpbGRUaW1lRXh0cmFjdG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBEZXNjcmlwdGlvbiBoZWxwZXJzIOKUgOKUgFxuXG4gIHByaXZhdGUgX2FwcGVuZERlc2NyaXB0aW9uTGluZShuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3RlcENvdW50ZXIrKztcbiAgICB0aGlzLl9zdGFnZVN0ZXBNYXAuc2V0KG5hbWUsIHRoaXMuX3N0ZXBDb3VudGVyKTtcbiAgICBjb25zdCBsaW5lID0gZGVzY3JpcHRpb24gPyBgJHt0aGlzLl9zdGVwQ291bnRlcn0uICR7bmFtZX0g4oCUICR7ZGVzY3JpcHRpb259YCA6IGAke3RoaXMuX3N0ZXBDb3VudGVyfS4gJHtuYW1lfWA7XG4gICAgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cy5wdXNoKGxpbmUpO1xuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fc3RhZ2VEZXNjcmlwdGlvbnMuc2V0KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBlbmRTdWJmbG93RGVzY3JpcHRpb24oaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBzdWJmbG93OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPik6IHZvaWQge1xuICAgIHRoaXMuX3N0ZXBDb3VudGVyKys7XG4gICAgdGhpcy5fc3RhZ2VTdGVwTWFwLnNldChpZCwgdGhpcy5fc3RlcENvdW50ZXIpO1xuICAgIGlmIChzdWJmbG93LmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kZXNjcmlwdGlvblBhcnRzLnB1c2goYCR7dGhpcy5fc3RlcENvdW50ZXJ9LiBbU3ViLUV4ZWN1dGlvbjogJHtuYW1lfV0g4oCUICR7c3ViZmxvdy5kZXNjcmlwdGlvbn1gKTtcbiAgICAgIGNvbnN0IGxpbmVzID0gc3ViZmxvdy5kZXNjcmlwdGlvbi5zcGxpdCgnXFxuJyk7XG4gICAgICBjb25zdCBzdGVwc0lkeCA9IGxpbmVzLmZpbmRJbmRleCgobCkgPT4gbC5zdGFydHNXaXRoKCdTdGVwczonKSk7XG4gICAgICBpZiAoc3RlcHNJZHggPj0gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gc3RlcHNJZHggKyAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAobGluZXNbaV0udHJpbSgpKSB0aGlzLl9kZXNjcmlwdGlvblBhcnRzLnB1c2goYCAgICR7bGluZXNbaV19YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cy5wdXNoKGAke3RoaXMuX3N0ZXBDb3VudGVyfS4gW1N1Yi1FeGVjdXRpb246ICR7bmFtZX1dYCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIENvbmZpZ3VyYXRpb24g4pSA4pSAXG5cbiAgc2V0RW5hYmxlTmFycmF0aXZlKCk6IHRoaXMge1xuICAgIHRoaXMuX2VuYWJsZU5hcnJhdGl2ZSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRMb2dnZXIobG9nZ2VyOiBJTG9nZ2VyKTogdGhpcyB7XG4gICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2VyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIERlY2xhcmUgdGhlIGlucHV0IHNjaGVtYSAocmVhZE9ubHlDb250ZXh0IHNoYXBlKS4gQWNjZXB0cyBab2Qgc2NoZW1hIG9yIEpTT04gU2NoZW1hLiAqL1xuICBzZXRJbnB1dFNjaGVtYShzY2hlbWE6IHVua25vd24pOiB0aGlzIHtcbiAgICB0aGlzLl9pbnB1dFNjaGVtYSA9IHNjaGVtYTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBEZWNsYXJlIHRoZSBvdXRwdXQgc2NoZW1hIChyZXNwb25zZSBzaGFwZSkuIEFjY2VwdHMgWm9kIHNjaGVtYSBvciBKU09OIFNjaGVtYS4gKi9cbiAgc2V0T3V0cHV0U2NoZW1hKHNjaGVtYTogdW5rbm93bik6IHRoaXMge1xuICAgIHRoaXMuX291dHB1dFNjaGVtYSA9IHNjaGVtYTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIG91dHB1dCBtYXBwZXIgdGhhdCBleHRyYWN0cyB0aGUgcmVzcG9uc2UgZnJvbSBmaW5hbCBzY29wZS4gKi9cbiAgc2V0T3V0cHV0TWFwcGVyKG1hcHBlcjogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duKTogdGhpcyB7XG4gICAgdGhpcy5fb3V0cHV0TWFwcGVyID0gbWFwcGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8g4pSA4pSAIExpbmVhciBDaGFpbmluZyDilIDilIBcblxuICBzdGFydChuYW1lOiBzdHJpbmcsIGZuOiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPiwgaWQ6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAodGhpcy5fcm9vdCkgZmFpbCgncm9vdCBhbHJlYWR5IGRlZmluZWQ7IGNyZWF0ZSBhIG5ldyBidWlsZGVyJyk7XG5cbiAgICBjb25zdCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHsgbmFtZSwgaWQsIGZuIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBub2RlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgdGhpcy5fYWRkVG9NYXAobmFtZSwgZm4pO1xuXG4gICAgbGV0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHsgbmFtZSwgaWQsIHR5cGU6ICdzdGFnZScgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHNwZWMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICBzcGVjID0gdGhpcy5fYXBwbHlFeHRyYWN0b3JUb05vZGUoc3BlYyk7XG5cbiAgICB0aGlzLl9yb290ID0gbm9kZTtcbiAgICB0aGlzLl9yb290U3BlYyA9IHNwZWM7XG4gICAgdGhpcy5fY3Vyc29yID0gbm9kZTtcbiAgICB0aGlzLl9jdXJzb3JTcGVjID0gc3BlYztcblxuICAgIHRoaXMuX2FwcGVuZERlc2NyaXB0aW9uTGluZShuYW1lLCBkZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRGdW5jdGlvbihuYW1lOiBzdHJpbmcsIGZuOiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPiwgaWQ6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLl9uZWVkQ3Vyc29yKCk7XG4gICAgY29uc3QgY3VyU3BlYyA9IHRoaXMuX25lZWRDdXJzb3JTcGVjKCk7XG5cbiAgICBjb25zdCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHsgbmFtZSwgaWQsIGZuIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBub2RlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgdGhpcy5fYWRkVG9NYXAobmFtZSwgZm4pO1xuXG4gICAgbGV0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHsgbmFtZSwgaWQsIHR5cGU6ICdzdGFnZScgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHNwZWMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICBzcGVjID0gdGhpcy5fYXBwbHlFeHRyYWN0b3JUb05vZGUoc3BlYyk7XG5cbiAgICBjdXIubmV4dCA9IG5vZGU7XG4gICAgY3VyU3BlYy5uZXh0ID0gc3BlYztcbiAgICB0aGlzLl9jdXJzb3IgPSBub2RlO1xuICAgIHRoaXMuX2N1cnNvclNwZWMgPSBzcGVjO1xuXG4gICAgdGhpcy5fYXBwZW5kRGVzY3JpcHRpb25MaW5lKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZFN0cmVhbWluZ0Z1bmN0aW9uKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmbjogUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdHJlYW1JZD86IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgKTogdGhpcyB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5fbmVlZEN1cnNvcigpO1xuICAgIGNvbnN0IGN1clNwZWMgPSB0aGlzLl9uZWVkQ3Vyc29yU3BlYygpO1xuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICBuYW1lLFxuICAgICAgaWQsXG4gICAgICBmbixcbiAgICAgIGlzU3RyZWFtaW5nOiB0cnVlLFxuICAgICAgc3RyZWFtSWQ6IHN0cmVhbUlkID8/IG5hbWUsXG4gICAgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIG5vZGUuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9hZGRUb01hcChuYW1lLCBmbik7XG5cbiAgICBsZXQgc3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGlkLFxuICAgICAgdHlwZTogJ3N0cmVhbWluZycsXG4gICAgICBpc1N0cmVhbWluZzogdHJ1ZSxcbiAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCA/PyBuYW1lLFxuICAgIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBzcGVjLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgc3BlYyA9IHRoaXMuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgY3VyLm5leHQgPSBub2RlO1xuICAgIGN1clNwZWMubmV4dCA9IHNwZWM7XG4gICAgdGhpcy5fY3Vyc29yID0gbm9kZTtcbiAgICB0aGlzLl9jdXJzb3JTcGVjID0gc3BlYztcblxuICAgIHRoaXMuX2FwcGVuZERlc2NyaXB0aW9uTGluZShuYW1lLCBkZXNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDilIDilIAgQnJhbmNoaW5nIOKUgOKUgFxuXG4gIGFkZERlY2lkZXJGdW5jdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZm46IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICk6IERlY2lkZXJMaXN0PFRPdXQsIFRTY29wZT4ge1xuICAgIGNvbnN0IGN1ciA9IHRoaXMuX25lZWRDdXJzb3IoKTtcbiAgICBjb25zdCBjdXJTcGVjID0gdGhpcy5fbmVlZEN1cnNvclNwZWMoKTtcblxuICAgIGlmIChjdXIuZGVjaWRlckZuKSBmYWlsKGBkZWNpZGVyIGFscmVhZHkgZGVmaW5lZCBhdCAnJHtjdXIubmFtZX0nYCk7XG5cbiAgICBjb25zdCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHsgbmFtZSwgaWQsIGZuIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBub2RlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgdGhpcy5fYWRkVG9NYXAobmFtZSwgZm4pO1xuXG4gICAgbGV0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHsgbmFtZSwgaWQsIHR5cGU6ICdzdGFnZScsIGhhc0RlY2lkZXI6IHRydWUgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHNwZWMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICBzcGVjID0gdGhpcy5fYXBwbHlFeHRyYWN0b3JUb05vZGUoc3BlYyk7XG5cbiAgICBjdXIubmV4dCA9IG5vZGU7XG4gICAgY3VyU3BlYy5uZXh0ID0gc3BlYztcbiAgICB0aGlzLl9jdXJzb3IgPSBub2RlO1xuICAgIHRoaXMuX2N1cnNvclNwZWMgPSBzcGVjO1xuXG4gICAgdGhpcy5fc3RlcENvdW50ZXIrKztcbiAgICB0aGlzLl9zdGFnZVN0ZXBNYXAuc2V0KG5hbWUsIHRoaXMuX3N0ZXBDb3VudGVyKTtcblxuICAgIHJldHVybiBuZXcgRGVjaWRlckxpc3Q8VE91dCwgVFNjb3BlPihcbiAgICAgIHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgc3BlYyxcbiAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uUGFydHMsXG4gICAgICB0aGlzLl9zdGFnZURlc2NyaXB0aW9ucyxcbiAgICAgIHRoaXMuX3N0ZXBDb3VudGVyLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgKTtcbiAgfVxuXG4gIGFkZFNlbGVjdG9yRnVuY3Rpb24oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZuOiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPixcbiAgICBpZDogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICApOiBTZWxlY3RvckZuTGlzdDxUT3V0LCBUU2NvcGU+IHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLl9uZWVkQ3Vyc29yKCk7XG4gICAgY29uc3QgY3VyU3BlYyA9IHRoaXMuX25lZWRDdXJzb3JTcGVjKCk7XG5cbiAgICBpZiAoY3VyLnNlbGVjdG9yRm4pIGZhaWwoYHNlbGVjdG9yIGFscmVhZHkgZGVmaW5lZCBhdCAnJHtjdXIubmFtZX0nYCk7XG4gICAgaWYgKGN1ci5kZWNpZGVyRm4pIGZhaWwoYGRlY2lkZXIgYW5kIHNlbGVjdG9yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYXQgJyR7Y3VyLm5hbWV9J2ApO1xuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7IG5hbWUsIGlkLCBmbiB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgbm9kZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2FkZFRvTWFwKG5hbWUsIGZuKTtcblxuICAgIGxldCBzcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSB7IG5hbWUsIGlkLCB0eXBlOiAnc3RhZ2UnLCBoYXNTZWxlY3RvcjogdHJ1ZSB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgc3BlYy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHNwZWMgPSB0aGlzLl9hcHBseUV4dHJhY3RvclRvTm9kZShzcGVjKTtcblxuICAgIGN1ci5uZXh0ID0gbm9kZTtcbiAgICBjdXJTcGVjLm5leHQgPSBzcGVjO1xuICAgIHRoaXMuX2N1cnNvciA9IG5vZGU7XG4gICAgdGhpcy5fY3Vyc29yU3BlYyA9IHNwZWM7XG5cbiAgICB0aGlzLl9zdGVwQ291bnRlcisrO1xuICAgIHRoaXMuX3N0YWdlU3RlcE1hcC5zZXQobmFtZSwgdGhpcy5fc3RlcENvdW50ZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3RvckZuTGlzdDxUT3V0LCBUU2NvcGU+KFxuICAgICAgdGhpcyxcbiAgICAgIG5vZGUsXG4gICAgICBzcGVjLFxuICAgICAgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cyxcbiAgICAgIHRoaXMuX3N0YWdlRGVzY3JpcHRpb25zLFxuICAgICAgdGhpcy5fc3RlcENvdW50ZXIsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICApO1xuICB9XG5cbiAgLy8g4pSA4pSAIFBhcmFsbGVsIChGb3JrKSDilIDilIBcblxuICBhZGRMaXN0T2ZGdW5jdGlvbihjaGlsZHJlbjogU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0LCBUU2NvcGU+W10sIG9wdGlvbnM/OiB7IGZhaWxGYXN0PzogYm9vbGVhbiB9KTogdGhpcyB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5fbmVlZEN1cnNvcigpO1xuICAgIGNvbnN0IGN1clNwZWMgPSB0aGlzLl9uZWVkQ3Vyc29yU3BlYygpO1xuICAgIGNvbnN0IGZvcmtJZCA9IGN1ci5pZCA/PyBjdXIubmFtZTtcblxuICAgIGN1clNwZWMudHlwZSA9ICdmb3JrJztcbiAgICBpZiAob3B0aW9ucz8uZmFpbEZhc3QpIGN1ci5mYWlsRmFzdCA9IHRydWU7XG5cbiAgICBmb3IgKGNvbnN0IHsgaWQsIG5hbWUsIGZuIH0gb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmICghaWQpIGZhaWwoYGNoaWxkIGlkIHJlcXVpcmVkIHVuZGVyICcke2N1ci5uYW1lfSdgKTtcbiAgICAgIGlmIChjdXIuY2hpbGRyZW4/LnNvbWUoKGMpID0+IGMuaWQgPT09IGlkKSkge1xuICAgICAgICBmYWlsKGBkdXBsaWNhdGUgY2hpbGQgaWQgJyR7aWR9JyB1bmRlciAnJHtjdXIubmFtZX0nYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0geyBuYW1lOiBuYW1lID8/IGlkLCBpZCB9O1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIG5vZGUuZm4gPSBmbjtcbiAgICAgICAgdGhpcy5fYWRkVG9NYXAobmFtZSwgZm4pO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0ge1xuICAgICAgICBuYW1lOiBuYW1lID8/IGlkLFxuICAgICAgICBpZCxcbiAgICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgICAgaXNQYXJhbGxlbENoaWxkOiB0cnVlLFxuICAgICAgICBwYXJhbGxlbEdyb3VwSWQ6IGZvcmtJZCxcbiAgICAgIH07XG4gICAgICBzcGVjID0gdGhpcy5fYXBwbHlFeHRyYWN0b3JUb05vZGUoc3BlYyk7XG5cbiAgICAgIGN1ci5jaGlsZHJlbiA9IGN1ci5jaGlsZHJlbiB8fCBbXTtcbiAgICAgIGN1ci5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgY3VyU3BlYy5jaGlsZHJlbiA9IGN1clNwZWMuY2hpbGRyZW4gfHwgW107XG4gICAgICBjdXJTcGVjLmNoaWxkcmVuLnB1c2goc3BlYyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGROYW1lcyA9IGNoaWxkcmVuLm1hcCgoYykgPT4gYy5uYW1lIHx8IGMuaWQpLmpvaW4oJywgJyk7XG4gICAgdGhpcy5fc3RlcENvdW50ZXIrKztcbiAgICB0aGlzLl9kZXNjcmlwdGlvblBhcnRzLnB1c2goYCR7dGhpcy5fc3RlcENvdW50ZXJ9LiBSdW5zIGluIHBhcmFsbGVsOiAke2NoaWxkTmFtZXN9YCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOKUgOKUgCBTdWJmbG93IE1vdW50aW5nIOKUgOKUgFxuXG4gIGFkZFN1YkZsb3dDaGFydChcbiAgICBpZDogc3RyaW5nLFxuICAgIHN1YmZsb3c6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+LFxuICAgIG1vdW50TmFtZT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9ucyxcbiAgKTogdGhpcyB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5fbmVlZEN1cnNvcigpO1xuICAgIGNvbnN0IGN1clNwZWMgPSB0aGlzLl9uZWVkQ3Vyc29yU3BlYygpO1xuXG4gICAgaWYgKGN1ci5jaGlsZHJlbj8uc29tZSgoYykgPT4gYy5pZCA9PT0gaWQpKSB7XG4gICAgICBmYWlsKGBkdXBsaWNhdGUgY2hpbGQgaWQgJyR7aWR9JyB1bmRlciAnJHtjdXIubmFtZX0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViZmxvd05hbWUgPSBtb3VudE5hbWUgfHwgaWQ7XG4gICAgY29uc3QgZm9ya0lkID0gY3VyLmlkID8/IGN1ci5uYW1lO1xuICAgIGNvbnN0IHByZWZpeGVkUm9vdCA9IHRoaXMuX3ByZWZpeE5vZGVUcmVlKHN1YmZsb3cucm9vdCwgaWQpO1xuXG4gICAgaWYgKCF0aGlzLl9zdWJmbG93RGVmcy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLl9zdWJmbG93RGVmcy5zZXQoaWQsIHsgcm9vdDogcHJlZml4ZWRSb290IH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0ge1xuICAgICAgbmFtZTogc3ViZmxvd05hbWUsXG4gICAgICBpZCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICBzdWJmbG93SWQ6IGlkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucykgbm9kZS5zdWJmbG93TW91bnRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGxldCBzcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSB7XG4gICAgICBuYW1lOiBzdWJmbG93TmFtZSxcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICBpZCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICBzdWJmbG93SWQ6IGlkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgICBpc1BhcmFsbGVsQ2hpbGQ6IHRydWUsXG4gICAgICBwYXJhbGxlbEdyb3VwSWQ6IGZvcmtJZCxcbiAgICAgIHN1YmZsb3dTdHJ1Y3R1cmU6IHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlLFxuICAgIH07XG4gICAgc3BlYyA9IHRoaXMuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgY3VyU3BlYy50eXBlID0gJ2ZvcmsnO1xuICAgIGN1ci5jaGlsZHJlbiA9IGN1ci5jaGlsZHJlbiB8fCBbXTtcbiAgICBjdXIuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICBjdXJTcGVjLmNoaWxkcmVuID0gY3VyU3BlYy5jaGlsZHJlbiB8fCBbXTtcbiAgICBjdXJTcGVjLmNoaWxkcmVuLnB1c2goc3BlYyk7XG5cbiAgICB0aGlzLl9tZXJnZVN0YWdlTWFwKHN1YmZsb3cuc3RhZ2VNYXAsIGlkKTtcbiAgICB0aGlzLl9tZXJnZVN1YmZsb3dzKHN1YmZsb3cuc3ViZmxvd3MsIGlkKTtcbiAgICB0aGlzLl9hcHBlbmRTdWJmbG93RGVzY3JpcHRpb24oaWQsIHN1YmZsb3dOYW1lLCBzdWJmbG93KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkU3ViRmxvd0NoYXJ0TmV4dChcbiAgICBpZDogc3RyaW5nLFxuICAgIHN1YmZsb3c6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+LFxuICAgIG1vdW50TmFtZT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9ucyxcbiAgKTogdGhpcyB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5fbmVlZEN1cnNvcigpO1xuICAgIGNvbnN0IGN1clNwZWMgPSB0aGlzLl9uZWVkQ3Vyc29yU3BlYygpO1xuXG4gICAgaWYgKGN1ci5uZXh0KSB7XG4gICAgICBmYWlsKGBjYW5ub3QgYWRkIHN1YmZsb3cgYXMgbmV4dCB3aGVuIG5leHQgaXMgYWxyZWFkeSBkZWZpbmVkIGF0ICcke2N1ci5uYW1lfSdgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJmbG93TmFtZSA9IG1vdW50TmFtZSB8fCBpZDtcbiAgICBjb25zdCBwcmVmaXhlZFJvb3QgPSB0aGlzLl9wcmVmaXhOb2RlVHJlZShzdWJmbG93LnJvb3QsIGlkKTtcblxuICAgIGlmICghdGhpcy5fc3ViZmxvd0RlZnMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5fc3ViZmxvd0RlZnMuc2V0KGlkLCB7IHJvb3Q6IHByZWZpeGVkUm9vdCB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHtcbiAgICAgIG5hbWU6IHN1YmZsb3dOYW1lLFxuICAgICAgaWQsXG4gICAgICBpc1N1YmZsb3dSb290OiB0cnVlLFxuICAgICAgc3ViZmxvd0lkOiBpZCxcbiAgICAgIHN1YmZsb3dOYW1lLFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMpIG5vZGUuc3ViZmxvd01vdW50T3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBsZXQgYXR0YWNoZWRTcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSB7XG4gICAgICBuYW1lOiBzdWJmbG93TmFtZSxcbiAgICAgIHR5cGU6ICdzdGFnZScsXG4gICAgICBpZCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICBzdWJmbG93SWQ6IGlkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgICBzdWJmbG93U3RydWN0dXJlOiBzdWJmbG93LmJ1aWxkVGltZVN0cnVjdHVyZSxcbiAgICB9O1xuICAgIGF0dGFjaGVkU3BlYyA9IHRoaXMuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKGF0dGFjaGVkU3BlYyk7XG5cbiAgICBjdXIubmV4dCA9IG5vZGU7XG4gICAgY3VyU3BlYy5uZXh0ID0gYXR0YWNoZWRTcGVjO1xuICAgIHRoaXMuX2N1cnNvciA9IG5vZGU7XG4gICAgdGhpcy5fY3Vyc29yU3BlYyA9IGF0dGFjaGVkU3BlYztcblxuICAgIHRoaXMuX21lcmdlU3RhZ2VNYXAoc3ViZmxvdy5zdGFnZU1hcCwgaWQpO1xuICAgIHRoaXMuX21lcmdlU3ViZmxvd3Moc3ViZmxvdy5zdWJmbG93cywgaWQpO1xuICAgIHRoaXMuX2FwcGVuZFN1YmZsb3dEZXNjcmlwdGlvbihpZCwgc3ViZmxvd05hbWUsIHN1YmZsb3cpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDilIDilIAgTG9vcCDilIDilIBcblxuICBsb29wVG8oc3RhZ2VJZDogc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5fbmVlZEN1cnNvcigpO1xuICAgIGNvbnN0IGN1clNwZWMgPSB0aGlzLl9uZWVkQ3Vyc29yU3BlYygpO1xuXG4gICAgaWYgKGN1clNwZWMubG9vcFRhcmdldCkgZmFpbChgbG9vcFRvIGFscmVhZHkgZGVmaW5lZCBhdCAnJHtjdXIubmFtZX0nYCk7XG4gICAgaWYgKGN1ci5uZXh0KSBmYWlsKGBjYW5ub3Qgc2V0IGxvb3BUbyB3aGVuIG5leHQgaXMgYWxyZWFkeSBkZWZpbmVkIGF0ICcke2N1ci5uYW1lfSdgKTtcblxuICAgIGN1ci5uZXh0ID0geyBuYW1lOiBzdGFnZUlkLCBpZDogc3RhZ2VJZCB9O1xuICAgIGN1clNwZWMubG9vcFRhcmdldCA9IHN0YWdlSWQ7XG4gICAgY3VyU3BlYy5uZXh0ID0geyBuYW1lOiBzdGFnZUlkLCBpZDogc3RhZ2VJZCwgdHlwZTogJ3N0YWdlJyB9O1xuXG4gICAgY29uc3QgdGFyZ2V0U3RlcCA9IHRoaXMuX3N0YWdlU3RlcE1hcC5nZXQoc3RhZ2VJZCk7XG4gICAgaWYgKHRhcmdldFN0ZXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cy5wdXNoKGDihpIgbG9vcHMgYmFjayB0byBzdGVwICR7dGFyZ2V0U3RlcH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cy5wdXNoKGDihpIgbG9vcHMgYmFjayB0byAke3N0YWdlSWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDilIDilIAgU3RyZWFtaW5nIOKUgOKUgFxuXG4gIG9uU3RyZWFtKGhhbmRsZXI6IFN0cmVhbVRva2VuSGFuZGxlcik6IHRoaXMge1xuICAgIHRoaXMuX3N0cmVhbUhhbmRsZXJzLm9uVG9rZW4gPSBoYW5kbGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb25TdHJlYW1TdGFydChoYW5kbGVyOiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyKTogdGhpcyB7XG4gICAgdGhpcy5fc3RyZWFtSGFuZGxlcnMub25TdGFydCA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvblN0cmVhbUVuZChoYW5kbGVyOiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyKTogdGhpcyB7XG4gICAgdGhpcy5fc3RyZWFtSGFuZGxlcnMub25FbmQgPSBoYW5kbGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8g4pSA4pSAIEV4dHJhY3RvcnMg4pSA4pSAXG5cbiAgYWRkVHJhdmVyc2FsRXh0cmFjdG9yPFRSZXN1bHQgPSB1bmtub3duPihleHRyYWN0b3I6IFRyYXZlcnNhbEV4dHJhY3RvcjxUUmVzdWx0Pik6IHRoaXMge1xuICAgIHRoaXMuX2V4dHJhY3RvciA9IGV4dHJhY3RvcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZEJ1aWxkVGltZUV4dHJhY3RvcjxUUmVzdWx0ID0gRmxvd0NoYXJ0U3BlYz4oZXh0cmFjdG9yOiBCdWlsZFRpbWVFeHRyYWN0b3I8VFJlc3VsdD4pOiB0aGlzIHtcbiAgICB0aGlzLl9idWlsZFRpbWVFeHRyYWN0b3IgPSBleHRyYWN0b3I7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRCdWlsZFRpbWVFeHRyYWN0b3JFcnJvcnMoKTogQXJyYXk8eyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiB1bmtub3duIH0+IHtcbiAgICByZXR1cm4gdGhpcy5fYnVpbGRUaW1lRXh0cmFjdG9yRXJyb3JzO1xuICB9XG5cbiAgLy8g4pSA4pSAIE91dHB1dCDilIDilIBcblxuICBidWlsZCgpOiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPiB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMuX3Jvb3QgPz8gZmFpbCgnZW1wdHkgdHJlZTsgY2FsbCBzdGFydCgpIGZpcnN0Jyk7XG4gICAgY29uc3Qgcm9vdFNwZWMgPSB0aGlzLl9yb290U3BlYyA/PyBmYWlsKCdlbXB0eSBzcGVjOyBjYWxsIHN0YXJ0KCkgZmlyc3QnKTtcblxuICAgIGNvbnN0IHN1YmZsb3dzOiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCBkZWZdIG9mIHRoaXMuX3N1YmZsb3dEZWZzKSB7XG4gICAgICBzdWJmbG93c1trZXldID0gZGVmO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3ROYW1lID0gdGhpcy5fcm9vdD8ubmFtZSA/PyAnRmxvd0NoYXJ0JztcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9XG4gICAgICB0aGlzLl9kZXNjcmlwdGlvblBhcnRzLmxlbmd0aCA+IDAgPyBgRmxvd0NoYXJ0OiAke3Jvb3ROYW1lfVxcblN0ZXBzOlxcbiR7dGhpcy5fZGVzY3JpcHRpb25QYXJ0cy5qb2luKCdcXG4nKX1gIDogJyc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm9vdCxcbiAgICAgIHN0YWdlTWFwOiB0aGlzLl9zdGFnZU1hcCxcbiAgICAgIGV4dHJhY3RvcjogdGhpcy5fZXh0cmFjdG9yLFxuICAgICAgYnVpbGRUaW1lU3RydWN0dXJlOiByb290U3BlYyxcbiAgICAgIC4uLihPYmplY3Qua2V5cyhzdWJmbG93cykubGVuZ3RoID4gMCA/IHsgc3ViZmxvd3MgfSA6IHt9KSxcbiAgICAgIC4uLih0aGlzLl9lbmFibGVOYXJyYXRpdmUgPyB7IGVuYWJsZU5hcnJhdGl2ZTogdHJ1ZSB9IDoge30pLFxuICAgICAgLi4uKHRoaXMuX2xvZ2dlciA/IHsgbG9nZ2VyOiB0aGlzLl9sb2dnZXIgfSA6IHt9KSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc3RhZ2VEZXNjcmlwdGlvbnM6IG5ldyBNYXAodGhpcy5fc3RhZ2VEZXNjcmlwdGlvbnMpLFxuICAgICAgLi4uKHRoaXMuX2lucHV0U2NoZW1hID8geyBpbnB1dFNjaGVtYTogdGhpcy5faW5wdXRTY2hlbWEgfSA6IHt9KSxcbiAgICAgIC4uLih0aGlzLl9vdXRwdXRTY2hlbWEgPyB7IG91dHB1dFNjaGVtYTogdGhpcy5fb3V0cHV0U2NoZW1hIH0gOiB7fSksXG4gICAgICAuLi4odGhpcy5fb3V0cHV0TWFwcGVyID8geyBvdXRwdXRNYXBwZXI6IHRoaXMuX291dHB1dE1hcHBlciB9IDoge30pLFxuICAgIH07XG4gIH1cblxuICB0b1NwZWM8VFJlc3VsdCA9IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZT4oKTogVFJlc3VsdCB7XG4gICAgY29uc3Qgcm9vdFNwZWMgPSB0aGlzLl9yb290U3BlYyA/PyBmYWlsKCdlbXB0eSB0cmVlOyBjYWxsIHN0YXJ0KCkgZmlyc3QnKTtcbiAgICByZXR1cm4gcm9vdFNwZWMgYXMgVFJlc3VsdDtcbiAgfVxuXG4gIHRvTWVybWFpZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFsnZmxvd2NoYXJ0IFREJ107XG4gICAgY29uc3QgaWRPZiA9IChrOiBzdHJpbmcpID0+IChrIHx8ICcnKS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csICdfJykgfHwgJ18nO1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9yb290ID8/IGZhaWwoJ2VtcHR5IHRyZWU7IGNhbGwgc3RhcnQoKSBmaXJzdCcpO1xuXG4gICAgY29uc3Qgd2FsayA9IChuOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPikgPT4ge1xuICAgICAgY29uc3QgbmlkID0gaWRPZihuLmlkID8/IG4ubmFtZSk7XG4gICAgICBsaW5lcy5wdXNoKGAke25pZH1bXCIke24ubmFtZX1cIl1gKTtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBuLmNoaWxkcmVuIHx8IFtdKSB7XG4gICAgICAgIGNvbnN0IGNpZCA9IGlkT2YoYy5pZCA/PyBjLm5hbWUpO1xuICAgICAgICBsaW5lcy5wdXNoKGAke25pZH0gLS0+ICR7Y2lkfWApO1xuICAgICAgICB3YWxrKGMpO1xuICAgICAgfVxuICAgICAgaWYgKG4ubmV4dCkge1xuICAgICAgICBjb25zdCBtaWQgPSBpZE9mKG4ubmV4dC5pZCA/PyBuLm5leHQubmFtZSk7XG4gICAgICAgIGxpbmVzLnB1c2goYCR7bmlkfSAtLT4gJHttaWR9YCk7XG4gICAgICAgIHdhbGsobi5uZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdhbGsocm9vdCk7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyAoZXhwb3NlZCBmb3IgaGVscGVyIGNsYXNzZXMpIOKUgOKUgFxuXG4gIHByaXZhdGUgX25lZWRDdXJzb3IoKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4ge1xuICAgIHJldHVybiB0aGlzLl9jdXJzb3IgPz8gZmFpbCgnY3Vyc29yIHVuZGVmaW5lZDsgY2FsbCBzdGFydCgpIGZpcnN0Jyk7XG4gIH1cblxuICBwcml2YXRlIF9uZWVkQ3Vyc29yU3BlYygpOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICAgIHJldHVybiB0aGlzLl9jdXJzb3JTcGVjID8/IGZhaWwoJ2N1cnNvciB1bmRlZmluZWQ7IGNhbGwgc3RhcnQoKSBmaXJzdCcpO1xuICB9XG5cbiAgX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSk6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9idWlsZFRpbWVFeHRyYWN0b3IpIHJldHVybiBzcGVjO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fYnVpbGRUaW1lRXh0cmFjdG9yKHNwZWMgYXMgYW55KSBhcyBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhpcy5fYnVpbGRUaW1lRXh0cmFjdG9yRXJyb3JzLnB1c2goe1xuICAgICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSA/PyBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBlcnJvcixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNwZWM7XG4gICAgfVxuICB9XG5cbiAgX2FkZFRvTWFwKG5hbWU6IHN0cmluZywgZm46IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+KSB7XG4gICAgaWYgKHRoaXMuX3N0YWdlTWFwLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLl9zdGFnZU1hcC5nZXQobmFtZSk7XG4gICAgICBpZiAoZXhpc3RpbmcgIT09IGZuKSBmYWlsKGBzdGFnZU1hcCBjb2xsaXNpb24gZm9yICcke25hbWV9J2ApO1xuICAgIH1cbiAgICB0aGlzLl9zdGFnZU1hcC5zZXQobmFtZSwgZm4pO1xuICB9XG5cbiAgX21lcmdlU3RhZ2VNYXAob3RoZXI6IE1hcDxzdHJpbmcsIFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PiwgcHJlZml4Pzogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2Ygb3RoZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHByZWZpeCA/IGAke3ByZWZpeH0vJHtrfWAgOiBrO1xuICAgICAgaWYgKHRoaXMuX3N0YWdlTWFwLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fc3RhZ2VNYXAuZ2V0KGtleSk7XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdikgZmFpbChgc3RhZ2VNYXAgY29sbGlzaW9uIHdoaWxlIG1vdW50aW5nIGZsb3djaGFydCBhdCAnJHtrZXl9J2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3RhZ2VNYXAuc2V0KGtleSwgdik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3ByZWZpeE5vZGVUcmVlKG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBwcmVmaXg6IHN0cmluZyk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHtcbiAgICBpZiAoIW5vZGUpIHJldHVybiBub2RlO1xuICAgIGNvbnN0IGNsb25lOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHsgLi4ubm9kZSB9O1xuICAgIGNsb25lLm5hbWUgPSBgJHtwcmVmaXh9LyR7bm9kZS5uYW1lfWA7XG4gICAgaWYgKGNsb25lLnN1YmZsb3dJZCkgY2xvbmUuc3ViZmxvd0lkID0gYCR7cHJlZml4fS8ke2Nsb25lLnN1YmZsb3dJZH1gO1xuICAgIGlmIChjbG9uZS5uZXh0KSBjbG9uZS5uZXh0ID0gdGhpcy5fcHJlZml4Tm9kZVRyZWUoY2xvbmUubmV4dCwgcHJlZml4KTtcbiAgICBpZiAoY2xvbmUuY2hpbGRyZW4pIHtcbiAgICAgIGNsb25lLmNoaWxkcmVuID0gY2xvbmUuY2hpbGRyZW4ubWFwKChjKSA9PiB0aGlzLl9wcmVmaXhOb2RlVHJlZShjLCBwcmVmaXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgX21lcmdlU3ViZmxvd3Moc3ViZmxvd3M6IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT4gfCB1bmRlZmluZWQsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgaWYgKCFzdWJmbG93cykgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgW2tleSwgZGVmXSBvZiBPYmplY3QuZW50cmllcyhzdWJmbG93cykpIHtcbiAgICAgIGNvbnN0IHByZWZpeGVkS2V5ID0gYCR7cHJlZml4fS8ke2tleX1gO1xuICAgICAgaWYgKCF0aGlzLl9zdWJmbG93RGVmcy5oYXMocHJlZml4ZWRLZXkpKSB7XG4gICAgICAgIHRoaXMuX3N1YmZsb3dEZWZzLnNldChwcmVmaXhlZEtleSwge1xuICAgICAgICAgIHJvb3Q6IHRoaXMuX3ByZWZpeE5vZGVUcmVlKGRlZi5yb290IGFzIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBwcmVmaXgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGYWN0b3J5IEZ1bmN0aW9uXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+KFxuICBuYW1lOiBzdHJpbmcsXG4gIGZuOiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPixcbiAgaWQ6IHN0cmluZyxcbiAgYnVpbGRUaW1lRXh0cmFjdG9yPzogQnVpbGRUaW1lRXh0cmFjdG9yPGFueT4sXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuKTogRmxvd0NoYXJ0QnVpbGRlcjxUT3V0LCBUU2NvcGU+IHtcbiAgcmV0dXJuIG5ldyBGbG93Q2hhcnRCdWlsZGVyPFRPdXQsIFRTY29wZT4oYnVpbGRUaW1lRXh0cmFjdG9yKS5zdGFydChuYW1lLCBmbiwgaWQsIGRlc2NyaXB0aW9uKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTcGVjIHRvIFN0YWdlTm9kZSBDb252ZXJ0ZXJcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gc3BlY1RvU3RhZ2VOb2RlKHNwZWM6IEZsb3dDaGFydFNwZWMpOiBTdGFnZU5vZGU8YW55LCBhbnk+IHtcbiAgY29uc3QgaW5mbGF0ZSA9IChzOiBGbG93Q2hhcnRTcGVjKTogU3RhZ2VOb2RlPGFueSwgYW55PiA9PiAoe1xuICAgIG5hbWU6IHMubmFtZSxcbiAgICBpZDogcy5pZCA/PyBzLm5hbWUsXG4gICAgY2hpbGRyZW46IHMuY2hpbGRyZW4/Lmxlbmd0aCA/IHMuY2hpbGRyZW4ubWFwKGluZmxhdGUpIDogdW5kZWZpbmVkLFxuICAgIG5leHQ6IHMubmV4dCA/IGluZmxhdGUocy5uZXh0KSA6IHVuZGVmaW5lZCxcbiAgfSk7XG4gIHJldHVybiBpbmZsYXRlKHNwZWMpO1xufVxuIl19
758
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd0NoYXJ0QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYnVpbGRlci9GbG93Q2hhcnRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQWtCSCxnRkFBZ0Y7QUFDaEYsbUJBQW1CO0FBQ25CLGdGQUFnRjtBQUVoRixNQUFNLElBQUksR0FBRyxDQUFDLEdBQVcsRUFBUyxFQUFFO0lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUYsZ0ZBQWdGO0FBQ2hGLGNBQWM7QUFDZCxnRkFBZ0Y7QUFFaEY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFhdEIsWUFDRSxPQUF1QyxFQUN2QyxPQUFnQyxFQUNoQyxPQUFvQyxFQUNwQyx5QkFBbUMsRUFBRSxFQUNyQywwQkFBK0MsSUFBSSxHQUFHLEVBQUUsRUFDeEQsa0JBQWtCLEdBQUcsQ0FBQyxFQUN0QixrQkFBMkI7UUFoQlosY0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFPOUIsbUJBQWMsR0FBZ0QsRUFBRSxDQUFDO1FBV2hGLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUMvQyxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsRUFBVSxFQUNWLElBQVksRUFDWixFQUF3QyxFQUN4QyxXQUFv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LENBQUM7WUFDMUQsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osRUFBRSxFQUFFLE1BQUEsQ0FBQyxDQUFDLEVBQUUsbUNBQUksQ0FBQyxDQUFDLElBQUk7WUFDbEIsUUFBUSxFQUFFLENBQUEsTUFBQSxDQUFDLENBQUMsUUFBUSwwQ0FBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ2xFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzNDLENBQUMsQ0FBQTtLQUFBLENBQUM7SUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGbG93Q2hhcnRCdWlsZGVyIOKAlCBGbHVlbnQgQVBJIGZvciBjb25zdHJ1Y3RpbmcgZmxvd2NoYXJ0IGV4ZWN1dGlvbiBncmFwaHMuXG4gKlxuICogQnVpbGRzIFN0YWdlTm9kZSB0cmVlcyBhbmQgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIChKU09OKSBpbiB0YW5kZW0uXG4gKiBaZXJvIGRlcGVuZGVuY2llcyBvbiBvbGQgY29kZSDigJQgb25seSBpbXBvcnRzIGZyb20gbG9jYWwgdHlwZXMuXG4gKlxuICogVGhlIGJ1aWxkZXIgY3JlYXRlcyB0d28gcGFyYWxsZWwgc3RydWN0dXJlczpcbiAqIDEuIFN0YWdlTm9kZSB0cmVlIOKAlCBydW50aW1lIGdyYXBoIHdpdGggZW1iZWRkZWQgZnVuY3Rpb25zXG4gKiAyLiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUg4oCUIEpTT04tc2FmZSBzdHJ1Y3R1cmUgZm9yIHZpc3VhbGl6YXRpb25cbiAqXG4gKiBUaGUgZXhlY3V0ZSgpIGNvbnZlbmllbmNlIG1ldGhvZCBpcyBpbnRlbnRpb25hbGx5IG9taXR0ZWQg4oCUXG4gKiBpdCBiZWxvbmdzIGluIHRoZSBydW5uZXIgbGF5ZXIgKFBoYXNlIDUpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQnVpbGRUaW1lRXh0cmFjdG9yLFxuICBGbG93Q2hhcnQsXG4gIEZsb3dDaGFydFNwZWMsXG4gIElMb2dnZXIsXG4gIFBpcGVsaW5lU3RhZ2VGdW5jdGlvbixcbiAgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLFxuICBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjLFxuICBTdGFnZU5vZGUsXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gIFRyYXZlcnNhbEV4dHJhY3Rvcixcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSW50ZXJuYWwgaGVscGVyc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IGZhaWwgPSAobXNnOiBzdHJpbmcpOiBuZXZlciA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihgW0Zsb3dDaGFydEJ1aWxkZXJdICR7bXNnfWApO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBEZWNpZGVyTGlzdFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRmx1ZW50IGhlbHBlciByZXR1cm5lZCBieSBhZGREZWNpZGVyRnVuY3Rpb24gdG8gYWRkIGJyYW5jaGVzLlxuICogYGVuZCgpYCBzZXRzIGBkZWNpZGVyRm4gPSB0cnVlYCDigJQgdGhlIGZuIElTIHRoZSBkZWNpZGVyLlxuICovXG5leHBvcnQgY2xhc3MgRGVjaWRlckxpc3Q8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYjogRmxvd0NoYXJ0QnVpbGRlcjxUT3V0LCBUU2NvcGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IGN1ck5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IGN1clNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBkZWZhdWx0SWQ/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnREZXNjcmlwdGlvblBhcnRzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRTdGFnZURlc2NyaXB0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNlcnZlZFN0ZXBOdW1iZXI6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWNpZGVyRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoRGVzY0luZm86IEFycmF5PHsgaWQ6IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfT4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBidWlsZGVyOiBGbG93Q2hhcnRCdWlsZGVyPFRPdXQsIFRTY29wZT4sXG4gICAgY3VyTm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY3VyU3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLFxuICAgIHBhcmVudERlc2NyaXB0aW9uUGFydHM6IHN0cmluZ1tdID0gW10sXG4gICAgcGFyZW50U3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKCksXG4gICAgcmVzZXJ2ZWRTdGVwTnVtYmVyID0gMCxcbiAgICBkZWNpZGVyRGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuYiA9IGJ1aWxkZXI7XG4gICAgdGhpcy5jdXJOb2RlID0gY3VyTm9kZTtcbiAgICB0aGlzLmN1clNwZWMgPSBjdXJTcGVjO1xuICAgIHRoaXMucGFyZW50RGVzY3JpcHRpb25QYXJ0cyA9IHBhcmVudERlc2NyaXB0aW9uUGFydHM7XG4gICAgdGhpcy5wYXJlbnRTdGFnZURlc2NyaXB0aW9ucyA9IHBhcmVudFN0YWdlRGVzY3JpcHRpb25zO1xuICAgIHRoaXMucmVzZXJ2ZWRTdGVwTnVtYmVyID0gcmVzZXJ2ZWRTdGVwTnVtYmVyO1xuICAgIHRoaXMuZGVjaWRlckRlc2NyaXB0aW9uID0gZGVjaWRlckRlc2NyaXB0aW9uO1xuICB9XG5cbiAgYWRkRnVuY3Rpb25CcmFuY2goXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPixcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgKTogRGVjaWRlckxpc3Q8VE91dCwgVFNjb3BlPiB7XG4gICAgaWYgKHRoaXMuYnJhbmNoSWRzLmhhcyhpZCkpIGZhaWwoYGR1cGxpY2F0ZSBkZWNpZGVyIGJyYW5jaCBpZCAnJHtpZH0nIHVuZGVyICcke3RoaXMuY3VyTm9kZS5uYW1lfSdgKTtcbiAgICB0aGlzLmJyYW5jaElkcy5hZGQoaWQpO1xuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7IG5hbWU6IG5hbWUgPz8gaWQsIGlkIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBub2RlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgaWYgKGZuKSB7XG4gICAgICBub2RlLmZuID0gZm47XG4gICAgICB0aGlzLmIuX2FkZFRvTWFwKG5hbWUsIGZuKTtcbiAgICB9XG5cbiAgICBsZXQgc3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0geyBuYW1lOiBuYW1lID8/IGlkLCBpZCwgdHlwZTogJ3N0YWdlJyB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgc3BlYy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHNwZWMgPSB0aGlzLmIuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgdGhpcy5jdXJOb2RlLmNoaWxkcmVuID0gdGhpcy5jdXJOb2RlLmNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuY3VyTm9kZS5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgIHRoaXMuY3VyU3BlYy5jaGlsZHJlbiA9IHRoaXMuY3VyU3BlYy5jaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmN1clNwZWMuY2hpbGRyZW4ucHVzaChzcGVjKTtcblxuICAgIHRoaXMuYnJhbmNoRGVzY0luZm8ucHVzaCh7IGlkLCBkZXNjcmlwdGlvbiB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZFN1YkZsb3dDaGFydEJyYW5jaChcbiAgICBpZDogc3RyaW5nLFxuICAgIHN1YmZsb3c6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+LFxuICAgIG1vdW50TmFtZT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9ucyxcbiAgKTogRGVjaWRlckxpc3Q8VE91dCwgVFNjb3BlPiB7XG4gICAgaWYgKHRoaXMuYnJhbmNoSWRzLmhhcyhpZCkpIGZhaWwoYGR1cGxpY2F0ZSBkZWNpZGVyIGJyYW5jaCBpZCAnJHtpZH0nIHVuZGVyICcke3RoaXMuY3VyTm9kZS5uYW1lfSdgKTtcbiAgICB0aGlzLmJyYW5jaElkcy5hZGQoaWQpO1xuXG4gICAgY29uc3Qgc3ViZmxvd05hbWUgPSBtb3VudE5hbWUgfHwgaWQ7XG4gICAgY29uc3QgcHJlZml4ZWRSb290ID0gdGhpcy5iLl9wcmVmaXhOb2RlVHJlZShzdWJmbG93LnJvb3QsIGlkKTtcblxuICAgIGlmICghdGhpcy5iLl9zdWJmbG93RGVmcy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLmIuX3N1YmZsb3dEZWZzLnNldChpZCwgeyByb290OiBwcmVmaXhlZFJvb3QgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICBuYW1lOiBzdWJmbG93TmFtZSxcbiAgICAgIGlkLFxuICAgICAgaXNTdWJmbG93Um9vdDogdHJ1ZSxcbiAgICAgIHN1YmZsb3dJZDogaWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zKSBub2RlLnN1YmZsb3dNb3VudE9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0ge1xuICAgICAgbmFtZTogc3ViZmxvd05hbWUsXG4gICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgaWQsXG4gICAgICBpc1N1YmZsb3dSb290OiB0cnVlLFxuICAgICAgc3ViZmxvd0lkOiBpZCxcbiAgICAgIHN1YmZsb3dOYW1lLFxuICAgICAgc3ViZmxvd1N0cnVjdHVyZTogc3ViZmxvdy5idWlsZFRpbWVTdHJ1Y3R1cmUsXG4gICAgfTtcblxuICAgIHRoaXMuY3VyTm9kZS5jaGlsZHJlbiA9IHRoaXMuY3VyTm9kZS5jaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmN1ck5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICB0aGlzLmN1clNwZWMuY2hpbGRyZW4gPSB0aGlzLmN1clNwZWMuY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5jdXJTcGVjLmNoaWxkcmVuLnB1c2goc3BlYyk7XG5cbiAgICB0aGlzLmIuX21lcmdlU3RhZ2VNYXAoc3ViZmxvdy5zdGFnZU1hcCwgaWQpO1xuICAgIHRoaXMuYi5fbWVyZ2VTdWJmbG93cyhzdWJmbG93LnN1YmZsb3dzLCBpZCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZEJyYW5jaExpc3QoXG4gICAgYnJhbmNoZXM6IEFycmF5PHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBmbj86IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xuICAgIH0+LFxuICApOiBEZWNpZGVyTGlzdDxUT3V0LCBUU2NvcGU+IHtcbiAgICBmb3IgKGNvbnN0IHsgaWQsIG5hbWUsIGZuIH0gb2YgYnJhbmNoZXMpIHtcbiAgICAgIHRoaXMuYWRkRnVuY3Rpb25CcmFuY2goaWQsIG5hbWUsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXREZWZhdWx0KGlkOiBzdHJpbmcpOiBEZWNpZGVyTGlzdDxUT3V0LCBUU2NvcGU+IHtcbiAgICB0aGlzLmRlZmF1bHRJZCA9IGlkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZW5kKCk6IEZsb3dDaGFydEJ1aWxkZXI8VE91dCwgVFNjb3BlPiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmN1ck5vZGUuY2hpbGRyZW47XG4gICAgaWYgKCFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW0Zsb3dDaGFydEJ1aWxkZXJdIGRlY2lkZXIgYXQgJyR7dGhpcy5jdXJOb2RlLm5hbWV9JyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYnJhbmNoYCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJOb2RlLmRlY2lkZXJGbiA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5kZWZhdWx0SWQpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDaGlsZCA9IGNoaWxkcmVuLmZpbmQoKGMpID0+IGMuaWQgPT09IHRoaXMuZGVmYXVsdElkKTtcbiAgICAgIGlmIChkZWZhdWx0Q2hpbGQpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaCh7IC4uLmRlZmF1bHRDaGlsZCwgaWQ6ICdkZWZhdWx0JyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1clNwZWMuYnJhbmNoSWRzID0gY2hpbGRyZW5cbiAgICAgIC5tYXAoKGMpID0+IGMuaWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnICYmIGlkLmxlbmd0aCA+IDApO1xuICAgIHRoaXMuY3VyU3BlYy50eXBlID0gJ2RlY2lkZXInO1xuXG4gICAgaWYgKHRoaXMucmVzZXJ2ZWRTdGVwTnVtYmVyID4gMCkge1xuICAgICAgY29uc3QgZGVjaWRlckxhYmVsID0gdGhpcy5jdXJOb2RlLm5hbWU7XG4gICAgICBjb25zdCBicmFuY2hJZExpc3QgPSB0aGlzLmJyYW5jaERlc2NJbmZvLm1hcCgoYikgPT4gYi5pZCkuam9pbignLCAnKTtcbiAgICAgIGNvbnN0IG1haW5MaW5lID0gdGhpcy5kZWNpZGVyRGVzY3JpcHRpb25cbiAgICAgICAgPyBgJHt0aGlzLnJlc2VydmVkU3RlcE51bWJlcn0uICR7ZGVjaWRlckxhYmVsfSDigJQgJHt0aGlzLmRlY2lkZXJEZXNjcmlwdGlvbn1gXG4gICAgICAgIDogYCR7dGhpcy5yZXNlcnZlZFN0ZXBOdW1iZXJ9LiAke2RlY2lkZXJMYWJlbH0g4oCUIERlY2lkZXMgYmV0d2VlbjogJHticmFuY2hJZExpc3R9YDtcbiAgICAgIHRoaXMucGFyZW50RGVzY3JpcHRpb25QYXJ0cy5wdXNoKG1haW5MaW5lKTtcblxuICAgICAgaWYgKHRoaXMuZGVjaWRlckRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMucGFyZW50U3RhZ2VEZXNjcmlwdGlvbnMuc2V0KHRoaXMuY3VyTm9kZS5uYW1lLCB0aGlzLmRlY2lkZXJEZXNjcmlwdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHRoaXMuYnJhbmNoRGVzY0luZm8pIHtcbiAgICAgICAgY29uc3QgYnJhbmNoVGV4dCA9IGJyYW5jaC5kZXNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGJyYW5jaFRleHQpIHtcbiAgICAgICAgICB0aGlzLnBhcmVudERlc2NyaXB0aW9uUGFydHMucHVzaChgICAg4oaSICR7YnJhbmNoLmlkfTogJHticmFuY2hUZXh0fWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicmFuY2guZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnBhcmVudFN0YWdlRGVzY3JpcHRpb25zLnNldChicmFuY2guaWQsIGJyYW5jaC5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iO1xuICB9XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VsZWN0b3JGbkxpc3QgKHNjb3BlLWJhc2VkIHNlbGVjdG9yIOKAlCBtaXJyb3JzIERlY2lkZXJMaXN0KVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RvckZuTGlzdDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBiOiBGbG93Q2hhcnRCdWlsZGVyPFRPdXQsIFRTY29wZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VyTm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VyU3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50RGVzY3JpcHRpb25QYXJ0czogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50U3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzZXJ2ZWRTdGVwTnVtYmVyOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0b3JEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hEZXNjSW5mbzogQXJyYXk8eyBpZDogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9PiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJ1aWxkZXI6IEZsb3dDaGFydEJ1aWxkZXI8VE91dCwgVFNjb3BlPixcbiAgICBjdXJOb2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBjdXJTcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsXG4gICAgcGFyZW50RGVzY3JpcHRpb25QYXJ0czogc3RyaW5nW10gPSBbXSxcbiAgICBwYXJlbnRTdGFnZURlc2NyaXB0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKSxcbiAgICByZXNlcnZlZFN0ZXBOdW1iZXIgPSAwLFxuICAgIHNlbGVjdG9yRGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuYiA9IGJ1aWxkZXI7XG4gICAgdGhpcy5jdXJOb2RlID0gY3VyTm9kZTtcbiAgICB0aGlzLmN1clNwZWMgPSBjdXJTcGVjO1xuICAgIHRoaXMucGFyZW50RGVzY3JpcHRpb25QYXJ0cyA9IHBhcmVudERlc2NyaXB0aW9uUGFydHM7XG4gICAgdGhpcy5wYXJlbnRTdGFnZURlc2NyaXB0aW9ucyA9IHBhcmVudFN0YWdlRGVzY3JpcHRpb25zO1xuICAgIHRoaXMucmVzZXJ2ZWRTdGVwTnVtYmVyID0gcmVzZXJ2ZWRTdGVwTnVtYmVyO1xuICAgIHRoaXMuc2VsZWN0b3JEZXNjcmlwdGlvbiA9IHNlbGVjdG9yRGVzY3JpcHRpb247XG4gIH1cblxuICBhZGRGdW5jdGlvbkJyYW5jaChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmbj86IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICApOiBTZWxlY3RvckZuTGlzdDxUT3V0LCBUU2NvcGU+IHtcbiAgICBpZiAodGhpcy5icmFuY2hJZHMuaGFzKGlkKSkgZmFpbChgZHVwbGljYXRlIHNlbGVjdG9yIGJyYW5jaCBpZCAnJHtpZH0nIHVuZGVyICcke3RoaXMuY3VyTm9kZS5uYW1lfSdgKTtcbiAgICB0aGlzLmJyYW5jaElkcy5hZGQoaWQpO1xuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7IG5hbWU6IG5hbWUgPz8gaWQsIGlkIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBub2RlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgaWYgKGZuKSB7XG4gICAgICBub2RlLmZuID0gZm47XG4gICAgICB0aGlzLmIuX2FkZFRvTWFwKG5hbWUsIGZuKTtcbiAgICB9XG5cbiAgICBsZXQgc3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0geyBuYW1lOiBuYW1lID8/IGlkLCBpZCwgdHlwZTogJ3N0YWdlJyB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgc3BlYy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHNwZWMgPSB0aGlzLmIuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgdGhpcy5jdXJOb2RlLmNoaWxkcmVuID0gdGhpcy5jdXJOb2RlLmNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuY3VyTm9kZS5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgIHRoaXMuY3VyU3BlYy5jaGlsZHJlbiA9IHRoaXMuY3VyU3BlYy5jaGlsZHJlbiB8fCBbXTtcbiAgICB0aGlzLmN1clNwZWMuY2hpbGRyZW4ucHVzaChzcGVjKTtcblxuICAgIHRoaXMuYnJhbmNoRGVzY0luZm8ucHVzaCh7IGlkLCBkZXNjcmlwdGlvbiB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZFN1YkZsb3dDaGFydEJyYW5jaChcbiAgICBpZDogc3RyaW5nLFxuICAgIHN1YmZsb3c6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+LFxuICAgIG1vdW50TmFtZT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogU3ViZmxvd01vdW50T3B0aW9ucyxcbiAgKTogU2VsZWN0b3JGbkxpc3Q8VE91dCwgVFNjb3BlPiB7XG4gICAgaWYgKHRoaXMuYnJhbmNoSWRzLmhhcyhpZCkpIGZhaWwoYGR1cGxpY2F0ZSBzZWxlY3RvciBicmFuY2ggaWQgJyR7aWR9JyB1bmRlciAnJHt0aGlzLmN1ck5vZGUubmFtZX0nYCk7XG4gICAgdGhpcy5icmFuY2hJZHMuYWRkKGlkKTtcblxuICAgIGNvbnN0IHN1YmZsb3dOYW1lID0gbW91bnROYW1lIHx8IGlkO1xuICAgIGNvbnN0IHByZWZpeGVkUm9vdCA9IHRoaXMuYi5fcHJlZml4Tm9kZVRyZWUoc3ViZmxvdy5yb290LCBpZCk7XG5cbiAgICBpZiAoIXRoaXMuYi5fc3ViZmxvd0RlZnMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5iLl9zdWJmbG93RGVmcy5zZXQoaWQsIHsgcm9vdDogcHJlZml4ZWRSb290IH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0ge1xuICAgICAgbmFtZTogc3ViZmxvd05hbWUsXG4gICAgICBpZCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICBzdWJmbG93SWQ6IGlkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucykgbm9kZS5zdWJmbG93TW91bnRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHtcbiAgICAgIG5hbWU6IHN1YmZsb3dOYW1lLFxuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIGlkLFxuICAgICAgaXNTdWJmbG93Um9vdDogdHJ1ZSxcbiAgICAgIHN1YmZsb3dJZDogaWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHN1YmZsb3dTdHJ1Y3R1cmU6IHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlLFxuICAgIH07XG5cbiAgICB0aGlzLmN1ck5vZGUuY2hpbGRyZW4gPSB0aGlzLmN1ck5vZGUuY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5jdXJOb2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgdGhpcy5jdXJTcGVjLmNoaWxkcmVuID0gdGhpcy5jdXJTcGVjLmNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuY3VyU3BlYy5jaGlsZHJlbi5wdXNoKHNwZWMpO1xuXG4gICAgdGhpcy5iLl9tZXJnZVN0YWdlTWFwKHN1YmZsb3cuc3RhZ2VNYXAsIGlkKTtcbiAgICB0aGlzLmIuX21lcmdlU3ViZmxvd3Moc3ViZmxvdy5zdWJmbG93cywgaWQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRCcmFuY2hMaXN0KFxuICAgIGJyYW5jaGVzOiBBcnJheTx7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcbiAgICB9PixcbiAgKTogU2VsZWN0b3JGbkxpc3Q8VE91dCwgVFNjb3BlPiB7XG4gICAgZm9yIChjb25zdCB7IGlkLCBuYW1lLCBmbiB9IG9mIGJyYW5jaGVzKSB7XG4gICAgICB0aGlzLmFkZEZ1bmN0aW9uQnJhbmNoKGlkLCBuYW1lLCBmbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZW5kKCk6IEZsb3dDaGFydEJ1aWxkZXI8VE91dCwgVFNjb3BlPiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmN1ck5vZGUuY2hpbGRyZW47XG4gICAgaWYgKCFjaGlsZHJlbiB8fCBjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW0Zsb3dDaGFydEJ1aWxkZXJdIHNlbGVjdG9yIGF0ICcke3RoaXMuY3VyTm9kZS5uYW1lfScgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGJyYW5jaGApO1xuICAgIH1cblxuICAgIHRoaXMuY3VyTm9kZS5zZWxlY3RvckZuID0gdHJ1ZTtcblxuICAgIHRoaXMuY3VyU3BlYy5icmFuY2hJZHMgPSBjaGlsZHJlblxuICAgICAgLm1hcCgoYykgPT4gYy5pZClcbiAgICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgJiYgaWQubGVuZ3RoID4gMCk7XG4gICAgdGhpcy5jdXJTcGVjLnR5cGUgPSAnZGVjaWRlcic7XG4gICAgdGhpcy5jdXJTcGVjLmhhc1NlbGVjdG9yID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnJlc2VydmVkU3RlcE51bWJlciA+IDApIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yTGFiZWwgPSB0aGlzLmN1ck5vZGUubmFtZTtcbiAgICAgIGNvbnN0IGJyYW5jaElkTGlzdCA9IHRoaXMuYnJhbmNoRGVzY0luZm8ubWFwKChiKSA9PiBiLmlkKS5qb2luKCcsICcpO1xuICAgICAgY29uc3QgbWFpbkxpbmUgPSB0aGlzLnNlbGVjdG9yRGVzY3JpcHRpb25cbiAgICAgICAgPyBgJHt0aGlzLnJlc2VydmVkU3RlcE51bWJlcn0uICR7c2VsZWN0b3JMYWJlbH0g4oCUICR7dGhpcy5zZWxlY3RvckRlc2NyaXB0aW9ufWBcbiAgICAgICAgOiBgJHt0aGlzLnJlc2VydmVkU3RlcE51bWJlcn0uICR7c2VsZWN0b3JMYWJlbH0g4oCUIFNlbGVjdHMgZnJvbTogJHticmFuY2hJZExpc3R9YDtcbiAgICAgIHRoaXMucGFyZW50RGVzY3JpcHRpb25QYXJ0cy5wdXNoKG1haW5MaW5lKTtcblxuICAgICAgaWYgKHRoaXMuc2VsZWN0b3JEZXNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnBhcmVudFN0YWdlRGVzY3JpcHRpb25zLnNldCh0aGlzLmN1ck5vZGUubmFtZSwgdGhpcy5zZWxlY3RvckRlc2NyaXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgdGhpcy5icmFuY2hEZXNjSW5mbykge1xuICAgICAgICBjb25zdCBicmFuY2hUZXh0ID0gYnJhbmNoLmRlc2NyaXB0aW9uO1xuICAgICAgICBpZiAoYnJhbmNoVGV4dCkgdGhpcy5wYXJlbnREZXNjcmlwdGlvblBhcnRzLnB1c2goYCAgIOKGkiAke2JyYW5jaC5pZH06ICR7YnJhbmNoVGV4dH1gKTtcbiAgICAgICAgaWYgKGJyYW5jaC5kZXNjcmlwdGlvbikgdGhpcy5wYXJlbnRTdGFnZURlc2NyaXB0aW9ucy5zZXQoYnJhbmNoLmlkLCBicmFuY2guZGVzY3JpcHRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmI7XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnRCdWlsZGVyXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIEZsb3dDaGFydEJ1aWxkZXI8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHByaXZhdGUgX3Jvb3Q/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgcHJpdmF0ZSBfcm9vdFNwZWM/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIHByaXZhdGUgX2N1cnNvcj86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBwcml2YXRlIF9jdXJzb3JTcGVjPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBwcml2YXRlIF9zdGFnZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj4oKTtcbiAgX3N1YmZsb3dEZWZzID0gbmV3IE1hcDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT4oKTtcbiAgcHJpdmF0ZSBfc3RyZWFtSGFuZGxlcnM6IFN0cmVhbUhhbmRsZXJzID0ge307XG4gIHByaXZhdGUgX2V4dHJhY3Rvcj86IFRyYXZlcnNhbEV4dHJhY3RvcjtcbiAgcHJpdmF0ZSBfYnVpbGRUaW1lRXh0cmFjdG9yPzogQnVpbGRUaW1lRXh0cmFjdG9yPGFueT47XG4gIHByaXZhdGUgX2J1aWxkVGltZUV4dHJhY3RvckVycm9yczogQXJyYXk8eyBtZXNzYWdlOiBzdHJpbmc7IGVycm9yOiB1bmtub3duIH0+ID0gW107XG4gIHByaXZhdGUgX2VuYWJsZU5hcnJhdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIF9sb2dnZXI/OiBJTG9nZ2VyO1xuICBwcml2YXRlIF9kZXNjcmlwdGlvblBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIF9zdGVwQ291bnRlciA9IDA7XG4gIHByaXZhdGUgX3N0YWdlRGVzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfc3RhZ2VTdGVwTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBfa25vd25TdGFnZUlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIF9pbnB1dFNjaGVtYT86IHVua25vd247XG4gIHByaXZhdGUgX291dHB1dFNjaGVtYT86IHVua25vd247XG4gIHByaXZhdGUgX291dHB1dE1hcHBlcj86IChmaW5hbFNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdW5rbm93bjtcblxuICBjb25zdHJ1Y3RvcihidWlsZFRpbWVFeHRyYWN0b3I/OiBCdWlsZFRpbWVFeHRyYWN0b3I8YW55Pikge1xuICAgIGlmIChidWlsZFRpbWVFeHRyYWN0b3IpIHtcbiAgICAgIHRoaXMuX2J1aWxkVGltZUV4dHJhY3RvciA9IGJ1aWxkVGltZUV4dHJhY3RvcjtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgRGVzY3JpcHRpb24gaGVscGVycyDilIDilIBcblxuICBwcml2YXRlIF9hcHBlbmREZXNjcmlwdGlvbkxpbmUobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3N0ZXBDb3VudGVyKys7XG4gICAgdGhpcy5fc3RhZ2VTdGVwTWFwLnNldChuYW1lLCB0aGlzLl9zdGVwQ291bnRlcik7XG4gICAgY29uc3QgbGluZSA9IGRlc2NyaXB0aW9uID8gYCR7dGhpcy5fc3RlcENvdW50ZXJ9LiAke25hbWV9IOKAlCAke2Rlc2NyaXB0aW9ufWAgOiBgJHt0aGlzLl9zdGVwQ291bnRlcn0uICR7bmFtZX1gO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uUGFydHMucHVzaChsaW5lKTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX3N0YWdlRGVzY3JpcHRpb25zLnNldChuYW1lLCBkZXNjcmlwdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwZW5kU3ViZmxvd0Rlc2NyaXB0aW9uKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgc3ViZmxvdzogRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4pOiB2b2lkIHtcbiAgICB0aGlzLl9zdGVwQ291bnRlcisrO1xuICAgIHRoaXMuX3N0YWdlU3RlcE1hcC5zZXQoaWQsIHRoaXMuX3N0ZXBDb3VudGVyKTtcbiAgICBpZiAoc3ViZmxvdy5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cy5wdXNoKGAke3RoaXMuX3N0ZXBDb3VudGVyfS4gW1N1Yi1FeGVjdXRpb246ICR7bmFtZX1dIOKAlCAke3N1YmZsb3cuZGVzY3JpcHRpb259YCk7XG4gICAgICBjb25zdCBsaW5lcyA9IHN1YmZsb3cuZGVzY3JpcHRpb24uc3BsaXQoJ1xcbicpO1xuICAgICAgY29uc3Qgc3RlcHNJZHggPSBsaW5lcy5maW5kSW5kZXgoKGwpID0+IGwuc3RhcnRzV2l0aCgnU3RlcHM6JykpO1xuICAgICAgaWYgKHN0ZXBzSWR4ID49IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0ZXBzSWR4ICsgMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGxpbmVzW2ldLnRyaW0oKSkgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cy5wdXNoKGAgICAke2xpbmVzW2ldfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uUGFydHMucHVzaChgJHt0aGlzLl9zdGVwQ291bnRlcn0uIFtTdWItRXhlY3V0aW9uOiAke25hbWV9XWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBDb25maWd1cmF0aW9uIOKUgOKUgFxuXG4gIHNldEVuYWJsZU5hcnJhdGl2ZSgpOiB0aGlzIHtcbiAgICB0aGlzLl9lbmFibGVOYXJyYXRpdmUgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0TG9nZ2VyKGxvZ2dlcjogSUxvZ2dlcik6IHRoaXMge1xuICAgIHRoaXMuX2xvZ2dlciA9IGxvZ2dlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBEZWNsYXJlIHRoZSBpbnB1dCBzY2hlbWEgKHJlYWRPbmx5Q29udGV4dCBzaGFwZSkuIEFjY2VwdHMgWm9kIHNjaGVtYSBvciBKU09OIFNjaGVtYS4gKi9cbiAgc2V0SW5wdXRTY2hlbWEoc2NoZW1hOiB1bmtub3duKTogdGhpcyB7XG4gICAgdGhpcy5faW5wdXRTY2hlbWEgPSBzY2hlbWE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogRGVjbGFyZSB0aGUgb3V0cHV0IHNjaGVtYSAocmVzcG9uc2Ugc2hhcGUpLiBBY2NlcHRzIFpvZCBzY2hlbWEgb3IgSlNPTiBTY2hlbWEuICovXG4gIHNldE91dHB1dFNjaGVtYShzY2hlbWE6IHVua25vd24pOiB0aGlzIHtcbiAgICB0aGlzLl9vdXRwdXRTY2hlbWEgPSBzY2hlbWE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogU2V0IHRoZSBvdXRwdXQgbWFwcGVyIHRoYXQgZXh0cmFjdHMgdGhlIHJlc3BvbnNlIGZyb20gZmluYWwgc2NvcGUuICovXG4gIHNldE91dHB1dE1hcHBlcihtYXBwZXI6IChmaW5hbFNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdW5rbm93bik6IHRoaXMge1xuICAgIHRoaXMuX291dHB1dE1hcHBlciA9IG1hcHBlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaW5lYXIgQ2hhaW5pbmcg4pSA4pSAXG5cbiAgc3RhcnQobmFtZTogc3RyaW5nLCBmbjogUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sIGlkOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKHRoaXMuX3Jvb3QpIGZhaWwoJ3Jvb3QgYWxyZWFkeSBkZWZpbmVkOyBjcmVhdGUgYSBuZXcgYnVpbGRlcicpO1xuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7IG5hbWUsIGlkLCBmbiB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgbm9kZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2FkZFRvTWFwKG5hbWUsIGZuKTtcblxuICAgIGxldCBzcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSB7IG5hbWUsIGlkLCB0eXBlOiAnc3RhZ2UnIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBzcGVjLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgc3BlYyA9IHRoaXMuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgdGhpcy5fcm9vdCA9IG5vZGU7XG4gICAgdGhpcy5fcm9vdFNwZWMgPSBzcGVjO1xuICAgIHRoaXMuX2N1cnNvciA9IG5vZGU7XG4gICAgdGhpcy5fY3Vyc29yU3BlYyA9IHNwZWM7XG4gICAgdGhpcy5fa25vd25TdGFnZUlkcy5hZGQoaWQpO1xuXG4gICAgdGhpcy5fYXBwZW5kRGVzY3JpcHRpb25MaW5lKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZEZ1bmN0aW9uKG5hbWU6IHN0cmluZywgZm46IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LCBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZyk6IHRoaXMge1xuICAgIGNvbnN0IGN1ciA9IHRoaXMuX25lZWRDdXJzb3IoKTtcbiAgICBjb25zdCBjdXJTcGVjID0gdGhpcy5fbmVlZEN1cnNvclNwZWMoKTtcblxuICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0geyBuYW1lLCBpZCwgZm4gfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIG5vZGUuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9hZGRUb01hcChuYW1lLCBmbik7XG5cbiAgICBsZXQgc3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0geyBuYW1lLCBpZCwgdHlwZTogJ3N0YWdlJyB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgc3BlYy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHNwZWMgPSB0aGlzLl9hcHBseUV4dHJhY3RvclRvTm9kZShzcGVjKTtcblxuICAgIGN1ci5uZXh0ID0gbm9kZTtcbiAgICBjdXJTcGVjLm5leHQgPSBzcGVjO1xuICAgIHRoaXMuX2N1cnNvciA9IG5vZGU7XG4gICAgdGhpcy5fY3Vyc29yU3BlYyA9IHNwZWM7XG4gICAgdGhpcy5fa25vd25TdGFnZUlkcy5hZGQoaWQpO1xuXG4gICAgdGhpcy5fYXBwZW5kRGVzY3JpcHRpb25MaW5lKG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFkZFN0cmVhbWluZ0Z1bmN0aW9uKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmbjogUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4sXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdHJlYW1JZD86IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgKTogdGhpcyB7XG4gICAgY29uc3QgY3VyID0gdGhpcy5fbmVlZEN1cnNvcigpO1xuICAgIGNvbnN0IGN1clNwZWMgPSB0aGlzLl9uZWVkQ3Vyc29yU3BlYygpO1xuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICBuYW1lLFxuICAgICAgaWQsXG4gICAgICBmbixcbiAgICAgIGlzU3RyZWFtaW5nOiB0cnVlLFxuICAgICAgc3RyZWFtSWQ6IHN0cmVhbUlkID8/IG5hbWUsXG4gICAgfTtcbiAgICBpZiAoZGVzY3JpcHRpb24pIG5vZGUuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9hZGRUb01hcChuYW1lLCBmbik7XG5cbiAgICBsZXQgc3BlYzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGlkLFxuICAgICAgdHlwZTogJ3N0cmVhbWluZycsXG4gICAgICBpc1N0cmVhbWluZzogdHJ1ZSxcbiAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCA/PyBuYW1lLFxuICAgIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBzcGVjLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgc3BlYyA9IHRoaXMuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgY3VyLm5leHQgPSBub2RlO1xuICAgIGN1clNwZWMubmV4dCA9IHNwZWM7XG4gICAgdGhpcy5fY3Vyc29yID0gbm9kZTtcbiAgICB0aGlzLl9jdXJzb3JTcGVjID0gc3BlYztcbiAgICB0aGlzLl9rbm93blN0YWdlSWRzLmFkZChpZCk7XG5cbiAgICB0aGlzLl9hcHBlbmREZXNjcmlwdGlvbkxpbmUobmFtZSwgZGVzY3JpcHRpb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8g4pSA4pSAIEJyYW5jaGluZyDilIDilIBcblxuICBhZGREZWNpZGVyRnVuY3Rpb24oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZuOiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPixcbiAgICBpZDogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICApOiBEZWNpZGVyTGlzdDxUT3V0LCBUU2NvcGU+IHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLl9uZWVkQ3Vyc29yKCk7XG4gICAgY29uc3QgY3VyU3BlYyA9IHRoaXMuX25lZWRDdXJzb3JTcGVjKCk7XG5cbiAgICBpZiAoY3VyLmRlY2lkZXJGbikgZmFpbChgZGVjaWRlciBhbHJlYWR5IGRlZmluZWQgYXQgJyR7Y3VyLm5hbWV9J2ApO1xuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7IG5hbWUsIGlkLCBmbiB9O1xuICAgIGlmIChkZXNjcmlwdGlvbikgbm9kZS5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2FkZFRvTWFwKG5hbWUsIGZuKTtcblxuICAgIGxldCBzcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSB7IG5hbWUsIGlkLCB0eXBlOiAnc3RhZ2UnLCBoYXNEZWNpZGVyOiB0cnVlIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBzcGVjLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgc3BlYyA9IHRoaXMuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgY3VyLm5leHQgPSBub2RlO1xuICAgIGN1clNwZWMubmV4dCA9IHNwZWM7XG4gICAgdGhpcy5fY3Vyc29yID0gbm9kZTtcbiAgICB0aGlzLl9jdXJzb3JTcGVjID0gc3BlYztcbiAgICB0aGlzLl9rbm93blN0YWdlSWRzLmFkZChpZCk7XG5cbiAgICB0aGlzLl9zdGVwQ291bnRlcisrO1xuICAgIHRoaXMuX3N0YWdlU3RlcE1hcC5zZXQobmFtZSwgdGhpcy5fc3RlcENvdW50ZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBEZWNpZGVyTGlzdDxUT3V0LCBUU2NvcGU+KFxuICAgICAgdGhpcyxcbiAgICAgIG5vZGUsXG4gICAgICBzcGVjLFxuICAgICAgdGhpcy5fZGVzY3JpcHRpb25QYXJ0cyxcbiAgICAgIHRoaXMuX3N0YWdlRGVzY3JpcHRpb25zLFxuICAgICAgdGhpcy5fc3RlcENvdW50ZXIsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICApO1xuICB9XG5cbiAgYWRkU2VsZWN0b3JGdW5jdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZm46IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICk6IFNlbGVjdG9yRm5MaXN0PFRPdXQsIFRTY29wZT4ge1xuICAgIGNvbnN0IGN1ciA9IHRoaXMuX25lZWRDdXJzb3IoKTtcbiAgICBjb25zdCBjdXJTcGVjID0gdGhpcy5fbmVlZEN1cnNvclNwZWMoKTtcblxuICAgIGlmIChjdXIuc2VsZWN0b3JGbikgZmFpbChgc2VsZWN0b3IgYWxyZWFkeSBkZWZpbmVkIGF0ICcke2N1ci5uYW1lfSdgKTtcbiAgICBpZiAoY3VyLmRlY2lkZXJGbikgZmFpbChgZGVjaWRlciBhbmQgc2VsZWN0b3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhdCAnJHtjdXIubmFtZX0nYCk7XG5cbiAgICBjb25zdCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHsgbmFtZSwgaWQsIGZuIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBub2RlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgdGhpcy5fYWRkVG9NYXAobmFtZSwgZm4pO1xuXG4gICAgbGV0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHsgbmFtZSwgaWQsIHR5cGU6ICdzdGFnZScsIGhhc1NlbGVjdG9yOiB0cnVlIH07XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBzcGVjLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgc3BlYyA9IHRoaXMuX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWMpO1xuXG4gICAgY3VyLm5leHQgPSBub2RlO1xuICAgIGN1clNwZWMubmV4dCA9IHNwZWM7XG4gICAgdGhpcy5fY3Vyc29yID0gbm9kZTtcbiAgICB0aGlzLl9jdXJzb3JTcGVjID0gc3BlYztcblxuICAgIHRoaXMuX3N0ZXBDb3VudGVyKys7XG4gICAgdGhpcy5fc3RhZ2VTdGVwTWFwLnNldChuYW1lLCB0aGlzLl9zdGVwQ291bnRlcik7XG5cbiAgICByZXR1cm4gbmV3IFNlbGVjdG9yRm5MaXN0PFRPdXQsIFRTY29wZT4oXG4gICAgICB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIHNwZWMsXG4gICAgICB0aGlzLl9kZXNjcmlwdGlvblBhcnRzLFxuICAgICAgdGhpcy5fc3RhZ2VEZXNjcmlwdGlvbnMsXG4gICAgICB0aGlzLl9zdGVwQ291bnRlcixcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICk7XG4gIH1cblxuICAvLyDilIDilIAgUGFyYWxsZWwgKEZvcmspIOKUgOKUgFxuXG4gIGFkZExpc3RPZkZ1bmN0aW9uKGNoaWxkcmVuOiBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjPFRPdXQsIFRTY29wZT5bXSwgb3B0aW9ucz86IHsgZmFpbEZhc3Q/OiBib29sZWFuIH0pOiB0aGlzIHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLl9uZWVkQ3Vyc29yKCk7XG4gICAgY29uc3QgY3VyU3BlYyA9IHRoaXMuX25lZWRDdXJzb3JTcGVjKCk7XG4gICAgY29uc3QgZm9ya0lkID0gY3VyLmlkO1xuXG4gICAgY3VyU3BlYy50eXBlID0gJ2ZvcmsnO1xuICAgIGlmIChvcHRpb25zPy5mYWlsRmFzdCkgY3VyLmZhaWxGYXN0ID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgeyBpZCwgbmFtZSwgZm4gfSBvZiBjaGlsZHJlbikge1xuICAgICAgaWYgKCFpZCkgZmFpbChgY2hpbGQgaWQgcmVxdWlyZWQgdW5kZXIgJyR7Y3VyLm5hbWV9J2ApO1xuICAgICAgaWYgKGN1ci5jaGlsZHJlbj8uc29tZSgoYykgPT4gYy5pZCA9PT0gaWQpKSB7XG4gICAgICAgIGZhaWwoYGR1cGxpY2F0ZSBjaGlsZCBpZCAnJHtpZH0nIHVuZGVyICcke2N1ci5uYW1lfSdgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7IG5hbWU6IG5hbWUgPz8gaWQsIGlkIH07XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgbm9kZS5mbiA9IGZuO1xuICAgICAgICB0aGlzLl9hZGRUb01hcChuYW1lLCBmbik7XG4gICAgICB9XG5cbiAgICAgIGxldCBzcGVjOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUgPz8gaWQsXG4gICAgICAgIGlkLFxuICAgICAgICB0eXBlOiAnc3RhZ2UnLFxuICAgICAgICBpc1BhcmFsbGVsQ2hpbGQ6IHRydWUsXG4gICAgICAgIHBhcmFsbGVsR3JvdXBJZDogZm9ya0lkLFxuICAgICAgfTtcbiAgICAgIHNwZWMgPSB0aGlzLl9hcHBseUV4dHJhY3RvclRvTm9kZShzcGVjKTtcblxuICAgICAgY3VyLmNoaWxkcmVuID0gY3VyLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgY3VyLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICBjdXJTcGVjLmNoaWxkcmVuID0gY3VyU3BlYy5jaGlsZHJlbiB8fCBbXTtcbiAgICAgIGN1clNwZWMuY2hpbGRyZW4ucHVzaChzcGVjKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZE5hbWVzID0gY2hpbGRyZW4ubWFwKChjKSA9PiBjLm5hbWUgfHwgYy5pZCkuam9pbignLCAnKTtcbiAgICB0aGlzLl9zdGVwQ291bnRlcisrO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uUGFydHMucHVzaChgJHt0aGlzLl9zdGVwQ291bnRlcn0uIFJ1bnMgaW4gcGFyYWxsZWw6ICR7Y2hpbGROYW1lc31gKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8g4pSA4pSAIFN1YmZsb3cgTW91bnRpbmcg4pSA4pSAXG5cbiAgYWRkU3ViRmxvd0NoYXJ0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc3ViZmxvdzogRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4sXG4gICAgbW91bnROYW1lPzogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zLFxuICApOiB0aGlzIHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLl9uZWVkQ3Vyc29yKCk7XG4gICAgY29uc3QgY3VyU3BlYyA9IHRoaXMuX25lZWRDdXJzb3JTcGVjKCk7XG5cbiAgICBpZiAoY3VyLmNoaWxkcmVuPy5zb21lKChjKSA9PiBjLmlkID09PSBpZCkpIHtcbiAgICAgIGZhaWwoYGR1cGxpY2F0ZSBjaGlsZCBpZCAnJHtpZH0nIHVuZGVyICcke2N1ci5uYW1lfSdgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJmbG93TmFtZSA9IG1vdW50TmFtZSB8fCBpZDtcbiAgICBjb25zdCBmb3JrSWQgPSBjdXIuaWQ7XG4gICAgY29uc3QgcHJlZml4ZWRSb290ID0gdGhpcy5fcHJlZml4Tm9kZVRyZWUoc3ViZmxvdy5yb290LCBpZCk7XG5cbiAgICBpZiAoIXRoaXMuX3N1YmZsb3dEZWZzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMuX3N1YmZsb3dEZWZzLnNldChpZCwgeyByb290OiBwcmVmaXhlZFJvb3QgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gPSB7XG4gICAgICBuYW1lOiBzdWJmbG93TmFtZSxcbiAgICAgIGlkLFxuICAgICAgaXNTdWJmbG93Um9vdDogdHJ1ZSxcbiAgICAgIHN1YmZsb3dJZDogaWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICB9O1xuICAgIGlmIChvcHRpb25zKSBub2RlLnN1YmZsb3dNb3VudE9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgbGV0IHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHtcbiAgICAgIG5hbWU6IHN1YmZsb3dOYW1lLFxuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIGlkLFxuICAgICAgaXNTdWJmbG93Um9vdDogdHJ1ZSxcbiAgICAgIHN1YmZsb3dJZDogaWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIGlzUGFyYWxsZWxDaGlsZDogdHJ1ZSxcbiAgICAgIHBhcmFsbGVsR3JvdXBJZDogZm9ya0lkLFxuICAgICAgc3ViZmxvd1N0cnVjdHVyZTogc3ViZmxvdy5idWlsZFRpbWVTdHJ1Y3R1cmUsXG4gICAgfTtcbiAgICBzcGVjID0gdGhpcy5fYXBwbHlFeHRyYWN0b3JUb05vZGUoc3BlYyk7XG5cbiAgICBjdXJTcGVjLnR5cGUgPSAnZm9yayc7XG4gICAgY3VyLmNoaWxkcmVuID0gY3VyLmNoaWxkcmVuIHx8IFtdO1xuICAgIGN1ci5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgIGN1clNwZWMuY2hpbGRyZW4gPSBjdXJTcGVjLmNoaWxkcmVuIHx8IFtdO1xuICAgIGN1clNwZWMuY2hpbGRyZW4ucHVzaChzcGVjKTtcblxuICAgIHRoaXMuX21lcmdlU3RhZ2VNYXAoc3ViZmxvdy5zdGFnZU1hcCwgaWQpO1xuICAgIHRoaXMuX21lcmdlU3ViZmxvd3Moc3ViZmxvdy5zdWJmbG93cywgaWQpO1xuICAgIHRoaXMuX2FwcGVuZFN1YmZsb3dEZXNjcmlwdGlvbihpZCwgc3ViZmxvd05hbWUsIHN1YmZsb3cpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRTdWJGbG93Q2hhcnROZXh0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc3ViZmxvdzogRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4sXG4gICAgbW91bnROYW1lPzogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBTdWJmbG93TW91bnRPcHRpb25zLFxuICApOiB0aGlzIHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLl9uZWVkQ3Vyc29yKCk7XG4gICAgY29uc3QgY3VyU3BlYyA9IHRoaXMuX25lZWRDdXJzb3JTcGVjKCk7XG5cbiAgICBpZiAoY3VyLm5leHQpIHtcbiAgICAgIGZhaWwoYGNhbm5vdCBhZGQgc3ViZmxvdyBhcyBuZXh0IHdoZW4gbmV4dCBpcyBhbHJlYWR5IGRlZmluZWQgYXQgJyR7Y3VyLm5hbWV9J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmZsb3dOYW1lID0gbW91bnROYW1lIHx8IGlkO1xuICAgIGNvbnN0IHByZWZpeGVkUm9vdCA9IHRoaXMuX3ByZWZpeE5vZGVUcmVlKHN1YmZsb3cucm9vdCwgaWQpO1xuXG4gICAgaWYgKCF0aGlzLl9zdWJmbG93RGVmcy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLl9zdWJmbG93RGVmcy5zZXQoaWQsIHsgcm9vdDogcHJlZml4ZWRSb290IH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0ge1xuICAgICAgbmFtZTogc3ViZmxvd05hbWUsXG4gICAgICBpZCxcbiAgICAgIGlzU3ViZmxvd1Jvb3Q6IHRydWUsXG4gICAgICBzdWJmbG93SWQ6IGlkLFxuICAgICAgc3ViZmxvd05hbWUsXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucykgbm9kZS5zdWJmbG93TW91bnRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGxldCBhdHRhY2hlZFNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IHtcbiAgICAgIG5hbWU6IHN1YmZsb3dOYW1lLFxuICAgICAgdHlwZTogJ3N0YWdlJyxcbiAgICAgIGlkLFxuICAgICAgaXNTdWJmbG93Um9vdDogdHJ1ZSxcbiAgICAgIHN1YmZsb3dJZDogaWQsXG4gICAgICBzdWJmbG93TmFtZSxcbiAgICAgIHN1YmZsb3dTdHJ1Y3R1cmU6IHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlLFxuICAgIH07XG4gICAgYXR0YWNoZWRTcGVjID0gdGhpcy5fYXBwbHlFeHRyYWN0b3JUb05vZGUoYXR0YWNoZWRTcGVjKTtcblxuICAgIGN1ci5uZXh0ID0gbm9kZTtcbiAgICBjdXJTcGVjLm5leHQgPSBhdHRhY2hlZFNwZWM7XG4gICAgdGhpcy5fY3Vyc29yID0gbm9kZTtcbiAgICB0aGlzLl9jdXJzb3JTcGVjID0gYXR0YWNoZWRTcGVjO1xuXG4gICAgdGhpcy5fbWVyZ2VTdGFnZU1hcChzdWJmbG93LnN0YWdlTWFwLCBpZCk7XG4gICAgdGhpcy5fbWVyZ2VTdWJmbG93cyhzdWJmbG93LnN1YmZsb3dzLCBpZCk7XG4gICAgdGhpcy5fYXBwZW5kU3ViZmxvd0Rlc2NyaXB0aW9uKGlkLCBzdWJmbG93TmFtZSwgc3ViZmxvdyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOKUgOKUgCBMb29wIOKUgOKUgFxuXG4gIGxvb3BUbyhzdGFnZUlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCBjdXIgPSB0aGlzLl9uZWVkQ3Vyc29yKCk7XG4gICAgY29uc3QgY3VyU3BlYyA9IHRoaXMuX25lZWRDdXJzb3JTcGVjKCk7XG5cbiAgICBpZiAoY3VyU3BlYy5sb29wVGFyZ2V0KSBmYWlsKGBsb29wVG8gYWxyZWFkeSBkZWZpbmVkIGF0ICcke2N1ci5uYW1lfSdgKTtcbiAgICBpZiAoY3VyLm5leHQpIGZhaWwoYGNhbm5vdCBzZXQgbG9vcFRvIHdoZW4gbmV4dCBpcyBhbHJlYWR5IGRlZmluZWQgYXQgJyR7Y3VyLm5hbWV9J2ApO1xuXG4gICAgaWYgKCF0aGlzLl9rbm93blN0YWdlSWRzLmhhcyhzdGFnZUlkKSkge1xuICAgICAgZmFpbChgbG9vcFRvKCcke3N0YWdlSWR9JykgdGFyZ2V0IG5vdCBmb3VuZCDigJQgZGlkIHlvdSBwYXNzIGEgc3RhZ2UgbmFtZSBpbnN0ZWFkIG9mIGlkP2ApO1xuICAgIH1cblxuICAgIGN1ci5uZXh0ID0geyBuYW1lOiBzdGFnZUlkLCBpZDogc3RhZ2VJZCwgaXNMb29wUmVmOiB0cnVlIH07XG4gICAgY3VyU3BlYy5sb29wVGFyZ2V0ID0gc3RhZ2VJZDtcbiAgICBjdXJTcGVjLm5leHQgPSB7IG5hbWU6IHN0YWdlSWQsIGlkOiBzdGFnZUlkLCB0eXBlOiAnc3RhZ2UnIH07XG5cbiAgICBjb25zdCB0YXJnZXRTdGVwID0gdGhpcy5fc3RhZ2VTdGVwTWFwLmdldChzdGFnZUlkKTtcbiAgICBpZiAodGFyZ2V0U3RlcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9kZXNjcmlwdGlvblBhcnRzLnB1c2goYOKGkiBsb29wcyBiYWNrIHRvIHN0ZXAgJHt0YXJnZXRTdGVwfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kZXNjcmlwdGlvblBhcnRzLnB1c2goYOKGkiBsb29wcyBiYWNrIHRvICR7c3RhZ2VJZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOKUgOKUgCBTdHJlYW1pbmcg4pSA4pSAXG5cbiAgb25TdHJlYW0oaGFuZGxlcjogU3RyZWFtVG9rZW5IYW5kbGVyKTogdGhpcyB7XG4gICAgdGhpcy5fc3RyZWFtSGFuZGxlcnMub25Ub2tlbiA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvblN0cmVhbVN0YXJ0KGhhbmRsZXI6IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9zdHJlYW1IYW5kbGVycy5vblN0YXJ0ID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9uU3RyZWFtRW5kKGhhbmRsZXI6IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9zdHJlYW1IYW5kbGVycy5vbkVuZCA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDilIDilIAgRXh0cmFjdG9ycyDilIDilIBcblxuICBhZGRUcmF2ZXJzYWxFeHRyYWN0b3I8VFJlc3VsdCA9IHVua25vd24+KGV4dHJhY3RvcjogVHJhdmVyc2FsRXh0cmFjdG9yPFRSZXN1bHQ+KTogdGhpcyB7XG4gICAgdGhpcy5fZXh0cmFjdG9yID0gZXh0cmFjdG9yO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkQnVpbGRUaW1lRXh0cmFjdG9yPFRSZXN1bHQgPSBGbG93Q2hhcnRTcGVjPihleHRyYWN0b3I6IEJ1aWxkVGltZUV4dHJhY3RvcjxUUmVzdWx0Pik6IHRoaXMge1xuICAgIHRoaXMuX2J1aWxkVGltZUV4dHJhY3RvciA9IGV4dHJhY3RvcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldEJ1aWxkVGltZUV4dHJhY3RvckVycm9ycygpOiBBcnJheTx7IG1lc3NhZ2U6IHN0cmluZzsgZXJyb3I6IHVua25vd24gfT4ge1xuICAgIHJldHVybiB0aGlzLl9idWlsZFRpbWVFeHRyYWN0b3JFcnJvcnM7XG4gIH1cblxuICAvLyDilIDilIAgT3V0cHV0IOKUgOKUgFxuXG4gIGJ1aWxkKCk6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+IHtcbiAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdCA/PyBmYWlsKCdlbXB0eSB0cmVlOyBjYWxsIHN0YXJ0KCkgZmlyc3QnKTtcbiAgICBjb25zdCByb290U3BlYyA9IHRoaXMuX3Jvb3RTcGVjID8/IGZhaWwoJ2VtcHR5IHNwZWM7IGNhbGwgc3RhcnQoKSBmaXJzdCcpO1xuXG4gICAgY29uc3Qgc3ViZmxvd3M6IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGRlZl0gb2YgdGhpcy5fc3ViZmxvd0RlZnMpIHtcbiAgICAgIHN1YmZsb3dzW2tleV0gPSBkZWY7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdE5hbWUgPSB0aGlzLl9yb290Py5uYW1lID8/ICdGbG93Q2hhcnQnO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID1cbiAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uUGFydHMubGVuZ3RoID4gMCA/IGBGbG93Q2hhcnQ6ICR7cm9vdE5hbWV9XFxuU3RlcHM6XFxuJHt0aGlzLl9kZXNjcmlwdGlvblBhcnRzLmpvaW4oJ1xcbicpfWAgOiAnJztcblxuICAgIHJldHVybiB7XG4gICAgICByb290LFxuICAgICAgc3RhZ2VNYXA6IHRoaXMuX3N0YWdlTWFwLFxuICAgICAgZXh0cmFjdG9yOiB0aGlzLl9leHRyYWN0b3IsXG4gICAgICBidWlsZFRpbWVTdHJ1Y3R1cmU6IHJvb3RTcGVjLFxuICAgICAgLi4uKE9iamVjdC5rZXlzKHN1YmZsb3dzKS5sZW5ndGggPiAwID8geyBzdWJmbG93cyB9IDoge30pLFxuICAgICAgLi4uKHRoaXMuX2VuYWJsZU5hcnJhdGl2ZSA/IHsgZW5hYmxlTmFycmF0aXZlOiB0cnVlIH0gOiB7fSksXG4gICAgICAuLi4odGhpcy5fbG9nZ2VyID8geyBsb2dnZXI6IHRoaXMuX2xvZ2dlciB9IDoge30pLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBzdGFnZURlc2NyaXB0aW9uczogbmV3IE1hcCh0aGlzLl9zdGFnZURlc2NyaXB0aW9ucyksXG4gICAgICAuLi4odGhpcy5faW5wdXRTY2hlbWEgPyB7IGlucHV0U2NoZW1hOiB0aGlzLl9pbnB1dFNjaGVtYSB9IDoge30pLFxuICAgICAgLi4uKHRoaXMuX291dHB1dFNjaGVtYSA/IHsgb3V0cHV0U2NoZW1hOiB0aGlzLl9vdXRwdXRTY2hlbWEgfSA6IHt9KSxcbiAgICAgIC4uLih0aGlzLl9vdXRwdXRNYXBwZXIgPyB7IG91dHB1dE1hcHBlcjogdGhpcy5fb3V0cHV0TWFwcGVyIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIHRvU3BlYzxUUmVzdWx0ID0gU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlPigpOiBUUmVzdWx0IHtcbiAgICBjb25zdCByb290U3BlYyA9IHRoaXMuX3Jvb3RTcGVjID8/IGZhaWwoJ2VtcHR5IHRyZWU7IGNhbGwgc3RhcnQoKSBmaXJzdCcpO1xuICAgIHJldHVybiByb290U3BlYyBhcyBUUmVzdWx0O1xuICB9XG5cbiAgdG9NZXJtYWlkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gWydmbG93Y2hhcnQgVEQnXTtcbiAgICBjb25zdCBpZE9mID0gKGs6IHN0cmluZykgPT4gKGsgfHwgJycpLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywgJ18nKSB8fCAnXyc7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMuX3Jvb3QgPz8gZmFpbCgnZW1wdHkgdHJlZTsgY2FsbCBzdGFydCgpIGZpcnN0Jyk7XG5cbiAgICBjb25zdCB3YWxrID0gKG46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+KSA9PiB7XG4gICAgICBjb25zdCBuaWQgPSBpZE9mKG4uaWQpO1xuICAgICAgbGluZXMucHVzaChgJHtuaWR9W1wiJHtuLm5hbWV9XCJdYCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2Ygbi5jaGlsZHJlbiB8fCBbXSkge1xuICAgICAgICBjb25zdCBjaWQgPSBpZE9mKGMuaWQpO1xuICAgICAgICBsaW5lcy5wdXNoKGAke25pZH0gLS0+ICR7Y2lkfWApO1xuICAgICAgICB3YWxrKGMpO1xuICAgICAgfVxuICAgICAgaWYgKG4ubmV4dCkge1xuICAgICAgICBjb25zdCBtaWQgPSBpZE9mKG4ubmV4dC5pZCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCR7bmlkfSAtLT4gJHttaWR9YCk7XG4gICAgICAgIHdhbGsobi5uZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdhbGsocm9vdCk7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyAoZXhwb3NlZCBmb3IgaGVscGVyIGNsYXNzZXMpIOKUgOKUgFxuXG4gIHByaXZhdGUgX25lZWRDdXJzb3IoKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4ge1xuICAgIHJldHVybiB0aGlzLl9jdXJzb3IgPz8gZmFpbCgnY3Vyc29yIHVuZGVmaW5lZDsgY2FsbCBzdGFydCgpIGZpcnN0Jyk7XG4gIH1cblxuICBwcml2YXRlIF9uZWVkQ3Vyc29yU3BlYygpOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICAgIHJldHVybiB0aGlzLl9jdXJzb3JTcGVjID8/IGZhaWwoJ2N1cnNvciB1bmRlZmluZWQ7IGNhbGwgc3RhcnQoKSBmaXJzdCcpO1xuICB9XG5cbiAgX2FwcGx5RXh0cmFjdG9yVG9Ob2RlKHNwZWM6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSk6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB7XG4gICAgaWYgKCF0aGlzLl9idWlsZFRpbWVFeHRyYWN0b3IpIHJldHVybiBzcGVjO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fYnVpbGRUaW1lRXh0cmFjdG9yKHNwZWMgYXMgYW55KSBhcyBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhpcy5fYnVpbGRUaW1lRXh0cmFjdG9yRXJyb3JzLnB1c2goe1xuICAgICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSA/PyBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBlcnJvcixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNwZWM7XG4gICAgfVxuICB9XG5cbiAgX2FkZFRvTWFwKG5hbWU6IHN0cmluZywgZm46IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+KSB7XG4gICAgaWYgKHRoaXMuX3N0YWdlTWFwLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLl9zdGFnZU1hcC5nZXQobmFtZSk7XG4gICAgICBpZiAoZXhpc3RpbmcgIT09IGZuKSBmYWlsKGBzdGFnZU1hcCBjb2xsaXNpb24gZm9yICcke25hbWV9J2ApO1xuICAgIH1cbiAgICB0aGlzLl9zdGFnZU1hcC5zZXQobmFtZSwgZm4pO1xuICB9XG5cbiAgX21lcmdlU3RhZ2VNYXAob3RoZXI6IE1hcDxzdHJpbmcsIFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PiwgcHJlZml4Pzogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2Ygb3RoZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHByZWZpeCA/IGAke3ByZWZpeH0vJHtrfWAgOiBrO1xuICAgICAgaWYgKHRoaXMuX3N0YWdlTWFwLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fc3RhZ2VNYXAuZ2V0KGtleSk7XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdikgZmFpbChgc3RhZ2VNYXAgY29sbGlzaW9uIHdoaWxlIG1vdW50aW5nIGZsb3djaGFydCBhdCAnJHtrZXl9J2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3RhZ2VNYXAuc2V0KGtleSwgdik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3ByZWZpeE5vZGVUcmVlKG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBwcmVmaXg6IHN0cmluZyk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHtcbiAgICBpZiAoIW5vZGUpIHJldHVybiBub2RlO1xuICAgIGNvbnN0IGNsb25lOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9IHsgLi4ubm9kZSB9O1xuICAgIGNsb25lLm5hbWUgPSBgJHtwcmVmaXh9LyR7bm9kZS5uYW1lfWA7XG4gICAgaWYgKGNsb25lLnN1YmZsb3dJZCkgY2xvbmUuc3ViZmxvd0lkID0gYCR7cHJlZml4fS8ke2Nsb25lLnN1YmZsb3dJZH1gO1xuICAgIGlmIChjbG9uZS5uZXh0KSBjbG9uZS5uZXh0ID0gdGhpcy5fcHJlZml4Tm9kZVRyZWUoY2xvbmUubmV4dCwgcHJlZml4KTtcbiAgICBpZiAoY2xvbmUuY2hpbGRyZW4pIHtcbiAgICAgIGNsb25lLmNoaWxkcmVuID0gY2xvbmUuY2hpbGRyZW4ubWFwKChjKSA9PiB0aGlzLl9wcmVmaXhOb2RlVHJlZShjLCBwcmVmaXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgX21lcmdlU3ViZmxvd3Moc3ViZmxvd3M6IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT4gfCB1bmRlZmluZWQsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgaWYgKCFzdWJmbG93cykgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgW2tleSwgZGVmXSBvZiBPYmplY3QuZW50cmllcyhzdWJmbG93cykpIHtcbiAgICAgIGNvbnN0IHByZWZpeGVkS2V5ID0gYCR7cHJlZml4fS8ke2tleX1gO1xuICAgICAgaWYgKCF0aGlzLl9zdWJmbG93RGVmcy5oYXMocHJlZml4ZWRLZXkpKSB7XG4gICAgICAgIHRoaXMuX3N1YmZsb3dEZWZzLnNldChwcmVmaXhlZEtleSwge1xuICAgICAgICAgIHJvb3Q6IHRoaXMuX3ByZWZpeE5vZGVUcmVlKGRlZi5yb290IGFzIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBwcmVmaXgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGYWN0b3J5IEZ1bmN0aW9uXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIGZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+KFxuICBuYW1lOiBzdHJpbmcsXG4gIGZuOiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPixcbiAgaWQ6IHN0cmluZyxcbiAgYnVpbGRUaW1lRXh0cmFjdG9yPzogQnVpbGRUaW1lRXh0cmFjdG9yPGFueT4sXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuKTogRmxvd0NoYXJ0QnVpbGRlcjxUT3V0LCBUU2NvcGU+IHtcbiAgcmV0dXJuIG5ldyBGbG93Q2hhcnRCdWlsZGVyPFRPdXQsIFRTY29wZT4oYnVpbGRUaW1lRXh0cmFjdG9yKS5zdGFydChuYW1lLCBmbiwgaWQsIGRlc2NyaXB0aW9uKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTcGVjIHRvIFN0YWdlTm9kZSBDb252ZXJ0ZXJcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gc3BlY1RvU3RhZ2VOb2RlKHNwZWM6IEZsb3dDaGFydFNwZWMpOiBTdGFnZU5vZGU8YW55LCBhbnk+IHtcbiAgY29uc3QgaW5mbGF0ZSA9IChzOiBGbG93Q2hhcnRTcGVjKTogU3RhZ2VOb2RlPGFueSwgYW55PiA9PiAoe1xuICAgIG5hbWU6IHMubmFtZSxcbiAgICBpZDogcy5pZCA/PyBzLm5hbWUsXG4gICAgY2hpbGRyZW46IHMuY2hpbGRyZW4/Lmxlbmd0aCA/IHMuY2hpbGRyZW4ubWFwKGluZmxhdGUpIDogdW5kZWZpbmVkLFxuICAgIG5leHQ6IHMubmV4dCA/IGluZmxhdGUocy5uZXh0KSA6IHVuZGVmaW5lZCxcbiAgfSk7XG4gIHJldHVybiBpbmZsYXRlKHNwZWMpO1xufVxuIl19
@@ -9,4 +9,4 @@
9
9
  export { DeciderList, FlowChartBuilder, SelectorFnList } from './FlowChartBuilder';
10
10
  // Factory & utilities
11
11
  export { flowChart, specToStageNode } from './FlowChartBuilder';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7OztHQUtHO0FBRUgsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkYsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBidWlsZGVyLyDigJQgRmxvd2NoYXJ0IGNvbnN0cnVjdGlvbiBsaWJyYXJ5ICh6ZXJvIGRlcHMgb24gb2xkIGNvZGUpXG4gKlxuICogRmx1ZW50IEFQSSBmb3IgYnVpbGRpbmcgU3RhZ2VOb2RlIHRyZWVzIGFuZCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUuXG4gKiBDYW4gYmUgdXNlZCBzdGFuZGFsb25lIGZvciBidWlsZGluZyBmbG93Y2hhcnQgc3BlY3Mgd2l0aG91dCBleGVjdXRpb24uXG4gKi9cblxuLy8gQ2xhc3Nlc1xuZXhwb3J0IHsgRGVjaWRlckxpc3QsIEZsb3dDaGFydEJ1aWxkZXIsIFNlbGVjdG9yRm5MaXN0IH0gZnJvbSAnLi9GbG93Q2hhcnRCdWlsZGVyJztcblxuLy8gRmFjdG9yeSAmIHV0aWxpdGllc1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBzcGVjVG9TdGFnZU5vZGUgfSBmcm9tICcuL0Zsb3dDaGFydEJ1aWxkZXInO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFRpbWVFeHRyYWN0b3IsXG4gIEJ1aWxkVGltZU5vZGVNZXRhZGF0YSxcbiAgRXhlY09wdGlvbnMsXG4gIEZsb3dDaGFydCxcbiAgRmxvd0NoYXJ0U3BlYyxcbiAgSUxvZ2dlcixcbiAgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uLFxuICBTY29wZVByb3RlY3Rpb25Nb2RlLFxuICBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsXG4gIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWMsXG4gIFN0YWdlRm4sXG4gIFN0YWdlTm9kZSxcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gIFN1YmZsb3dSZWYsXG4gIFRyYXZlcnNhbEV4dHJhY3Rvcixcbn0gZnJvbSAnLi90eXBlcyc7XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7OztHQUtHO0FBRUgsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkYsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBidWlsZGVyLyDigJQgRmxvd2NoYXJ0IGNvbnN0cnVjdGlvbiBsaWJyYXJ5ICh6ZXJvIGRlcHMgb24gb2xkIGNvZGUpXG4gKlxuICogRmx1ZW50IEFQSSBmb3IgYnVpbGRpbmcgU3RhZ2VOb2RlIHRyZWVzIGFuZCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUuXG4gKiBDYW4gYmUgdXNlZCBzdGFuZGFsb25lIGZvciBidWlsZGluZyBmbG93Y2hhcnQgc3BlY3Mgd2l0aG91dCBleGVjdXRpb24uXG4gKi9cblxuLy8gQ2xhc3Nlc1xuZXhwb3J0IHsgRGVjaWRlckxpc3QsIEZsb3dDaGFydEJ1aWxkZXIsIFNlbGVjdG9yRm5MaXN0IH0gZnJvbSAnLi9GbG93Q2hhcnRCdWlsZGVyJztcblxuLy8gRmFjdG9yeSAmIHV0aWxpdGllc1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBzcGVjVG9TdGFnZU5vZGUgfSBmcm9tICcuL0Zsb3dDaGFydEJ1aWxkZXInO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBCdWlsZFRpbWVFeHRyYWN0b3IsXG4gIEJ1aWxkVGltZU5vZGVNZXRhZGF0YSxcbiAgRXhlY09wdGlvbnMsXG4gIEZsb3dDaGFydCxcbiAgRmxvd0NoYXJ0U3BlYyxcbiAgSUxvZ2dlcixcbiAgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uLFxuICBTY29wZVByb3RlY3Rpb25Nb2RlLFxuICBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsXG4gIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWMsXG4gIFN0YWdlRm4sXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0YWdlTm9kZSxcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gIFN1YmZsb3dSZWYsXG4gIFRyYXZlcnNhbEV4dHJhY3Rvcixcbn0gZnJvbSAnLi90eXBlcyc7XG4iXX0=
@@ -1,9 +1,12 @@
1
1
  /**
2
2
  * builder/types.ts — All types used by the builder library.
3
3
  *
4
- * Zero deps on old code. Only imports from lib/memory (Phase 1).
5
- * Types that originated in executor/Pipeline.ts and executor/types.ts
6
- * are defined locally here for the new library.
4
+ * Shared types (StageNode, StageFunction, etc.) are imported from the engine.
5
+ * Builder-specific types (FlowChartSpec, FlowChart, SerializedPipelineStructure)
6
+ * are defined locally they carry builder-only fields (description, outputMapper, etc.).
7
+ *
8
+ * NOTE: All engine imports are `import type` — zero runtime dependency.
9
+ * The builder remains standalone at runtime.
7
10
  */
8
11
  export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBidWlsZGVyL3R5cGVzLnRzIOKAlCBBbGwgdHlwZXMgdXNlZCBieSB0aGUgYnVpbGRlciBsaWJyYXJ5LlxuICpcbiAqIFplcm8gZGVwcyBvbiBvbGQgY29kZS4gT25seSBpbXBvcnRzIGZyb20gbGliL21lbW9yeSAoUGhhc2UgMSkuXG4gKiBUeXBlcyB0aGF0IG9yaWdpbmF0ZWQgaW4gZXhlY3V0b3IvUGlwZWxpbmUudHMgYW5kIGV4ZWN1dG9yL3R5cGVzLnRzXG4gKiBhcmUgZGVmaW5lZCBsb2NhbGx5IGhlcmUgZm9yIHRoZSBuZXcgbGlicmFyeS5cbiAqL1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIExvZ2dlciAoY29waWVkIGZyb20gdXRpbHMvbG9nZ2VyLnRzIHRvIGF2b2lkIG9sZC1jb2RlIGRlcClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2NvcGUgUHJvdGVjdGlvbiAoY29waWVkIGZyb20gc2NvcGUvcHJvdGVjdGlvbi90eXBlcy50cylcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTY29wZVByb3RlY3Rpb25Nb2RlID0gJ2Vycm9yJyB8ICd3YXJuJyB8ICdvZmYnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0YWdlIEZ1bmN0aW9uXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgc3RhZ2VzIHRvIGVtaXQgdG9rZW5zIGluY3JlbWVudGFsbHkuICovXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIHN0YWdlIGhhbmRsZXJzLlxuICpcbiAqIFRPdXQgICDigJMgcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiBUU2NvcGUg4oCTIHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0PiB8IFRPdXQ7XG5cbi8qKiBSZWxheGVkLWdlbmVyaWMgYWxpYXMgZm9yIGJ1aWxkZXIgZXJnb25vbWljcy4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRm4gPSBQaXBlbGluZVN0YWdlRnVuY3Rpb248YW55LCBhbnk+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cmVhbWluZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRva2VuSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCBmdWxsVGV4dD86IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVycyB7XG4gIG9uVG9rZW4/OiBTdHJlYW1Ub2tlbkhhbmRsZXI7XG4gIG9uU3RhcnQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xuICBvbkVuZD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvdyBNb3VudCBPcHRpb25zXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdGFnZU5vZGUg4oCUIHRoZSBydW50aW1lIGdyYXBoIG5vZGVcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTdGFnZU5vZGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN0YWdlIG5hbWU7IGFsc28gdXNlZCBhcyB0aGUgc3RhZ2VNYXAga2V5LiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgaWRlbnRpZmllciBmb3IgdmlzdWFsaXphdGlvbiBtYXRjaGluZyBhbmQgYnJhbmNoIGFnZ3JlZ2F0aW9uLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBDb250aW51YXRpb25zIOKUgOKUgFxuICAvKiogTGluZWFyIGNvbnRpbnVhdGlvbi4gKi9cbiAgbmV4dD86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKiogUGFyYWxsZWwgY2hpbGRyZW4gKGZvcmspLiAqL1xuICBjaGlsZHJlbj86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG5cbiAgLy8g4pSA4pSAIERlY2lkZXJzICYgU2VsZWN0b3JzIOKUgOKUgFxuICAvKiogV2hlbiB0cnVlLCBmbiBJUyB0aGUgZGVjaWRlciDigJQgcmV0dXJucyBhIGJyYW5jaCBJRCBzdHJpbmcuICovXG4gIGRlY2lkZXJGbj86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIGZuIElTIHRoZSBzZWxlY3RvciDigJQgcmV0dXJucyBicmFuY2ggSUQocykuICovXG4gIHNlbGVjdG9yRm4/OiBib29sZWFuO1xuXG4gIC8vIOKUgOKUgCBTdGFnZSBmdW5jdGlvbiDilIDilIBcbiAgZm4/OiBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcblxuICAvLyDilIDilIAgU3RyZWFtaW5nIOKUgOKUgFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgCBTdWJmbG93IOKUgOKUgFxuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgJHJlZj86IHN0cmluZztcbiAgbW91bnRJZD86IHN0cmluZztcbiAgc3ViZmxvd01vdW50T3B0aW9ucz86IFN1YmZsb3dNb3VudE9wdGlvbnM7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgcGFyYWxsZWwgY2hpbGRyZW4gdXNlIGZhaWwtZmFzdCBzZW1hbnRpY3MgKHJlamVjdCBvbiBmaXJzdCBlcnJvcikuICovXG4gIGZhaWxGYXN0PzogYm9vbGVhbjtcblxuICAvKiogSW5saW5lIHN1YmZsb3cgZGVmaW5pdGlvbiBmb3IgZHluYW1pYyBzdWJmbG93IGF0dGFjaG1lbnQuICovXG4gIHN1YmZsb3dEZWY/OiB7XG4gICAgcm9vdDogU3RhZ2VOb2RlO1xuICAgIHN0YWdlTWFwPzogTWFwPHN0cmluZywgUGlwZWxpbmVTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICAgIGJ1aWxkVGltZVN0cnVjdHVyZT86IHVua25vd247XG4gICAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZSB9PjtcbiAgfTtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKEpTT04tc2FmZSwgZm9yIHZpc3VhbGl6YXRpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZyc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0U3BlYyAocHVyZSBKU09OLCBubyBmdW5jdGlvbnMg4oCUIGZvciBGReKGkkJFIHRyYW5zcG9ydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydFNwZWMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBGbG93Q2hhcnRTcGVjW107XG4gIG5leHQ/OiBGbG93Q2hhcnRTcGVjO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBCdWlsZC1UaW1lIEV4dHJhY3RvclxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBNZXRhZGF0YSBwcm92aWRlZCB0byB0aGUgYnVpbGQtdGltZSBleHRyYWN0b3IgZm9yIGVhY2ggbm9kZS4gKi9cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZU5vZGVNZXRhZGF0YSA9IEZsb3dDaGFydFNwZWM7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZUV4dHJhY3RvcjxUUmVzdWx0ID0gRmxvd0NoYXJ0U3BlYz4gPSAobWV0YWRhdGE6IEJ1aWxkVGltZU5vZGVNZXRhZGF0YSkgPT4gVFJlc3VsdDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUcmF2ZXJzYWwgRXh0cmFjdG9yIChydW50aW1lKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFRyYXZlcnNhbEV4dHJhY3RvcjxUUmVzdWx0ID0gdW5rbm93bj4gPSAoc25hcHNob3Q6IHVua25vd24pID0+IFRSZXN1bHQgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydCDigJQgY29tcGlsZWQgb3V0cHV0IG9mIGJ1aWxkKClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIGV4dHJhY3Rvcj86IFRyYXZlcnNhbEV4dHJhY3RvcjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJbnB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRJbnB1dFNjaGVtYSgpLiAqL1xuICBpbnB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0T3V0cHV0U2NoZW1hKCkuICovXG4gIG91dHB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgbWFwcGVyIOKAlCBleHRyYWN0cyByZXNwb25zZSBmcm9tIGZpbmFsIHNjb3BlLiAqL1xuICBvdXRwdXRNYXBwZXI/OiAoZmluYWxTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHVua25vd247XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNpbXBsaWZpZWQgUGFyYWxsZWwgU3BlYyAoZm9yIGFkZExpc3RPZkZ1bmN0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBmbj86IFBpcGVsaW5lU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBidWlsZGVyL3R5cGVzLnRzIOKAlCBBbGwgdHlwZXMgdXNlZCBieSB0aGUgYnVpbGRlciBsaWJyYXJ5LlxuICpcbiAqIFNoYXJlZCB0eXBlcyAoU3RhZ2VOb2RlLCBTdGFnZUZ1bmN0aW9uLCBldGMuKSBhcmUgaW1wb3J0ZWQgZnJvbSB0aGUgZW5naW5lLlxuICogQnVpbGRlci1zcGVjaWZpYyB0eXBlcyAoRmxvd0NoYXJ0U3BlYywgRmxvd0NoYXJ0LCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUpXG4gKiBhcmUgZGVmaW5lZCBsb2NhbGx5IOKAlCB0aGV5IGNhcnJ5IGJ1aWxkZXItb25seSBmaWVsZHMgKGRlc2NyaXB0aW9uLCBvdXRwdXRNYXBwZXIsIGV0Yy4pLlxuICpcbiAqIE5PVEU6IEFsbCBlbmdpbmUgaW1wb3J0cyBhcmUgYGltcG9ydCB0eXBlYCDigJQgemVybyBydW50aW1lIGRlcGVuZGVuY3kuXG4gKiBUaGUgYnVpbGRlciByZW1haW5zIHN0YW5kYWxvbmUgYXQgcnVudGltZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS9ncmFwaC9TdGFnZU5vZGUnO1xuaW1wb3J0IHR5cGUgeyBJTG9nZ2VyLCBTdGFnZUZ1bmN0aW9uIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBSZS1leHBvcnRzIGZyb20gZW5naW5lIChjYW5vbmljYWwgZGVmaW5pdGlvbnMpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlJztcbmV4cG9ydCB0eXBlIHtcbiAgSUxvZ2dlcixcbiAgU3RhZ2VGdW5jdGlvbixcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG59IGZyb20gJy4uL2VuZ2luZS90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQmFja3dhcmQtY29tcGF0aWJsZSBhbGlhc2VzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBTdGFnZUZ1bmN0aW9uIGluc3RlYWQuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcblxuLyoqIFJlbGF4ZWQtZ2VuZXJpYyBhbGlhcyBmb3IgYnVpbGRlciBlcmdvbm9taWNzLiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGbiA9IFN0YWdlRnVuY3Rpb248YW55LCBhbnk+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNjb3BlIFByb3RlY3Rpb25cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTY29wZVByb3RlY3Rpb25Nb2RlID0gJ2Vycm9yJyB8ICd3YXJuJyB8ICdvZmYnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChKU09OLXNhZmUsIGZvciB2aXN1YWxpemF0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgdHlwZTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydFNwZWMgKHB1cmUgSlNPTiwgbm8gZnVuY3Rpb25zIOKAlCBmb3IgRkXihpJCRSB0cmFuc3BvcnQpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRTcGVjIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogRmxvd0NoYXJ0U3BlY1tdO1xuICBuZXh0PzogRmxvd0NoYXJ0U3BlYztcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQnVpbGQtVGltZSBFeHRyYWN0b3Jcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogTWV0YWRhdGEgcHJvdmlkZWQgdG8gdGhlIGJ1aWxkLXRpbWUgZXh0cmFjdG9yIGZvciBlYWNoIG5vZGUuICovXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVOb2RlTWV0YWRhdGEgPSBGbG93Q2hhcnRTcGVjO1xuXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVFeHRyYWN0b3I8VFJlc3VsdCA9IEZsb3dDaGFydFNwZWM+ID0gKG1ldGFkYXRhOiBCdWlsZFRpbWVOb2RlTWV0YWRhdGEpID0+IFRSZXN1bHQ7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHJhdmVyc2FsIEV4dHJhY3RvciAocnVudGltZSlcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBUcmF2ZXJzYWxFeHRyYWN0b3I8VFJlc3VsdCA9IHVua25vd24+ID0gKHNuYXBzaG90OiB1bmtub3duKSA9PiBUUmVzdWx0IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnQg4oCUIGNvbXBpbGVkIG91dHB1dCBvZiBidWlsZCgpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRmxvd0NoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgZXh0cmFjdG9yPzogVHJhdmVyc2FsRXh0cmFjdG9yO1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZTogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xuICBsb2dnZXI/OiBJTG9nZ2VyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGFnZURlc2NyaXB0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIElucHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldElucHV0U2NoZW1hKCkuICovXG4gIGlucHV0U2NoZW1hPzogdW5rbm93bjtcbiAgLyoqIE91dHB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRPdXRwdXRTY2hlbWEoKS4gKi9cbiAgb3V0cHV0U2NoZW1hPzogdW5rbm93bjtcbiAgLyoqIE91dHB1dCBtYXBwZXIg4oCUIGV4dHJhY3RzIHJlc3BvbnNlIGZyb20gZmluYWwgc2NvcGUuICovXG4gIG91dHB1dE1hcHBlcj86IChmaW5hbFNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdW5rbm93bjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2ltcGxpZmllZCBQYXJhbGxlbCBTcGVjIChmb3IgYWRkTGlzdE9mRnVuY3Rpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19