@ruvector/ruvllm 2.5.4 → 2.5.6

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 (63) hide show
  1. package/README.md +282 -282
  2. package/bin/cli.js +1020 -1020
  3. package/dist/cjs/benchmarks/embedding-benchmark.js +1 -1
  4. package/dist/cjs/benchmarks/index.js +1 -1
  5. package/dist/cjs/benchmarks/model-comparison.js +1 -1
  6. package/dist/cjs/benchmarks/routing-benchmark.js +1 -1
  7. package/dist/cjs/contrastive.js +70 -70
  8. package/dist/cjs/engine.js +13 -13
  9. package/dist/cjs/export.js +31 -31
  10. package/dist/cjs/federated.js +1 -1
  11. package/dist/cjs/index.js +1 -1
  12. package/dist/cjs/intelligence.js +1 -1
  13. package/dist/cjs/lora.js +1 -1
  14. package/dist/cjs/models.js +1 -1
  15. package/dist/cjs/native.js +1 -1
  16. package/dist/cjs/session.js +1 -1
  17. package/dist/cjs/simd.js +1 -1
  18. package/dist/cjs/sona.d.ts +36 -0
  19. package/dist/cjs/sona.d.ts.map +1 -1
  20. package/dist/cjs/sona.js +66 -4
  21. package/dist/cjs/streaming.js +1 -1
  22. package/dist/cjs/training.js +1 -1
  23. package/dist/cjs/types.js +1 -1
  24. package/dist/esm/benchmarks/embedding-benchmark.js +1 -1
  25. package/dist/esm/benchmarks/index.js +1 -1
  26. package/dist/esm/benchmarks/model-comparison.js +1 -1
  27. package/dist/esm/benchmarks/routing-benchmark.js +1 -1
  28. package/dist/esm/contrastive.js +70 -70
  29. package/dist/esm/engine.js +13 -13
  30. package/dist/esm/export.js +31 -31
  31. package/dist/esm/federated.js +1 -1
  32. package/dist/esm/index.js +1 -1
  33. package/dist/esm/intelligence.js +1 -1
  34. package/dist/esm/lora.js +1 -1
  35. package/dist/esm/models.js +1 -1
  36. package/dist/esm/native.js +1 -1
  37. package/dist/esm/session.js +1 -1
  38. package/dist/esm/simd.js +1 -1
  39. package/dist/esm/sona.d.ts +36 -0
  40. package/dist/esm/sona.d.ts.map +1 -1
  41. package/dist/esm/sona.js +66 -4
  42. package/dist/esm/streaming.js +1 -1
  43. package/dist/esm/training.js +1 -1
  44. package/dist/esm/types.js +1 -1
  45. package/package.json +133 -133
  46. package/scripts/ensemble-model-compare.js +287 -287
  47. package/scripts/huggingface/README.md +537 -537
  48. package/scripts/huggingface/publish.sh +112 -112
  49. package/scripts/hybrid-model-compare.js +373 -373
  50. package/scripts/improved-model-compare.js +288 -288
  51. package/scripts/optimized-model-compare.js +364 -364
  52. package/scripts/real-model-compare.js +280 -280
  53. package/scripts/training/agentic-flow-capabilities.json +329 -329
  54. package/scripts/training/claude-code-synth.js +505 -505
  55. package/scripts/training/claude-flow-capabilities.json +1322 -1322
  56. package/scripts/training/claude-hard-negatives.js +222 -222
  57. package/scripts/training/contrastive-finetune.js +517 -517
  58. package/scripts/training/ecosystem-triplets.jsonl +1466 -1466
  59. package/scripts/training/generate-ecosystem-triplets.js +1324 -1324
  60. package/scripts/training/routing-dataset.js +634 -634
  61. package/scripts/training/ruvector-capabilities.json +798 -798
  62. package/scripts/training/validate-ecosystem.js +381 -381
  63. package/scripts/training/validation-results.json +22 -22
package/dist/cjs/sona.js CHANGED
@@ -7,6 +7,11 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.DEFAULT_SONA_CONFIG = exports.SonaCoordinator = exports.EwcManager = exports.ReasoningBank = exports.TrajectoryBuilder = void 0;
10
+ const lora_1 = require("./lora");
11
+ /** Embedding dimension used by the coordinator's hash embedder and micro-LoRA. */
12
+ const MICRO_LORA_DIM = 64;
13
+ /** Micro-LoRA rank: SONA's instant loop uses a tiny adapter (rank 1-2) by design. */
14
+ const MICRO_LORA_RANK = 2;
10
15
  /**
11
16
  * Default SONA configuration
12
17
  */
@@ -374,17 +379,24 @@ class SonaCoordinator {
374
379
  constructor(config) {
375
380
  this.trajectoryBuffer = [];
376
381
  this.signalBuffer = [];
382
+ this.microLoraUpdates = 0;
377
383
  this.config = { ...DEFAULT_SONA_CONFIG, ...config };
378
384
  this.reasoningBank = new ReasoningBank(this.config.patternThreshold);
379
385
  this.ewcManager = new EwcManager(this.config.ewcLambda);
386
+ this.microLora = new lora_1.LoraAdapter({ rank: MICRO_LORA_RANK }, MICRO_LORA_DIM, MICRO_LORA_DIM);
380
387
  }
381
388
  /**
382
389
  * Record a learning signal
390
+ *
391
+ * Every signal drives the instant loop: quality above 0.5 reinforces the
392
+ * signal's direction in the micro-LoRA, quality below 0.5 unlearns it
393
+ * (previously only quality >= 0.8 was processed, so negative feedback
394
+ * never adapted anything).
383
395
  */
384
396
  recordSignal(signal) {
385
397
  this.signalBuffer.push(signal);
386
398
  // Instant loop - immediate learning
387
- if (this.config.instantLoopEnabled && signal.quality >= 0.8) {
399
+ if (this.config.instantLoopEnabled) {
388
400
  this.processInstantLearning(signal);
389
401
  }
390
402
  }
@@ -444,11 +456,61 @@ class SonaCoordinator {
444
456
  trajectoriesBuffered: this.trajectoryBuffer.length,
445
457
  patterns: this.reasoningBank.stats(),
446
458
  ewc: this.ewcManager.stats(),
459
+ microLora: {
460
+ updates: this.microLoraUpdates,
461
+ deltaNorm: this.microLoraDeltaNorm(),
462
+ },
447
463
  };
448
464
  }
465
+ /**
466
+ * Apply the micro-LoRA transformation learned from feedback.
467
+ *
468
+ * Input is truncated/zero-padded to the adapter dimension; the residual
469
+ * connection means an untrained adapter returns the input unchanged.
470
+ */
471
+ applyMicroLora(input) {
472
+ return this.microLora.forward(input.slice(0, MICRO_LORA_DIM));
473
+ }
474
+ /**
475
+ * Frobenius norm of the micro-LoRA weight delta (scaling * A @ B).
476
+ *
477
+ * 0 means no adaptation has occurred (LoRA B is zero-initialized, so the
478
+ * delta is exactly zero until the first feedback update). Consumers can
479
+ * surface this directly (e.g. a statusline "delta LoRA" field) — see #553.
480
+ */
481
+ microLoraDeltaNorm() {
482
+ const { loraA, loraB, scaling } = this.microLora.getWeights();
483
+ const rank = loraB.length;
484
+ let sumSq = 0;
485
+ for (let i = 0; i < loraA.length; i++) {
486
+ for (let j = 0; j < MICRO_LORA_DIM; j++) {
487
+ let d = 0;
488
+ for (let r = 0; r < rank; r++) {
489
+ d += loraA[i][r] * loraB[r][j];
490
+ }
491
+ sumSq += scaling * d * (scaling * d);
492
+ }
493
+ }
494
+ return Math.sqrt(sumSq);
495
+ }
496
+ /**
497
+ * Instant-loop learning: a single feedback signal produces a real
498
+ * micro-LoRA weight update (fixes #553 — this was a no-op stub, so
499
+ * learn-from-feedback never changed any weight).
500
+ *
501
+ * REINFORCE-style with a fixed 0.5 baseline: reward = quality - 0.5.
502
+ * The gradient pushes the adapter output toward the signal's embedding
503
+ * direction for positive reward and away from it for negative reward
504
+ * (backward() applies `weights -= lr * grad`, hence the negated sign).
505
+ */
449
506
  processInstantLearning(signal) {
450
- // Immediate pattern reinforcement would happen here
451
- // In full implementation, this updates LoRA weights
507
+ const reward = signal.quality - 0.5;
508
+ if (reward === 0)
509
+ return;
510
+ const input = this.createEmbedding(signal.correction ?? `${signal.requestId}:${signal.type}`);
511
+ const gradOutput = input.map(x => -reward * x);
512
+ this.microLora.backward(input, gradOutput, this.config.loraLearningRate);
513
+ this.microLoraUpdates++;
452
514
  }
453
515
  extractPatterns(trajectory) {
454
516
  let extracted = 0;
@@ -497,4 +559,4 @@ class SonaCoordinator {
497
559
  }
498
560
  }
499
561
  exports.SonaCoordinator = SonaCoordinator;
500
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb25hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBZUg7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUF5QjtJQUNoRCxrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixRQUFRLEVBQUUsQ0FBQztJQUNYLFNBQVMsRUFBRSxJQUFJO0lBQ2YsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixnQkFBZ0IsRUFBRSxJQUFJO0NBQ3ZCLENBQUM7QUEyakJBLGtEQUFtQjtBQXpqQnJCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBYSxpQkFBaUI7SUFPNUI7UUFMUSxVQUFLLEdBQXFCLEVBQUUsQ0FBQztRQUM3QixnQkFBVyxHQUFtQyxJQUFJLENBQUM7UUFDbkQsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUk1QixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxJQUE0QixFQUFFLEtBQWE7UUFDbkQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFH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RUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNqRCxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxZQUFZO1FBQ1osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQTlKRCwwQ0E4SkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNPTkEgKFNlbGYtT3B0aW1pemluZyBOZXVyYWwgQXJjaGl0ZWN0dXJlKSBMZWFybmluZyBTeXN0ZW1cbiAqXG4gKiBQcm92aWRlcyBhZGFwdGl2ZSBsZWFybmluZyBjYXBhYmlsaXRpZXMgd2l0aCB0cmFqZWN0b3J5IHRyYWNraW5nLFxuICogcGF0dGVybiByZWNvZ25pdGlvbiwgYW5kIG1lbW9yeSBwcm90ZWN0aW9uIChFV0MrKykuXG4gKi9cblxuaW1wb3J0IHtcbiAgU29uYUNvbmZpZyxcbiAgTGVhcm5pbmdTaWduYWwsXG4gIFF1ZXJ5VHJhamVjdG9yeSxcbiAgVHJhamVjdG9yeVN0ZXAsXG4gIFRyYWplY3RvcnlPdXRjb21lLFxuICBMZWFybmVkUGF0dGVybixcbiAgUGF0dGVyblR5cGUsXG4gIEV3Y1N0YXRzLFxuICBMb1JBQ29uZmlnLFxuICBFbWJlZGRpbmcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIERlZmF1bHQgU09OQSBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IERFRkFVTFRfU09OQV9DT05GSUc6IFJlcXVpcmVkPFNvbmFDb25maWc+ID0ge1xuICBpbnN0YW50TG9vcEVuYWJsZWQ6IHRydWUsXG4gIGJhY2tncm91bmRMb29wRW5hYmxlZDogdHJ1ZSxcbiAgbG9yYUxlYXJuaW5nUmF0ZTogMC4wMDEsXG4gIGxvcmFSYW5rOiA4LFxuICBld2NMYW1iZGE6IDIwMDAsXG4gIG1heFRyYWplY3RvcnlTaXplOiAxMDAwLFxuICBwYXR0ZXJuVGhyZXNob2xkOiAwLjg1LFxufTtcblxuLyoqXG4gKiBUcmFqZWN0b3J5IEJ1aWxkZXIgZm9yIHRyYWNraW5nIHF1ZXJ5IGV4ZWN1dGlvbiBwYXRoc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBidWlsZGVyID0gbmV3IFRyYWplY3RvcnlCdWlsZGVyKCk7XG4gKlxuICogYnVpbGRlci5zdGFydFN0ZXAoJ3F1ZXJ5JywgJ1doYXQgaXMgQUk/Jyk7XG4gKiAvLyAuLi4gcHJvY2Vzc2luZyAuLi5cbiAqIGJ1aWxkZXIuZW5kU3RlcCgnQUkgaXMgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UnLCAwLjk1KTtcbiAqXG4gKiBidWlsZGVyLnN0YXJ0U3RlcCgnbWVtb3J5JywgJ3NlYXJjaGluZyBjb250ZXh0Jyk7XG4gKiBidWlsZGVyLmVuZFN0ZXAoJ2ZvdW5kIDMgcmVsZXZhbnQgZG9jdW1lbnRzJywgMC44OCk7XG4gKlxuICogY29uc3QgdHJhamVjdG9yeSA9IGJ1aWxkZXIuY29tcGxldGUoJ3N1Y2Nlc3MnKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgVHJhamVjdG9yeUJ1aWxkZXIge1xuICBwcml2YXRlIGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RlcHM6IFRyYWplY3RvcnlTdGVwW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50U3RlcDogUGFydGlhbDxUcmFqZWN0b3J5U3RlcD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGVwU3RhcnQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgc3RhcnRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pZCA9IGB0cmFqLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA4KX1gO1xuICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyBzdGVwIGluIHRoZSB0cmFqZWN0b3J5XG4gICAqL1xuICBzdGFydFN0ZXAodHlwZTogVHJhamVjdG9yeVN0ZXBbJ3R5cGUnXSwgaW5wdXQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwKSB7XG4gICAgICAvLyBBdXRvLWNvbXBsZXRlIHByZXZpb3VzIHN0ZXBcbiAgICAgIHRoaXMuZW5kU3RlcCgnJywgMCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGVwU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSB7XG4gICAgICB0eXBlLFxuICAgICAgaW5wdXQsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZCBjdXJyZW50IHN0ZXAgd2l0aCBvdXRwdXRcbiAgICovXG4gIGVuZFN0ZXAob3V0cHV0OiBzdHJpbmcsIGNvbmZpZGVuY2U6IG51bWJlcik6IHRoaXMge1xuICAgIGlmICghdGhpcy5jdXJyZW50U3RlcCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5zdGVwcy5wdXNoKHtcbiAgICAgIHR5cGU6IHRoaXMuY3VycmVudFN0ZXAudHlwZSEsXG4gICAgICBpbnB1dDogdGhpcy5jdXJyZW50U3RlcC5pbnB1dCEsXG4gICAgICBvdXRwdXQsXG4gICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGVwU3RhcnQsXG4gICAgICBjb25maWRlbmNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgdHJhamVjdG9yeSB3aXRoIGZpbmFsIG91dGNvbWVcbiAgICovXG4gIGNvbXBsZXRlKG91dGNvbWU6IFRyYWplY3RvcnlPdXRjb21lKTogUXVlcnlUcmFqZWN0b3J5IHtcbiAgICAvLyBDb21wbGV0ZSBhbnkgcGVuZGluZyBzdGVwXG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXApIHtcbiAgICAgIHRoaXMuZW5kU3RlcCgnaW5jb21wbGV0ZScsIDApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHN0ZXBzOiB0aGlzLnN0ZXBzLFxuICAgICAgb3V0Y29tZSxcbiAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHRyYWplY3RvcnkgSURcbiAgICovXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFzb25pbmdCYW5rIC0gUGF0dGVybiBzdG9yYWdlIGFuZCByZXRyaWV2YWxcbiAqXG4gKiBTdG9yZXMgbGVhcm5lZCBwYXR0ZXJucyBmcm9tIHN1Y2Nlc3NmdWwgaW50ZXJhY3Rpb25zIGFuZFxuICogZW5hYmxlcyBwYXR0ZXJuLWJhc2VkIHJlYXNvbmluZyBzaG9ydGN1dHMuXG4gKlxuICogT1BUSU1JWkVEOiBVc2VzIEZsb2F0NjRBcnJheSBmb3IgZW1iZWRkaW5ncyBhbmQgcGFydGlhbCBzb3J0aW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWFzb25pbmdCYW5rIHtcbiAgcHJpdmF0ZSBwYXR0ZXJuczogTWFwPHN0cmluZywgTGVhcm5lZFBhdHRlcm4+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGVtYmVkZGluZ3M6IE1hcDxzdHJpbmcsIEZsb2F0NjRBcnJheT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgZW1iZWRkaW5nTm9ybXM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7IC8vIFByZS1jb21wdXRlZCBub3Jtc1xuICBwcml2YXRlIHRocmVzaG9sZDogbnVtYmVyO1xuICAvLyBSZXVzYWJsZSBhcnJheXMgZm9yIGZpbmRTaW1pbGFyIHRvIGF2b2lkIGFsbG9jYXRpb25zXG4gIHByaXZhdGUgX3NpbWlsYXJpdHlSZXN1bHRzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHNjb3JlOiBudW1iZXIgfT4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQgPSAwLjg1KSB7XG4gICAgdGhpcy50aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgYSBuZXcgcGF0dGVyblxuICAgKi9cbiAgc3RvcmUoXG4gICAgdHlwZTogUGF0dGVyblR5cGUsXG4gICAgZW1iZWRkaW5nOiBFbWJlZGRpbmcsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkID0gYHBhdC0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOCl9YDtcblxuICAgIGNvbnN0IHBhdHRlcm46IExlYXJuZWRQYXR0ZXJuID0ge1xuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgZW1iZWRkaW5nLFxuICAgICAgc3VjY2Vzc1JhdGU6IDEuMCxcbiAgICAgIHVzZUNvdW50OiAwLFxuICAgICAgbGFzdFVzZWQ6IG5ldyBEYXRlKCksXG4gICAgfTtcblxuICAgIHRoaXMucGF0dGVybnMuc2V0KGlkLCBwYXR0ZXJuKTtcblxuICAgIC8vIFN0b3JlIGFzIHR5cGVkIGFycmF5IGZvciBmYXN0ZXIgc2ltaWxhcml0eSBjb21wdXRhdGlvblxuICAgIGNvbnN0IHR5cGVkRW1iID0gbmV3IEZsb2F0NjRBcnJheShlbWJlZGRpbmcpO1xuICAgIHRoaXMuZW1iZWRkaW5ncy5zZXQoaWQsIHR5cGVkRW1iKTtcblxuICAgIC8vIFByZS1jb21wdXRlIGFuZCBjYWNoZSB0aGUgbm9ybVxuICAgIGxldCBub3JtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVkRW1iLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub3JtICs9IHR5cGVkRW1iW2ldICogdHlwZWRFbWJbaV07XG4gICAgfVxuICAgIHRoaXMuZW1iZWRkaW5nTm9ybXMuc2V0KGlkLCBNYXRoLnNxcnQobm9ybSkpO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgc2ltaWxhciBwYXR0ZXJuc1xuICAgKiBPUFRJTUlaRUQ6IFVzZXMgdHlwZWQgYXJyYXlzLCBwcmUtY29tcHV0ZWQgbm9ybXMsIGFuZCBwYXJ0aWFsIHNvcnRpbmdcbiAgICovXG4gIGZpbmRTaW1pbGFyKGVtYmVkZGluZzogRW1iZWRkaW5nLCBrID0gNSk6IExlYXJuZWRQYXR0ZXJuW10ge1xuICAgIC8vIFByZS1jb21wdXRlIHF1ZXJ5IG5vcm1cbiAgICBsZXQgcXVlcnlOb3JtID0gMDtcbiAgICBjb25zdCBxdWVyeUxlbiA9IGVtYmVkZGluZy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyeUxlbjsgaSsrKSB7XG4gICAgICBxdWVyeU5vcm0gKz0gZW1iZWRkaW5nW2ldICogZW1iZWRkaW5nW2ldO1xuICAgIH1cbiAgICBxdWVyeU5vcm0gPSBNYXRoLnNxcnQocXVlcnlOb3JtKTtcblxuICAgIGlmIChxdWVyeU5vcm0gPT09IDApIHJldHVybiBbXTtcblxuICAgIC8vIFJldXNlIGFycmF5IHRvIGF2b2lkIGFsbG9jYXRpb25zXG4gICAgdGhpcy5fc2ltaWxhcml0eVJlc3VsdHMubGVuZ3RoID0gMDtcblxuICAgIGZvciAoY29uc3QgW2lkLCBwYXRFbWJdIG9mIHRoaXMuZW1iZWRkaW5ncykge1xuICAgICAgY29uc3QgcGF0Tm9ybSA9IHRoaXMuZW1iZWRkaW5nTm9ybXMuZ2V0KGlkKSB8fCAwO1xuICAgICAgaWYgKHBhdE5vcm0gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAvLyBGYXN0IGRvdCBwcm9kdWN0XG4gICAgICBsZXQgZG90ID0gMDtcbiAgICAgIGNvbnN0IG1pbkxlbiA9IE1hdGgubWluKHF1ZXJ5TGVuLCBwYXRFbWIubGVuZ3RoKTtcblxuICAgICAgLy8gVW5yb2xsZWQgbG9vcFxuICAgICAgbGV0IGkgPSAwO1xuICAgICAgZm9yICg7IGkgKyAzIDwgbWluTGVuOyBpICs9IDQpIHtcbiAgICAgICAgZG90ICs9IGVtYmVkZGluZ1tpXSAqIHBhdEVtYltpXSArXG4gICAgICAgICAgICAgICBlbWJlZGRpbmdbaSArIDFdICogcGF0RW1iW2kgKyAxXSArXG4gICAgICAgICAgICAgICBlbWJlZGRpbmdbaSArIDJdICogcGF0RW1iW2kgKyAyXSArXG4gICAgICAgICAgICAgICBlbWJlZGRpbmdbaSArIDNdICogcGF0RW1iW2kgKyAzXTtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpIDwgbWluTGVuOyBpKyspIHtcbiAgICAgICAgZG90ICs9IGVtYmVkZGluZ1tpXSAqIHBhdEVtYltpXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NvcmUgPSBkb3QgLyAocXVlcnlOb3JtICogcGF0Tm9ybSk7XG5cbiAgICAgIGlmIChzY29yZSA+PSB0aGlzLnRocmVzaG9sZCkge1xuICAgICAgICB0aGlzLl9zaW1pbGFyaXR5UmVzdWx0cy5wdXNoKHsgaWQsIHNjb3JlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhcnRpYWwgc29ydCBmb3IgdG9wLWsgKGZhc3RlciB0aGFuIGZ1bGwgc29ydCBmb3IgbGFyZ2UgYXJyYXlzKVxuICAgIGlmICh0aGlzLl9zaW1pbGFyaXR5UmVzdWx0cy5sZW5ndGggPD0gaykge1xuICAgICAgdGhpcy5fc2ltaWxhcml0eVJlc3VsdHMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBRdWljayBwYXJ0aWFsIHNvcnQgZm9yIHRvcCBrXG4gICAgICB0aGlzLnBhcnRpYWxTb3J0KHRoaXMuX3NpbWlsYXJpdHlSZXN1bHRzLCBrKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b3BLID0gdGhpcy5fc2ltaWxhcml0eVJlc3VsdHMuc2xpY2UoMCwgayk7XG5cbiAgICByZXR1cm4gdG9wS1xuICAgICAgLm1hcChzID0+IHRoaXMucGF0dGVybnMuZ2V0KHMuaWQpKVxuICAgICAgLmZpbHRlcigocCk6IHAgaXMgTGVhcm5lZFBhdHRlcm4gPT4gcCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJ0aWFsIHNvcnQgdG8gZ2V0IHRvcCBrIGVsZW1lbnRzIChmYXN0ZXIgdGhhbiBmdWxsIHNvcnQpXG4gICAqL1xuICBwcml2YXRlIHBhcnRpYWxTb3J0KGFycjogQXJyYXk8eyBpZDogc3RyaW5nOyBzY29yZTogbnVtYmVyIH0+LCBrOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBTaW1wbGUgc2VsZWN0aW9uIGZvciBzbWFsbCBrXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrICYmIGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBtYXhJZHggPSBpO1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChhcnJbal0uc2NvcmUgPiBhcnJbbWF4SWR4XS5zY29yZSkge1xuICAgICAgICAgIG1heElkeCA9IGo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtYXhJZHggIT09IGkpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IGFycltpXTtcbiAgICAgICAgYXJyW2ldID0gYXJyW21heElkeF07XG4gICAgICAgIGFyclttYXhJZHhdID0gdGVtcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHBhdHRlcm4gdXNhZ2UgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICovXG4gIHJlY29yZFVzYWdlKHBhdHRlcm5JZDogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybnMuZ2V0KHBhdHRlcm5JZCk7XG4gICAgaWYgKCFwYXR0ZXJuKSByZXR1cm47XG5cbiAgICBwYXR0ZXJuLnVzZUNvdW50Kys7XG4gICAgcGF0dGVybi5sYXN0VXNlZCA9IG5ldyBEYXRlKCk7XG5cbiAgICAvLyBVcGRhdGUgc3VjY2VzcyByYXRlIHdpdGggZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2VcbiAgICBjb25zdCBhbHBoYSA9IDAuMTtcbiAgICBjb25zdCBvdXRjb21lID0gc3VjY2VzcyA/IDEuMCA6IDAuMDtcbiAgICBwYXR0ZXJuLnN1Y2Nlc3NSYXRlID0gYWxwaGEgKiBvdXRjb21lICsgKDEgLSBhbHBoYSkgKiBwYXR0ZXJuLnN1Y2Nlc3NSYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwYXR0ZXJuIGJ5IElEXG4gICAqL1xuICBnZXQocGF0dGVybklkOiBzdHJpbmcpOiBMZWFybmVkUGF0dGVybiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGF0dGVybnMuZ2V0KHBhdHRlcm5JZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwYXR0ZXJucyBvZiBhIHR5cGVcbiAgICovXG4gIGdldEJ5VHlwZSh0eXBlOiBQYXR0ZXJuVHlwZSk6IExlYXJuZWRQYXR0ZXJuW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucGF0dGVybnMudmFsdWVzKCkpLmZpbHRlcihwID0+IHAudHlwZSA9PT0gdHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogUHJ1bmUgbG93LXBlcmZvcm1pbmcgcGF0dGVybnNcbiAgICovXG4gIHBydW5lKG1pblN1Y2Nlc3NSYXRlID0gMC4zLCBtaW5Vc2VDb3VudCA9IDUpOiBudW1iZXIge1xuICAgIGxldCBwcnVuZWQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBbaWQsIHBhdHRlcm5dIG9mIHRoaXMucGF0dGVybnMpIHtcbiAgICAgIGlmIChwYXR0ZXJuLnVzZUNvdW50ID49IG1pblVzZUNvdW50ICYmIHBhdHRlcm4uc3VjY2Vzc1JhdGUgPCBtaW5TdWNjZXNzUmF0ZSkge1xuICAgICAgICB0aGlzLnBhdHRlcm5zLmRlbGV0ZShpZCk7XG4gICAgICAgIHRoaXMuZW1iZWRkaW5ncy5kZWxldGUoaWQpO1xuICAgICAgICB0aGlzLmVtYmVkZGluZ05vcm1zLmRlbGV0ZShpZCk7XG4gICAgICAgIHBydW5lZCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcnVuZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YXRpc3RpY3NcbiAgICovXG4gIHN0YXRzKCk6IHsgdG90YWxQYXR0ZXJuczogbnVtYmVyOyBhdmdTdWNjZXNzUmF0ZTogbnVtYmVyOyBieVR5cGU6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBBcnJheS5mcm9tKHRoaXMucGF0dGVybnMudmFsdWVzKCkpO1xuICAgIGNvbnN0IGJ5VHlwZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gICAgbGV0IHRvdGFsU3VjY2VzcyA9IDA7XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm5zKSB7XG4gICAgICB0b3RhbFN1Y2Nlc3MgKz0gcC5zdWNjZXNzUmF0ZTtcbiAgICAgIGJ5VHlwZVtwLnR5cGVdID0gKGJ5VHlwZVtwLnR5cGVdIHx8IDApICsgMTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxQYXR0ZXJuczogcGF0dGVybnMubGVuZ3RoLFxuICAgICAgYXZnU3VjY2Vzc1JhdGU6IHBhdHRlcm5zLmxlbmd0aCA+IDAgPyB0b3RhbFN1Y2Nlc3MgLyBwYXR0ZXJucy5sZW5ndGggOiAwLFxuICAgICAgYnlUeXBlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvc2luZVNpbWlsYXJpdHkoYTogRW1iZWRkaW5nLCBiOiBFbWJlZGRpbmcpOiBudW1iZXIge1xuICAgIGxldCBkb3QgPSAwLCBub3JtQSA9IDAsIG5vcm1CID0gMDtcbiAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgZG90ICs9IGFbaV0gKiBiW2ldO1xuICAgICAgbm9ybUEgKz0gYVtpXSAqIGFbaV07XG4gICAgICBub3JtQiArPSBiW2ldICogYltpXTtcbiAgICB9XG5cbiAgICBjb25zdCBkZW5vbSA9IE1hdGguc3FydChub3JtQSkgKiBNYXRoLnNxcnQobm9ybUIpO1xuICAgIHJldHVybiBkZW5vbSA+IDAgPyBkb3QgLyBkZW5vbSA6IDA7XG4gIH1cbn1cblxuLyoqXG4gKiBFV0MrKyAoRWxhc3RpYyBXZWlnaHQgQ29uc29saWRhdGlvbikgTWFuYWdlclxuICpcbiAqIFByZXZlbnRzIGNhdGFzdHJvcGhpYyBmb3JnZXR0aW5nIGJ5IHByb3RlY3RpbmcgaW1wb3J0YW50IHdlaWdodHMuXG4gKiBUaGlzIGlzIGEgc2ltcGxpZmllZCBKUyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29uY2VwdC5cbiAqXG4gKiBPUFRJTUlaRUQ6IFVzZXMgRmxvYXQ2NEFycmF5IGZvciA1LTEweCBmYXN0ZXIgcGVuYWx0eSBjb21wdXRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgRXdjTWFuYWdlciB7XG4gIHByaXZhdGUgbGFtYmRhOiBudW1iZXI7XG4gIHByaXZhdGUgdGFza3NMZWFybmVkOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGZpc2hlckRpYWdvbmFsOiBNYXA8c3RyaW5nLCBGbG9hdDY0QXJyYXk+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIG9wdGltYWxXZWlnaHRzOiBNYXA8c3RyaW5nLCBGbG9hdDY0QXJyYXk+ID0gbmV3IE1hcCgpO1xuICAvLyBQcmUtYWxsb2NhdGVkIGJ1ZmZlciBmb3IgcGVuYWx0eSBjb21wdXRhdGlvblxuICBwcml2YXRlIF9wZW5hbHR5QnVmZmVyOiBGbG9hdDY0QXJyYXkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihsYW1iZGEgPSAyMDAwKSB7XG4gICAgdGhpcy5sYW1iZGEgPSBsYW1iZGE7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBuZXcgdGFzayAoYWZ0ZXIgc3VjY2Vzc2Z1bCBsZWFybmluZylcbiAgICovXG4gIHJlZ2lzdGVyVGFzayh0YXNrSWQ6IHN0cmluZywgd2VpZ2h0czogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAvLyBTdG9yZSBvcHRpbWFsIHdlaWdodHMgZm9yIHRoaXMgdGFzayB1c2luZyB0eXBlZCBhcnJheXNcbiAgICBjb25zdCBvcHRpbWFsQXJyID0gbmV3IEZsb2F0NjRBcnJheSh3ZWlnaHRzLmxlbmd0aCk7XG4gICAgY29uc3QgZmlzaGVyQXJyID0gbmV3IEZsb2F0NjRBcnJheSh3ZWlnaHRzLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9wdGltYWxBcnJbaV0gPSB3ZWlnaHRzW2ldO1xuICAgICAgZmlzaGVyQXJyW2ldID0gTWF0aC5hYnMod2VpZ2h0c1tpXSkgKiB0aGlzLmxhbWJkYTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGltYWxXZWlnaHRzLnNldCh0YXNrSWQsIG9wdGltYWxBcnIpO1xuICAgIHRoaXMuZmlzaGVyRGlhZ29uYWwuc2V0KHRhc2tJZCwgZmlzaGVyQXJyKTtcbiAgICB0aGlzLnRhc2tzTGVhcm5lZCsrO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgRVdDIHBlbmFsdHkgZm9yIHdlaWdodCB1cGRhdGVcbiAgICogT1BUSU1JWkVEOiBVc2VzIHR5cGVkIGFycmF5cyBhbmQgbWluaW1pemVzIGFsbG9jYXRpb25zXG4gICAqL1xuICBjb21wdXRlUGVuYWx0eShjdXJyZW50V2VpZ2h0czogbnVtYmVyW10pOiBudW1iZXIge1xuICAgIGxldCBwZW5hbHR5ID0gMDtcbiAgICBjb25zdCBsZW4gPSBjdXJyZW50V2VpZ2h0cy5sZW5ndGg7XG5cbiAgICBmb3IgKGNvbnN0IFt0YXNrSWQsIG9wdGltYWxdIG9mIHRoaXMub3B0aW1hbFdlaWdodHMpIHtcbiAgICAgIGNvbnN0IGZpc2hlciA9IHRoaXMuZmlzaGVyRGlhZ29uYWwuZ2V0KHRhc2tJZCk7XG4gICAgICBpZiAoIWZpc2hlcikgY29udGludWU7XG5cbiAgICAgIGNvbnN0IG1pbkxlbiA9IE1hdGgubWluKGxlbiwgb3B0aW1hbC5sZW5ndGgpO1xuXG4gICAgICAvLyBVbnJvbGxlZCBsb29wIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAoOyBpICsgMyA8IG1pbkxlbjsgaSArPSA0KSB7XG4gICAgICAgIGNvbnN0IGRpZmYwID0gY3VycmVudFdlaWdodHNbaV0gLSBvcHRpbWFsW2ldO1xuICAgICAgICBjb25zdCBkaWZmMSA9IGN1cnJlbnRXZWlnaHRzW2kgKyAxXSAtIG9wdGltYWxbaSArIDFdO1xuICAgICAgICBjb25zdCBkaWZmMiA9IGN1cnJlbnRXZWlnaHRzW2kgKyAyXSAtIG9wdGltYWxbaSArIDJdO1xuICAgICAgICBjb25zdCBkaWZmMyA9IGN1cnJlbnRXZWlnaHRzW2kgKyAzXSAtIG9wdGltYWxbaSArIDNdO1xuICAgICAgICBwZW5hbHR5ICs9IGZpc2hlcltpXSAqIGRpZmYwICogZGlmZjAgK1xuICAgICAgICAgICAgICAgICAgIGZpc2hlcltpICsgMV0gKiBkaWZmMSAqIGRpZmYxICtcbiAgICAgICAgICAgICAgICAgICBmaXNoZXJbaSArIDJdICogZGlmZjIgKiBkaWZmMiArXG4gICAgICAgICAgICAgICAgICAgZmlzaGVyW2kgKyAzXSAqIGRpZmYzICogZGlmZjM7XG4gICAgICB9XG4gICAgICAvLyBIYW5kbGUgcmVtYWluaW5nIGVsZW1lbnRzXG4gICAgICBmb3IgKDsgaSA8IG1pbkxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBjdXJyZW50V2VpZ2h0c1tpXSAtIG9wdGltYWxbaV07XG4gICAgICAgIHBlbmFsdHkgKz0gZmlzaGVyW2ldICogZGlmZiAqIGRpZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmFsdHkgKiAwLjU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEVXQyBzdGF0aXN0aWNzXG4gICAqL1xuICBzdGF0cygpOiBFd2NTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhc2tzTGVhcm5lZDogdGhpcy50YXNrc0xlYXJuZWQsXG4gICAgICBmaXNoZXJDb21wdXRlZDogdGhpcy5maXNoZXJEaWFnb25hbC5zaXplID4gMCxcbiAgICAgIHByb3RlY3Rpb25TdHJlbmd0aDogdGhpcy5sYW1iZGEsXG4gICAgICBmb3JnZXR0aW5nUmF0ZTogdGhpcy5lc3RpbWF0ZUZvcmdldHRpbmdSYXRlKCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXN0aW1hdGVGb3JnZXR0aW5nUmF0ZSgpOiBudW1iZXIge1xuICAgIC8vIFNpbXBsaWZpZWQgZXN0aW1hdGlvbiBiYXNlZCBvbiBudW1iZXIgb2YgdGFza3NcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgMSAtIE1hdGguZXhwKC10aGlzLnRhc2tzTGVhcm5lZCAqIDAuMSkpO1xuICB9XG59XG5cbi8qKlxuICogU09OQSBMZWFybmluZyBDb29yZGluYXRvclxuICpcbiAqIE9yY2hlc3RyYXRlcyB0aGUgbGVhcm5pbmcgbG9vcHMgYW5kIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTb25hQ29vcmRpbmF0b3Ige1xuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8U29uYUNvbmZpZz47XG4gIHByaXZhdGUgdHJhamVjdG9yeUJ1ZmZlcjogUXVlcnlUcmFqZWN0b3J5W10gPSBbXTtcbiAgcHJpdmF0ZSByZWFzb25pbmdCYW5rOiBSZWFzb25pbmdCYW5rO1xuICBwcml2YXRlIGV3Y01hbmFnZXI6IEV3Y01hbmFnZXI7XG4gIHByaXZhdGUgc2lnbmFsQnVmZmVyOiBMZWFybmluZ1NpZ25hbFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoY29uZmlnPzogU29uYUNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5ERUZBVUxUX1NPTkFfQ09ORklHLCAuLi5jb25maWcgfTtcbiAgICB0aGlzLnJlYXNvbmluZ0JhbmsgPSBuZXcgUmVhc29uaW5nQmFuayh0aGlzLmNvbmZpZy5wYXR0ZXJuVGhyZXNob2xkKTtcbiAgICB0aGlzLmV3Y01hbmFnZXIgPSBuZXcgRXdjTWFuYWdlcih0aGlzLmNvbmZpZy5ld2NMYW1iZGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIGxlYXJuaW5nIHNpZ25hbFxuICAgKi9cbiAgcmVjb3JkU2lnbmFsKHNpZ25hbDogTGVhcm5pbmdTaWduYWwpOiB2b2lkIHtcbiAgICB0aGlzLnNpZ25hbEJ1ZmZlci5wdXNoKHNpZ25hbCk7XG5cbiAgICAvLyBJbnN0YW50IGxvb3AgLSBpbW1lZGlhdGUgbGVhcm5pbmdcbiAgICBpZiAodGhpcy5jb25maWcuaW5zdGFudExvb3BFbmFibGVkICYmIHNpZ25hbC5xdWFsaXR5ID49IDAuOCkge1xuICAgICAgdGhpcy5wcm9jZXNzSW5zdGFudExlYXJuaW5nKHNpZ25hbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBhIGNvbXBsZXRlZCB0cmFqZWN0b3J5XG4gICAqL1xuICByZWNvcmRUcmFqZWN0b3J5KHRyYWplY3Rvcnk6IFF1ZXJ5VHJhamVjdG9yeSk6IHZvaWQge1xuICAgIHRoaXMudHJhamVjdG9yeUJ1ZmZlci5wdXNoKHRyYWplY3RvcnkpO1xuXG4gICAgLy8gTWFpbnRhaW4gYnVmZmVyIHNpemVcbiAgICB3aGlsZSAodGhpcy50cmFqZWN0b3J5QnVmZmVyLmxlbmd0aCA+IHRoaXMuY29uZmlnLm1heFRyYWplY3RvcnlTaXplKSB7XG4gICAgICB0aGlzLnRyYWplY3RvcnlCdWZmZXIuc2hpZnQoKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHBhdHRlcm5zIGZyb20gc3VjY2Vzc2Z1bCB0cmFqZWN0b3JpZXNcbiAgICBpZiAodHJhamVjdG9yeS5vdXRjb21lID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuZXh0cmFjdFBhdHRlcm5zKHRyYWplY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gYmFja2dyb3VuZCBsZWFybmluZyBsb29wXG4gICAqL1xuICBydW5CYWNrZ3JvdW5kTG9vcCgpOiB7IHBhdHRlcm5zTGVhcm5lZDogbnVtYmVyOyB0cmFqZWN0b3JpZXNQcm9jZXNzZWQ6IG51bWJlciB9IHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJhY2tncm91bmRMb29wRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHsgcGF0dGVybnNMZWFybmVkOiAwLCB0cmFqZWN0b3JpZXNQcm9jZXNzZWQ6IDAgfTtcbiAgICB9XG5cbiAgICBsZXQgcGF0dGVybnNMZWFybmVkID0gMDtcbiAgICBjb25zdCB0cmFqZWN0b3JpZXNQcm9jZXNzZWQgPSB0aGlzLnRyYWplY3RvcnlCdWZmZXIubGVuZ3RoO1xuXG4gICAgLy8gUHJvY2VzcyBhY2N1bXVsYXRlZCB0cmFqZWN0b3JpZXNcbiAgICBmb3IgKGNvbnN0IHRyYWogb2YgdGhpcy50cmFqZWN0b3J5QnVmZmVyKSB7XG4gICAgICBpZiAodHJhai5vdXRjb21lID09PSAnc3VjY2VzcycgfHwgdHJhai5vdXRjb21lID09PSAncGFydGlhbCcpIHtcbiAgICAgICAgcGF0dGVybnNMZWFybmVkICs9IHRoaXMuZXh0cmFjdFBhdHRlcm5zKHRyYWopO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBydW5lIGxvdy1wZXJmb3JtaW5nIHBhdHRlcm5zXG4gICAgdGhpcy5yZWFzb25pbmdCYW5rLnBydW5lKCk7XG5cbiAgICAvLyBDbGVhciBwcm9jZXNzZWQgdHJhamVjdG9yaWVzXG4gICAgdGhpcy50cmFqZWN0b3J5QnVmZmVyID0gW107XG5cbiAgICByZXR1cm4geyBwYXR0ZXJuc0xlYXJuZWQsIHRyYWplY3Rvcmllc1Byb2Nlc3NlZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWFzb25pbmcgYmFuayBmb3IgcGF0dGVybiBxdWVyaWVzXG4gICAqL1xuICBnZXRSZWFzb25pbmdCYW5rKCk6IFJlYXNvbmluZ0Jhbmsge1xuICAgIHJldHVybiB0aGlzLnJlYXNvbmluZ0Jhbms7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEVXQyBtYW5hZ2VyXG4gICAqL1xuICBnZXRFd2NNYW5hZ2VyKCk6IEV3Y01hbmFnZXIge1xuICAgIHJldHVybiB0aGlzLmV3Y01hbmFnZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YXRpc3RpY3NcbiAgICovXG4gIHN0YXRzKCk6IHtcbiAgICBzaWduYWxzUmVjZWl2ZWQ6IG51bWJlcjtcbiAgICB0cmFqZWN0b3JpZXNCdWZmZXJlZDogbnVtYmVyO1xuICAgIHBhdHRlcm5zOiBSZXR1cm5UeXBlPFJlYXNvbmluZ0JhbmtbJ3N0YXRzJ10+O1xuICAgIGV3YzogRXdjU3RhdHM7XG4gIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzaWduYWxzUmVjZWl2ZWQ6IHRoaXMuc2lnbmFsQnVmZmVyLmxlbmd0aCxcbiAgICAgIHRyYWplY3Rvcmllc0J1ZmZlcmVkOiB0aGlzLnRyYWplY3RvcnlCdWZmZXIubGVuZ3RoLFxuICAgICAgcGF0dGVybnM6IHRoaXMucmVhc29uaW5nQmFuay5zdGF0cygpLFxuICAgICAgZXdjOiB0aGlzLmV3Y01hbmFnZXIuc3RhdHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW5zdGFudExlYXJuaW5nKHNpZ25hbDogTGVhcm5pbmdTaWduYWwpOiB2b2lkIHtcbiAgICAvLyBJbW1lZGlhdGUgcGF0dGVybiByZWluZm9yY2VtZW50IHdvdWxkIGhhcHBlbiBoZXJlXG4gICAgLy8gSW4gZnVsbCBpbXBsZW1lbnRhdGlvbiwgdGhpcyB1cGRhdGVzIExvUkEgd2VpZ2h0c1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0UGF0dGVybnModHJhamVjdG9yeTogUXVlcnlUcmFqZWN0b3J5KTogbnVtYmVyIHtcbiAgICBsZXQgZXh0cmFjdGVkID0gMDtcblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0cmFqZWN0b3J5LnN0ZXBzKSB7XG4gICAgICBpZiAoc3RlcC5jb25maWRlbmNlID49IHRoaXMuY29uZmlnLnBhdHRlcm5UaHJlc2hvbGQpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGVtYmVkZGluZyBmcm9tIHN0ZXAgKHNpbXBsaWZpZWQpXG4gICAgICAgIGNvbnN0IGVtYmVkZGluZyA9IHRoaXMuY3JlYXRlRW1iZWRkaW5nKHN0ZXAuaW5wdXQgKyBzdGVwLm91dHB1dCk7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHBhdHRlcm4gdHlwZVxuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5zdGVwVHlwZVRvUGF0dGVyblR5cGUoc3RlcC50eXBlKTtcblxuICAgICAgICAvLyBTdG9yZSBpZiBub3QgdG9vIHNpbWlsYXIgdG8gZXhpc3RpbmdcbiAgICAgICAgY29uc3Qgc2ltaWxhciA9IHRoaXMucmVhc29uaW5nQmFuay5maW5kU2ltaWxhcihlbWJlZGRpbmcsIDEpO1xuICAgICAgICBpZiAoc2ltaWxhci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RvcmUodHlwZSwgZW1iZWRkaW5nKTtcbiAgICAgICAgICBleHRyYWN0ZWQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHRyYWN0ZWQ7XG4gIH1cblxuICBwcml2YXRlIHN0ZXBUeXBlVG9QYXR0ZXJuVHlwZShzdGVwVHlwZTogVHJhamVjdG9yeVN0ZXBbJ3R5cGUnXSk6IFBhdHRlcm5UeXBlIHtcbiAgICBzd2l0Y2ggKHN0ZXBUeXBlKSB7XG4gICAgICBjYXNlICdxdWVyeSc6XG4gICAgICBjYXNlICdnZW5lcmF0ZSc6XG4gICAgICAgIHJldHVybiAncXVlcnlfcmVzcG9uc2UnO1xuICAgICAgY2FzZSAncm91dGUnOlxuICAgICAgICByZXR1cm4gJ3JvdXRpbmcnO1xuICAgICAgY2FzZSAnbWVtb3J5JzpcbiAgICAgICAgcmV0dXJuICdjb250ZXh0X3JldHJpZXZhbCc7XG4gICAgICBjYXNlICdmZWVkYmFjayc6XG4gICAgICAgIHJldHVybiAnY29ycmVjdGlvbic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3F1ZXJ5X3Jlc3BvbnNlJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVtYmVkZGluZyh0ZXh0OiBzdHJpbmcpOiBFbWJlZGRpbmcge1xuICAgIC8vIFNpbXBsaWZpZWQgaGFzaC1iYXNlZCBlbWJlZGRpbmcgKHJlYWwgaW1wbCB1c2VzIG1vZGVsKVxuICAgIGNvbnN0IGRpbSA9IDY0O1xuICAgIGNvbnN0IGVtYmVkZGluZyA9IG5ldyBBcnJheShkaW0pLmZpbGwoMCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkeCA9ICh0ZXh0LmNoYXJDb2RlQXQoaSkgKiAoaSArIDEpKSAlIGRpbTtcbiAgICAgIGVtYmVkZGluZ1tpZHhdICs9IDAuMTtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWxpemVcbiAgICBjb25zdCBub3JtID0gTWF0aC5zcXJ0KGVtYmVkZGluZy5yZWR1Y2UoKHMsIHgpID0+IHMgKyB4ICogeCwgMCkpIHx8IDE7XG4gICAgcmV0dXJuIGVtYmVkZGluZy5tYXAoeCA9PiB4IC8gbm9ybSk7XG4gIH1cbn1cblxuLy8gRXhwb3J0IGFsbCBTT05BIGNvbXBvbmVudHNcbmV4cG9ydCB7XG4gIERFRkFVTFRfU09OQV9DT05GSUcsXG59O1xuIl19
562
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb25hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBY0gsaUNBQXFDO0FBRXJDLGtGQUFrRjtBQUNsRixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIscUZBQXFGO0FBQ3JGLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUUxQjs7R0FFRztBQUNILE1BQU0sbUJBQW1CLEdBQXlCO0lBQ2hELGtCQUFrQixFQUFFLElBQUk7SUFDeEIscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLFFBQVEsRUFBRSxDQUFDO0lBQ1gsU0FBUyxFQUFFLElBQUk7SUFDZixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLGdCQUFnQixFQUFFLElBQUk7Q0FDdkIsQ0FBQztBQThuQkEsa0RBQW1CO0FBNW5CckI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFhLGlCQUFpQjtJQU81QjtRQUxRLFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBQzdCLGdCQUFXLEdBQW1DLElBQUksQ0FBQztRQUNuRCxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBSTVCLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQTRCLEVBQUUsS0FBYTtRQUNuRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQiw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsSUFBSTtZQUNKLEtBQUs7U0FDTixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsTUFBYyxFQUFFLFVBQWtCO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFLO1lBQzVCLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQU07WUFDOUIsTUFBTTtZQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDdkMsVUFBVTtTQUNYLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLE9BQTBCO1FBQ2pDLDRCQUE0QjtRQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixPQUFPO1lBQ1AsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUztTQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUF6RUQsOENBeUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsYUFBYTtJQVF4QixZQUFZLFNBQVMsR0FBRyxJQUFJO1FBUHBCLGFBQVEsR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNsRCxlQUFVLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQsbUJBQWMsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQjtRQUU5RSx1REFBdUQ7UUFDL0MsdUJBQWtCLEdBQXlDLEVBQUUsQ0FBQztRQUdwRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQ0gsSUFBaUIsRUFDakIsU0FBb0IsRUFDcEIsUUFBa0M7UUFFbEMsTUFBTSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFekUsTUFBTSxPQUFPLEdBQW1CO1lBQzlCLEVBQUU7WUFDRixJQUFJO1lBQ0osU0FBUztZQUNULFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFFBQVEsRUFBRSxDQUFDO1lBQ1gsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1NBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0IseURBQXlEO1FBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsQyxpQ0FBaUM7UUFDakMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU3QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsU0FBb0IsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNyQyx5QkFBeUI7UUFDekIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqQyxJQUFJLFNBQVMsS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFL0IsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELElBQUksT0FBTyxLQUFLLENBQUM7Z0JBQUUsU0FBUztZQUU1QixtQkFBbUI7WUFDbkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELGdCQUFnQjtZQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN4QixTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELE9BQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN2QixHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBRTFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO1FBRUQsa0VBQWtFO1FBQ2xFLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFNLENBQUM7WUFDTiwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWpELE9BQU8sSUFBSTthQUNSLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQXVCLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLEdBQXlDLEVBQUUsQ0FBUztRQUN0RSwrQkFBK0I7UUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNyQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxTQUFpQixFQUFFLE9BQWdCO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRTlCLHNEQUFzRDtRQUN0RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDbEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNwQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQUMsU0FBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsSUFBaUI7UUFDekIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxjQUFjLEdBQUcsR0FBRyxFQUFFLFdBQVcsR0FBRyxDQUFDO1FBQ3pDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUMsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDO2dCQUM1RSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLEVBQUUsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUEyQixFQUFFLENBQUM7UUFFMUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDekIsWUFBWSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxPQUFPO1lBQ0wsYUFBYSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQzlCLGNBQWMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsQ0FBWSxFQUFFLENBQVk7UUFDakQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQWhORCxzQ0FnTkM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxVQUFVO0lBUXJCLFlBQVksTUFBTSxHQUFHLElBQUk7UUFOakIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDekIsbUJBQWMsR0FBOEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxtQkFBYyxHQUE4QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzlELCtDQUErQztRQUN2QyxtQkFBYyxHQUF3QixJQUFJLENBQUM7UUFHakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQWMsRUFBRSxPQUFpQjtRQUM1Qyx5REFBeUQ7UUFDekQsTUFBTSxVQUFVLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwRCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxjQUF3QjtRQUNyQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUVsQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxNQUFNO2dCQUFFLFNBQVM7WUFFdEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTdDLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSztvQkFDekIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSztvQkFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSztvQkFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzNDLENBQUM7WUFDRCw0QkFBNEI7WUFDNUIsT0FBTyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsT0FBTztZQUNMLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUM1QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1NBQzlDLENBQUM7SUFDSixDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLGlEQUFpRDtRQUNqRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0FDRjtBQWxGRCxnQ0FrRkM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxlQUFlO0lBUzFCLFlBQVksTUFBbUI7UUFQdkIscUJBQWdCLEdBQXNCLEVBQUUsQ0FBQztRQUd6QyxpQkFBWSxHQUFxQixFQUFFLENBQUM7UUFFcEMscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBRzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxrQkFBVyxDQUM5QixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFDekIsY0FBYyxFQUNkLGNBQWMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxZQUFZLENBQUMsTUFBc0I7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0Isb0NBQW9DO1FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsVUFBMkI7UUFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2Qyx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBRUQsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztRQUUzRCxtQ0FBbUM7UUFDbkMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdELGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFM0IsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFPSCxPQUFPO1lBQ0wsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUN6QyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtZQUNsRCxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDcEMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQzVCLFNBQVMsRUFBRTtnQkFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDOUIsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTthQUNyQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsS0FBZTtRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGtCQUFrQjtRQUNoQixNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDVixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzlCLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO2dCQUNELEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxzQkFBc0IsQ0FBQyxNQUFzQjtRQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNwQyxJQUFJLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUV6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUNoQyxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQzFELENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxVQUEyQjtRQUNqRCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFbEIsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDcEQsMENBQTBDO2dCQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVqRSx5QkFBeUI7Z0JBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRW5ELHVDQUF1QztnQkFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDMUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFFBQWdDO1FBQzVELFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxnQkFBZ0IsQ0FBQztZQUMxQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sbUJBQW1CLENBQUM7WUFDN0IsS0FBSyxVQUFVO2dCQUNiLE9BQU8sWUFBWSxDQUFDO1lBQ3RCO2dCQUNFLE9BQU8sZ0JBQWdCLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsSUFBWTtRQUNsQyx5REFBeUQ7UUFDekQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2pELFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDeEIsQ0FBQztRQUVELFlBQVk7UUFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RSxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBak9ELDBDQWlPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBTT05BIChTZWxmLU9wdGltaXppbmcgTmV1cmFsIEFyY2hpdGVjdHVyZSkgTGVhcm5pbmcgU3lzdGVtXHJcbiAqXHJcbiAqIFByb3ZpZGVzIGFkYXB0aXZlIGxlYXJuaW5nIGNhcGFiaWxpdGllcyB3aXRoIHRyYWplY3RvcnkgdHJhY2tpbmcsXHJcbiAqIHBhdHRlcm4gcmVjb2duaXRpb24sIGFuZCBtZW1vcnkgcHJvdGVjdGlvbiAoRVdDKyspLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgU29uYUNvbmZpZyxcclxuICBMZWFybmluZ1NpZ25hbCxcclxuICBRdWVyeVRyYWplY3RvcnksXHJcbiAgVHJhamVjdG9yeVN0ZXAsXHJcbiAgVHJhamVjdG9yeU91dGNvbWUsXHJcbiAgTGVhcm5lZFBhdHRlcm4sXHJcbiAgUGF0dGVyblR5cGUsXHJcbiAgRXdjU3RhdHMsXHJcbiAgTG9SQUNvbmZpZyxcclxuICBFbWJlZGRpbmcsXHJcbn0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IExvcmFBZGFwdGVyIH0gZnJvbSAnLi9sb3JhJztcclxuXHJcbi8qKiBFbWJlZGRpbmcgZGltZW5zaW9uIHVzZWQgYnkgdGhlIGNvb3JkaW5hdG9yJ3MgaGFzaCBlbWJlZGRlciBhbmQgbWljcm8tTG9SQS4gKi9cclxuY29uc3QgTUlDUk9fTE9SQV9ESU0gPSA2NDtcclxuLyoqIE1pY3JvLUxvUkEgcmFuazogU09OQSdzIGluc3RhbnQgbG9vcCB1c2VzIGEgdGlueSBhZGFwdGVyIChyYW5rIDEtMikgYnkgZGVzaWduLiAqL1xyXG5jb25zdCBNSUNST19MT1JBX1JBTksgPSAyO1xyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgU09OQSBjb25maWd1cmF0aW9uXHJcbiAqL1xyXG5jb25zdCBERUZBVUxUX1NPTkFfQ09ORklHOiBSZXF1aXJlZDxTb25hQ29uZmlnPiA9IHtcclxuICBpbnN0YW50TG9vcEVuYWJsZWQ6IHRydWUsXHJcbiAgYmFja2dyb3VuZExvb3BFbmFibGVkOiB0cnVlLFxyXG4gIGxvcmFMZWFybmluZ1JhdGU6IDAuMDAxLFxyXG4gIGxvcmFSYW5rOiA4LFxyXG4gIGV3Y0xhbWJkYTogMjAwMCxcclxuICBtYXhUcmFqZWN0b3J5U2l6ZTogMTAwMCxcclxuICBwYXR0ZXJuVGhyZXNob2xkOiAwLjg1LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYWplY3RvcnkgQnVpbGRlciBmb3IgdHJhY2tpbmcgcXVlcnkgZXhlY3V0aW9uIHBhdGhzXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgYnVpbGRlciA9IG5ldyBUcmFqZWN0b3J5QnVpbGRlcigpO1xyXG4gKlxyXG4gKiBidWlsZGVyLnN0YXJ0U3RlcCgncXVlcnknLCAnV2hhdCBpcyBBST8nKTtcclxuICogLy8gLi4uIHByb2Nlc3NpbmcgLi4uXHJcbiAqIGJ1aWxkZXIuZW5kU3RlcCgnQUkgaXMgYXJ0aWZpY2lhbCBpbnRlbGxpZ2VuY2UnLCAwLjk1KTtcclxuICpcclxuICogYnVpbGRlci5zdGFydFN0ZXAoJ21lbW9yeScsICdzZWFyY2hpbmcgY29udGV4dCcpO1xyXG4gKiBidWlsZGVyLmVuZFN0ZXAoJ2ZvdW5kIDMgcmVsZXZhbnQgZG9jdW1lbnRzJywgMC44OCk7XHJcbiAqXHJcbiAqIGNvbnN0IHRyYWplY3RvcnkgPSBidWlsZGVyLmNvbXBsZXRlKCdzdWNjZXNzJyk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRyYWplY3RvcnlCdWlsZGVyIHtcclxuICBwcml2YXRlIGlkOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdGVwczogVHJhamVjdG9yeVN0ZXBbXSA9IFtdO1xyXG4gIHByaXZhdGUgY3VycmVudFN0ZXA6IFBhcnRpYWw8VHJhamVjdG9yeVN0ZXA+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGVwU3RhcnQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBzdGFydFRpbWU6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmlkID0gYHRyYWotJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWA7XHJcbiAgICB0aGlzLnN0YXJ0VGltZSA9IERhdGUubm93KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBhIG5ldyBzdGVwIGluIHRoZSB0cmFqZWN0b3J5XHJcbiAgICovXHJcbiAgc3RhcnRTdGVwKHR5cGU6IFRyYWplY3RvcnlTdGVwWyd0eXBlJ10sIGlucHV0OiBzdHJpbmcpOiB0aGlzIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwKSB7XHJcbiAgICAgIC8vIEF1dG8tY29tcGxldGUgcHJldmlvdXMgc3RlcFxyXG4gICAgICB0aGlzLmVuZFN0ZXAoJycsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcFN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgIHRoaXMuY3VycmVudFN0ZXAgPSB7XHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGlucHV0LFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuZCBjdXJyZW50IHN0ZXAgd2l0aCBvdXRwdXRcclxuICAgKi9cclxuICBlbmRTdGVwKG91dHB1dDogc3RyaW5nLCBjb25maWRlbmNlOiBudW1iZXIpOiB0aGlzIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50U3RlcCkge1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0ZXBzLnB1c2goe1xyXG4gICAgICB0eXBlOiB0aGlzLmN1cnJlbnRTdGVwLnR5cGUhLFxyXG4gICAgICBpbnB1dDogdGhpcy5jdXJyZW50U3RlcC5pbnB1dCEsXHJcbiAgICAgIG91dHB1dCxcclxuICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHRoaXMuc3RlcFN0YXJ0LFxyXG4gICAgICBjb25maWRlbmNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBsZXRlIHRyYWplY3Rvcnkgd2l0aCBmaW5hbCBvdXRjb21lXHJcbiAgICovXHJcbiAgY29tcGxldGUob3V0Y29tZTogVHJhamVjdG9yeU91dGNvbWUpOiBRdWVyeVRyYWplY3Rvcnkge1xyXG4gICAgLy8gQ29tcGxldGUgYW55IHBlbmRpbmcgc3RlcFxyXG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXApIHtcclxuICAgICAgdGhpcy5lbmRTdGVwKCdpbmNvbXBsZXRlJywgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgIHN0ZXBzOiB0aGlzLnN0ZXBzLFxyXG4gICAgICBvdXRjb21lLFxyXG4gICAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGN1cnJlbnQgdHJhamVjdG9yeSBJRFxyXG4gICAqL1xyXG4gIGdldElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pZDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWFzb25pbmdCYW5rIC0gUGF0dGVybiBzdG9yYWdlIGFuZCByZXRyaWV2YWxcclxuICpcclxuICogU3RvcmVzIGxlYXJuZWQgcGF0dGVybnMgZnJvbSBzdWNjZXNzZnVsIGludGVyYWN0aW9ucyBhbmRcclxuICogZW5hYmxlcyBwYXR0ZXJuLWJhc2VkIHJlYXNvbmluZyBzaG9ydGN1dHMuXHJcbiAqXHJcbiAqIE9QVElNSVpFRDogVXNlcyBGbG9hdDY0QXJyYXkgZm9yIGVtYmVkZGluZ3MgYW5kIHBhcnRpYWwgc29ydGluZ1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJlYXNvbmluZ0Jhbmsge1xyXG4gIHByaXZhdGUgcGF0dGVybnM6IE1hcDxzdHJpbmcsIExlYXJuZWRQYXR0ZXJuPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGVtYmVkZGluZ3M6IE1hcDxzdHJpbmcsIEZsb2F0NjRBcnJheT4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBlbWJlZGRpbmdOb3JtczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTsgLy8gUHJlLWNvbXB1dGVkIG5vcm1zXHJcbiAgcHJpdmF0ZSB0aHJlc2hvbGQ6IG51bWJlcjtcclxuICAvLyBSZXVzYWJsZSBhcnJheXMgZm9yIGZpbmRTaW1pbGFyIHRvIGF2b2lkIGFsbG9jYXRpb25zXHJcbiAgcHJpdmF0ZSBfc2ltaWxhcml0eVJlc3VsdHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgc2NvcmU6IG51bWJlciB9PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQgPSAwLjg1KSB7XHJcbiAgICB0aGlzLnRocmVzaG9sZCA9IHRocmVzaG9sZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIGEgbmV3IHBhdHRlcm5cclxuICAgKi9cclxuICBzdG9yZShcclxuICAgIHR5cGU6IFBhdHRlcm5UeXBlLFxyXG4gICAgZW1iZWRkaW5nOiBFbWJlZGRpbmcsXHJcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGlkID0gYHBhdC0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgOCl9YDtcclxuXHJcbiAgICBjb25zdCBwYXR0ZXJuOiBMZWFybmVkUGF0dGVybiA9IHtcclxuICAgICAgaWQsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGVtYmVkZGluZyxcclxuICAgICAgc3VjY2Vzc1JhdGU6IDEuMCxcclxuICAgICAgdXNlQ291bnQ6IDAsXHJcbiAgICAgIGxhc3RVc2VkOiBuZXcgRGF0ZSgpLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBhdHRlcm5zLnNldChpZCwgcGF0dGVybik7XHJcblxyXG4gICAgLy8gU3RvcmUgYXMgdHlwZWQgYXJyYXkgZm9yIGZhc3RlciBzaW1pbGFyaXR5IGNvbXB1dGF0aW9uXHJcbiAgICBjb25zdCB0eXBlZEVtYiA9IG5ldyBGbG9hdDY0QXJyYXkoZW1iZWRkaW5nKTtcclxuICAgIHRoaXMuZW1iZWRkaW5ncy5zZXQoaWQsIHR5cGVkRW1iKTtcclxuXHJcbiAgICAvLyBQcmUtY29tcHV0ZSBhbmQgY2FjaGUgdGhlIG5vcm1cclxuICAgIGxldCBub3JtID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZWRFbWIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbm9ybSArPSB0eXBlZEVtYltpXSAqIHR5cGVkRW1iW2ldO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWJlZGRpbmdOb3Jtcy5zZXQoaWQsIE1hdGguc3FydChub3JtKSk7XHJcblxyXG4gICAgcmV0dXJuIGlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBzaW1pbGFyIHBhdHRlcm5zXHJcbiAgICogT1BUSU1JWkVEOiBVc2VzIHR5cGVkIGFycmF5cywgcHJlLWNvbXB1dGVkIG5vcm1zLCBhbmQgcGFydGlhbCBzb3J0aW5nXHJcbiAgICovXHJcbiAgZmluZFNpbWlsYXIoZW1iZWRkaW5nOiBFbWJlZGRpbmcsIGsgPSA1KTogTGVhcm5lZFBhdHRlcm5bXSB7XHJcbiAgICAvLyBQcmUtY29tcHV0ZSBxdWVyeSBub3JtXHJcbiAgICBsZXQgcXVlcnlOb3JtID0gMDtcclxuICAgIGNvbnN0IHF1ZXJ5TGVuID0gZW1iZWRkaW5nLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlMZW47IGkrKykge1xyXG4gICAgICBxdWVyeU5vcm0gKz0gZW1iZWRkaW5nW2ldICogZW1iZWRkaW5nW2ldO1xyXG4gICAgfVxyXG4gICAgcXVlcnlOb3JtID0gTWF0aC5zcXJ0KHF1ZXJ5Tm9ybSk7XHJcblxyXG4gICAgaWYgKHF1ZXJ5Tm9ybSA9PT0gMCkgcmV0dXJuIFtdO1xyXG5cclxuICAgIC8vIFJldXNlIGFycmF5IHRvIGF2b2lkIGFsbG9jYXRpb25zXHJcbiAgICB0aGlzLl9zaW1pbGFyaXR5UmVzdWx0cy5sZW5ndGggPSAwO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2lkLCBwYXRFbWJdIG9mIHRoaXMuZW1iZWRkaW5ncykge1xyXG4gICAgICBjb25zdCBwYXROb3JtID0gdGhpcy5lbWJlZGRpbmdOb3Jtcy5nZXQoaWQpIHx8IDA7XHJcbiAgICAgIGlmIChwYXROb3JtID09PSAwKSBjb250aW51ZTtcclxuXHJcbiAgICAgIC8vIEZhc3QgZG90IHByb2R1Y3RcclxuICAgICAgbGV0IGRvdCA9IDA7XHJcbiAgICAgIGNvbnN0IG1pbkxlbiA9IE1hdGgubWluKHF1ZXJ5TGVuLCBwYXRFbWIubGVuZ3RoKTtcclxuXHJcbiAgICAgIC8vIFVucm9sbGVkIGxvb3BcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICBmb3IgKDsgaSArIDMgPCBtaW5MZW47IGkgKz0gNCkge1xyXG4gICAgICAgIGRvdCArPSBlbWJlZGRpbmdbaV0gKiBwYXRFbWJbaV0gK1xyXG4gICAgICAgICAgICAgICBlbWJlZGRpbmdbaSArIDFdICogcGF0RW1iW2kgKyAxXSArXHJcbiAgICAgICAgICAgICAgIGVtYmVkZGluZ1tpICsgMl0gKiBwYXRFbWJbaSArIDJdICtcclxuICAgICAgICAgICAgICAgZW1iZWRkaW5nW2kgKyAzXSAqIHBhdEVtYltpICsgM107XHJcbiAgICAgIH1cclxuICAgICAgZm9yICg7IGkgPCBtaW5MZW47IGkrKykge1xyXG4gICAgICAgIGRvdCArPSBlbWJlZGRpbmdbaV0gKiBwYXRFbWJbaV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNjb3JlID0gZG90IC8gKHF1ZXJ5Tm9ybSAqIHBhdE5vcm0pO1xyXG5cclxuICAgICAgaWYgKHNjb3JlID49IHRoaXMudGhyZXNob2xkKSB7XHJcbiAgICAgICAgdGhpcy5fc2ltaWxhcml0eVJlc3VsdHMucHVzaCh7IGlkLCBzY29yZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnRpYWwgc29ydCBmb3IgdG9wLWsgKGZhc3RlciB0aGFuIGZ1bGwgc29ydCBmb3IgbGFyZ2UgYXJyYXlzKVxyXG4gICAgaWYgKHRoaXMuX3NpbWlsYXJpdHlSZXN1bHRzLmxlbmd0aCA8PSBrKSB7XHJcbiAgICAgIHRoaXMuX3NpbWlsYXJpdHlSZXN1bHRzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFF1aWNrIHBhcnRpYWwgc29ydCBmb3IgdG9wIGtcclxuICAgICAgdGhpcy5wYXJ0aWFsU29ydCh0aGlzLl9zaW1pbGFyaXR5UmVzdWx0cywgayk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdG9wSyA9IHRoaXMuX3NpbWlsYXJpdHlSZXN1bHRzLnNsaWNlKDAsIGspO1xyXG5cclxuICAgIHJldHVybiB0b3BLXHJcbiAgICAgIC5tYXAocyA9PiB0aGlzLnBhdHRlcm5zLmdldChzLmlkKSlcclxuICAgICAgLmZpbHRlcigocCk6IHAgaXMgTGVhcm5lZFBhdHRlcm4gPT4gcCAhPT0gdW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnRpYWwgc29ydCB0byBnZXQgdG9wIGsgZWxlbWVudHMgKGZhc3RlciB0aGFuIGZ1bGwgc29ydClcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnRpYWxTb3J0KGFycjogQXJyYXk8eyBpZDogc3RyaW5nOyBzY29yZTogbnVtYmVyIH0+LCBrOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIC8vIFNpbXBsZSBzZWxlY3Rpb24gZm9yIHNtYWxsIGtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgayAmJiBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBtYXhJZHggPSBpO1xyXG4gICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBhcnIubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoYXJyW2pdLnNjb3JlID4gYXJyW21heElkeF0uc2NvcmUpIHtcclxuICAgICAgICAgIG1heElkeCA9IGo7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChtYXhJZHggIT09IGkpIHtcclxuICAgICAgICBjb25zdCB0ZW1wID0gYXJyW2ldO1xyXG4gICAgICAgIGFycltpXSA9IGFyclttYXhJZHhdO1xyXG4gICAgICAgIGFyclttYXhJZHhdID0gdGVtcDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjb3JkIHBhdHRlcm4gdXNhZ2UgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcclxuICAgKi9cclxuICByZWNvcmRVc2FnZShwYXR0ZXJuSWQ6IHN0cmluZywgc3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybnMuZ2V0KHBhdHRlcm5JZCk7XHJcbiAgICBpZiAoIXBhdHRlcm4pIHJldHVybjtcclxuXHJcbiAgICBwYXR0ZXJuLnVzZUNvdW50Kys7XHJcbiAgICBwYXR0ZXJuLmxhc3RVc2VkID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgc3VjY2VzcyByYXRlIHdpdGggZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2VcclxuICAgIGNvbnN0IGFscGhhID0gMC4xO1xyXG4gICAgY29uc3Qgb3V0Y29tZSA9IHN1Y2Nlc3MgPyAxLjAgOiAwLjA7XHJcbiAgICBwYXR0ZXJuLnN1Y2Nlc3NSYXRlID0gYWxwaGEgKiBvdXRjb21lICsgKDEgLSBhbHBoYSkgKiBwYXR0ZXJuLnN1Y2Nlc3NSYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHBhdHRlcm4gYnkgSURcclxuICAgKi9cclxuICBnZXQocGF0dGVybklkOiBzdHJpbmcpOiBMZWFybmVkUGF0dGVybiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXR0ZXJucy5nZXQocGF0dGVybklkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgcGF0dGVybnMgb2YgYSB0eXBlXHJcbiAgICovXHJcbiAgZ2V0QnlUeXBlKHR5cGU6IFBhdHRlcm5UeXBlKTogTGVhcm5lZFBhdHRlcm5bXSB7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnBhdHRlcm5zLnZhbHVlcygpKS5maWx0ZXIocCA9PiBwLnR5cGUgPT09IHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJ1bmUgbG93LXBlcmZvcm1pbmcgcGF0dGVybnNcclxuICAgKi9cclxuICBwcnVuZShtaW5TdWNjZXNzUmF0ZSA9IDAuMywgbWluVXNlQ291bnQgPSA1KTogbnVtYmVyIHtcclxuICAgIGxldCBwcnVuZWQgPSAwO1xyXG5cclxuICAgIGZvciAoY29uc3QgW2lkLCBwYXR0ZXJuXSBvZiB0aGlzLnBhdHRlcm5zKSB7XHJcbiAgICAgIGlmIChwYXR0ZXJuLnVzZUNvdW50ID49IG1pblVzZUNvdW50ICYmIHBhdHRlcm4uc3VjY2Vzc1JhdGUgPCBtaW5TdWNjZXNzUmF0ZSkge1xyXG4gICAgICAgIHRoaXMucGF0dGVybnMuZGVsZXRlKGlkKTtcclxuICAgICAgICB0aGlzLmVtYmVkZGluZ3MuZGVsZXRlKGlkKTtcclxuICAgICAgICB0aGlzLmVtYmVkZGluZ05vcm1zLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgcHJ1bmVkKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJ1bmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHN0YXRpc3RpY3NcclxuICAgKi9cclxuICBzdGF0cygpOiB7IHRvdGFsUGF0dGVybnM6IG51bWJlcjsgYXZnU3VjY2Vzc1JhdGU6IG51bWJlcjsgYnlUeXBlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IH0ge1xyXG4gICAgY29uc3QgcGF0dGVybnMgPSBBcnJheS5mcm9tKHRoaXMucGF0dGVybnMudmFsdWVzKCkpO1xyXG4gICAgY29uc3QgYnlUeXBlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XHJcblxyXG4gICAgbGV0IHRvdGFsU3VjY2VzcyA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHAgb2YgcGF0dGVybnMpIHtcclxuICAgICAgdG90YWxTdWNjZXNzICs9IHAuc3VjY2Vzc1JhdGU7XHJcbiAgICAgIGJ5VHlwZVtwLnR5cGVdID0gKGJ5VHlwZVtwLnR5cGVdIHx8IDApICsgMTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0b3RhbFBhdHRlcm5zOiBwYXR0ZXJucy5sZW5ndGgsXHJcbiAgICAgIGF2Z1N1Y2Nlc3NSYXRlOiBwYXR0ZXJucy5sZW5ndGggPiAwID8gdG90YWxTdWNjZXNzIC8gcGF0dGVybnMubGVuZ3RoIDogMCxcclxuICAgICAgYnlUeXBlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29zaW5lU2ltaWxhcml0eShhOiBFbWJlZGRpbmcsIGI6IEVtYmVkZGluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgZG90ID0gMCwgbm9ybUEgPSAwLCBub3JtQiA9IDA7XHJcbiAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgZG90ICs9IGFbaV0gKiBiW2ldO1xyXG4gICAgICBub3JtQSArPSBhW2ldICogYVtpXTtcclxuICAgICAgbm9ybUIgKz0gYltpXSAqIGJbaV07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVub20gPSBNYXRoLnNxcnQobm9ybUEpICogTWF0aC5zcXJ0KG5vcm1CKTtcclxuICAgIHJldHVybiBkZW5vbSA+IDAgPyBkb3QgLyBkZW5vbSA6IDA7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRVdDKysgKEVsYXN0aWMgV2VpZ2h0IENvbnNvbGlkYXRpb24pIE1hbmFnZXJcclxuICpcclxuICogUHJldmVudHMgY2F0YXN0cm9waGljIGZvcmdldHRpbmcgYnkgcHJvdGVjdGluZyBpbXBvcnRhbnQgd2VpZ2h0cy5cclxuICogVGhpcyBpcyBhIHNpbXBsaWZpZWQgSlMgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbmNlcHQuXHJcbiAqXHJcbiAqIE9QVElNSVpFRDogVXNlcyBGbG9hdDY0QXJyYXkgZm9yIDUtMTB4IGZhc3RlciBwZW5hbHR5IGNvbXB1dGF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRXdjTWFuYWdlciB7XHJcbiAgcHJpdmF0ZSBsYW1iZGE6IG51bWJlcjtcclxuICBwcml2YXRlIHRhc2tzTGVhcm5lZDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIGZpc2hlckRpYWdvbmFsOiBNYXA8c3RyaW5nLCBGbG9hdDY0QXJyYXk+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgb3B0aW1hbFdlaWdodHM6IE1hcDxzdHJpbmcsIEZsb2F0NjRBcnJheT4gPSBuZXcgTWFwKCk7XHJcbiAgLy8gUHJlLWFsbG9jYXRlZCBidWZmZXIgZm9yIHBlbmFsdHkgY29tcHV0YXRpb25cclxuICBwcml2YXRlIF9wZW5hbHR5QnVmZmVyOiBGbG9hdDY0QXJyYXkgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IobGFtYmRhID0gMjAwMCkge1xyXG4gICAgdGhpcy5sYW1iZGEgPSBsYW1iZGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlciBhIG5ldyB0YXNrIChhZnRlciBzdWNjZXNzZnVsIGxlYXJuaW5nKVxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyVGFzayh0YXNrSWQ6IHN0cmluZywgd2VpZ2h0czogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIC8vIFN0b3JlIG9wdGltYWwgd2VpZ2h0cyBmb3IgdGhpcyB0YXNrIHVzaW5nIHR5cGVkIGFycmF5c1xyXG4gICAgY29uc3Qgb3B0aW1hbEFyciA9IG5ldyBGbG9hdDY0QXJyYXkod2VpZ2h0cy5sZW5ndGgpO1xyXG4gICAgY29uc3QgZmlzaGVyQXJyID0gbmV3IEZsb2F0NjRBcnJheSh3ZWlnaHRzLmxlbmd0aCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIG9wdGltYWxBcnJbaV0gPSB3ZWlnaHRzW2ldO1xyXG4gICAgICBmaXNoZXJBcnJbaV0gPSBNYXRoLmFicyh3ZWlnaHRzW2ldKSAqIHRoaXMubGFtYmRhO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3B0aW1hbFdlaWdodHMuc2V0KHRhc2tJZCwgb3B0aW1hbEFycik7XHJcbiAgICB0aGlzLmZpc2hlckRpYWdvbmFsLnNldCh0YXNrSWQsIGZpc2hlckFycik7XHJcbiAgICB0aGlzLnRhc2tzTGVhcm5lZCsrO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSBFV0MgcGVuYWx0eSBmb3Igd2VpZ2h0IHVwZGF0ZVxyXG4gICAqIE9QVElNSVpFRDogVXNlcyB0eXBlZCBhcnJheXMgYW5kIG1pbmltaXplcyBhbGxvY2F0aW9uc1xyXG4gICAqL1xyXG4gIGNvbXB1dGVQZW5hbHR5KGN1cnJlbnRXZWlnaHRzOiBudW1iZXJbXSk6IG51bWJlciB7XHJcbiAgICBsZXQgcGVuYWx0eSA9IDA7XHJcbiAgICBjb25zdCBsZW4gPSBjdXJyZW50V2VpZ2h0cy5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChjb25zdCBbdGFza0lkLCBvcHRpbWFsXSBvZiB0aGlzLm9wdGltYWxXZWlnaHRzKSB7XHJcbiAgICAgIGNvbnN0IGZpc2hlciA9IHRoaXMuZmlzaGVyRGlhZ29uYWwuZ2V0KHRhc2tJZCk7XHJcbiAgICAgIGlmICghZmlzaGVyKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbkxlbiA9IE1hdGgubWluKGxlbiwgb3B0aW1hbC5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gVW5yb2xsZWQgbG9vcCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgZm9yICg7IGkgKyAzIDwgbWluTGVuOyBpICs9IDQpIHtcclxuICAgICAgICBjb25zdCBkaWZmMCA9IGN1cnJlbnRXZWlnaHRzW2ldIC0gb3B0aW1hbFtpXTtcclxuICAgICAgICBjb25zdCBkaWZmMSA9IGN1cnJlbnRXZWlnaHRzW2kgKyAxXSAtIG9wdGltYWxbaSArIDFdO1xyXG4gICAgICAgIGNvbnN0IGRpZmYyID0gY3VycmVudFdlaWdodHNbaSArIDJdIC0gb3B0aW1hbFtpICsgMl07XHJcbiAgICAgICAgY29uc3QgZGlmZjMgPSBjdXJyZW50V2VpZ2h0c1tpICsgM10gLSBvcHRpbWFsW2kgKyAzXTtcclxuICAgICAgICBwZW5hbHR5ICs9IGZpc2hlcltpXSAqIGRpZmYwICogZGlmZjAgK1xyXG4gICAgICAgICAgICAgICAgICAgZmlzaGVyW2kgKyAxXSAqIGRpZmYxICogZGlmZjEgK1xyXG4gICAgICAgICAgICAgICAgICAgZmlzaGVyW2kgKyAyXSAqIGRpZmYyICogZGlmZjIgK1xyXG4gICAgICAgICAgICAgICAgICAgZmlzaGVyW2kgKyAzXSAqIGRpZmYzICogZGlmZjM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSGFuZGxlIHJlbWFpbmluZyBlbGVtZW50c1xyXG4gICAgICBmb3IgKDsgaSA8IG1pbkxlbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZGlmZiA9IGN1cnJlbnRXZWlnaHRzW2ldIC0gb3B0aW1hbFtpXTtcclxuICAgICAgICBwZW5hbHR5ICs9IGZpc2hlcltpXSAqIGRpZmYgKiBkaWZmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBlbmFsdHkgKiAwLjU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgRVdDIHN0YXRpc3RpY3NcclxuICAgKi9cclxuICBzdGF0cygpOiBFd2NTdGF0cyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0YXNrc0xlYXJuZWQ6IHRoaXMudGFza3NMZWFybmVkLFxyXG4gICAgICBmaXNoZXJDb21wdXRlZDogdGhpcy5maXNoZXJEaWFnb25hbC5zaXplID4gMCxcclxuICAgICAgcHJvdGVjdGlvblN0cmVuZ3RoOiB0aGlzLmxhbWJkYSxcclxuICAgICAgZm9yZ2V0dGluZ1JhdGU6IHRoaXMuZXN0aW1hdGVGb3JnZXR0aW5nUmF0ZSgpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXN0aW1hdGVGb3JnZXR0aW5nUmF0ZSgpOiBudW1iZXIge1xyXG4gICAgLy8gU2ltcGxpZmllZCBlc3RpbWF0aW9uIGJhc2VkIG9uIG51bWJlciBvZiB0YXNrc1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIDEgLSBNYXRoLmV4cCgtdGhpcy50YXNrc0xlYXJuZWQgKiAwLjEpKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTT05BIExlYXJuaW5nIENvb3JkaW5hdG9yXHJcbiAqXHJcbiAqIE9yY2hlc3RyYXRlcyB0aGUgbGVhcm5pbmcgbG9vcHMgYW5kIGNvbXBvbmVudHMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU29uYUNvb3JkaW5hdG9yIHtcclxuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8U29uYUNvbmZpZz47XHJcbiAgcHJpdmF0ZSB0cmFqZWN0b3J5QnVmZmVyOiBRdWVyeVRyYWplY3RvcnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVhc29uaW5nQmFuazogUmVhc29uaW5nQmFuaztcclxuICBwcml2YXRlIGV3Y01hbmFnZXI6IEV3Y01hbmFnZXI7XHJcbiAgcHJpdmF0ZSBzaWduYWxCdWZmZXI6IExlYXJuaW5nU2lnbmFsW10gPSBbXTtcclxuICBwcml2YXRlIG1pY3JvTG9yYTogTG9yYUFkYXB0ZXI7XHJcbiAgcHJpdmF0ZSBtaWNyb0xvcmFVcGRhdGVzID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnPzogU29uYUNvbmZpZykge1xyXG4gICAgdGhpcy5jb25maWcgPSB7IC4uLkRFRkFVTFRfU09OQV9DT05GSUcsIC4uLmNvbmZpZyB9O1xyXG4gICAgdGhpcy5yZWFzb25pbmdCYW5rID0gbmV3IFJlYXNvbmluZ0JhbmsodGhpcy5jb25maWcucGF0dGVyblRocmVzaG9sZCk7XHJcbiAgICB0aGlzLmV3Y01hbmFnZXIgPSBuZXcgRXdjTWFuYWdlcih0aGlzLmNvbmZpZy5ld2NMYW1iZGEpO1xyXG4gICAgdGhpcy5taWNyb0xvcmEgPSBuZXcgTG9yYUFkYXB0ZXIoXHJcbiAgICAgIHsgcmFuazogTUlDUk9fTE9SQV9SQU5LIH0sXHJcbiAgICAgIE1JQ1JPX0xPUkFfRElNLFxyXG4gICAgICBNSUNST19MT1JBX0RJTVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlY29yZCBhIGxlYXJuaW5nIHNpZ25hbFxyXG4gICAqXHJcbiAgICogRXZlcnkgc2lnbmFsIGRyaXZlcyB0aGUgaW5zdGFudCBsb29wOiBxdWFsaXR5IGFib3ZlIDAuNSByZWluZm9yY2VzIHRoZVxyXG4gICAqIHNpZ25hbCdzIGRpcmVjdGlvbiBpbiB0aGUgbWljcm8tTG9SQSwgcXVhbGl0eSBiZWxvdyAwLjUgdW5sZWFybnMgaXRcclxuICAgKiAocHJldmlvdXNseSBvbmx5IHF1YWxpdHkgPj0gMC44IHdhcyBwcm9jZXNzZWQsIHNvIG5lZ2F0aXZlIGZlZWRiYWNrXHJcbiAgICogbmV2ZXIgYWRhcHRlZCBhbnl0aGluZykuXHJcbiAgICovXHJcbiAgcmVjb3JkU2lnbmFsKHNpZ25hbDogTGVhcm5pbmdTaWduYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuc2lnbmFsQnVmZmVyLnB1c2goc2lnbmFsKTtcclxuXHJcbiAgICAvLyBJbnN0YW50IGxvb3AgLSBpbW1lZGlhdGUgbGVhcm5pbmdcclxuICAgIGlmICh0aGlzLmNvbmZpZy5pbnN0YW50TG9vcEVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5wcm9jZXNzSW5zdGFudExlYXJuaW5nKHNpZ25hbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWNvcmQgYSBjb21wbGV0ZWQgdHJhamVjdG9yeVxyXG4gICAqL1xyXG4gIHJlY29yZFRyYWplY3RvcnkodHJhamVjdG9yeTogUXVlcnlUcmFqZWN0b3J5KTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYWplY3RvcnlCdWZmZXIucHVzaCh0cmFqZWN0b3J5KTtcclxuXHJcbiAgICAvLyBNYWludGFpbiBidWZmZXIgc2l6ZVxyXG4gICAgd2hpbGUgKHRoaXMudHJhamVjdG9yeUJ1ZmZlci5sZW5ndGggPiB0aGlzLmNvbmZpZy5tYXhUcmFqZWN0b3J5U2l6ZSkge1xyXG4gICAgICB0aGlzLnRyYWplY3RvcnlCdWZmZXIuc2hpZnQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFeHRyYWN0IHBhdHRlcm5zIGZyb20gc3VjY2Vzc2Z1bCB0cmFqZWN0b3JpZXNcclxuICAgIGlmICh0cmFqZWN0b3J5Lm91dGNvbWUgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICB0aGlzLmV4dHJhY3RQYXR0ZXJucyh0cmFqZWN0b3J5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1biBiYWNrZ3JvdW5kIGxlYXJuaW5nIGxvb3BcclxuICAgKi9cclxuICBydW5CYWNrZ3JvdW5kTG9vcCgpOiB7IHBhdHRlcm5zTGVhcm5lZDogbnVtYmVyOyB0cmFqZWN0b3JpZXNQcm9jZXNzZWQ6IG51bWJlciB9IHtcclxuICAgIGlmICghdGhpcy5jb25maWcuYmFja2dyb3VuZExvb3BFbmFibGVkKSB7XHJcbiAgICAgIHJldHVybiB7IHBhdHRlcm5zTGVhcm5lZDogMCwgdHJhamVjdG9yaWVzUHJvY2Vzc2VkOiAwIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhdHRlcm5zTGVhcm5lZCA9IDA7XHJcbiAgICBjb25zdCB0cmFqZWN0b3JpZXNQcm9jZXNzZWQgPSB0aGlzLnRyYWplY3RvcnlCdWZmZXIubGVuZ3RoO1xyXG5cclxuICAgIC8vIFByb2Nlc3MgYWNjdW11bGF0ZWQgdHJhamVjdG9yaWVzXHJcbiAgICBmb3IgKGNvbnN0IHRyYWogb2YgdGhpcy50cmFqZWN0b3J5QnVmZmVyKSB7XHJcbiAgICAgIGlmICh0cmFqLm91dGNvbWUgPT09ICdzdWNjZXNzJyB8fCB0cmFqLm91dGNvbWUgPT09ICdwYXJ0aWFsJykge1xyXG4gICAgICAgIHBhdHRlcm5zTGVhcm5lZCArPSB0aGlzLmV4dHJhY3RQYXR0ZXJucyh0cmFqKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFBydW5lIGxvdy1wZXJmb3JtaW5nIHBhdHRlcm5zXHJcbiAgICB0aGlzLnJlYXNvbmluZ0JhbmsucHJ1bmUoKTtcclxuXHJcbiAgICAvLyBDbGVhciBwcm9jZXNzZWQgdHJhamVjdG9yaWVzXHJcbiAgICB0aGlzLnRyYWplY3RvcnlCdWZmZXIgPSBbXTtcclxuXHJcbiAgICByZXR1cm4geyBwYXR0ZXJuc0xlYXJuZWQsIHRyYWplY3Rvcmllc1Byb2Nlc3NlZCB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHJlYXNvbmluZyBiYW5rIGZvciBwYXR0ZXJuIHF1ZXJpZXNcclxuICAgKi9cclxuICBnZXRSZWFzb25pbmdCYW5rKCk6IFJlYXNvbmluZ0Jhbmsge1xyXG4gICAgcmV0dXJuIHRoaXMucmVhc29uaW5nQmFuaztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBFV0MgbWFuYWdlclxyXG4gICAqL1xyXG4gIGdldEV3Y01hbmFnZXIoKTogRXdjTWFuYWdlciB7XHJcbiAgICByZXR1cm4gdGhpcy5ld2NNYW5hZ2VyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHN0YXRpc3RpY3NcclxuICAgKi9cclxuICBzdGF0cygpOiB7XHJcbiAgICBzaWduYWxzUmVjZWl2ZWQ6IG51bWJlcjtcclxuICAgIHRyYWplY3Rvcmllc0J1ZmZlcmVkOiBudW1iZXI7XHJcbiAgICBwYXR0ZXJuczogUmV0dXJuVHlwZTxSZWFzb25pbmdCYW5rWydzdGF0cyddPjtcclxuICAgIGV3YzogRXdjU3RhdHM7XHJcbiAgICBtaWNyb0xvcmE6IHsgdXBkYXRlczogbnVtYmVyOyBkZWx0YU5vcm06IG51bWJlciB9O1xyXG4gIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2lnbmFsc1JlY2VpdmVkOiB0aGlzLnNpZ25hbEJ1ZmZlci5sZW5ndGgsXHJcbiAgICAgIHRyYWplY3Rvcmllc0J1ZmZlcmVkOiB0aGlzLnRyYWplY3RvcnlCdWZmZXIubGVuZ3RoLFxyXG4gICAgICBwYXR0ZXJuczogdGhpcy5yZWFzb25pbmdCYW5rLnN0YXRzKCksXHJcbiAgICAgIGV3YzogdGhpcy5ld2NNYW5hZ2VyLnN0YXRzKCksXHJcbiAgICAgIG1pY3JvTG9yYToge1xyXG4gICAgICAgIHVwZGF0ZXM6IHRoaXMubWljcm9Mb3JhVXBkYXRlcyxcclxuICAgICAgICBkZWx0YU5vcm06IHRoaXMubWljcm9Mb3JhRGVsdGFOb3JtKCksXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgdGhlIG1pY3JvLUxvUkEgdHJhbnNmb3JtYXRpb24gbGVhcm5lZCBmcm9tIGZlZWRiYWNrLlxyXG4gICAqXHJcbiAgICogSW5wdXQgaXMgdHJ1bmNhdGVkL3plcm8tcGFkZGVkIHRvIHRoZSBhZGFwdGVyIGRpbWVuc2lvbjsgdGhlIHJlc2lkdWFsXHJcbiAgICogY29ubmVjdGlvbiBtZWFucyBhbiB1bnRyYWluZWQgYWRhcHRlciByZXR1cm5zIHRoZSBpbnB1dCB1bmNoYW5nZWQuXHJcbiAgICovXHJcbiAgYXBwbHlNaWNyb0xvcmEoaW5wdXQ6IG51bWJlcltdKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWljcm9Mb3JhLmZvcndhcmQoaW5wdXQuc2xpY2UoMCwgTUlDUk9fTE9SQV9ESU0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZyb2Jlbml1cyBub3JtIG9mIHRoZSBtaWNyby1Mb1JBIHdlaWdodCBkZWx0YSAoc2NhbGluZyAqIEEgQCBCKS5cclxuICAgKlxyXG4gICAqIDAgbWVhbnMgbm8gYWRhcHRhdGlvbiBoYXMgb2NjdXJyZWQgKExvUkEgQiBpcyB6ZXJvLWluaXRpYWxpemVkLCBzbyB0aGVcclxuICAgKiBkZWx0YSBpcyBleGFjdGx5IHplcm8gdW50aWwgdGhlIGZpcnN0IGZlZWRiYWNrIHVwZGF0ZSkuIENvbnN1bWVycyBjYW5cclxuICAgKiBzdXJmYWNlIHRoaXMgZGlyZWN0bHkgKGUuZy4gYSBzdGF0dXNsaW5lIFwiZGVsdGEgTG9SQVwiIGZpZWxkKSDigJQgc2VlICM1NTMuXHJcbiAgICovXHJcbiAgbWljcm9Mb3JhRGVsdGFOb3JtKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IGxvcmFBLCBsb3JhQiwgc2NhbGluZyB9ID0gdGhpcy5taWNyb0xvcmEuZ2V0V2VpZ2h0cygpO1xyXG4gICAgY29uc3QgcmFuayA9IGxvcmFCLmxlbmd0aDtcclxuICAgIGxldCBzdW1TcSA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvcmFBLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgTUlDUk9fTE9SQV9ESU07IGorKykge1xyXG4gICAgICAgIGxldCBkID0gMDtcclxuICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IHJhbms7IHIrKykge1xyXG4gICAgICAgICAgZCArPSBsb3JhQVtpXVtyXSAqIGxvcmFCW3JdW2pdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdW1TcSArPSBzY2FsaW5nICogZCAqIChzY2FsaW5nICogZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBNYXRoLnNxcnQoc3VtU3EpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zdGFudC1sb29wIGxlYXJuaW5nOiBhIHNpbmdsZSBmZWVkYmFjayBzaWduYWwgcHJvZHVjZXMgYSByZWFsXHJcbiAgICogbWljcm8tTG9SQSB3ZWlnaHQgdXBkYXRlIChmaXhlcyAjNTUzIOKAlCB0aGlzIHdhcyBhIG5vLW9wIHN0dWIsIHNvXHJcbiAgICogbGVhcm4tZnJvbS1mZWVkYmFjayBuZXZlciBjaGFuZ2VkIGFueSB3ZWlnaHQpLlxyXG4gICAqXHJcbiAgICogUkVJTkZPUkNFLXN0eWxlIHdpdGggYSBmaXhlZCAwLjUgYmFzZWxpbmU6IHJld2FyZCA9IHF1YWxpdHkgLSAwLjUuXHJcbiAgICogVGhlIGdyYWRpZW50IHB1c2hlcyB0aGUgYWRhcHRlciBvdXRwdXQgdG93YXJkIHRoZSBzaWduYWwncyBlbWJlZGRpbmdcclxuICAgKiBkaXJlY3Rpb24gZm9yIHBvc2l0aXZlIHJld2FyZCBhbmQgYXdheSBmcm9tIGl0IGZvciBuZWdhdGl2ZSByZXdhcmRcclxuICAgKiAoYmFja3dhcmQoKSBhcHBsaWVzIGB3ZWlnaHRzIC09IGxyICogZ3JhZGAsIGhlbmNlIHRoZSBuZWdhdGVkIHNpZ24pLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJvY2Vzc0luc3RhbnRMZWFybmluZyhzaWduYWw6IExlYXJuaW5nU2lnbmFsKTogdm9pZCB7XHJcbiAgICBjb25zdCByZXdhcmQgPSBzaWduYWwucXVhbGl0eSAtIDAuNTtcclxuICAgIGlmIChyZXdhcmQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuY3JlYXRlRW1iZWRkaW5nKFxyXG4gICAgICBzaWduYWwuY29ycmVjdGlvbiA/PyBgJHtzaWduYWwucmVxdWVzdElkfToke3NpZ25hbC50eXBlfWBcclxuICAgICk7XHJcbiAgICBjb25zdCBncmFkT3V0cHV0ID0gaW5wdXQubWFwKHggPT4gLXJld2FyZCAqIHgpO1xyXG4gICAgdGhpcy5taWNyb0xvcmEuYmFja3dhcmQoaW5wdXQsIGdyYWRPdXRwdXQsIHRoaXMuY29uZmlnLmxvcmFMZWFybmluZ1JhdGUpO1xyXG4gICAgdGhpcy5taWNyb0xvcmFVcGRhdGVzKys7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RQYXR0ZXJucyh0cmFqZWN0b3J5OiBRdWVyeVRyYWplY3RvcnkpOiBudW1iZXIge1xyXG4gICAgbGV0IGV4dHJhY3RlZCA9IDA7XHJcblxyXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHRyYWplY3Rvcnkuc3RlcHMpIHtcclxuICAgICAgaWYgKHN0ZXAuY29uZmlkZW5jZSA+PSB0aGlzLmNvbmZpZy5wYXR0ZXJuVGhyZXNob2xkKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGVtYmVkZGluZyBmcm9tIHN0ZXAgKHNpbXBsaWZpZWQpXHJcbiAgICAgICAgY29uc3QgZW1iZWRkaW5nID0gdGhpcy5jcmVhdGVFbWJlZGRpbmcoc3RlcC5pbnB1dCArIHN0ZXAub3V0cHV0KTtcclxuXHJcbiAgICAgICAgLy8gRGV0ZXJtaW5lIHBhdHRlcm4gdHlwZVxyXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnN0ZXBUeXBlVG9QYXR0ZXJuVHlwZShzdGVwLnR5cGUpO1xyXG5cclxuICAgICAgICAvLyBTdG9yZSBpZiBub3QgdG9vIHNpbWlsYXIgdG8gZXhpc3RpbmdcclxuICAgICAgICBjb25zdCBzaW1pbGFyID0gdGhpcy5yZWFzb25pbmdCYW5rLmZpbmRTaW1pbGFyKGVtYmVkZGluZywgMSk7XHJcbiAgICAgICAgaWYgKHNpbWlsYXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlYXNvbmluZ0Jhbmsuc3RvcmUodHlwZSwgZW1iZWRkaW5nKTtcclxuICAgICAgICAgIGV4dHJhY3RlZCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBleHRyYWN0ZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0ZXBUeXBlVG9QYXR0ZXJuVHlwZShzdGVwVHlwZTogVHJhamVjdG9yeVN0ZXBbJ3R5cGUnXSk6IFBhdHRlcm5UeXBlIHtcclxuICAgIHN3aXRjaCAoc3RlcFR5cGUpIHtcclxuICAgICAgY2FzZSAncXVlcnknOlxyXG4gICAgICBjYXNlICdnZW5lcmF0ZSc6XHJcbiAgICAgICAgcmV0dXJuICdxdWVyeV9yZXNwb25zZSc7XHJcbiAgICAgIGNhc2UgJ3JvdXRlJzpcclxuICAgICAgICByZXR1cm4gJ3JvdXRpbmcnO1xyXG4gICAgICBjYXNlICdtZW1vcnknOlxyXG4gICAgICAgIHJldHVybiAnY29udGV4dF9yZXRyaWV2YWwnO1xyXG4gICAgICBjYXNlICdmZWVkYmFjayc6XHJcbiAgICAgICAgcmV0dXJuICdjb3JyZWN0aW9uJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ3F1ZXJ5X3Jlc3BvbnNlJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRW1iZWRkaW5nKHRleHQ6IHN0cmluZyk6IEVtYmVkZGluZyB7XHJcbiAgICAvLyBTaW1wbGlmaWVkIGhhc2gtYmFzZWQgZW1iZWRkaW5nIChyZWFsIGltcGwgdXNlcyBtb2RlbClcclxuICAgIGNvbnN0IGRpbSA9IDY0O1xyXG4gICAgY29uc3QgZW1iZWRkaW5nID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaWR4ID0gKHRleHQuY2hhckNvZGVBdChpKSAqIChpICsgMSkpICUgZGltO1xyXG4gICAgICBlbWJlZGRpbmdbaWR4XSArPSAwLjE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm9ybWFsaXplXHJcbiAgICBjb25zdCBub3JtID0gTWF0aC5zcXJ0KGVtYmVkZGluZy5yZWR1Y2UoKHMsIHgpID0+IHMgKyB4ICogeCwgMCkpIHx8IDE7XHJcbiAgICByZXR1cm4gZW1iZWRkaW5nLm1hcCh4ID0+IHggLyBub3JtKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEV4cG9ydCBhbGwgU09OQSBjb21wb25lbnRzXHJcbmV4cG9ydCB7XHJcbiAgREVGQVVMVF9TT05BX0NPTkZJRyxcclxufTtcclxuIl19
@@ -128,4 +128,4 @@ function createReadableStream(generator) {
128
128
  },
129
129
  });
130
130
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbWluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQWtKSCxvREFhQztBQXRKRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBYSxrQkFBa0I7SUFNN0IsWUFBWSxHQUdYO1FBQ0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNYLE1BQWMsRUFDZCxNQUF5QjtRQUV6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFekIsb0VBQW9FO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRCx1Q0FBdUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixVQUFVLEVBQUUsQ0FBQztZQUViLG1DQUFtQztZQUNuQyxJQUFJLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNO29CQUNKLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENB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QVU7WUFDbkIsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdHJlYW1pbmcgcmVzcG9uc2Ugc3VwcG9ydCBmb3IgUnV2TExNXG4gKi9cblxuaW1wb3J0IHtcbiAgU3RyZWFtQ2h1bmssXG4gIFN0cmVhbU9wdGlvbnMsXG4gIFF1ZXJ5UmVzcG9uc2UsXG4gIEdlbmVyYXRpb25Db25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEFzeW5jIGdlbmVyYXRvciBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBSdXZMTE0sIFN0cmVhbWluZ0dlbmVyYXRvciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xuICpcbiAqIGNvbnN0IGxsbSA9IG5ldyBSdXZMTE0oKTtcbiAqIGNvbnN0IHN0cmVhbWVyID0gbmV3IFN0cmVhbWluZ0dlbmVyYXRvcihsbG0pO1xuICpcbiAqIC8vIFN0cmVhbSB3aXRoIGFzeW5jIGl0ZXJhdG9yXG4gKiBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbWVyLnN0cmVhbSgnV3JpdGUgYSBzdG9yeScpKSB7XG4gKiAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNodW5rLnRleHQpO1xuICogfVxuICpcbiAqIC8vIFN0cmVhbSB3aXRoIGNhbGxiYWNrc1xuICogYXdhaXQgc3RyZWFtZXIuc3RyZWFtV2l0aENhbGxiYWNrcygnV3JpdGUgYSBwb2VtJywge1xuICogICBvbkNodW5rOiAoY2h1bmspID0+IGNvbnNvbGUubG9nKGNodW5rLnRleHQpLFxuICogICBvbkNvbXBsZXRlOiAocmVzcG9uc2UpID0+IGNvbnNvbGUubG9nKCdEb25lIScsIHJlc3BvbnNlLmxhdGVuY3lNcyksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtaW5nR2VuZXJhdG9yIHtcbiAgcHJpdmF0ZSBsbG06IHtcbiAgICBnZW5lcmF0ZTogKHByb21wdDogc3RyaW5nLCBjb25maWc/OiBHZW5lcmF0aW9uQ29uZmlnKSA9PiBzdHJpbmc7XG4gICAgcXVlcnk6ICh0ZXh0OiBzdHJpbmcsIGNvbmZpZz86IEdlbmVyYXRpb25Db25maWcpID0+IFF1ZXJ5UmVzcG9uc2U7XG4gIH07XG5cbiAgY29uc3RydWN0b3IobGxtOiB7XG4gICAgZ2VuZXJhdGU6IChwcm9tcHQ6IHN0cmluZywgY29uZmlnPzogR2VuZXJhdGlvbkNvbmZpZykgPT4gc3RyaW5nO1xuICAgIHF1ZXJ5OiAodGV4dDogc3RyaW5nLCBjb25maWc/OiBHZW5lcmF0aW9uQ29uZmlnKSA9PiBRdWVyeVJlc3BvbnNlO1xuICB9KSB7XG4gICAgdGhpcy5sbG0gPSBsbG07XG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtIHJlc3BvbnNlIGFzIGFzeW5jIGdlbmVyYXRvclxuICAgKlxuICAgKiBOb3RlOiBUaGlzIHNpbXVsYXRlcyBzdHJlYW1pbmcgYnkgY2h1bmtpbmcgdGhlIGZ1bGwgcmVzcG9uc2UuXG4gICAqIE5hdGl2ZSBzdHJlYW1pbmcgcmVxdWlyZXMgbmF0aXZlIG1vZHVsZSBzdXBwb3J0LlxuICAgKi9cbiAgYXN5bmMgKnN0cmVhbShcbiAgICBwcm9tcHQ6IHN0cmluZyxcbiAgICBjb25maWc/OiBHZW5lcmF0aW9uQ29uZmlnXG4gICk6IEFzeW5jR2VuZXJhdG9yPFN0cmVhbUNodW5rPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgLy8gR2VuZXJhdGUgZnVsbCByZXNwb25zZSAobmF0aXZlIHN0cmVhbWluZyB3b3VsZCB5aWVsZCByZWFsIGNodW5rcylcbiAgICBjb25zdCBmdWxsVGV4dCA9IHRoaXMubGxtLmdlbmVyYXRlKHByb21wdCwgY29uZmlnKTtcblxuICAgIC8vIFNpbXVsYXRlIHN0cmVhbWluZyBieSB5aWVsZGluZyB3b3Jkc1xuICAgIGNvbnN0IHdvcmRzID0gZnVsbFRleHQuc3BsaXQoLyhcXHMrKS8pO1xuICAgIGxldCBhY2N1bXVsYXRlZCA9ICcnO1xuICAgIGxldCB0b2tlbkNvdW50ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjY3VtdWxhdGVkICs9IHdvcmRzW2ldO1xuICAgICAgdG9rZW5Db3VudCsrO1xuXG4gICAgICAvLyBZaWVsZCBldmVyeSBmZXcgdG9rZW5zIG9yIGF0IGVuZFxuICAgICAgaWYgKHRva2VuQ291bnQgJSAzID09PSAwIHx8IGkgPT09IHdvcmRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgeWllbGQge1xuICAgICAgICAgIHRleHQ6IHdvcmRzLnNsaWNlKE1hdGgubWF4KDAsIGkgLSAyKSwgaSArIDEpLmpvaW4oJycpLFxuICAgICAgICAgIGRvbmU6IGkgPT09IHdvcmRzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgdG9rZW5Db3VudCxcbiAgICAgICAgICBsYXRlbmN5TXM6IERhdGUubm93KCkgLSBzdGFydCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTbWFsbCBkZWxheSB0byBzaW11bGF0ZSBzdHJlYW1pbmdcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxheSgxMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbSB3aXRoIGNhbGxiYWNrIGhhbmRsZXJzXG4gICAqL1xuICBhc3luYyBzdHJlYW1XaXRoQ2FsbGJhY2tzKFxuICAgIHByb21wdDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFN0cmVhbU9wdGlvbnNcbiAgKTogUHJvbWlzZTxRdWVyeVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBmdWxsVGV4dCA9ICcnO1xuICAgIGxldCB0b2tlbkNvdW50ID0gMDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHRoaXMuc3RyZWFtKHByb21wdCwgb3B0aW9ucykpIHtcbiAgICAgICAgZnVsbFRleHQgKz0gY2h1bmsudGV4dDtcbiAgICAgICAgdG9rZW5Db3VudCA9IGNodW5rLnRva2VuQ291bnQ7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMub25DaHVuaykge1xuICAgICAgICAgIG9wdGlvbnMub25DaHVuayhjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2U6IFF1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIHRleHQ6IGZ1bGxUZXh0LnRyaW0oKSxcbiAgICAgICAgY29uZmlkZW5jZTogMC44LFxuICAgICAgICBtb2RlbDogJ3N0cmVhbWluZycsXG4gICAgICAgIGNvbnRleHRTaXplOiB0b2tlbkNvdW50LFxuICAgICAgICBsYXRlbmN5TXM6IERhdGUubm93KCkgLSBzdGFydCxcbiAgICAgICAgcmVxdWVzdElkOiBgc3RyZWFtLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKX1gLFxuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMub25Db21wbGV0ZSkge1xuICAgICAgICBvcHRpb25zLm9uQ29tcGxldGUocmVzcG9uc2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChvcHRpb25zLm9uRXJyb3IpIHtcbiAgICAgICAgb3B0aW9ucy5vbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0IHN0cmVhbSBpbnRvIHNpbmdsZSByZXNwb25zZVxuICAgKi9cbiAgYXN5bmMgY29sbGVjdChwcm9tcHQ6IHN0cmluZywgY29uZmlnPzogR2VuZXJhdGlvbkNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgdGhpcy5zdHJlYW0ocHJvbXB0LCBjb25maWcpKSB7XG4gICAgICByZXN1bHQgPSBjaHVuay50ZXh0OyAvLyBFYWNoIGNodW5rIGlzIGN1bXVsYXRpdmVcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYSByZWFkYWJsZSBzdHJlYW0gZnJvbSByZXNwb25zZVxuICogKEZvciBOb2RlLmpzIHN0cmVhbSBjb21wYXRpYmlsaXR5KVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhZGFibGVTdHJlYW0oXG4gIGdlbmVyYXRvcjogQXN5bmNHZW5lcmF0b3I8U3RyZWFtQ2h1bms+XG4pOiBSZWFkYWJsZVN0cmVhbTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBnZW5lcmF0b3IubmV4dCgpO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHZhbHVlLnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufVxuIl19
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbWluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQWtKSCxvREFhQztBQXRKRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBYSxrQkFBa0I7SUFNN0IsWUFBWSxHQUdYO1FBQ0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNYLE1BQWMsRUFDZCxNQUF5QjtRQUV6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFekIsb0VBQW9FO1FBQ3BFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuRCx1Q0FBdUM7UUFDdkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixVQUFVLEVBQUUsQ0FBQztZQUViLG1DQUFtQztZQUNuQyxJQUFJLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNO29CQUNKLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENB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QVU7WUFDbkIsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFN0cmVhbWluZyByZXNwb25zZSBzdXBwb3J0IGZvciBSdXZMTE1cclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIFN0cmVhbUNodW5rLFxyXG4gIFN0cmVhbU9wdGlvbnMsXHJcbiAgUXVlcnlSZXNwb25zZSxcclxuICBHZW5lcmF0aW9uQ29uZmlnLFxyXG59IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIEFzeW5jIGdlbmVyYXRvciBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlc1xyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IFJ1dkxMTSwgU3RyZWFtaW5nR2VuZXJhdG9yIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XHJcbiAqXHJcbiAqIGNvbnN0IGxsbSA9IG5ldyBSdXZMTE0oKTtcclxuICogY29uc3Qgc3RyZWFtZXIgPSBuZXcgU3RyZWFtaW5nR2VuZXJhdG9yKGxsbSk7XHJcbiAqXHJcbiAqIC8vIFN0cmVhbSB3aXRoIGFzeW5jIGl0ZXJhdG9yXHJcbiAqIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtZXIuc3RyZWFtKCdXcml0ZSBhIHN0b3J5JykpIHtcclxuICogICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaHVuay50ZXh0KTtcclxuICogfVxyXG4gKlxyXG4gKiAvLyBTdHJlYW0gd2l0aCBjYWxsYmFja3NcclxuICogYXdhaXQgc3RyZWFtZXIuc3RyZWFtV2l0aENhbGxiYWNrcygnV3JpdGUgYSBwb2VtJywge1xyXG4gKiAgIG9uQ2h1bms6IChjaHVuaykgPT4gY29uc29sZS5sb2coY2h1bmsudGV4dCksXHJcbiAqICAgb25Db21wbGV0ZTogKHJlc3BvbnNlKSA9PiBjb25zb2xlLmxvZygnRG9uZSEnLCByZXNwb25zZS5sYXRlbmN5TXMpLFxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3RyZWFtaW5nR2VuZXJhdG9yIHtcclxuICBwcml2YXRlIGxsbToge1xyXG4gICAgZ2VuZXJhdGU6IChwcm9tcHQ6IHN0cmluZywgY29uZmlnPzogR2VuZXJhdGlvbkNvbmZpZykgPT4gc3RyaW5nO1xyXG4gICAgcXVlcnk6ICh0ZXh0OiBzdHJpbmcsIGNvbmZpZz86IEdlbmVyYXRpb25Db25maWcpID0+IFF1ZXJ5UmVzcG9uc2U7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IobGxtOiB7XHJcbiAgICBnZW5lcmF0ZTogKHByb21wdDogc3RyaW5nLCBjb25maWc/OiBHZW5lcmF0aW9uQ29uZmlnKSA9PiBzdHJpbmc7XHJcbiAgICBxdWVyeTogKHRleHQ6IHN0cmluZywgY29uZmlnPzogR2VuZXJhdGlvbkNvbmZpZykgPT4gUXVlcnlSZXNwb25zZTtcclxuICB9KSB7XHJcbiAgICB0aGlzLmxsbSA9IGxsbTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0cmVhbSByZXNwb25zZSBhcyBhc3luYyBnZW5lcmF0b3JcclxuICAgKlxyXG4gICAqIE5vdGU6IFRoaXMgc2ltdWxhdGVzIHN0cmVhbWluZyBieSBjaHVua2luZyB0aGUgZnVsbCByZXNwb25zZS5cclxuICAgKiBOYXRpdmUgc3RyZWFtaW5nIHJlcXVpcmVzIG5hdGl2ZSBtb2R1bGUgc3VwcG9ydC5cclxuICAgKi9cclxuICBhc3luYyAqc3RyZWFtKFxyXG4gICAgcHJvbXB0OiBzdHJpbmcsXHJcbiAgICBjb25maWc/OiBHZW5lcmF0aW9uQ29uZmlnXHJcbiAgKTogQXN5bmNHZW5lcmF0b3I8U3RyZWFtQ2h1bms+IHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBmdWxsIHJlc3BvbnNlIChuYXRpdmUgc3RyZWFtaW5nIHdvdWxkIHlpZWxkIHJlYWwgY2h1bmtzKVxyXG4gICAgY29uc3QgZnVsbFRleHQgPSB0aGlzLmxsbS5nZW5lcmF0ZShwcm9tcHQsIGNvbmZpZyk7XHJcblxyXG4gICAgLy8gU2ltdWxhdGUgc3RyZWFtaW5nIGJ5IHlpZWxkaW5nIHdvcmRzXHJcbiAgICBjb25zdCB3b3JkcyA9IGZ1bGxUZXh0LnNwbGl0KC8oXFxzKykvKTtcclxuICAgIGxldCBhY2N1bXVsYXRlZCA9ICcnO1xyXG4gICAgbGV0IHRva2VuQ291bnQgPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgYWNjdW11bGF0ZWQgKz0gd29yZHNbaV07XHJcbiAgICAgIHRva2VuQ291bnQrKztcclxuXHJcbiAgICAgIC8vIFlpZWxkIGV2ZXJ5IGZldyB0b2tlbnMgb3IgYXQgZW5kXHJcbiAgICAgIGlmICh0b2tlbkNvdW50ICUgMyA9PT0gMCB8fCBpID09PSB3b3Jkcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgeWllbGQge1xyXG4gICAgICAgICAgdGV4dDogd29yZHMuc2xpY2UoTWF0aC5tYXgoMCwgaSAtIDIpLCBpICsgMSkuam9pbignJyksXHJcbiAgICAgICAgICBkb25lOiBpID09PSB3b3Jkcy5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgdG9rZW5Db3VudCxcclxuICAgICAgICAgIGxhdGVuY3lNczogRGF0ZS5ub3coKSAtIHN0YXJ0LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNtYWxsIGRlbGF5IHRvIHNpbXVsYXRlIHN0cmVhbWluZ1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZGVsYXkoMTApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdHJlYW0gd2l0aCBjYWxsYmFjayBoYW5kbGVyc1xyXG4gICAqL1xyXG4gIGFzeW5jIHN0cmVhbVdpdGhDYWxsYmFja3MoXHJcbiAgICBwcm9tcHQ6IHN0cmluZyxcclxuICAgIG9wdGlvbnM6IFN0cmVhbU9wdGlvbnNcclxuICApOiBQcm9taXNlPFF1ZXJ5UmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgIGxldCBmdWxsVGV4dCA9ICcnO1xyXG4gICAgbGV0IHRva2VuQ291bnQgPSAwO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgdGhpcy5zdHJlYW0ocHJvbXB0LCBvcHRpb25zKSkge1xyXG4gICAgICAgIGZ1bGxUZXh0ICs9IGNodW5rLnRleHQ7XHJcbiAgICAgICAgdG9rZW5Db3VudCA9IGNodW5rLnRva2VuQ291bnQ7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLm9uQ2h1bmspIHtcclxuICAgICAgICAgIG9wdGlvbnMub25DaHVuayhjaHVuayk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByZXNwb25zZTogUXVlcnlSZXNwb25zZSA9IHtcclxuICAgICAgICB0ZXh0OiBmdWxsVGV4dC50cmltKCksXHJcbiAgICAgICAgY29uZmlkZW5jZTogMC44LFxyXG4gICAgICAgIG1vZGVsOiAnc3RyZWFtaW5nJyxcclxuICAgICAgICBjb250ZXh0U2l6ZTogdG9rZW5Db3VudCxcclxuICAgICAgICBsYXRlbmN5TXM6IERhdGUubm93KCkgLSBzdGFydCxcclxuICAgICAgICByZXF1ZXN0SWQ6IGBzdHJlYW0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfWAsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5vbkNvbXBsZXRlKSB7XHJcbiAgICAgICAgb3B0aW9ucy5vbkNvbXBsZXRlKHJlc3BvbnNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgaWYgKG9wdGlvbnMub25FcnJvcikge1xyXG4gICAgICAgIG9wdGlvbnMub25FcnJvcihlcnJvciBhcyBFcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWN0IHN0cmVhbSBpbnRvIHNpbmdsZSByZXNwb25zZVxyXG4gICAqL1xyXG4gIGFzeW5jIGNvbGxlY3QocHJvbXB0OiBzdHJpbmcsIGNvbmZpZz86IEdlbmVyYXRpb25Db25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiB0aGlzLnN0cmVhbShwcm9tcHQsIGNvbmZpZykpIHtcclxuICAgICAgcmVzdWx0ID0gY2h1bmsudGV4dDsgLy8gRWFjaCBjaHVuayBpcyBjdW11bGF0aXZlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJlYWRhYmxlIHN0cmVhbSBmcm9tIHJlc3BvbnNlXHJcbiAqIChGb3IgTm9kZS5qcyBzdHJlYW0gY29tcGF0aWJpbGl0eSlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFkYWJsZVN0cmVhbShcclxuICBnZW5lcmF0b3I6IEFzeW5jR2VuZXJhdG9yPFN0cmVhbUNodW5rPlxyXG4pOiBSZWFkYWJsZVN0cmVhbTxzdHJpbmc+IHtcclxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcclxuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xyXG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBnZW5lcmF0b3IubmV4dCgpO1xyXG4gICAgICBpZiAoZG9uZSkge1xyXG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUudGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSk7XHJcbn1cclxuIl19
@@ -477,4 +477,4 @@ class TrainingFactory {
477
477
  }
478
478
  }
479
479
  exports.TrainingFactory = TrainingFactory;
480
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW5pbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhaW5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRzs7O0FBR0gsaUNBQXFDO0FBQ3JDLGlDQUFvQztBQUVwQzs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQTZCO0lBQ3hELFlBQVksRUFBRSxLQUFLO0lBQ25CLFNBQVMsRUFBRSxFQUFFO0lBQ2IsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsUUFBUTtJQUNuQixXQUFXLEVBQUUsR0FBRztJQUNoQixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsR0FBRztJQUNqQixxQkFBcUIsRUFBRSxDQUFDO0lBQ3hCLGtCQUFrQixFQUFFLENBQUM7SUFDckIsU0FBUyxFQUFFLElBQUk7SUFDZixlQUFlLEVBQUUsR0FBRztDQUNyQixDQUFDO0FBb0RGOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBTXRCLFlBQVksTUFBZ0MsRUFBRSxVQUFrQjtRQUh4RCxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUk5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBRXhCLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbkUsS0FBSyxRQUFRO2dCQUNY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dXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhaW5pbmcgUGlwZWxpbmUgZm9yIFNPTkFcbiAqXG4gKiBDb21wcmVoZW5zaXZlIHRyYWluaW5nIGluZnJhc3RydWN0dXJlIHdpdGggbWV0cmljcyB0cmFja2luZyxcbiAqIGxlYXJuaW5nIHJhdGUgc2NoZWR1bGluZywgYW5kIGNoZWNrcG9pbnQgbWFuYWdlbWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgVHJhaW5pbmdQaXBlbGluZSwgVHJhaW5pbmdDb25maWcgfSBmcm9tICdAcnV2ZWN0b3IvcnV2bGxtJztcbiAqXG4gKiBjb25zdCBwaXBlbGluZSA9IG5ldyBUcmFpbmluZ1BpcGVsaW5lKHtcbiAqICAgbGVhcm5pbmdSYXRlOiAwLjAwMSxcbiAqICAgYmF0Y2hTaXplOiAzMixcbiAqICAgZXBvY2hzOiAxMCxcbiAqIH0pO1xuICpcbiAqIC8vIEFkZCB0cmFpbmluZyBkYXRhXG4gKiBwaXBlbGluZS5hZGRCYXRjaChpbnB1dHMsIHRhcmdldHMsIHF1YWxpdGllcyk7XG4gKlxuICogLy8gUnVuIHRyYWluaW5nXG4gKiBjb25zdCByZXN1bHQgPSBwaXBlbGluZS50cmFpbigpO1xuICogY29uc29sZS5sb2coYEZpbmFsIGxvc3M6ICR7cmVzdWx0LmZpbmFsTG9zc31gKTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB7IEVtYmVkZGluZywgVHJhaW5pbmdDb25maWcsIFRyYWluaW5nUmVzdWx0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBMb3JhQWRhcHRlciB9IGZyb20gJy4vbG9yYSc7XG5pbXBvcnQgeyBFd2NNYW5hZ2VyIH0gZnJvbSAnLi9zb25hJztcblxuLyoqXG4gKiBEZWZhdWx0IHRyYWluaW5nIGNvbmZpZ1xuICovXG5jb25zdCBERUZBVUxUX1RSQUlOSU5HX0NPTkZJRzogUmVxdWlyZWQ8VHJhaW5pbmdDb25maWc+ID0ge1xuICBsZWFybmluZ1JhdGU6IDAuMDAxLFxuICBiYXRjaFNpemU6IDMyLFxuICBlcG9jaHM6IDEwLFxuICBzY2hlZHVsZXI6ICdjb3NpbmUnLFxuICB3YXJtdXBTdGVwczogMTAwLFxuICB3ZWlnaHREZWNheTogMC4wMSxcbiAgZ3JhZGllbnRDbGlwOiAxLjAsXG4gIGVhcmx5U3RvcHBpbmdQYXRpZW5jZTogMyxcbiAgY2hlY2twb2ludEludGVydmFsOiAxLFxuICBld2NMYW1iZGE6IDIwMDAsXG4gIHZhbGlkYXRpb25TcGxpdDogMC4xLFxufTtcblxuLyoqXG4gKiBUcmFpbmluZyBtZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhaW5pbmdNZXRyaWNzIHtcbiAgLyoqIEN1cnJlbnQgZXBvY2ggKi9cbiAgZXBvY2g6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgc3RlcCAqL1xuICBzdGVwOiBudW1iZXI7XG4gIC8qKiBUcmFpbmluZyBsb3NzICovXG4gIHRyYWluTG9zczogbnVtYmVyO1xuICAvKiogVmFsaWRhdGlvbiBsb3NzICovXG4gIHZhbExvc3M6IG51bWJlcjtcbiAgLyoqIExlYXJuaW5nIHJhdGUgKi9cbiAgbGVhcm5pbmdSYXRlOiBudW1iZXI7XG4gIC8qKiBHcmFkaWVudCBub3JtICovXG4gIGdyYWROb3JtOiBudW1iZXI7XG4gIC8qKiBTdGVwcyBwZXIgc2Vjb25kICovXG4gIHN0ZXBzUGVyU2Vjb25kOiBudW1iZXI7XG4gIC8qKiBFVEEgaW4gc2Vjb25kcyAqL1xuICBldGFTZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogVHJhaW5pbmcgZGF0YSBiYXRjaFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWluaW5nQmF0Y2gge1xuICAvKiogSW5wdXQgZW1iZWRkaW5ncyAqL1xuICBpbnB1dHM6IEVtYmVkZGluZ1tdO1xuICAvKiogVGFyZ2V0IG91dHB1dHMgKi9cbiAgdGFyZ2V0czogRW1iZWRkaW5nW107XG4gIC8qKiBRdWFsaXR5IHNjb3JlcyAqL1xuICBxdWFsaXRpZXM6IG51bWJlcltdO1xufVxuXG4vKipcbiAqIENoZWNrcG9pbnQgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrcG9pbnQge1xuICAvKiogRXBvY2ggbnVtYmVyICovXG4gIGVwb2NoOiBudW1iZXI7XG4gIC8qKiBTdGVwIG51bWJlciAqL1xuICBzdGVwOiBudW1iZXI7XG4gIC8qKiBUcmFpbmluZyBsb3NzIGF0IGNoZWNrcG9pbnQgKi9cbiAgbG9zczogbnVtYmVyO1xuICAvKiogTW9kZWwgd2VpZ2h0cyAoc2VyaWFsaXplZCkgKi9cbiAgd2VpZ2h0czogc3RyaW5nO1xuICAvKiogVGltZXN0YW1wICovXG4gIHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG4vKipcbiAqIExlYXJuaW5nIFJhdGUgU2NoZWR1bGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBMUlNjaGVkdWxlciB7XG4gIHByaXZhdGUgY29uZmlnOiBSZXF1aXJlZDxUcmFpbmluZ0NvbmZpZz47XG4gIHByaXZhdGUgaW5pdGlhbExSOiBudW1iZXI7XG4gIHByaXZhdGUgY3VycmVudFN0ZXA6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgdG90YWxTdGVwczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUmVxdWlyZWQ8VHJhaW5pbmdDb25maWc+LCB0b3RhbFN0ZXBzOiBudW1iZXIpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRpYWxMUiA9IGNvbmZpZy5sZWFybmluZ1JhdGU7XG4gICAgdGhpcy50b3RhbFN0ZXBzID0gdG90YWxTdGVwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGVhcm5pbmcgcmF0ZSBmb3IgY3VycmVudCBzdGVwXG4gICAqL1xuICBnZXRMUigpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5jb25maWcuc2NoZWR1bGVyKSB7XG4gICAgICBjYXNlICdjb25zdGFudCc6XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxMUjtcblxuICAgICAgY2FzZSAnbGluZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbExSICogKDEgLSB0aGlzLmN1cnJlbnRTdGVwIC8gdGhpcy50b3RhbFN0ZXBzKTtcblxuICAgICAgY2FzZSAnY29zaW5lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbExSICogMC41ICogKDEgKyBNYXRoLmNvcyhNYXRoLlBJICogdGhpcy5jdXJyZW50U3RlcCAvIHRoaXMudG90YWxTdGVwcykpO1xuXG4gICAgICBjYXNlICd3YXJtdXAnOlxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA8IHRoaXMuY29uZmlnLndhcm11cFN0ZXBzKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbExSICogKHRoaXMuY3VycmVudFN0ZXAgLyB0aGlzLmNvbmZpZy53YXJtdXBTdGVwcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29zaW5lIGRlY2F5IGFmdGVyIHdhcm11cFxuICAgICAgICBjb25zdCBkZWNheVN0ZXBzID0gdGhpcy50b3RhbFN0ZXBzIC0gdGhpcy5jb25maWcud2FybXVwU3RlcHM7XG4gICAgICAgIGNvbnN0IGRlY2F5UHJvZ3Jlc3MgPSAodGhpcy5jdXJyZW50U3RlcCAtIHRoaXMuY29uZmlnLndhcm11cFN0ZXBzKSAvIGRlY2F5U3RlcHM7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxMUiAqIDAuNSAqICgxICsgTWF0aC5jb3MoTWF0aC5QSSAqIGRlY2F5UHJvZ3Jlc3MpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbExSO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRoZSBzY2hlZHVsZXJcbiAgICovXG4gIHN0ZXAoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCsrO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHNjaGVkdWxlclxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDA7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFpbmluZyBNZXRyaWNzIFRyYWNrZXJcbiAqL1xuZXhwb3J0IGNsYXNzIE1ldHJpY3NUcmFja2VyIHtcbiAgcHJpdmF0ZSBsb3NzSGlzdG9yeTogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSB2YWxMb3NzSGlzdG9yeTogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBncmFkTm9ybUhpc3Rvcnk6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3RhcnRUaW1lOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIHN0ZXBUaW1lczogbnVtYmVyW10gPSBbXTtcblxuICAvKipcbiAgICogUmVjb3JkIHRyYWluaW5nIGxvc3NcbiAgICovXG4gIHJlY29yZExvc3MobG9zczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5sb3NzSGlzdG9yeS5wdXNoKGxvc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB2YWxpZGF0aW9uIGxvc3NcbiAgICovXG4gIHJlY29yZFZhbExvc3MobG9zczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy52YWxMb3NzSGlzdG9yeS5wdXNoKGxvc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBncmFkaWVudCBub3JtXG4gICAqL1xuICByZWNvcmRHcmFkTm9ybShub3JtOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdyYWROb3JtSGlzdG9yeS5wdXNoKG5vcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBzdGVwIHRpbWVcbiAgICovXG4gIHJlY29yZFN0ZXBUaW1lKG1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBUaW1lcy5wdXNoKG1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXZlcmFnZSBsb3NzIG92ZXIgbGFzdCBOIHN0ZXBzXG4gICAqL1xuICBhdmdMb3NzKG46IG51bWJlciA9IDEwMCk6IG51bWJlciB7XG4gICAgY29uc3QgcmVjZW50ID0gdGhpcy5sb3NzSGlzdG9yeS5zbGljZSgtbik7XG4gICAgcmV0dXJuIHJlY2VudC5sZW5ndGggPiAwID8gcmVjZW50LnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gcmVjZW50Lmxlbmd0aCA6IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGF2ZXJhZ2UgdmFsaWRhdGlvbiBsb3NzXG4gICAqL1xuICBhdmdWYWxMb3NzKG46IG51bWJlciA9IDEwKTogbnVtYmVyIHtcbiAgICBjb25zdCByZWNlbnQgPSB0aGlzLnZhbExvc3NIaXN0b3J5LnNsaWNlKC1uKTtcbiAgICByZXR1cm4gcmVjZW50Lmxlbmd0aCA+IDAgPyByZWNlbnQucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyByZWNlbnQubGVuZ3RoIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RlcHMgcGVyIHNlY29uZFxuICAgKi9cbiAgc3RlcHNQZXJTZWNvbmQoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zdGVwVGltZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICBjb25zdCBhdmdTdGVwVGltZSA9IHRoaXMuc3RlcFRpbWVzLnNsaWNlKC0xMDApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gTWF0aC5taW4odGhpcy5zdGVwVGltZXMubGVuZ3RoLCAxMDApO1xuICAgIHJldHVybiBhdmdTdGVwVGltZSA+IDAgPyAxMDAwIC8gYXZnU3RlcFRpbWUgOiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBFVEEgaW4gc2Vjb25kc1xuICAgKi9cbiAgZXRhKHJlbWFpbmluZ1N0ZXBzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHNwcyA9IHRoaXMuc3RlcHNQZXJTZWNvbmQoKTtcbiAgICByZXR1cm4gc3BzID4gMCA/IHJlbWFpbmluZ1N0ZXBzIC8gc3BzIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYmVzdCB2YWxpZGF0aW9uIGxvc3NcbiAgICovXG4gIGJlc3RWYWxMb3NzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmFsTG9zc0hpc3RvcnkubGVuZ3RoID4gMCA/IE1hdGgubWluKC4uLnRoaXMudmFsTG9zc0hpc3RvcnkpIDogSW5maW5pdHk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRvdGFsIGR1cmF0aW9uXG4gICAqL1xuICBkdXJhdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBsb3NzIGhpc3RvcnlcbiAgICovXG4gIGdldExvc3NIaXN0b3J5KCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubG9zc0hpc3RvcnldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgdmFsaWRhdGlvbiBsb3NzIGhpc3RvcnlcbiAgICovXG4gIGdldFZhbExvc3NIaXN0b3J5KCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudmFsTG9zc0hpc3RvcnldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRyYWNrZXJcbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubG9zc0hpc3RvcnkgPSBbXTtcbiAgICB0aGlzLnZhbExvc3NIaXN0b3J5ID0gW107XG4gICAgdGhpcy5ncmFkTm9ybUhpc3RvcnkgPSBbXTtcbiAgICB0aGlzLnN0ZXBUaW1lcyA9IFtdO1xuICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYWluaW5nIFBpcGVsaW5lXG4gKlxuICogRnVsbCB0cmFpbmluZyBpbmZyYXN0cnVjdHVyZSBmb3IgU09OQSBtb2RlbHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFpbmluZ1BpcGVsaW5lIHtcbiAgcHJpdmF0ZSBjb25maWc6IFJlcXVpcmVkPFRyYWluaW5nQ29uZmlnPjtcbiAgcHJpdmF0ZSBhZGFwdGVyOiBMb3JhQWRhcHRlcjtcbiAgcHJpdmF0ZSBld2NNYW5hZ2VyOiBFd2NNYW5hZ2VyO1xuICBwcml2YXRlIG1ldHJpY3M6IE1ldHJpY3NUcmFja2VyO1xuICBwcml2YXRlIHNjaGVkdWxlcjogTFJTY2hlZHVsZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBiYXRjaGVzOiBUcmFpbmluZ0JhdGNoW10gPSBbXTtcbiAgcHJpdmF0ZSBjaGVja3BvaW50czogQ2hlY2twb2ludFtdID0gW107XG4gIHByaXZhdGUgY3VycmVudEVwb2NoOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGN1cnJlbnRTdGVwOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGJlc3RWYWxMb3NzOiBudW1iZXIgPSBJbmZpbml0eTtcbiAgcHJpdmF0ZSBwYXRpZW5jZUNvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnPzogVHJhaW5pbmdDb25maWcsIGFkYXB0ZXI/OiBMb3JhQWRhcHRlcikge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5ERUZBVUxUX1RSQUlOSU5HX0NPTkZJRywgLi4uY29uZmlnIH07XG4gICAgdGhpcy5hZGFwdGVyID0gYWRhcHRlciB8fCBuZXcgTG9yYUFkYXB0ZXIoeyByYW5rOiA4IH0pO1xuICAgIHRoaXMuZXdjTWFuYWdlciA9IG5ldyBFd2NNYW5hZ2VyKHRoaXMuY29uZmlnLmV3Y0xhbWJkYSk7XG4gICAgdGhpcy5tZXRyaWNzID0gbmV3IE1ldHJpY3NUcmFja2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRyYWluaW5nIGJhdGNoXG4gICAqL1xuICBhZGRCYXRjaChpbnB1dHM6IEVtYmVkZGluZ1tdLCB0YXJnZXRzOiBFbWJlZGRpbmdbXSwgcXVhbGl0aWVzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuYmF0Y2hlcy5wdXNoKHsgaW5wdXRzLCB0YXJnZXRzLCBxdWFsaXRpZXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRyYWluaW5nIGRhdGFcbiAgICovXG4gIGFkZERhdGEoZGF0YTogQXJyYXk8eyBpbnB1dDogRW1iZWRkaW5nOyB0YXJnZXQ6IEVtYmVkZGluZzsgcXVhbGl0eTogbnVtYmVyIH0+KTogdm9pZCB7XG4gICAgLy8gR3JvdXAgaW50byBiYXRjaGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSB0aGlzLmNvbmZpZy5iYXRjaFNpemUpIHtcbiAgICAgIGNvbnN0IGJhdGNoID0gZGF0YS5zbGljZShpLCBpICsgdGhpcy5jb25maWcuYmF0Y2hTaXplKTtcbiAgICAgIHRoaXMuYWRkQmF0Y2goXG4gICAgICAgIGJhdGNoLm1hcChkID0+IGQuaW5wdXQpLFxuICAgICAgICBiYXRjaC5tYXAoZCA9PiBkLnRhcmdldCksXG4gICAgICAgIGJhdGNoLm1hcChkID0+IGQucXVhbGl0eSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0cmFpbmluZ1xuICAgKi9cbiAgdHJhaW4oKTogVHJhaW5pbmdSZXN1bHQge1xuICAgIGNvbnN0IHRvdGFsU3RlcHMgPSB0aGlzLmJhdGNoZXMubGVuZ3RoICogdGhpcy5jb25maWcuZXBvY2hzO1xuICAgIHRoaXMuc2NoZWR1bGVyID0gbmV3IExSU2NoZWR1bGVyKHRoaXMuY29uZmlnLCB0b3RhbFN0ZXBzKTtcbiAgICB0aGlzLm1ldHJpY3MucmVzZXQoKTtcbiAgICB0aGlzLmFkYXB0ZXIuc3RhcnRUcmFpbmluZyh0aGlzLmNvbmZpZy5sZWFybmluZ1JhdGUpO1xuXG4gICAgbGV0IGVhcmx5U3RvcHBlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgZXBvY2ggPSAwOyBlcG9jaCA8IHRoaXMuY29uZmlnLmVwb2NoczsgZXBvY2grKykge1xuICAgICAgdGhpcy5jdXJyZW50RXBvY2ggPSBlcG9jaDtcblxuICAgICAgLy8gU2h1ZmZsZSBiYXRjaGVzXG4gICAgICBjb25zdCBzaHVmZmxlZEJhdGNoZXMgPSB0aGlzLnNodWZmbGVCYXRjaGVzKCk7XG5cbiAgICAgIC8vIFNwbGl0IGludG8gdHJhaW4vdmFsXG4gICAgICBjb25zdCB2YWxTaXplID0gTWF0aC5mbG9vcihzaHVmZmxlZEJhdGNoZXMubGVuZ3RoICogdGhpcy5jb25maWcudmFsaWRhdGlvblNwbGl0KTtcbiAgICAgIGNvbnN0IHRyYWluQmF0Y2hlcyA9IHNodWZmbGVkQmF0Y2hlcy5zbGljZSh2YWxTaXplKTtcbiAgICAgIGNvbnN0IHZhbEJhdGNoZXMgPSBzaHVmZmxlZEJhdGNoZXMuc2xpY2UoMCwgdmFsU2l6ZSk7XG5cbiAgICAgIC8vIFRyYWluaW5nIGVwb2NoXG4gICAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHRyYWluQmF0Y2hlcykge1xuICAgICAgICBjb25zdCBzdGVwU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBsb3NzID0gdGhpcy50cmFpblN0ZXAoYmF0Y2gpO1xuICAgICAgICB0aGlzLm1ldHJpY3MucmVjb3JkTG9zcyhsb3NzKTtcbiAgICAgICAgdGhpcy5tZXRyaWNzLnJlY29yZFN0ZXBUaW1lKERhdGUubm93KCkgLSBzdGVwU3RhcnQpO1xuICAgICAgICB0aGlzLnNjaGVkdWxlci5zdGVwKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXArKztcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGlvblxuICAgICAgaWYgKHZhbEJhdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB2YWxMb3NzID0gdGhpcy52YWxpZGF0ZSh2YWxCYXRjaGVzKTtcbiAgICAgICAgdGhpcy5tZXRyaWNzLnJlY29yZFZhbExvc3ModmFsTG9zcyk7XG5cbiAgICAgICAgLy8gRWFybHkgc3RvcHBpbmdcbiAgICAgICAgaWYgKHZhbExvc3MgPCB0aGlzLmJlc3RWYWxMb3NzKSB7XG4gICAgICAgICAgdGhpcy5iZXN0VmFsTG9zcyA9IHZhbExvc3M7XG4gICAgICAgICAgdGhpcy5wYXRpZW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGF0aWVuY2VDb3VudGVyKys7XG4gICAgICAgICAgaWYgKHRoaXMucGF0aWVuY2VDb3VudGVyID49IHRoaXMuY29uZmlnLmVhcmx5U3RvcHBpbmdQYXRpZW5jZSkge1xuICAgICAgICAgICAgZWFybHlTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVja3BvaW50XG4gICAgICBpZiAoKGVwb2NoICsgMSkgJSB0aGlzLmNvbmZpZy5jaGVja3BvaW50SW50ZXJ2YWwgPT09IDApIHtcbiAgICAgICAgdGhpcy5zYXZlQ2hlY2twb2ludCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYWRhcHRlci5lbmRUcmFpbmluZygpO1xuXG4gICAgLy8gUmVnaXN0ZXIgd2l0aCBFV0MgZm9yIGNvbnRpbnVhbCBsZWFybmluZ1xuICAgIGNvbnN0IHdlaWdodHMgPSB0aGlzLmFkYXB0ZXIubWVyZ2UoKS5mbGF0KCk7XG4gICAgdGhpcy5ld2NNYW5hZ2VyLnJlZ2lzdGVyVGFzayhgdGFzay0ke0RhdGUubm93KCl9YCwgd2VpZ2h0cyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXBvY2hzOiB0aGlzLmN1cnJlbnRFcG9jaCArIDEsXG4gICAgICBzdGVwczogdGhpcy5jdXJyZW50U3RlcCxcbiAgICAgIGZpbmFsTG9zczogdGhpcy5tZXRyaWNzLmF2Z0xvc3MoMTAwKSxcbiAgICAgIGJlc3RWYWxMb3NzOiB0aGlzLmJlc3RWYWxMb3NzLFxuICAgICAgZHVyYXRpb25NczogdGhpcy5tZXRyaWNzLmR1cmF0aW9uKCksXG4gICAgICBsb3NzSGlzdG9yeTogdGhpcy5tZXRyaWNzLmdldExvc3NIaXN0b3J5KCksXG4gICAgICB2YWxMb3NzSGlzdG9yeTogdGhpcy5tZXRyaWNzLmdldFZhbExvc3NIaXN0b3J5KCksXG4gICAgICBlYXJseVN0b3BwZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW5nbGUgdHJhaW5pbmcgc3RlcFxuICAgKi9cbiAgcHJpdmF0ZSB0cmFpblN0ZXAoYmF0Y2g6IFRyYWluaW5nQmF0Y2gpOiBudW1iZXIge1xuICAgIGxldCB0b3RhbExvc3MgPSAwO1xuICAgIGNvbnN0IGxyID0gdGhpcy5zY2hlZHVsZXI/LmdldExSKCkgfHwgdGhpcy5jb25maWcubGVhcm5pbmdSYXRlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaC5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYmF0Y2guaW5wdXRzW2ldO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gYmF0Y2gudGFyZ2V0c1tpXTtcbiAgICAgIGNvbnN0IHF1YWxpdHkgPSBiYXRjaC5xdWFsaXRpZXNbaV07XG5cbiAgICAgIC8vIEZvcndhcmQgcGFzc1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5hZGFwdGVyLmZvcndhcmQoaW5wdXQpO1xuXG4gICAgICAvLyBDb21wdXRlIGxvc3MgKE1TRSB3ZWlnaHRlZCBieSBxdWFsaXR5KVxuICAgICAgY29uc3QgZ3JhZE91dHB1dDogbnVtYmVyW10gPSBbXTtcbiAgICAgIGxldCBsb3NzID0gMDtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb3V0cHV0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBvdXRwdXRbal0gLSAodGFyZ2V0W2pdIHx8IDApO1xuICAgICAgICBsb3NzICs9IGRpZmYgKiBkaWZmO1xuICAgICAgICBncmFkT3V0cHV0LnB1c2goMiAqIGRpZmYgKiBxdWFsaXR5KTsgLy8gUXVhbGl0eS13ZWlnaHRlZCBncmFkaWVudFxuICAgICAgfVxuICAgICAgbG9zcyA9IChsb3NzIC8gb3V0cHV0Lmxlbmd0aCkgKiBxdWFsaXR5O1xuXG4gICAgICAvLyBBZGQgRVdDIHBlbmFsdHlcbiAgICAgIGNvbnN0IGV3Y1BlbmFsdHkgPSB0aGlzLmV3Y01hbmFnZXIuY29tcHV0ZVBlbmFsdHkodGhpcy5hZGFwdGVyLm1lcmdlKCkuZmxhdCgpKTtcbiAgICAgIGxvc3MgKz0gZXdjUGVuYWx0eSAqIDAuMDAxO1xuXG4gICAgICAvLyBCYWNrd2FyZCBwYXNzXG4gICAgICB0aGlzLmFkYXB0ZXIuYmFja3dhcmQoaW5wdXQsIGdyYWRPdXRwdXQsIGxyKTtcblxuICAgICAgdG90YWxMb3NzICs9IGxvc3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvdGFsTG9zcyAvIGJhdGNoLmlucHV0cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGlvbiBwYXNzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlKGJhdGNoZXM6IFRyYWluaW5nQmF0Y2hbXSk6IG51bWJlciB7XG4gICAgbGV0IHRvdGFsTG9zcyA9IDA7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgYmF0Y2hlcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaC5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5hZGFwdGVyLmZvcndhcmQoYmF0Y2guaW5wdXRzW2ldKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYmF0Y2gudGFyZ2V0c1tpXTtcblxuICAgICAgICBsZXQgbG9zcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb3V0cHV0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgZGlmZiA9IG91dHB1dFtqXSAtICh0YXJnZXRbal0gfHwgMCk7XG4gICAgICAgICAgbG9zcyArPSBkaWZmICogZGlmZjtcbiAgICAgICAgfVxuICAgICAgICB0b3RhbExvc3MgKz0gbG9zcyAvIG91dHB1dC5sZW5ndGg7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50ID4gMCA/IHRvdGFsTG9zcyAvIGNvdW50IDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGNoZWNrcG9pbnRcbiAgICovXG4gIHByaXZhdGUgc2F2ZUNoZWNrcG9pbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja3BvaW50cy5wdXNoKHtcbiAgICAgIGVwb2NoOiB0aGlzLmN1cnJlbnRFcG9jaCxcbiAgICAgIHN0ZXA6IHRoaXMuY3VycmVudFN0ZXAsXG4gICAgICBsb3NzOiB0aGlzLm1ldHJpY3MuYXZnTG9zcygxMDApLFxuICAgICAgd2VpZ2h0czogdGhpcy5hZGFwdGVyLnRvSlNPTigpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY2hlY2twb2ludFxuICAgKi9cbiAgbG9hZENoZWNrcG9pbnQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoZWNrcG9pbnQgPSB0aGlzLmNoZWNrcG9pbnRzW2luZGV4XTtcbiAgICBpZiAoIWNoZWNrcG9pbnQpIHJldHVybiBmYWxzZTtcblxuICAgIHRoaXMuYWRhcHRlciA9IExvcmFBZGFwdGVyLmZyb21KU09OKGNoZWNrcG9pbnQud2VpZ2h0cyk7XG4gICAgdGhpcy5jdXJyZW50RXBvY2ggPSBjaGVja3BvaW50LmVwb2NoO1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSBjaGVja3BvaW50LnN0ZXA7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgbWV0cmljc1xuICAgKi9cbiAgZ2V0TWV0cmljcygpOiBUcmFpbmluZ01ldHJpY3Mge1xuICAgIHJldHVybiB7XG4gICAgICBlcG9jaDogdGhpcy5jdXJyZW50RXBvY2gsXG4gICAgICBzdGVwOiB0aGlzLmN1cnJlbnRTdGVwLFxuICAgICAgdHJhaW5Mb3NzOiB0aGlzLm1ldHJpY3MuYXZnTG9zcygxMDApLFxuICAgICAgdmFsTG9zczogdGhpcy5tZXRyaWNzLmF2Z1ZhbExvc3MoMTApLFxuICAgICAgbGVhcm5pbmdSYXRlOiB0aGlzLnNjaGVkdWxlcj8uZ2V0TFIoKSB8fCB0aGlzLmNvbmZpZy5sZWFybmluZ1JhdGUsXG4gICAgICBncmFkTm9ybTogMCxcbiAgICAgIHN0ZXBzUGVyU2Vjb25kOiB0aGlzLm1ldHJpY3Muc3RlcHNQZXJTZWNvbmQoKSxcbiAgICAgIGV0YVNlY29uZHM6IHRoaXMubWV0cmljcy5ldGEoXG4gICAgICAgICh0aGlzLmNvbmZpZy5lcG9jaHMgLSB0aGlzLmN1cnJlbnRFcG9jaCkgKiB0aGlzLmJhdGNoZXMubGVuZ3RoXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFkYXB0ZXJcbiAgICovXG4gIGdldEFkYXB0ZXIoKTogTG9yYUFkYXB0ZXIge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEVXQyBtYW5hZ2VyXG4gICAqL1xuICBnZXRFd2NNYW5hZ2VyKCk6IEV3Y01hbmFnZXIge1xuICAgIHJldHVybiB0aGlzLmV3Y01hbmFnZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNoZWNrcG9pbnRzXG4gICAqL1xuICBnZXRDaGVja3BvaW50cygpOiBDaGVja3BvaW50W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5jaGVja3BvaW50c107XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgcGlwZWxpbmVcbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuYmF0Y2hlcyA9IFtdO1xuICAgIHRoaXMuY2hlY2twb2ludHMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRFcG9jaCA9IDA7XG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDA7XG4gICAgdGhpcy5iZXN0VmFsTG9zcyA9IEluZmluaXR5O1xuICAgIHRoaXMucGF0aWVuY2VDb3VudGVyID0gMDtcbiAgICB0aGlzLm1ldHJpY3MucmVzZXQoKTtcbiAgICB0aGlzLmFkYXB0ZXIucmVzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2h1ZmZsZUJhdGNoZXMoKTogVHJhaW5pbmdCYXRjaFtdIHtcbiAgICBjb25zdCBzaHVmZmxlZCA9IFsuLi50aGlzLmJhdGNoZXNdO1xuICAgIGZvciAobGV0IGkgPSBzaHVmZmxlZC5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XG4gICAgICBbc2h1ZmZsZWRbaV0sIHNodWZmbGVkW2pdXSA9IFtzaHVmZmxlZFtqXSwgc2h1ZmZsZWRbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gc2h1ZmZsZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFpbmluZyBGYWN0b3J5XG4gKlxuICogQ3JlYXRlIHByZS1jb25maWd1cmVkIHRyYWluaW5nIHBpcGVsaW5lcyBmb3IgY29tbW9uIHNjZW5hcmlvcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYWluaW5nRmFjdG9yeSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgcGlwZWxpbmUgZm9yIHF1aWNrIGZpbmUtdHVuaW5nXG4gICAqL1xuICBzdGF0aWMgcXVpY2tGaW5ldHVuZSgpOiBUcmFpbmluZ1BpcGVsaW5lIHtcbiAgICByZXR1cm4gbmV3IFRyYWluaW5nUGlwZWxpbmUoe1xuICAgICAgbGVhcm5pbmdSYXRlOiAwLjAxLFxuICAgICAgZXBvY2hzOiAzLFxuICAgICAgYmF0Y2hTaXplOiAxNixcbiAgICAgIHNjaGVkdWxlcjogJ2NvbnN0YW50JyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcGlwZWxpbmUgZm9yIGRlZXAgdHJhaW5pbmdcbiAgICovXG4gIHN0YXRpYyBkZWVwVHJhaW5pbmcoKTogVHJhaW5pbmdQaXBlbGluZSB7XG4gICAgcmV0dXJuIG5ldyBUcmFpbmluZ1BpcGVsaW5lKHtcbiAgICAgIGxlYXJuaW5nUmF0ZTogMC4wMDEsXG4gICAgICBlcG9jaHM6IDUwLFxuICAgICAgYmF0Y2hTaXplOiAzMixcbiAgICAgIHNjaGVkdWxlcjogJ3dhcm11cCcsXG4gICAgICB3YXJtdXBTdGVwczogNTAwLFxuICAgICAgZWFybHlTdG9wcGluZ1BhdGllbmNlOiA1LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBwaXBlbGluZSBmb3IgY29udGludWFsIGxlYXJuaW5nXG4gICAqL1xuICBzdGF0aWMgY29udGludWFsTGVhcm5pbmcoZXdjTGFtYmRhOiBudW1iZXIgPSA1MDAwKTogVHJhaW5pbmdQaXBlbGluZSB7XG4gICAgcmV0dXJuIG5ldyBUcmFpbmluZ1BpcGVsaW5lKHtcbiAgICAgIGxlYXJuaW5nUmF0ZTogMC4wMDA1LFxuICAgICAgZXBvY2hzOiAxMCxcbiAgICAgIGJhdGNoU2l6ZTogMTYsXG4gICAgICBzY2hlZHVsZXI6ICdjb3NpbmUnLFxuICAgICAgZXdjTGFtYmRhLFxuICAgICAgZWFybHlTdG9wcGluZ1BhdGllbmNlOiAxMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgcGlwZWxpbmUgZm9yIGZlZGVyYXRlZCBhZ2dyZWdhdGlvblxuICAgKi9cbiAgc3RhdGljIGZlZGVyYXRlZEFnZ3JlZ2F0aW9uKCk6IFRyYWluaW5nUGlwZWxpbmUge1xuICAgIHJldHVybiBuZXcgVHJhaW5pbmdQaXBlbGluZSh7XG4gICAgICBsZWFybmluZ1JhdGU6IDAuMDAwMSxcbiAgICAgIGVwb2NoczogNSxcbiAgICAgIGJhdGNoU2l6ZTogNjQsXG4gICAgICBzY2hlZHVsZXI6ICdsaW5lYXInLFxuICAgICAgZXdjTGFtYmRhOiAyMDAwLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
480
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW5pbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhaW5pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRzs7O0FBR0gsaUNBQXFDO0FBQ3JDLGlDQUFvQztBQUVwQzs7R0FFRztBQUNILE1BQU0sdUJBQXVCLEdBQTZCO0lBQ3hELFlBQVksRUFBRSxLQUFLO0lBQ25CLFNBQVMsRUFBRSxFQUFFO0lBQ2IsTUFBTSxFQUFFLEVBQUU7SUFDVixTQUFTLEVBQUUsUUFBUTtJQUNuQixXQUFXLEVBQUUsR0FBRztJQUNoQixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsR0FBRztJQUNqQixxQkFBcUIsRUFBRSxDQUFDO0lBQ3hCLGtCQUFrQixFQUFFLENBQUM7SUFDckIsU0FBUyxFQUFFLElBQUk7SUFDZixlQUFlLEVBQUUsR0FBRztDQUNyQixDQUFDO0FBb0RGOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBTXRCLFlBQVksTUFBZ0MsRUFBRSxVQUFrQjtRQUh4RCxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUk5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBRXhCLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbkUsS0FBSyxRQUFRO2dCQUNY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dXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUcmFpbmluZyBQaXBlbGluZSBmb3IgU09OQVxyXG4gKlxyXG4gKiBDb21wcmVoZW5zaXZlIHRyYWluaW5nIGluZnJhc3RydWN0dXJlIHdpdGggbWV0cmljcyB0cmFja2luZyxcclxuICogbGVhcm5pbmcgcmF0ZSBzY2hlZHVsaW5nLCBhbmQgY2hlY2twb2ludCBtYW5hZ2VtZW50LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGltcG9ydCB7IFRyYWluaW5nUGlwZWxpbmUsIFRyYWluaW5nQ29uZmlnIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XHJcbiAqXHJcbiAqIGNvbnN0IHBpcGVsaW5lID0gbmV3IFRyYWluaW5nUGlwZWxpbmUoe1xyXG4gKiAgIGxlYXJuaW5nUmF0ZTogMC4wMDEsXHJcbiAqICAgYmF0Y2hTaXplOiAzMixcclxuICogICBlcG9jaHM6IDEwLFxyXG4gKiB9KTtcclxuICpcclxuICogLy8gQWRkIHRyYWluaW5nIGRhdGFcclxuICogcGlwZWxpbmUuYWRkQmF0Y2goaW5wdXRzLCB0YXJnZXRzLCBxdWFsaXRpZXMpO1xyXG4gKlxyXG4gKiAvLyBSdW4gdHJhaW5pbmdcclxuICogY29uc3QgcmVzdWx0ID0gcGlwZWxpbmUudHJhaW4oKTtcclxuICogY29uc29sZS5sb2coYEZpbmFsIGxvc3M6ICR7cmVzdWx0LmZpbmFsTG9zc31gKTtcclxuICogYGBgXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgRW1iZWRkaW5nLCBUcmFpbmluZ0NvbmZpZywgVHJhaW5pbmdSZXN1bHQgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgTG9yYUFkYXB0ZXIgfSBmcm9tICcuL2xvcmEnO1xyXG5pbXBvcnQgeyBFd2NNYW5hZ2VyIH0gZnJvbSAnLi9zb25hJztcclxuXHJcbi8qKlxyXG4gKiBEZWZhdWx0IHRyYWluaW5nIGNvbmZpZ1xyXG4gKi9cclxuY29uc3QgREVGQVVMVF9UUkFJTklOR19DT05GSUc6IFJlcXVpcmVkPFRyYWluaW5nQ29uZmlnPiA9IHtcclxuICBsZWFybmluZ1JhdGU6IDAuMDAxLFxyXG4gIGJhdGNoU2l6ZTogMzIsXHJcbiAgZXBvY2hzOiAxMCxcclxuICBzY2hlZHVsZXI6ICdjb3NpbmUnLFxyXG4gIHdhcm11cFN0ZXBzOiAxMDAsXHJcbiAgd2VpZ2h0RGVjYXk6IDAuMDEsXHJcbiAgZ3JhZGllbnRDbGlwOiAxLjAsXHJcbiAgZWFybHlTdG9wcGluZ1BhdGllbmNlOiAzLFxyXG4gIGNoZWNrcG9pbnRJbnRlcnZhbDogMSxcclxuICBld2NMYW1iZGE6IDIwMDAsXHJcbiAgdmFsaWRhdGlvblNwbGl0OiAwLjEsXHJcbn07XHJcblxyXG4vKipcclxuICogVHJhaW5pbmcgbWV0cmljc1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmFpbmluZ01ldHJpY3Mge1xyXG4gIC8qKiBDdXJyZW50IGVwb2NoICovXHJcbiAgZXBvY2g6IG51bWJlcjtcclxuICAvKiogQ3VycmVudCBzdGVwICovXHJcbiAgc3RlcDogbnVtYmVyO1xyXG4gIC8qKiBUcmFpbmluZyBsb3NzICovXHJcbiAgdHJhaW5Mb3NzOiBudW1iZXI7XHJcbiAgLyoqIFZhbGlkYXRpb24gbG9zcyAqL1xyXG4gIHZhbExvc3M6IG51bWJlcjtcclxuICAvKiogTGVhcm5pbmcgcmF0ZSAqL1xyXG4gIGxlYXJuaW5nUmF0ZTogbnVtYmVyO1xyXG4gIC8qKiBHcmFkaWVudCBub3JtICovXHJcbiAgZ3JhZE5vcm06IG51bWJlcjtcclxuICAvKiogU3RlcHMgcGVyIHNlY29uZCAqL1xyXG4gIHN0ZXBzUGVyU2Vjb25kOiBudW1iZXI7XHJcbiAgLyoqIEVUQSBpbiBzZWNvbmRzICovXHJcbiAgZXRhU2Vjb25kczogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogVHJhaW5pbmcgZGF0YSBiYXRjaFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmFpbmluZ0JhdGNoIHtcclxuICAvKiogSW5wdXQgZW1iZWRkaW5ncyAqL1xyXG4gIGlucHV0czogRW1iZWRkaW5nW107XHJcbiAgLyoqIFRhcmdldCBvdXRwdXRzICovXHJcbiAgdGFyZ2V0czogRW1iZWRkaW5nW107XHJcbiAgLyoqIFF1YWxpdHkgc2NvcmVzICovXHJcbiAgcXVhbGl0aWVzOiBudW1iZXJbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcG9pbnQgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDaGVja3BvaW50IHtcclxuICAvKiogRXBvY2ggbnVtYmVyICovXHJcbiAgZXBvY2g6IG51bWJlcjtcclxuICAvKiogU3RlcCBudW1iZXIgKi9cclxuICBzdGVwOiBudW1iZXI7XHJcbiAgLyoqIFRyYWluaW5nIGxvc3MgYXQgY2hlY2twb2ludCAqL1xyXG4gIGxvc3M6IG51bWJlcjtcclxuICAvKiogTW9kZWwgd2VpZ2h0cyAoc2VyaWFsaXplZCkgKi9cclxuICB3ZWlnaHRzOiBzdHJpbmc7XHJcbiAgLyoqIFRpbWVzdGFtcCAqL1xyXG4gIHRpbWVzdGFtcDogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogTGVhcm5pbmcgUmF0ZSBTY2hlZHVsZXJcclxuICovXHJcbmV4cG9ydCBjbGFzcyBMUlNjaGVkdWxlciB7XHJcbiAgcHJpdmF0ZSBjb25maWc6IFJlcXVpcmVkPFRyYWluaW5nQ29uZmlnPjtcclxuICBwcml2YXRlIGluaXRpYWxMUjogbnVtYmVyO1xyXG4gIHByaXZhdGUgY3VycmVudFN0ZXA6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSB0b3RhbFN0ZXBzOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUmVxdWlyZWQ8VHJhaW5pbmdDb25maWc+LCB0b3RhbFN0ZXBzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgdGhpcy5pbml0aWFsTFIgPSBjb25maWcubGVhcm5pbmdSYXRlO1xyXG4gICAgdGhpcy50b3RhbFN0ZXBzID0gdG90YWxTdGVwcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBsZWFybmluZyByYXRlIGZvciBjdXJyZW50IHN0ZXBcclxuICAgKi9cclxuICBnZXRMUigpOiBudW1iZXIge1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5zY2hlZHVsZXIpIHtcclxuICAgICAgY2FzZSAnY29uc3RhbnQnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxMUjtcclxuXHJcbiAgICAgIGNhc2UgJ2xpbmVhcic6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbExSICogKDEgLSB0aGlzLmN1cnJlbnRTdGVwIC8gdGhpcy50b3RhbFN0ZXBzKTtcclxuXHJcbiAgICAgIGNhc2UgJ2Nvc2luZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbExSICogMC41ICogKDEgKyBNYXRoLmNvcyhNYXRoLlBJICogdGhpcy5jdXJyZW50U3RlcCAvIHRoaXMudG90YWxTdGVwcykpO1xyXG5cclxuICAgICAgY2FzZSAnd2FybXVwJzpcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA8IHRoaXMuY29uZmlnLndhcm11cFN0ZXBzKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsTFIgKiAodGhpcy5jdXJyZW50U3RlcCAvIHRoaXMuY29uZmlnLndhcm11cFN0ZXBzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ29zaW5lIGRlY2F5IGFmdGVyIHdhcm11cFxyXG4gICAgICAgIGNvbnN0IGRlY2F5U3RlcHMgPSB0aGlzLnRvdGFsU3RlcHMgLSB0aGlzLmNvbmZpZy53YXJtdXBTdGVwcztcclxuICAgICAgICBjb25zdCBkZWNheVByb2dyZXNzID0gKHRoaXMuY3VycmVudFN0ZXAgLSB0aGlzLmNvbmZpZy53YXJtdXBTdGVwcykgLyBkZWNheVN0ZXBzO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxMUiAqIDAuNSAqICgxICsgTWF0aC5jb3MoTWF0aC5QSSAqIGRlY2F5UHJvZ3Jlc3MpKTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbExSO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RlcCB0aGUgc2NoZWR1bGVyXHJcbiAgICovXHJcbiAgc3RlcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFN0ZXArKztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHNjaGVkdWxlclxyXG4gICAqL1xyXG4gIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IDA7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogVHJhaW5pbmcgTWV0cmljcyBUcmFja2VyXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWV0cmljc1RyYWNrZXIge1xyXG4gIHByaXZhdGUgbG9zc0hpc3Rvcnk6IG51bWJlcltdID0gW107XHJcbiAgcHJpdmF0ZSB2YWxMb3NzSGlzdG9yeTogbnVtYmVyW10gPSBbXTtcclxuICBwcml2YXRlIGdyYWROb3JtSGlzdG9yeTogbnVtYmVyW10gPSBbXTtcclxuICBwcml2YXRlIHN0YXJ0VGltZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuICBwcml2YXRlIHN0ZXBUaW1lczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVjb3JkIHRyYWluaW5nIGxvc3NcclxuICAgKi9cclxuICByZWNvcmRMb3NzKGxvc3M6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5sb3NzSGlzdG9yeS5wdXNoKGxvc3MpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjb3JkIHZhbGlkYXRpb24gbG9zc1xyXG4gICAqL1xyXG4gIHJlY29yZFZhbExvc3MobG9zczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbExvc3NIaXN0b3J5LnB1c2gobG9zcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWNvcmQgZ3JhZGllbnQgbm9ybVxyXG4gICAqL1xyXG4gIHJlY29yZEdyYWROb3JtKG5vcm06IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ncmFkTm9ybUhpc3RvcnkucHVzaChub3JtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlY29yZCBzdGVwIHRpbWVcclxuICAgKi9cclxuICByZWNvcmRTdGVwVGltZShtczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0ZXBUaW1lcy5wdXNoKG1zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhdmVyYWdlIGxvc3Mgb3ZlciBsYXN0IE4gc3RlcHNcclxuICAgKi9cclxuICBhdmdMb3NzKG46IG51bWJlciA9IDEwMCk6IG51bWJlciB7XHJcbiAgICBjb25zdCByZWNlbnQgPSB0aGlzLmxvc3NIaXN0b3J5LnNsaWNlKC1uKTtcclxuICAgIHJldHVybiByZWNlbnQubGVuZ3RoID4gMCA/IHJlY2VudC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAvIHJlY2VudC5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGF2ZXJhZ2UgdmFsaWRhdGlvbiBsb3NzXHJcbiAgICovXHJcbiAgYXZnVmFsTG9zcyhuOiBudW1iZXIgPSAxMCk6IG51bWJlciB7XHJcbiAgICBjb25zdCByZWNlbnQgPSB0aGlzLnZhbExvc3NIaXN0b3J5LnNsaWNlKC1uKTtcclxuICAgIHJldHVybiByZWNlbnQubGVuZ3RoID4gMCA/IHJlY2VudC5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAvIHJlY2VudC5sZW5ndGggOiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHN0ZXBzIHBlciBzZWNvbmRcclxuICAgKi9cclxuICBzdGVwc1BlclNlY29uZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuc3RlcFRpbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XHJcbiAgICBjb25zdCBhdmdTdGVwVGltZSA9IHRoaXMuc3RlcFRpbWVzLnNsaWNlKC0xMDApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApIC8gTWF0aC5taW4odGhpcy5zdGVwVGltZXMubGVuZ3RoLCAxMDApO1xyXG4gICAgcmV0dXJuIGF2Z1N0ZXBUaW1lID4gMCA/IDEwMDAgLyBhdmdTdGVwVGltZSA6IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgRVRBIGluIHNlY29uZHNcclxuICAgKi9cclxuICBldGEocmVtYWluaW5nU3RlcHM6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBzcHMgPSB0aGlzLnN0ZXBzUGVyU2Vjb25kKCk7XHJcbiAgICByZXR1cm4gc3BzID4gMCA/IHJlbWFpbmluZ1N0ZXBzIC8gc3BzIDogMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBiZXN0IHZhbGlkYXRpb24gbG9zc1xyXG4gICAqL1xyXG4gIGJlc3RWYWxMb3NzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxMb3NzSGlzdG9yeS5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4udGhpcy52YWxMb3NzSGlzdG9yeSkgOiBJbmZpbml0eTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0b3RhbCBkdXJhdGlvblxyXG4gICAqL1xyXG4gIGR1cmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCBsb3NzIGhpc3RvcnlcclxuICAgKi9cclxuICBnZXRMb3NzSGlzdG9yeSgpOiBudW1iZXJbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubG9zc0hpc3RvcnldO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFsbCB2YWxpZGF0aW9uIGxvc3MgaGlzdG9yeVxyXG4gICAqL1xyXG4gIGdldFZhbExvc3NIaXN0b3J5KCk6IG51bWJlcltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy52YWxMb3NzSGlzdG9yeV07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0cmFja2VyXHJcbiAgICovXHJcbiAgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvc3NIaXN0b3J5ID0gW107XHJcbiAgICB0aGlzLnZhbExvc3NIaXN0b3J5ID0gW107XHJcbiAgICB0aGlzLmdyYWROb3JtSGlzdG9yeSA9IFtdO1xyXG4gICAgdGhpcy5zdGVwVGltZXMgPSBbXTtcclxuICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUcmFpbmluZyBQaXBlbGluZVxyXG4gKlxyXG4gKiBGdWxsIHRyYWluaW5nIGluZnJhc3RydWN0dXJlIGZvciBTT05BIG1vZGVscy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFpbmluZ1BpcGVsaW5lIHtcclxuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8VHJhaW5pbmdDb25maWc+O1xyXG4gIHByaXZhdGUgYWRhcHRlcjogTG9yYUFkYXB0ZXI7XHJcbiAgcHJpdmF0ZSBld2NNYW5hZ2VyOiBFd2NNYW5hZ2VyO1xyXG4gIHByaXZhdGUgbWV0cmljczogTWV0cmljc1RyYWNrZXI7XHJcbiAgcHJpdmF0ZSBzY2hlZHVsZXI6IExSU2NoZWR1bGVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBiYXRjaGVzOiBUcmFpbmluZ0JhdGNoW10gPSBbXTtcclxuICBwcml2YXRlIGNoZWNrcG9pbnRzOiBDaGVja3BvaW50W10gPSBbXTtcclxuICBwcml2YXRlIGN1cnJlbnRFcG9jaDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnRTdGVwOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgYmVzdFZhbExvc3M6IG51bWJlciA9IEluZmluaXR5O1xyXG4gIHByaXZhdGUgcGF0aWVuY2VDb3VudGVyOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb25maWc/OiBUcmFpbmluZ0NvbmZpZywgYWRhcHRlcj86IExvcmFBZGFwdGVyKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uREVGQVVMVF9UUkFJTklOR19DT05GSUcsIC4uLmNvbmZpZyB9O1xyXG4gICAgdGhpcy5hZGFwdGVyID0gYWRhcHRlciB8fCBuZXcgTG9yYUFkYXB0ZXIoeyByYW5rOiA4IH0pO1xyXG4gICAgdGhpcy5ld2NNYW5hZ2VyID0gbmV3IEV3Y01hbmFnZXIodGhpcy5jb25maWcuZXdjTGFtYmRhKTtcclxuICAgIHRoaXMubWV0cmljcyA9IG5ldyBNZXRyaWNzVHJhY2tlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRyYWluaW5nIGJhdGNoXHJcbiAgICovXHJcbiAgYWRkQmF0Y2goaW5wdXRzOiBFbWJlZGRpbmdbXSwgdGFyZ2V0czogRW1iZWRkaW5nW10sIHF1YWxpdGllczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIHRoaXMuYmF0Y2hlcy5wdXNoKHsgaW5wdXRzLCB0YXJnZXRzLCBxdWFsaXRpZXMgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdHJhaW5pbmcgZGF0YVxyXG4gICAqL1xyXG4gIGFkZERhdGEoZGF0YTogQXJyYXk8eyBpbnB1dDogRW1iZWRkaW5nOyB0YXJnZXQ6IEVtYmVkZGluZzsgcXVhbGl0eTogbnVtYmVyIH0+KTogdm9pZCB7XHJcbiAgICAvLyBHcm91cCBpbnRvIGJhdGNoZXNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkgKz0gdGhpcy5jb25maWcuYmF0Y2hTaXplKSB7XHJcbiAgICAgIGNvbnN0IGJhdGNoID0gZGF0YS5zbGljZShpLCBpICsgdGhpcy5jb25maWcuYmF0Y2hTaXplKTtcclxuICAgICAgdGhpcy5hZGRCYXRjaChcclxuICAgICAgICBiYXRjaC5tYXAoZCA9PiBkLmlucHV0KSxcclxuICAgICAgICBiYXRjaC5tYXAoZCA9PiBkLnRhcmdldCksXHJcbiAgICAgICAgYmF0Y2gubWFwKGQgPT4gZC5xdWFsaXR5KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUnVuIHRyYWluaW5nXHJcbiAgICovXHJcbiAgdHJhaW4oKTogVHJhaW5pbmdSZXN1bHQge1xyXG4gICAgY29uc3QgdG90YWxTdGVwcyA9IHRoaXMuYmF0Y2hlcy5sZW5ndGggKiB0aGlzLmNvbmZpZy5lcG9jaHM7XHJcbiAgICB0aGlzLnNjaGVkdWxlciA9IG5ldyBMUlNjaGVkdWxlcih0aGlzLmNvbmZpZywgdG90YWxTdGVwcyk7XHJcbiAgICB0aGlzLm1ldHJpY3MucmVzZXQoKTtcclxuICAgIHRoaXMuYWRhcHRlci5zdGFydFRyYWluaW5nKHRoaXMuY29uZmlnLmxlYXJuaW5nUmF0ZSk7XHJcblxyXG4gICAgbGV0IGVhcmx5U3RvcHBlZCA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAobGV0IGVwb2NoID0gMDsgZXBvY2ggPCB0aGlzLmNvbmZpZy5lcG9jaHM7IGVwb2NoKyspIHtcclxuICAgICAgdGhpcy5jdXJyZW50RXBvY2ggPSBlcG9jaDtcclxuXHJcbiAgICAgIC8vIFNodWZmbGUgYmF0Y2hlc1xyXG4gICAgICBjb25zdCBzaHVmZmxlZEJhdGNoZXMgPSB0aGlzLnNodWZmbGVCYXRjaGVzKCk7XHJcblxyXG4gICAgICAvLyBTcGxpdCBpbnRvIHRyYWluL3ZhbFxyXG4gICAgICBjb25zdCB2YWxTaXplID0gTWF0aC5mbG9vcihzaHVmZmxlZEJhdGNoZXMubGVuZ3RoICogdGhpcy5jb25maWcudmFsaWRhdGlvblNwbGl0KTtcclxuICAgICAgY29uc3QgdHJhaW5CYXRjaGVzID0gc2h1ZmZsZWRCYXRjaGVzLnNsaWNlKHZhbFNpemUpO1xyXG4gICAgICBjb25zdCB2YWxCYXRjaGVzID0gc2h1ZmZsZWRCYXRjaGVzLnNsaWNlKDAsIHZhbFNpemUpO1xyXG5cclxuICAgICAgLy8gVHJhaW5pbmcgZXBvY2hcclxuICAgICAgZm9yIChjb25zdCBiYXRjaCBvZiB0cmFpbkJhdGNoZXMpIHtcclxuICAgICAgICBjb25zdCBzdGVwU3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIGNvbnN0IGxvc3MgPSB0aGlzLnRyYWluU3RlcChiYXRjaCk7XHJcbiAgICAgICAgdGhpcy5tZXRyaWNzLnJlY29yZExvc3MobG9zcyk7XHJcbiAgICAgICAgdGhpcy5tZXRyaWNzLnJlY29yZFN0ZXBUaW1lKERhdGUubm93KCkgLSBzdGVwU3RhcnQpO1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGVyLnN0ZXAoKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwKys7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFZhbGlkYXRpb25cclxuICAgICAgaWYgKHZhbEJhdGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHZhbExvc3MgPSB0aGlzLnZhbGlkYXRlKHZhbEJhdGNoZXMpO1xyXG4gICAgICAgIHRoaXMubWV0cmljcy5yZWNvcmRWYWxMb3NzKHZhbExvc3MpO1xyXG5cclxuICAgICAgICAvLyBFYXJseSBzdG9wcGluZ1xyXG4gICAgICAgIGlmICh2YWxMb3NzIDwgdGhpcy5iZXN0VmFsTG9zcykge1xyXG4gICAgICAgICAgdGhpcy5iZXN0VmFsTG9zcyA9IHZhbExvc3M7XHJcbiAgICAgICAgICB0aGlzLnBhdGllbmNlQ291bnRlciA9IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGF0aWVuY2VDb3VudGVyKys7XHJcbiAgICAgICAgICBpZiAodGhpcy5wYXRpZW5jZUNvdW50ZXIgPj0gdGhpcy5jb25maWcuZWFybHlTdG9wcGluZ1BhdGllbmNlKSB7XHJcbiAgICAgICAgICAgIGVhcmx5U3RvcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2twb2ludFxyXG4gICAgICBpZiAoKGVwb2NoICsgMSkgJSB0aGlzLmNvbmZpZy5jaGVja3BvaW50SW50ZXJ2YWwgPT09IDApIHtcclxuICAgICAgICB0aGlzLnNhdmVDaGVja3BvaW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkYXB0ZXIuZW5kVHJhaW5pbmcoKTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciB3aXRoIEVXQyBmb3IgY29udGludWFsIGxlYXJuaW5nXHJcbiAgICBjb25zdCB3ZWlnaHRzID0gdGhpcy5hZGFwdGVyLm1lcmdlKCkuZmxhdCgpO1xyXG4gICAgdGhpcy5ld2NNYW5hZ2VyLnJlZ2lzdGVyVGFzayhgdGFzay0ke0RhdGUubm93KCl9YCwgd2VpZ2h0cyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXBvY2hzOiB0aGlzLmN1cnJlbnRFcG9jaCArIDEsXHJcbiAgICAgIHN0ZXBzOiB0aGlzLmN1cnJlbnRTdGVwLFxyXG4gICAgICBmaW5hbExvc3M6IHRoaXMubWV0cmljcy5hdmdMb3NzKDEwMCksXHJcbiAgICAgIGJlc3RWYWxMb3NzOiB0aGlzLmJlc3RWYWxMb3NzLFxyXG4gICAgICBkdXJhdGlvbk1zOiB0aGlzLm1ldHJpY3MuZHVyYXRpb24oKSxcclxuICAgICAgbG9zc0hpc3Rvcnk6IHRoaXMubWV0cmljcy5nZXRMb3NzSGlzdG9yeSgpLFxyXG4gICAgICB2YWxMb3NzSGlzdG9yeTogdGhpcy5tZXRyaWNzLmdldFZhbExvc3NIaXN0b3J5KCksXHJcbiAgICAgIGVhcmx5U3RvcHBlZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaW5nbGUgdHJhaW5pbmcgc3RlcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJhaW5TdGVwKGJhdGNoOiBUcmFpbmluZ0JhdGNoKTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbExvc3MgPSAwO1xyXG4gICAgY29uc3QgbHIgPSB0aGlzLnNjaGVkdWxlcj8uZ2V0TFIoKSB8fCB0aGlzLmNvbmZpZy5sZWFybmluZ1JhdGU7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaC5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaW5wdXQgPSBiYXRjaC5pbnB1dHNbaV07XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGJhdGNoLnRhcmdldHNbaV07XHJcbiAgICAgIGNvbnN0IHF1YWxpdHkgPSBiYXRjaC5xdWFsaXRpZXNbaV07XHJcblxyXG4gICAgICAvLyBGb3J3YXJkIHBhc3NcclxuICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5hZGFwdGVyLmZvcndhcmQoaW5wdXQpO1xyXG5cclxuICAgICAgLy8gQ29tcHV0ZSBsb3NzIChNU0Ugd2VpZ2h0ZWQgYnkgcXVhbGl0eSlcclxuICAgICAgY29uc3QgZ3JhZE91dHB1dDogbnVtYmVyW10gPSBbXTtcclxuICAgICAgbGV0IGxvc3MgPSAwO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG91dHB1dC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGRpZmYgPSBvdXRwdXRbal0gLSAodGFyZ2V0W2pdIHx8IDApO1xyXG4gICAgICAgIGxvc3MgKz0gZGlmZiAqIGRpZmY7XHJcbiAgICAgICAgZ3JhZE91dHB1dC5wdXNoKDIgKiBkaWZmICogcXVhbGl0eSk7IC8vIFF1YWxpdHktd2VpZ2h0ZWQgZ3JhZGllbnRcclxuICAgICAgfVxyXG4gICAgICBsb3NzID0gKGxvc3MgLyBvdXRwdXQubGVuZ3RoKSAqIHF1YWxpdHk7XHJcblxyXG4gICAgICAvLyBBZGQgRVdDIHBlbmFsdHlcclxuICAgICAgY29uc3QgZXdjUGVuYWx0eSA9IHRoaXMuZXdjTWFuYWdlci5jb21wdXRlUGVuYWx0eSh0aGlzLmFkYXB0ZXIubWVyZ2UoKS5mbGF0KCkpO1xyXG4gICAgICBsb3NzICs9IGV3Y1BlbmFsdHkgKiAwLjAwMTtcclxuXHJcbiAgICAgIC8vIEJhY2t3YXJkIHBhc3NcclxuICAgICAgdGhpcy5hZGFwdGVyLmJhY2t3YXJkKGlucHV0LCBncmFkT3V0cHV0LCBscik7XHJcblxyXG4gICAgICB0b3RhbExvc3MgKz0gbG9zcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG90YWxMb3NzIC8gYmF0Y2guaW5wdXRzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRpb24gcGFzc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdmFsaWRhdGUoYmF0Y2hlczogVHJhaW5pbmdCYXRjaFtdKTogbnVtYmVyIHtcclxuICAgIGxldCB0b3RhbExvc3MgPSAwO1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIGJhdGNoZXMpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiYXRjaC5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBvdXRwdXQgPSB0aGlzLmFkYXB0ZXIuZm9yd2FyZChiYXRjaC5pbnB1dHNbaV0pO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGJhdGNoLnRhcmdldHNbaV07XHJcblxyXG4gICAgICAgIGxldCBsb3NzID0gMDtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG91dHB1dC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3QgZGlmZiA9IG91dHB1dFtqXSAtICh0YXJnZXRbal0gfHwgMCk7XHJcbiAgICAgICAgICBsb3NzICs9IGRpZmYgKiBkaWZmO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0b3RhbExvc3MgKz0gbG9zcyAvIG91dHB1dC5sZW5ndGg7XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb3VudCA+IDAgPyB0b3RhbExvc3MgLyBjb3VudCA6IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGNoZWNrcG9pbnRcclxuICAgKi9cclxuICBwcml2YXRlIHNhdmVDaGVja3BvaW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGVja3BvaW50cy5wdXNoKHtcclxuICAgICAgZXBvY2g6IHRoaXMuY3VycmVudEVwb2NoLFxyXG4gICAgICBzdGVwOiB0aGlzLmN1cnJlbnRTdGVwLFxyXG4gICAgICBsb3NzOiB0aGlzLm1ldHJpY3MuYXZnTG9zcygxMDApLFxyXG4gICAgICB3ZWlnaHRzOiB0aGlzLmFkYXB0ZXIudG9KU09OKCksXHJcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjaGVja3BvaW50XHJcbiAgICovXHJcbiAgbG9hZENoZWNrcG9pbnQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hlY2twb2ludCA9IHRoaXMuY2hlY2twb2ludHNbaW5kZXhdO1xyXG4gICAgaWYgKCFjaGVja3BvaW50KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5hZGFwdGVyID0gTG9yYUFkYXB0ZXIuZnJvbUpTT04oY2hlY2twb2ludC53ZWlnaHRzKTtcclxuICAgIHRoaXMuY3VycmVudEVwb2NoID0gY2hlY2twb2ludC5lcG9jaDtcclxuICAgIHRoaXMuY3VycmVudFN0ZXAgPSBjaGVja3BvaW50LnN0ZXA7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBjdXJyZW50IG1ldHJpY3NcclxuICAgKi9cclxuICBnZXRNZXRyaWNzKCk6IFRyYWluaW5nTWV0cmljcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlcG9jaDogdGhpcy5jdXJyZW50RXBvY2gsXHJcbiAgICAgIHN0ZXA6IHRoaXMuY3VycmVudFN0ZXAsXHJcbiAgICAgIHRyYWluTG9zczogdGhpcy5tZXRyaWNzLmF2Z0xvc3MoMTAwKSxcclxuICAgICAgdmFsTG9zczogdGhpcy5tZXRyaWNzLmF2Z1ZhbExvc3MoMTApLFxyXG4gICAgICBsZWFybmluZ1JhdGU6IHRoaXMuc2NoZWR1bGVyPy5nZXRMUigpIHx8IHRoaXMuY29uZmlnLmxlYXJuaW5nUmF0ZSxcclxuICAgICAgZ3JhZE5vcm06IDAsXHJcbiAgICAgIHN0ZXBzUGVyU2Vjb25kOiB0aGlzLm1ldHJpY3Muc3RlcHNQZXJTZWNvbmQoKSxcclxuICAgICAgZXRhU2Vjb25kczogdGhpcy5tZXRyaWNzLmV0YShcclxuICAgICAgICAodGhpcy5jb25maWcuZXBvY2hzIC0gdGhpcy5jdXJyZW50RXBvY2gpICogdGhpcy5iYXRjaGVzLmxlbmd0aFxyXG4gICAgICApLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhZGFwdGVyXHJcbiAgICovXHJcbiAgZ2V0QWRhcHRlcigpOiBMb3JhQWRhcHRlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IEVXQyBtYW5hZ2VyXHJcbiAgICovXHJcbiAgZ2V0RXdjTWFuYWdlcigpOiBFd2NNYW5hZ2VyIHtcclxuICAgIHJldHVybiB0aGlzLmV3Y01hbmFnZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgY2hlY2twb2ludHNcclxuICAgKi9cclxuICBnZXRDaGVja3BvaW50cygpOiBDaGVja3BvaW50W10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmNoZWNrcG9pbnRzXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHBpcGVsaW5lXHJcbiAgICovXHJcbiAgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJhdGNoZXMgPSBbXTtcclxuICAgIHRoaXMuY2hlY2twb2ludHMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudEVwb2NoID0gMDtcclxuICAgIHRoaXMuY3VycmVudFN0ZXAgPSAwO1xyXG4gICAgdGhpcy5iZXN0VmFsTG9zcyA9IEluZmluaXR5O1xyXG4gICAgdGhpcy5wYXRpZW5jZUNvdW50ZXIgPSAwO1xyXG4gICAgdGhpcy5tZXRyaWNzLnJlc2V0KCk7XHJcbiAgICB0aGlzLmFkYXB0ZXIucmVzZXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2h1ZmZsZUJhdGNoZXMoKTogVHJhaW5pbmdCYXRjaFtdIHtcclxuICAgIGNvbnN0IHNodWZmbGVkID0gWy4uLnRoaXMuYmF0Y2hlc107XHJcbiAgICBmb3IgKGxldCBpID0gc2h1ZmZsZWQubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7XHJcbiAgICAgIFtzaHVmZmxlZFtpXSwgc2h1ZmZsZWRbal1dID0gW3NodWZmbGVkW2pdLCBzaHVmZmxlZFtpXV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2h1ZmZsZWQ7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogVHJhaW5pbmcgRmFjdG9yeVxyXG4gKlxyXG4gKiBDcmVhdGUgcHJlLWNvbmZpZ3VyZWQgdHJhaW5pbmcgcGlwZWxpbmVzIGZvciBjb21tb24gc2NlbmFyaW9zLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRyYWluaW5nRmFjdG9yeSB7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHBpcGVsaW5lIGZvciBxdWljayBmaW5lLXR1bmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyBxdWlja0ZpbmV0dW5lKCk6IFRyYWluaW5nUGlwZWxpbmUge1xyXG4gICAgcmV0dXJuIG5ldyBUcmFpbmluZ1BpcGVsaW5lKHtcclxuICAgICAgbGVhcm5pbmdSYXRlOiAwLjAxLFxyXG4gICAgICBlcG9jaHM6IDMsXHJcbiAgICAgIGJhdGNoU2l6ZTogMTYsXHJcbiAgICAgIHNjaGVkdWxlcjogJ2NvbnN0YW50JyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHBpcGVsaW5lIGZvciBkZWVwIHRyYWluaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGRlZXBUcmFpbmluZygpOiBUcmFpbmluZ1BpcGVsaW5lIHtcclxuICAgIHJldHVybiBuZXcgVHJhaW5pbmdQaXBlbGluZSh7XHJcbiAgICAgIGxlYXJuaW5nUmF0ZTogMC4wMDEsXHJcbiAgICAgIGVwb2NoczogNTAsXHJcbiAgICAgIGJhdGNoU2l6ZTogMzIsXHJcbiAgICAgIHNjaGVkdWxlcjogJ3dhcm11cCcsXHJcbiAgICAgIHdhcm11cFN0ZXBzOiA1MDAsXHJcbiAgICAgIGVhcmx5U3RvcHBpbmdQYXRpZW5jZTogNSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIHBpcGVsaW5lIGZvciBjb250aW51YWwgbGVhcm5pbmdcclxuICAgKi9cclxuICBzdGF0aWMgY29udGludWFsTGVhcm5pbmcoZXdjTGFtYmRhOiBudW1iZXIgPSA1MDAwKTogVHJhaW5pbmdQaXBlbGluZSB7XHJcbiAgICByZXR1cm4gbmV3IFRyYWluaW5nUGlwZWxpbmUoe1xyXG4gICAgICBsZWFybmluZ1JhdGU6IDAuMDAwNSxcclxuICAgICAgZXBvY2hzOiAxMCxcclxuICAgICAgYmF0Y2hTaXplOiAxNixcclxuICAgICAgc2NoZWR1bGVyOiAnY29zaW5lJyxcclxuICAgICAgZXdjTGFtYmRhLFxyXG4gICAgICBlYXJseVN0b3BwaW5nUGF0aWVuY2U6IDEwLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgcGlwZWxpbmUgZm9yIGZlZGVyYXRlZCBhZ2dyZWdhdGlvblxyXG4gICAqL1xyXG4gIHN0YXRpYyBmZWRlcmF0ZWRBZ2dyZWdhdGlvbigpOiBUcmFpbmluZ1BpcGVsaW5lIHtcclxuICAgIHJldHVybiBuZXcgVHJhaW5pbmdQaXBlbGluZSh7XHJcbiAgICAgIGxlYXJuaW5nUmF0ZTogMC4wMDAxLFxyXG4gICAgICBlcG9jaHM6IDUsXHJcbiAgICAgIGJhdGNoU2l6ZTogNjQsXHJcbiAgICAgIHNjaGVkdWxlcjogJ2xpbmVhcicsXHJcbiAgICAgIGV3Y0xhbWJkYTogMjAwMCxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=