fantasy-ngzorro 2.2.22 → 2.2.23

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.
@@ -2427,7 +2427,9 @@ var HdFormLinesComponent = /** @class */ (function () {
2427
2427
  }));
2428
2428
  }
2429
2429
  formGroupObj.lineIndex = this.fb.control(this.linesFormArray.controls.length + 1, []);
2430
- formGroupObj.isHdFormLineSearchAdd = this.fb.control(this.isFilterData, []);
2430
+ // 仅真正新增/复制的行在插入前单独置 true;搜索重建已有行必须为 false,
2431
+ // 否则筛选态下点「添加」会把第一行可见数据再插入一份
2432
+ formGroupObj.isHdFormLineSearchAdd = this.fb.control(false, []);
2431
2433
  /** @type {?} */
2432
2434
  var formGroupSubmit = this.fb.group(formGroupObj);
2433
2435
  this.formLines.forEach((/**
@@ -2531,6 +2533,7 @@ var HdFormLinesComponent = /** @class */ (function () {
2531
2533
  var insertAt = this.getInsertIndexAfter(afterLine);
2532
2534
  /** @type {?} */
2533
2535
  var newLine = this.newLineItem();
2536
+ this.markSearchAddedLine(newLine);
2534
2537
  this.linesFormArray.insert(insertAt, newLine);
2535
2538
  this.calculateLineNumber();
2536
2539
  this.addLineEvent.emit(newLine);
@@ -2575,7 +2578,10 @@ var HdFormLinesComponent = /** @class */ (function () {
2575
2578
  var sourceValues = line.getRawValue();
2576
2579
  /** @type {?} */
2577
2580
  var insertAt = sourceIndex + 1;
2578
- this.linesFormArray.insert(insertAt, this.createLineFromValues(sourceValues, false, true));
2581
+ /** @type {?} */
2582
+ var copiedLine = this.createLineFromValues(sourceValues, false, true);
2583
+ this.markSearchAddedLine(copiedLine);
2584
+ this.linesFormArray.insert(insertAt, copiedLine);
2579
2585
  this.calculateLineNumber();
2580
2586
  setTimeout((/**
2581
2587
  * @return {?}
@@ -2648,6 +2654,29 @@ var HdFormLinesComponent = /** @class */ (function () {
2648
2654
  _this.collectDomData();
2649
2655
  }), 0);
2650
2656
  };
2657
+ /** 筛选结果中新增/复制的行打标,写回全量数据后立即清掉 */
2658
+ /**
2659
+ * 筛选结果中新增/复制的行打标,写回全量数据后立即清掉
2660
+ * @private
2661
+ * @param {?} line
2662
+ * @return {?}
2663
+ */
2664
+ HdFormLinesComponent.prototype.markSearchAddedLine = /**
2665
+ * 筛选结果中新增/复制的行打标,写回全量数据后立即清掉
2666
+ * @private
2667
+ * @param {?} line
2668
+ * @return {?}
2669
+ */
2670
+ function (line) {
2671
+ if (!this.isFilterData || !line) {
2672
+ return;
2673
+ }
2674
+ /** @type {?} */
2675
+ var flag = line.get("isHdFormLineSearchAdd");
2676
+ if (flag) {
2677
+ flag.setValue(true, { emitEvent: false });
2678
+ }
2679
+ };
2651
2680
  /** 在指定行后方的插入下标;无行则追加到末尾 */
2652
2681
  /**
2653
2682
  * 在指定行后方的插入下标;无行则追加到末尾
@@ -2748,8 +2777,7 @@ var HdFormLinesComponent = /** @class */ (function () {
2748
2777
  }));
2749
2778
  }
2750
2779
  else if (lines_1.length > this.filterIndexStore.length) {
2751
- // 有新增数据的情况
2752
- // step 1: 先找新增的index下标
2780
+ // 有新增数据的情况:只认本次标记的新行,并插到筛选视图中的对应位置
2753
2781
  /** @type {?} */
2754
2782
  var getNowLines = this.validateHdFormLines.getRawValue().lines;
2755
2783
  /** @type {?} */
@@ -2760,10 +2788,29 @@ var HdFormLinesComponent = /** @class */ (function () {
2760
2788
  break;
2761
2789
  }
2762
2790
  }
2763
- if (addIndex !== -1) {
2764
- this.storeFormLinesData.splice(this.filterIndexStore[addIndex - 1] + 1, 0, getNowLines[addIndex]);
2791
+ if (addIndex !== -1 && this.filterIndexStore.length > 0) {
2792
+ /** @type {?} */
2793
+ var insertAt = addIndex <= 0
2794
+ ? this.filterIndexStore[0]
2795
+ : this.filterIndexStore[addIndex - 1] + 1;
2796
+ /** @type {?} */
2797
+ var addedLine = tslib_1.__assign({}, getNowLines[addIndex], { isHdFormLineSearchAdd: false });
2798
+ this.storeFormLinesData.splice(insertAt, 0, addedLine);
2799
+ for (var i = 0; i < this.filterIndexStore.length; i++) {
2800
+ if (this.filterIndexStore[i] >= insertAt) {
2801
+ this.filterIndexStore[i]++;
2802
+ }
2803
+ }
2804
+ this.filterIndexStore.splice(addIndex, 0, insertAt);
2805
+ if (this.filterStoreFormLinesData) {
2806
+ this.filterStoreFormLinesData.splice(addIndex, 0, addedLine);
2807
+ }
2808
+ /** @type {?} */
2809
+ var flagCtrl = ((/** @type {?} */ (this.linesFormArray.at(addIndex)))).get("isHdFormLineSearchAdd");
2810
+ if (flagCtrl) {
2811
+ flagCtrl.setValue(false, { emitEvent: false });
2812
+ }
2765
2813
  }
2766
- this.filterIndexStore.push(this.filterIndexStore[addIndex - 1] + 1);
2767
2814
  }
2768
2815
  else {
2769
2816
  // 有删除数据的情况
@@ -3321,4 +3368,4 @@ if (false) {
3321
3368
  */
3322
3369
  HdFormLinesComponent.prototype.commonSessionService;
3323
3370
  }
3324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZm9ybS1saW5lcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJoZC1mb3JtLWxpbmVzL2hkLWZvcm0tbGluZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxLQUFLLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUNMLFlBQVksRUFDWixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIscUJBQXFCLEdBQ3RCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQVksWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0lBR2pGLHNDQUFzQyxHQUFHLEVBQUU7QUFFakQ7SUFnSEUsOEJBQ1UsRUFBZSxFQUNmLEdBQXNCLEVBQ3RCLG9CQUEwQztRQUhwRCxpQkFxQkM7UUFwQlMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUEzRzNC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QXVCOzs7OztJQUN2QixtQ0FBOEI7Ozs7O0lBQzlCLG9EQUFrRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCAqIGFzIGxvY2FsZm9yYWdlIGZyb20gXCJsb2NhbGZvcmFnZVwiO1xuaW1wb3J0IHtcbiAgSW5wdXRCb29sZWFuLFxuICBOekRhdGVQaWNrZXJDb21wb25lbnQsXG4gIE56SW5wdXROdW1iZXJDb21wb25lbnQsXG4gIE56UmFuZ2VQaWNrZXJDb21wb25lbnQsXG4gIE56U2VsZWN0Q29tcG9uZW50LFxuICBOelRpbWVQaWNrZXJDb21wb25lbnQsXG59IGZyb20gXCJuZy16b3Jyby1hbnRkXCI7XG5pbXBvcnQgeyBOekZvcm1hdEVtaXRFdmVudCB9IGZyb20gXCJuZy16b3Jyby1hbnRkL2NvcmVcIjtcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IFRvdGFsT3B0aW9uIH0gZnJvbSBcIi4uL2hkLWRldGFpbC1saW5lcy9oZC1kZXRhaWwtbGluZXMuc2VydmljZVwiO1xuaW1wb3J0IHsgVHJlZUdyaWQgfSBmcm9tIFwiLi4vaGQtdGFibGUvaGQtdGFibGUuc2VydmljZVwiO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uVGFibGVDb2x1bW4gfSBmcm9tIFwiLi4vbW9kZWwvY29tbW9uLXR5cGVcIjtcbmltcG9ydCB7IENvbW1vblNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2UvY29tbW9uLXNlc3Npb24uc2VydmljZVwiO1xuaW1wb3J0IHsgRm9ybUxpbmUsIEZvcm1MaW5lVHlwZSwgRm9ybUxpbmVzQ2FjaGVPcHRpb24gfSBmcm9tIFwiLi9oZC1mb3JtLWxpbmVzLnNlcnZpY2VcIjtcblxuLyoqIOS4jiBhbnQtc2VsZWN0IOmAiemhuemhueawtOW5s+WGhei+uei3neS4gOiHtO+8jOeUqOS6juihqOWktOS4jumAiemhueihjOWvuem9kCAqL1xuY29uc3QgU0VMRUNUX1RBQkxFX09QVElPTl9IT1JJWk9OVEFMX1BBRERJTkcgPSAxMjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImhkLWZvcm0tbGluZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9oZC1mb3JtLWxpbmVzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9oZC1mb3JtLWxpbmVzLmNvbXBvbmVudC5sZXNzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBIZEZvcm1MaW5lc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZHJlbihcImZvcm1JbnB1dERvbVwiKSBmb3JtSW5wdXREb21MaXN0ITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93TGluZU51bWJlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBhbGxvd0VtcHR5OiBib29sZWFuID0gdHJ1ZTtcbiAgQE91dHB1dCgpIGRlbGV0ZUxhc3RMaW5lRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93S2V5Ym9hcmRPcGVyYXRlVGlwOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiDmmK/lkKblkK/nlKjplK7nm5jmlrnlkJHplK4vRW50ZXIg5Zyo5Y2V5YWD5qC86Ze06Lez6L2s77yM6buY6K6k5byA5ZCvICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBlbmFibGVLZXlib2FyZE9wZXJhdGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdGFibGVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93U2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiDmmK/lkKblsZXnpLrooYzli77pgInliJfvvIznlKjkuo7lpJbpg6jmibnph4/mk43kvZzli77pgInooYwgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiog5piv5ZCm5bGV56S65YiX6K6+572u77yI6b2/6L2u77yJ77yM6buY6K6k5YWz6Zet77yb6ZyA6KaB5pe26aG16Z2i5omL5belIGBbc2hvd0NvbFNldHRpbmdzXT1cInRydWVcImDvvJvku4XpnZ4gaGlkZSDnmoQgVmlld0RvbSDlj6/phY3nva7vvIznpoHmraLmi5bmi73osIPluo8gKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dDb2xTZXR0aW5nczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiog5YiX6K6+572u57yT5a2YIGtleSDniYfmrrXvvJvmnInlgLzml7bmjIHkuYXljJbliLAgSW5kZXhlZERC77yM5peg5YiZ5LuF5b2T5YmN5Lya6K+d55Sf5pWIICovXG4gIEBJbnB1dCgpIHV1aWQ6IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUxpbmVzOiBBcnJheTxGb3JtTGluZT47XG4gIC8vIOmSiOWvuWZvcm1MaW5lc+mHjOmdouaJgOacieeahG5hbWXvvIxcbiAgQElucHV0KCkgZm9ybUxpbmVzRGF0YTogYW55O1xuICBASW5wdXQoKSBvcGVyYXRlQnV0dG9uczogQXJyYXk8c3RyaW5nPiA9IFtcImFkZFwiLCBcImRlbGV0ZVwiXTsgLy8g5pON5L2c5YiX5oyJ6ZKu77yaYWRkIC8gZGVsZXRlIC8gY29weVxuICBASW5wdXQoKSBzY3JvbGw6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7IHg6IFwiMXB4XCIgfTtcbiAgQE91dHB1dCgpIGNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvKiog5paw5aKe56m66KGM5ZCO5oqb5Ye66K+l6KGMIEZvcm1Hcm91cO+8iOaJi+WKqOa3u+WKoOOAgemUruebmOi3s+ihjOiHquWKqOihpeihjOetie+8iSAqL1xuICBAT3V0cHV0KCkgYWRkTGluZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XG4gIC8qKiDli77pgInlj5jljJbml7bmipvlh7rlvZPliY3li77pgInooYwgRm9ybUdyb3VwIOWIl+ihqCAqL1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXBbXT4oKTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNob3dEZWxldGVDb25maXJtOiBib29sZWFuID0gZmFsc2U7XG4gIHBhZ2luYXRpb25QYWdlSW5kZXg6IG51bWJlciA9IDE7XG4gIHBhZ2luYXRpb25QYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIHZhbGlkYXRlSGRGb3JtTGluZXM6IEZvcm1Hcm91cDtcbiAgbmV3TGluZTogYW55O1xuICBpbnB1dFZhbHVlOiBzdHJpbmc7XG5cbiAgLy8g5ZCI6K6h5Yy65Z+fXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93VG90YWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG90YWxPcHRpb246IEFycmF5PFRvdGFsT3B0aW9uPiA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zTnVtYmVyOiBudW1iZXIgfCBzdHJpbmcgPSAwO1xuICB0b3RhbE9wdGlvbkxpc3QgPSBbXTtcblxuICBzaG93Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJTdHI6IHN0cmluZztcbiAgc3RvcmVGb3JtTGluZXNEYXRhOiBhbnkgPSBbXTsgLy8g57yT5a2Y55qE5oC755qE6KGo5Y2V5pWw5o2uXG4gIGZpbHRlclN0b3JlRm9ybUxpbmVzRGF0YTogYW55ID0gW107IC8vIOetm+mAieWHuuadpeeahOaVsOaNruWIl+ihqFxuICBmaWx0ZXJJbmRleFN0b3JlOiBBcnJheTxudW1iZXI+ID0gW107IC8vIOetm+mAieWHuuadpeeahOaVsOaNruWcqOWOn+Wni+WIl+ihqOS4reeahOS4i+agh1xuICBpc0ZpbHRlckRhdGE6IGJvb2xlYW4gPSBmYWxzZTsgLy8g5piv5ZCm5piv5bey57uP562b6YCJ6L+H55qE5pWw5o2uXG4gIGZvcm1WYWxpZDogYm9vbGVhbiA9IGZhbHNlOyAvLyDooajljZXlvZPliY3nmoTnirbmgIFcbiAgLyoqIOWLvumAieeahOihjCBpZO+8iOi3qOmhteOAgeaQnOe0oumHjeW7uuWQjuS7jeS/neeVme+8iSAqL1xuICBwcml2YXRlIHNlbGVjdGVkUm93SWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgc2VhcmNoU3ViamVjdCA9IG5ldyBTdWJqZWN0PHsgZm46IGFueTsgZXZlbnQ6IGFueTsgbGluZTogYW55IH0+KCk7XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwOyAvLyDpu5jorqTpmLLmipbml7bpl7RcblxuICBwcml2YXRlIHNlYXJjaFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGZvcm1JbnB1dERvbUxpc3RTdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyBmbjogYW55OyBldmVudDogYW55OyBsaW5lOiBhbnkgfT4oKTtcbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIG9wZW5DaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvLyDlvZPliY3pobXnmoRkb23kuoznu7TmlbDnu4RcbiAgY29sbGVjdERvbUxpc3Q6IEFycmF5PFxuICAgIEFycmF5PFxuICAgICAgfCBFbGVtZW50UmVmXG4gICAgICB8IE56U2VsZWN0Q29tcG9uZW50XG4gICAgICB8IE56SW5wdXROdW1iZXJDb21wb25lbnRcbiAgICAgIHwgTnpEYXRlUGlja2VyQ29tcG9uZW50XG4gICAgICB8IE56UmFuZ2VQaWNrZXJDb21wb25lbnRcbiAgICAgIHwgTnpUaW1lUGlja2VyQ29tcG9uZW50XG4gICAgPlxuICA+ID0gW107XG4gIC8vIOW9k+WJjeiBmueEpueahGRvbeWFg+e0oOWdkOagh1xuICBhY3RpdmVEb21YOiBudW1iZXIgPSBudWxsO1xuICBhY3RpdmVEb21ZOiBudW1iZXIgPSBudWxsO1xuICBhY3RpdmVEb206XG4gICAgfCBFbGVtZW50UmVmXG4gICAgfCBOelNlbGVjdENvbXBvbmVudFxuICAgIHwgTnpJbnB1dE51bWJlckNvbXBvbmVudFxuICAgIHwgTnpEYXRlUGlja2VyQ29tcG9uZW50XG4gICAgfCBOelJhbmdlUGlja2VyQ29tcG9uZW50XG4gICAgfCBOelRpbWVQaWNrZXJDb21wb25lbnQgPSBudWxsO1xuICBhY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQENvbnRlbnRDaGlsZChcIlZpZXdEb21SaWdodFRlbXBsYXRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBWaWV3RG9tUmlnaHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqIOW3peWFt+agj+W3puS+p+iHquWumuS5ieaMiemSru+8jOeUqOazleWQjCBoZC10YWJsZSDnmoQgdGFibGVMZWZ0QnV0dG9uICovXG4gIEBDb250ZW50Q2hpbGQoXCJmb3JtTGluZXNMZWZ0QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBmb3JtTGluZXNMZWZ0QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKiog5bel5YW35qCP5Y+z5L6n6Ieq5a6a5LmJ5oyJ6ZKu77yM55So5rOV5ZCMIGhkLXRhYmxlIOeahCB0YWJsZVJpZ2h0QnV0dG9uICovXG4gIEBDb250ZW50Q2hpbGQoXCJmb3JtTGluZXNSaWdodEJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZm9ybUxpbmVzUmlnaHRCdXR0b246IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKiDooajmoLzkuIrmlrnoh6rlrprkuYnljLrln5/vvIjlpoLli77pgInmj5DnpLrvvInvvIznlKjms5XlkIwgaGQtdGFibGUg55qEIHRhYmxlVG90YWwgKi9cbiAgQENvbnRlbnRDaGlsZChcInRhYmxlVG90YWxcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHRhYmxlVG90YWw6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLy8g5YiX6K6+572uXG4gIGlzRHJvcGRvd25WaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dMaXN0Tm9kZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbm93TGlzdE5vZGVzOiBBcnJheTxUcmVlR3JpZD4gPSBbXTtcbiAgaGlkZUxpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIGNhbmNlbE5vd0xpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIGNhbmNlbEhpZGVMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICBmb3JtTGluZXNDYWNoZU9wdGlvbjogRm9ybUxpbmVzQ2FjaGVPcHRpb24gPSBuZXcgRm9ybUxpbmVzQ2FjaGVPcHRpb24oKTtcbiAgcHJpdmF0ZSBsb2NhbGZvcmFnZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2NhbHRpb25UbXA6IHN0cmluZyA9IFwiXCI7XG4gIHByaXZhdGUgdXNlclNlc3Npb246IGFueTtcbiAgLyoqIOaYr+WQpuW3suS7jiBJbmRleGVkREIg6K+75Yiw6L+H5YiX6K6+572u57yT5a2Y77yI5ZCrIGNvbHMg5Li656m677yJICovXG4gIHByaXZhdGUgY29sc0NhY2hlTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY29tbW9uU2Vzc2lvblNlcnZpY2U6IENvbW1vblNlc3Npb25TZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmxvY2FsZm9yYWdlID0gbG9jYWxmb3JhZ2UuY3JlYXRlSW5zdGFuY2Uoe1xuICAgICAgZHJpdmVyOiBsb2NhbGZvcmFnZS5JTkRFWEVEREIsXG4gICAgICBuYW1lOiBcImhkLWZzY21cIixcbiAgICAgIHZlcnNpb246IDEuMCxcbiAgICAgIHN0b3JlTmFtZTogXCJoZC1mc2NtLXN0b3JlXCIsXG4gICAgfSk7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgbGluZSB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIGxpbmUpKTtcbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50LCBsaW5lIH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvY2FsdGlvblRtcCA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIGlmICh0aGlzLmxvY2FsdGlvblRtcCkge1xuICAgICAgdGhpcy5sb2NhbHRpb25UbXAgPSB0aGlzLmxvY2FsdGlvblRtcC5yZXBsYWNlKC9cXC8vZywgXCJfXCIpO1xuICAgIH1cbiAgICB0aGlzLnVzZXJTZXNzaW9uID0gdGhpcy5jb21tb25TZXNzaW9uU2VydmljZS5nZXRTZXNzaW9uKFxuICAgICAgXCJfX2p5X2F1dGhvcml6YXRpb25fc2Vzc2lvbl9fXCIsXG4gICAgKTtcbiAgICBpZiAoIXRoaXMudXNlclNlc3Npb24pIHtcbiAgICAgIHRoaXMudXNlclNlc3Npb24gPSB7IHVzZXJDb2RlOiBcImRldlwiIH07XG4gICAgfVxuICAgIC8vIOe8k+WtmOS4gOS4i+aAu+eahOihqOWNleaVsOaNrlxuICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5mb3JtTGluZXNEYXRhO1xuICAgIHRoaXMuaW5pdENvbFNldHRpbmdzKCk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgIHRoaXMuZm9ybUlucHV0RG9tTGlzdFN1YiA9IHRoaXMuZm9ybUlucHV0RG9tTGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtSW5wdXREb21MaXN0U3ViKSB7XG4gICAgICB0aGlzLmZvcm1JbnB1dERvbUxpc3RTdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZm9ybUxpbmVzTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBvcGVyYXRlQ29sV2lkdGgoKSB7XG4gICAgY29uc3QgY291bnQgPSAodGhpcy5vcGVyYXRlQnV0dG9ucyB8fCBbXSkuZmlsdGVyKChidG4pID0+XG4gICAgICBbXCJhZGRcIiwgXCJjb3B5XCIsIFwiZGVsZXRlXCJdLmluY2x1ZGVzKGJ0biksXG4gICAgKS5sZW5ndGg7XG4gICAgcmV0dXJuIE1hdGgubWF4KGNvdW50ICogNDAsIDgwKTtcbiAgfVxuXG4gIC8qKiBhbGxvd0VtcHR5IOS4lOaTjeS9nOWIl+S7heacieWIoOmZpOaXtu+8muWFgeiuuCAwIOihjO+8jOWIneWni+WMluS4juWIoOiHs+epuumDveS4jeiHquWKqOihpeepuuihjCAqL1xuICBnZXQgaXNUcnVseUVtcHR5QWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBidXR0b25zID0gKHRoaXMub3BlcmF0ZUJ1dHRvbnMgfHwgW10pLmZpbHRlcigoYnRuKSA9PlxuICAgICAgW1wiYWRkXCIsIFwiY29weVwiLCBcImRlbGV0ZVwiXS5pbmNsdWRlcyhidG4pLFxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWxsb3dFbXB0eSAmJlxuICAgICAgYnV0dG9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgIGJ1dHRvbnNbMF0gPT09IFwiZGVsZXRlXCJcbiAgICApO1xuICB9XG5cbiAgLyoqIOWLvumAieWIl+WbuuWumuaXtu+8jOW6j+WPt+WIl+eahCBsZWZ0IOWBj+enuyAqL1xuICBnZXQgbGluZU51bWJlckxlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0NoZWNrYm94ID8gXCI0MHB4XCIgOiBcIjBweFwiO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVJvd0lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBoZF9yb3dfJHtEYXRlLm5vdygpfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDkpfWA7XG4gIH1cblxuICBwcml2YXRlIGdldFJvd0lkKGxpbmU6IEZvcm1Hcm91cCk6IHN0cmluZyB7XG4gICAgaWYgKCFsaW5lIHx8ICFsaW5lLmdldChcIl9oZFJvd0lkXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmUuZ2V0KFwiX2hkUm93SWRcIikudmFsdWU7XG4gIH1cblxuICAvKiog5b2T5YmN6aG155qE6KGM77yI55So5LqO6KGo5aS05YWo6YCJ77yM5LuF5L2c55So5LqO5b2T5YmN6aG177yM6Leo6aG15Yu+6YCJ5LuN5L+d55WZ77yJICovXG4gIHByaXZhdGUgZ2V0Q3VycmVudFBhZ2VMaW5lcygpOiBGb3JtR3JvdXBbXSB7XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4IC0gMSkgKiB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgIHJldHVybiAodGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scyBhcyBGb3JtR3JvdXBbXSkuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICBpc0xpbmVDaGVja2VkKGxpbmU6IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChsaW5lKTtcbiAgICByZXR1cm4gISFpZCAmJiB0aGlzLnNlbGVjdGVkUm93SWRzLmhhcyhpZCk7XG4gIH1cblxuICBpc0FsbENoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFnZUxpbmVzID0gdGhpcy5nZXRDdXJyZW50UGFnZUxpbmVzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHBhZ2VMaW5lcy5sZW5ndGggPiAwICYmXG4gICAgICBwYWdlTGluZXMuZXZlcnkoKGxpbmUpID0+IHRoaXMuaXNMaW5lQ2hlY2tlZChsaW5lKSlcbiAgICApO1xuICB9XG5cbiAgaXNJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhZ2VMaW5lcyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VMaW5lcygpO1xuICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IHBhZ2VMaW5lcy5maWx0ZXIoKGxpbmUpID0+XG4gICAgICB0aGlzLmlzTGluZUNoZWNrZWQobGluZSksXG4gICAgKS5sZW5ndGg7XG4gICAgcmV0dXJuIGNoZWNrZWRDb3VudCA+IDAgJiYgY2hlY2tlZENvdW50IDwgcGFnZUxpbmVzLmxlbmd0aDtcbiAgfVxuXG4gIG9uQWxsQ2hlY2tlZChjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5nZXRDdXJyZW50UGFnZUxpbmVzKCkuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKGxpbmUpO1xuICAgICAgaWYgKCFpZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmFkZChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gIH1cblxuICBvbkxpbmVDaGVja2VkQ2hhbmdlKGxpbmU6IEZvcm1Hcm91cCwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChsaW5lKTtcbiAgICBpZiAoIWlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmFkZChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJZHMuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3Rpb25DaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmdldFNlbGVjdGVkTGluZXMoKSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpbmVGcm9tU2VsZWN0aW9uKGxpbmU6IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChsaW5lKTtcbiAgICBpZiAoaWQgJiYgdGhpcy5zZWxlY3RlZFJvd0lkcy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmRlbGV0ZShpZCk7XG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VmFsdWVzVG9MaW5lKFxuICAgIGxpbmU6IEZvcm1Hcm91cCxcbiAgICB2YWx1ZXM6IHsgW2ZpZWxkOiBzdHJpbmddOiBhbnkgfSxcbiAgICBlbWl0RXZlbnQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBsZXQgY29udHJvbCA9IGxpbmUuZ2V0KGtleSk7XG4gICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgbGluZS5hZGRDb250cm9sKGtleSwgdGhpcy5mYi5jb250cm9sKHZhbHVlc1trZXldKSk7XG4gICAgICAgIGNvbnRyb2wgPSBsaW5lLmdldChrZXkpO1xuICAgICAgfVxuICAgICAgLy8g6Z2Z6buY6LWL5YC877yM6YG/5YWNIHZhbHVlQ2hhbmdlcyAvIERPTSBtYXhsZW5ndGgg5Zue5YaZ5oqK5qCh6aqM5oCB5omT5LmxXG4gICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlc1trZXldLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUl0ZW0gPSB0aGlzLmZvcm1MaW5lcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGtleSk7XG4gICAgICAgIGlmIChmb3JtSXRlbSAmJiBmb3JtSXRlbS5vbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm9ybUl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWVzW2tleV0sIGxpbmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIOS7heWcqOeUqOaIt+S6pOS6kuWQjuOAgeS4lOW9k+WJjeWAvOehruWunuS4uuepuueahCByZXF1aXJlZCDplJnor6/ml7blsZXnpLrnuqLmoYbvvIxcbiAgICog6YG/5YWN5om56YeP6LWL5YC85pe2IG5nLXpvcnJvIOaui+eVmeOAjOS4jeiDveS4uuepuuOAjeaPkOekulxuICAgKi9cbiAgZ2V0Q29udHJvbFZhbGlkYXRlU3RhdHVzKGxpbmU6IEZvcm1Hcm91cCwgZm9ybUl0ZW06IEZvcm1MaW5lKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250cm9sID0gbGluZS5nZXQoZm9ybUl0ZW0ubmFtZSk7XG4gICAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBjb25zdCBlbXB0eSA9XG4gICAgICBjb250cm9sLnZhbHVlID09PSBudWxsIHx8XG4gICAgICBjb250cm9sLnZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGNvbnRyb2wudmFsdWUgPT09IFwiXCI7XG4gICAgaWYgKFxuICAgICAgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKSAmJlxuICAgICAgZW1wdHkgJiZcbiAgICAgIGNvbnRyb2wuaGFzRXJyb3IoXCJyZXF1aXJlZFwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICAvKiog55So5oi36L6T5YWl5pe25oyJIG1heExlbmd0aCDmiKrmlq3vvIjkuI3kvb/nlKjljp/nlJ8gbWF4bGVuZ3Ro77yM6YG/5YWN5bmy5omw56iL5bqP5YyW6LWL5YC877yJICovXG4gIGxpbWl0SW5wdXRMZW5ndGgoZXZlbnQ6IEV2ZW50LCBsaW5lOiBGb3JtR3JvdXAsIGZvcm1JdGVtOiBGb3JtTGluZSk6IHZvaWQge1xuICAgIGlmICghZm9ybUl0ZW0gfHwgIWZvcm1JdGVtLm1heExlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChpbnB1dCAmJiBpbnB1dC52YWx1ZSAmJiBpbnB1dC52YWx1ZS5sZW5ndGggPiBmb3JtSXRlbS5tYXhMZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBpbnB1dC52YWx1ZS5zbGljZSgwLCBmb3JtSXRlbS5tYXhMZW5ndGgpO1xuICAgICAgaW5wdXQudmFsdWUgPSBuZXh0O1xuICAgICAgY29uc3QgY29udHJvbCA9IGxpbmUuZ2V0KGZvcm1JdGVtLm5hbWUpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShuZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiog6I635Y+W5b2T5YmN5Yu+6YCJ5LiU5bey5oyC6L2955qE6KGMIEZvcm1Hcm91cO+8iOW9k+WJjeetm+mAiee7k+aenOWGhe+8iSAqL1xuICBwdWJsaWMgZ2V0U2VsZWN0ZWRMaW5lcygpOiBGb3JtR3JvdXBbXSB7XG4gICAgcmV0dXJuICh0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdKS5maWx0ZXIoKGxpbmUpID0+XG4gICAgICB0aGlzLmlzTGluZUNoZWNrZWQobGluZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blhajpg6jli77pgInooYzmlbDmja7vvIjlkKvot6jpobXjgIHmkJzntKLlkI7mnKrlsZXnpLrkvYbku43li77pgInnmoTooYzvvIlcbiAgICovXG4gIHB1YmxpYyBnZXRTZWxlY3RlZExpbmVzRGF0YSgpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgbW91bnRlZEJ5SWQgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgICh0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdKS5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQobGluZSk7XG4gICAgICBpZiAoaWQgJiYgdGhpcy5zZWxlY3RlZFJvd0lkcy5oYXMoaWQpKSB7XG4gICAgICAgIG1vdW50ZWRCeUlkLnNldChpZCwgbGluZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgICh0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSB8fCBbXSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBkYXRhICYmIGRhdGEuX2hkUm93SWQ7XG4gICAgICBpZiAoaWQgJiYgdGhpcy5zZWxlY3RlZFJvd0lkcy5oYXMoaWQpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG1vdW50ZWRCeUlkLmhhcyhpZCkgPyBtb3VudGVkQnlJZC5nZXQoaWQpIDogeyAuLi5kYXRhIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g5YWc5bqV77ya5Yia5paw5aKe44CB5bCa5pyq6L+bIHN0b3JlIOeahOWLvumAieihjFxuICAgIHRoaXMuc2VsZWN0ZWRSb3dJZHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIXJlc3VsdC5zb21lKChpdGVtKSA9PiBpdGVtICYmIGl0ZW0uX2hkUm93SWQgPT09IGlkKSAmJlxuICAgICAgICBtb3VudGVkQnlJZC5oYXMoaWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobW91bnRlZEJ5SWQuZ2V0KGlkKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDmibnph4/loavlhYXli77pgInooYzlrZfmrrXvvIjmlK/mjIHot6jpobXjgIHmkJzntKLlkI7mnKrlsZXnpLrkvYbku43li77pgInnmoTooYzvvIlcbiAgICogQHBhcmFtIHZhbHVlcyDopoHlhpnlhaXnmoTlrZfmrrXvvIzlpoIgeyByZW1hcms6ICfmibnph4/lpIfms6gnLCBwcmljZTogMTAgfVxuICAgKiBAcGFyYW0gZW1pdEV2ZW50IOaYr+WQpuinpuWPkSB2YWx1ZUNoYW5nZXMgLyBvbkNoYW5nZUV2ZW5077yM6buY6K6kIHRydWVcbiAgICogQHJldHVybnMg5a6e6ZmF5aGr5YWF55qE6KGM5pWwXG4gICAqL1xuICBwdWJsaWMgYmF0Y2hGaWxsU2VsZWN0ZWQoXG4gICAgdmFsdWVzOiB7IFtmaWVsZDogc3RyaW5nXTogYW55IH0sXG4gICAgZW1pdEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoIXZhbHVlcyB8fCB0aGlzLnNlbGVjdGVkUm93SWRzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCBtb3VudGVkQnlJZCA9IG5ldyBNYXA8c3RyaW5nLCBGb3JtR3JvdXA+KCk7XG4gICAgKHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMgYXMgRm9ybUdyb3VwW10pLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChsaW5lKTtcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBtb3VudGVkQnlJZC5zZXQoaWQsIGxpbmUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICBjb25zdCBsaW5lID0gbW91bnRlZEJ5SWQuZ2V0KGlkKTtcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIHRoaXMuYXBwbHlWYWx1ZXNUb0xpbmUobGluZSwgdmFsdWVzLCBlbWl0RXZlbnQpO1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyDlvZPliY3nrZvpgIkv6aG16Z2i5pyq5oyC6L2977ya55u05o6l5pS55oC75pWw5o2u77yM6YCA5Ye65pCc57Si5ZCO5Y+v6KeBXG4gICAgICBjb25zdCBzdG9yZUl0ZW0gPSAodGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgfHwgW10pLmZpbmQoXG4gICAgICAgIChkYXRhKSA9PiBkYXRhICYmIGRhdGEuX2hkUm93SWQgPT09IGlkLFxuICAgICAgKTtcbiAgICAgIGlmIChzdG9yZUl0ZW0pIHtcbiAgICAgICAgT2JqZWN0LmtleXModmFsdWVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBzdG9yZUl0ZW1ba2V5XSA9IHZhbHVlc1trZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICAvKiog5riF56m65Yu+6YCJICovXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0lkcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dJZHMuY2xlYXIoKTtcbiAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKiDlvZPliY3li77pgInmlbDph4/vvIjlkKvot6jpobXjgIHmkJzntKLkv53nlZnvvIkgKi9cbiAgcHVibGljIGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd0lkcy5zaXplO1xuICB9XG5cbiAgLyoqIOaYr+WQpuWxleekuumhtumDqOW3peWFt+agjyAqL1xuICBnZXQgc2hvd1Rvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5zaG93U2VhcmNoIHx8XG4gICAgICAhIXRoaXMuc2hvd0NoZWNrYm94IHx8XG4gICAgICAhIXRoaXMuZm9ybUxpbmVzTGVmdEJ1dHRvbiB8fFxuICAgICAgISF0aGlzLmZvcm1MaW5lc1JpZ2h0QnV0dG9uIHx8XG4gICAgICB0aGlzLnNob3dDb2xTZXR0aW5nc0J1dHRvblxuICAgICk7XG4gIH1cblxuICAvKiog5piv5ZCm5bGV56S65YiX6K6+572u6b2/6L2u77yI5pyJ5Y+v6YWN572uIFZpZXdEb20g5pe277yJICovXG4gIGdldCBzaG93Q29sU2V0dGluZ3NCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5zaG93Q29sU2V0dGluZ3MgJiYgdGhpcy5nZXRDb25maWd1cmFibGVGb3JtTGluZXMoKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKiDliJfmmK/lkKbmuLLmn5PvvJpoaWRlIOawuOS4jeWxleekuu+8m1ZpZXdEb20g5Y+XIGlzU2hvdyDmjqfliLYgKi9cbiAgaXNDb2x1bW5WaXNpYmxlKGl0ZW06IEZvcm1MaW5lKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpdGVtIHx8IGl0ZW0uaGlkZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuVmlld0RvbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uaXNTaG93ICE9PSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiog5Y+v6L+b5YWl5YiX6K6+572u55qE5a2X5q6177ya6Z2eIGhpZGUg55qEIFZpZXdEb20gKi9cbiAgZ2V0Q29uZmlndXJhYmxlRm9ybUxpbmVzKCk6IEZvcm1MaW5lW10ge1xuICAgIGlmICghdGhpcy5mb3JtTGluZXMgfHwgIXRoaXMuZm9ybUxpbmVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mb3JtTGluZXMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gRm9ybUxpbmVUeXBlLlZpZXdEb20gJiYgIWl0ZW0uaGlkZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWNoZUtleSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZXJDb2RlID1cbiAgICAgICh0aGlzLnVzZXJTZXNzaW9uICYmIHRoaXMudXNlclNlc3Npb24udXNlckNvZGUpIHx8IFwiZGV2XCI7XG4gICAgcmV0dXJuIChcbiAgICAgIFwiaGQtZm9ybS1saW5lc19cIiArXG4gICAgICB1c2VyQ29kZSArXG4gICAgICBcIl9cIiArXG4gICAgICB0aGlzLmxvY2FsdGlvblRtcCArXG4gICAgICBcIl9cIiArXG4gICAgICB0aGlzLnV1aWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5jb2xzQ2FjaGVMb2FkZWQgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuc2hvd0NvbFNldHRpbmdzIHx8ICF0aGlzLmZvcm1MaW5lcyB8fCAhdGhpcy5mb3JtTGluZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldENvbHMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnV1aWQpIHtcbiAgICAgIHRoaXMuc2V0Q29scygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvY2FsZm9yYWdlXG4gICAgICAucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmxvY2FsZm9yYWdlXG4gICAgICAgICAgLmdldEl0ZW0odGhpcy5nZXRDYWNoZUtleSgpKVxuICAgICAgICAgIC50aGVuKCh2YWx1ZTogRm9ybUxpbmVzQ2FjaGVPcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlLmNvbHMpKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybUxpbmVzQ2FjaGVPcHRpb24gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xzQ2FjaGVMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtTGluZXNDYWNoZU9wdGlvbiA9IG5ldyBGb3JtTGluZXNDYWNoZU9wdGlvbigpO1xuICAgICAgICAgICAgICB0aGlzLmNvbHNDYWNoZUxvYWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRDb2xzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtTGluZXNDYWNoZU9wdGlvbiA9IG5ldyBGb3JtTGluZXNDYWNoZU9wdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jb2xzQ2FjaGVMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29scygpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcImxvY2FsZm9yYWdl5Yqg6L295byC5bi4XCIsIGUpO1xuICAgICAgICB0aGlzLmZvcm1MaW5lc0NhY2hlT3B0aW9uID0gbmV3IEZvcm1MaW5lc0NhY2hlT3B0aW9uKCk7XG4gICAgICAgIHRoaXMuY29sc0NhY2hlTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0Q29scygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhc0NvbHNDYWNoZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2xzQ2FjaGVMb2FkZWQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1MaW5lc0NhY2hlT3B0aW9uLmNvbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRm9ybUxpbmVzQ2FjaGVPcHRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnV1aWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2NhbGZvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0Q2FjaGVLZXkoKSwgdGhpcy5mb3JtTGluZXNDYWNoZU9wdGlvbik7XG4gIH1cblxuICAvKiog5oyJIGZvcm1MaW5lcyDljp/lp4vpobrluo/mjpLliJfoioLngrnvvIjnpoHmraLosIPluo/ml7bkv53mjIHmupDpobrluo/vvIkgKi9cbiAgcHJpdmF0ZSBzb3J0Tm9kZXNCeUZvcm1MaW5lc09yZGVyKG5vZGVzOiBUcmVlR3JpZFtdKTogVHJlZUdyaWRbXSB7XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLmdldENvbmZpZ3VyYWJsZUZvcm1MaW5lcygpLm1hcCgoZikgPT4gZi5uYW1lKTtcbiAgICByZXR1cm4gbm9kZXMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gb3JkZXIuaW5kZXhPZihhLmtleSkgLSBvcmRlci5pbmRleE9mKGIua2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldENvbHMoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TGlzdE5vZGVzID0gZmFsc2U7XG4gICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSBbXTtcbiAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSBbXTtcbiAgICBjb25zdCBjb25maWd1cmFibGUgPSB0aGlzLmdldENvbmZpZ3VyYWJsZUZvcm1MaW5lcygpO1xuICAgIGNvbnN0IGhhc0NhY2hlID0gdGhpcy5oYXNDb2xzQ2FjaGUoKTtcbiAgICBjb25maWd1cmFibGUuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGhhc0NhY2hlKSB7XG4gICAgICAgIGVsZW1lbnQuaXNTaG93ID0gdGhpcy5mb3JtTGluZXNDYWNoZU9wdGlvbi5jb2xzLmluY2x1ZGVzKGVsZW1lbnQubmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNTaG93ID09PSB1bmRlZmluZWQgfHwgZWxlbWVudC5pc1Nob3cgPT09IG51bGwpIHtcbiAgICAgICAgZWxlbWVudC5pc1Nob3cgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZTogVHJlZUdyaWQgPSB7XG4gICAgICAgIHRpdGxlOiBlbGVtZW50LmxhYmVsLFxuICAgICAgICBrZXk6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgY2hlY2tlZDogZWxlbWVudC5pc1Nob3cgIT09IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgaWYgKGVsZW1lbnQuaXNTaG93ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlTGlzdE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSB0aGlzLnNvcnROb2Rlc0J5Rm9ybUxpbmVzT3JkZXIodGhpcy5ub3dMaXN0Tm9kZXMpO1xuICAgIHRoaXMuaGlkZUxpc3ROb2RlcyA9IHRoaXMuc29ydE5vZGVzQnlGb3JtTGluZXNPcmRlcih0aGlzLmhpZGVMaXN0Tm9kZXMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93TGlzdE5vZGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgY2FuY2VsRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZUxpc3ROb2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYW5jZWxIaWRlTGlzdE5vZGVzKSk7XG4gICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FuY2VsTm93TGlzdE5vZGVzKSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjb25maXJtRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxIaWRlTGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmhpZGVMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLmNhbmNlbE5vd0xpc3ROb2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ub3dMaXN0Tm9kZXMpKTtcbiAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHN1Ym1pdEdyaWRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2libGVOYW1lcyA9IHRoaXMubm93TGlzdE5vZGVzLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpO1xuICAgIHRoaXMuZ2V0Q29uZmlndXJhYmxlRm9ybUxpbmVzKCkuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgbGluZS5pc1Nob3cgPSB2aXNpYmxlTmFtZXMuaW5jbHVkZXMobGluZS5uYW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1MaW5lc0NhY2hlT3B0aW9uLmNvbHMgPSB2aXNpYmxlTmFtZXM7XG4gICAgdGhpcy5jb2xzQ2FjaGVMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1MaW5lc0NhY2hlT3B0aW9uKCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIOWLvumAiS/lj5bmtojvvJrku4XlnKjmmL7npLov6ZqQ6JeP5Lik57uE6Ze056e75Yqo77yM5LiN5pS55Y+YIGZvcm1MaW5lcyDpobrluo8gKi9cbiAgY2hlY2tBY3Rpb24oZXZlbnQ6IE56Rm9ybWF0RW1pdEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Lm5vZGUub3JpZ2luLmNoZWNrZWQpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGV2ZW50Lm5vZGUub3JpZ2luLmtleTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUuY2hlY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleSAhPT0gZXZlbnQubm9kZS5vcmlnaW4ua2V5O1xuICAgICAgfSk7XG4gICAgICB0aGlzLm5vd0xpc3ROb2RlcyA9IHRoaXMuc29ydE5vZGVzQnlGb3JtTGluZXNPcmRlcihcbiAgICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMuY29uY2F0KFtub2RlXSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZW1wb3JhcnlOb2RlTGlzdCA9IHRoaXMuaGlkZUxpc3ROb2Rlcy5zbGljZSgwKTtcbiAgICAgIHRoaXMubm93TGlzdE5vZGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBldmVudC5ub2RlLm9yaWdpbi5rZXkpIHtcbiAgICAgICAgICBjb25zdCBpbm5lckl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcbiAgICAgICAgICBpbm5lckl0ZW0uY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgIHRlbXBvcmFyeU5vZGVMaXN0LnB1c2goaW5uZXJJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSB0aGlzLnNvcnROb2Rlc0J5Rm9ybUxpbmVzT3JkZXIodGVtcG9yYXJ5Tm9kZUxpc3QpO1xuICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSB0aGlzLm5vd0xpc3ROb2Rlcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ICE9PSBldmVudC5ub2RlLm9yaWdpbi5rZXk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzZXRBY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3BlbiA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRvbUxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgIFwiLmFudC1zZWxlY3QtZHJvcGRvd24uaGQtc2VsZWN0LXRhYmxlXCIsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkb21MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkb20gPSBkb21MaXN0WzBdO1xuICAgICAgICAgIGRvbVxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaGQtb3B0aW9uLWhlYWRlclwiKVxuICAgICAgICAgICAgLmZvckVhY2goKGhlYWRlcikgPT4gaGVhZGVyLnJlbW92ZSgpKTtcbiAgICAgICAgICBjb25zdCBvbGRJbmRleCA9IHRoaXMuZ2V0T2xkRG9tSW5kZXgodGhpcy5hY3RpdmVEb21ZLCB0aGlzLmZvcm1MaW5lcyk7XG4gICAgICAgICAgZG9tLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRE9NU3RydWN0dXJlKFxuICAgICAgICAgICAgICB0aGlzLmZvcm1MaW5lc1tvbGRJbmRleF0sXG4gICAgICAgICAgICAgIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMuc2xpY2UoXG4gICAgICAgICAgICAgICAgKHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCAtIDEpICogdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUsXG4gICAgICAgICAgICAgICAgKHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCAtIDEpICogdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUsXG4gICAgICAgICAgICAgIClbdGhpcy5hY3RpdmVEb21YXSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBkb20uZmlyc3RDaGlsZCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RUYWJsZUNvbHVtblN0eWxlKGNvbHVtbjogU2VsZWN0T3B0aW9uVGFibGVDb2x1bW4pOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9IHtcbiAgICBpZiAoIWNvbHVtbiB8fCAhY29sdW1uLndpZHRoKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogXCJ1bnNldFwiIH07XG4gICAgfVxuICAgIHJldHVybiB7IHdpZHRoOiBgJHtjb2x1bW4ud2lkdGh9cHhgIH07XG4gIH1cblxuICBjcmVhdGVET01TdHJ1Y3R1cmUoZm9ybUl0ZW0sIGxpbmUpIHtcbiAgICAvLyDliJvlu7rlpJbpg6ggZGl2XG4gICAgY29uc3QgaGRPcHRpb25IZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGhkT3B0aW9uSGVhZGVyLmNsYXNzTmFtZSA9IFwiaGQtb3B0aW9uLWhlYWRlclwiO1xuICAgIGhkT3B0aW9uSGVhZGVyLnN0eWxlLnBhZGRpbmdMZWZ0ID0gYCR7U0VMRUNUX1RBQkxFX09QVElPTl9IT1JJWk9OVEFMX1BBRERJTkd9cHhgO1xuICAgIGhkT3B0aW9uSGVhZGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke1NFTEVDVF9UQUJMRV9PUFRJT05fSE9SSVpPTlRBTF9QQURESU5HfXB4YDtcblxuICAgIC8vIOajgOafpeadoeS7tu+8jOehruWumuaYr+WQpuimgeWIm+W7uuWtkOWFg+e0oFxuICAgIC8vIGNvbnN0IHNlbGVjdExpc3RMZW5ndGggPSAoZm9ybUl0ZW0gJiYgZm9ybUl0ZW0uc2VsZWN0T3B0aW9uICYmIGZvcm1JdGVtLnNlbGVjdE9wdGlvbi5zZWxlY3RMaXN0ICYmIGZvcm1JdGVtLnNlbGVjdE9wdGlvbi5zZWxlY3RMaXN0Lmxlbmd0aCkgfHwgMDtcbiAgICAvLyBpZlxuICAgIC8vIGNvbnN0IGxpbmVWYWx1ZUxlbmd0aCA9IChsaW5lLmdldChmb3JtSXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdE5hbWUpICYmIGxpbmUuZ2V0KGZvcm1JdGVtLnNlbGVjdE9wdGlvbi5zZWxlY3RMaXN0TmFtZSkudmFsdWUgJiYgbGluZS5nZXQoZm9ybUl0ZW0uc2VsZWN0T3B0aW9uLnNlbGVjdExpc3ROYW1lKS52YWx1ZS5sZW5ndGgpIHx8IDA7XG5cbiAgICAvLyBpZiAoc2VsZWN0TGlzdExlbmd0aCA+IDAgfHwgbGluZVZhbHVlTGVuZ3RoID4gMCkge1xuICAgIC8vIOmBjeWOhiB0YWJsZUNvbHVtbnMg5Yib5bu65YaF6YOo5YiXIGRpdlxuICAgIGZvcm1JdGVtLnNlbGVjdE9wdGlvbi50YWJsZUNvbHVtbnMuZm9yRWFjaCgoc2VsZWN0T3B0aW9uVGFibGVDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb2x1bW5EaXYuY2xhc3NOYW1lID0gXCJoZC1vcHRpb24taGVhZGVyLWNvbHVtblwiO1xuXG4gICAgICBjb25zdCB3aWR0aFN0eWxlID0gdGhpcy5nZXRTZWxlY3RUYWJsZUNvbHVtblN0eWxlKFxuICAgICAgICBzZWxlY3RPcHRpb25UYWJsZUNvbHVtbixcbiAgICAgICk7XG4gICAgICBjb2x1bW5EaXYuc3R5bGUud2lkdGggPSB3aWR0aFN0eWxlLndpZHRoO1xuXG4gICAgICAvLyDmt7vliqDliJfmoIfnrb7lhoXlrrlcbiAgICAgIGlmIChzZWxlY3RPcHRpb25UYWJsZUNvbHVtbi5sYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcbiAgICAgICAgICBzZWxlY3RPcHRpb25UYWJsZUNvbHVtbi5sYWJlbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29sdW1uRGl2LmFwcGVuZENoaWxkKGxhYmVsVGV4dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIOa3u+WKoOWIlyBkaXYg5Yiw5aSW6YOoIGRpdlxuICAgICAgaGRPcHRpb25IZWFkZXIuYXBwZW5kQ2hpbGQoY29sdW1uRGl2KTtcbiAgICB9KTtcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gaGRPcHRpb25IZWFkZXI7XG4gIH1cblxuICBjb2xsZWN0RG9tRGF0YSgpIHtcbiAgICB0aGlzLmNvbGxlY3REb21MaXN0ID0gW107XG4gICAgY29uc3QgcGFnZURvbUxpc3QgPSB0aGlzLmZvcm1JbnB1dERvbUxpc3QudG9BcnJheSgpO1xuICAgIC8vIFN0ZXAgMTog6I635Y+W5b2T5YmN6aG155qE5pWw5o2u6YePXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9ICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ICogdGhpcy5wYWdpbmF0aW9uUGFnZVNpemU7XG4gICAgY29uc3QgYWRqdXN0ZWRFbmRJbmRleCA9XG4gICAgICBlbmRJbmRleCA+IHRoaXMuZm9ybUxpbmVzTGVuZ3RoID8gdGhpcy5mb3JtTGluZXNMZW5ndGggOiBlbmRJbmRleDtcbiAgICBjb25zdCBwYWdlTGluZXNMZW5ndGggPSBhZGp1c3RlZEVuZEluZGV4IC0gc3RhcnRJbmRleDtcblxuICAgIGNvbnN0IGludGVydmFsID0gcGFnZURvbUxpc3QubGVuZ3RoIC8gcGFnZUxpbmVzTGVuZ3RoO1xuICAgIC8vIFN0ZXAgMjog5ouG5YiGZm9ybUlucHV0RG9tTGlzdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUxpbmVzTGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY29sbGVjdERvbUxpc3QucHVzaChwYWdlRG9tTGlzdC5zcGxpY2UoMCwgaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxlSW5wdXROdW1iZXJLZXlib2FyZFN0ZXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBuZy16b3JybyA4IOWcqCBpbnB1dCDnmoQgb25LZXlEb3duIOmHjOeUqOS4iuS4i+mUruiwgyB1cCgpL2Rvd24oKSDmlLkgc3RlcOOAglxuICAgKiDlj6ropobnm5Ygb25LZXlEb3du77yI5LiN5YqoIHVwL2Rvd27vvInvvIzplK7nm5jmlrnlkJHplK7kuqTnu5nooajljZXot7PovazvvIwrLy0g5oyJ6ZKu5LuN5Y+v55So44CCXG4gICAqL1xuICBwcml2YXRlIGRpc2FibGVJbnB1dE51bWJlcktleWJvYXJkU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlS2V5Ym9hcmRPcGVyYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNvbGxlY3REb21MaXN0W2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuY29sbGVjdERvbUxpc3RbaV1bal07XG4gICAgICAgIGlmIChkb20gaW5zdGFuY2VvZiBOeklucHV0TnVtYmVyQ29tcG9uZW50KSB7XG4gICAgICAgICAgZG9tLm9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAzOCB8fCBlLmtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgIGRvbS5zZXRWYWxpZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOiBmueEpuS4i+S4gOS4qmRvbVxuICBqdW1wVG9OZXh0SW5wdXQoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBpZiAoXG4gICAgICB4ID09PSBudWxsIHx8XG4gICAgICB5ID09PSBudWxsIHx8XG4gICAgICAhdGhpcy5jb2xsZWN0RG9tTGlzdCB8fFxuICAgICAgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5aaC5p6c5piv5pyA5ZCO5LiA5Liq5Y+v6L6T5YWl5YWD57Sg77yM5paw5aKe6KGMXG4gICAgaWYgKFxuICAgICAgISh0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50KSAmJlxuICAgICAgeCA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggLSAxICYmXG4gICAgICB5ID09PSB0aGlzLmNvbGxlY3REb21MaXN0WzBdLmxlbmd0aCAtIDFcbiAgICApIHtcbiAgICAgIHRoaXMuYWRkTmV3TGluZUFuZEZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh5ID09PSB0aGlzLmNvbGxlY3REb21MaXN0WzBdLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCLmiafooYzov4fnqIsxXCIpO1xuICAgICAgICAvLyDlpoLmnpzmmK/mnIDlkI7kuIDliJfvvIzliJnot7PovazliLDkuIvkuIDooYznrKzkuIDkuKrovpPlhaXmoYZcbiAgICAgICAgdGhpcy5mb2N1c0RvbSh4ICsgMSwgMCwgXCJyaWdodFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5omn6KGM6L+H56iLMlwiKTtcbiAgICAgICAgLy8g5aaC5p6c5LiN5piv5pyA5ZCO5LiA5YiX77yM5YiZ6Lez6L2s5Yiw5b2T5YmN6KGM5LiL5LiA5Liq6L6T5YWl5qGGXG4gICAgICAgIHRoaXMuZm9jdXNEb20oeCwgeSArIDEsIFwicmlnaHRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWinuWKoOaWsOihjOW5tuS4lOiBmueEpuWIsOesrOS4gOS4quWFg+e0oO+8jFxuICAgKiDov5nph4zopoHms6jmhI/vvIzlpoLmnpzlrZjlnKjnv7vpobXmg4XlhrXvvIzpnIDopoHlpITnkIZcbiAgICovXG4gIGFkZE5ld0xpbmVBbmRGb2N1cygpIHtcbiAgICAvLyDlvZPliY3ooYzkuLrlvZPliY3pobXmnIDlkI7kuIDooYznmoTml7blgJnvvIzliKTmlq3kuIvkuIDpobXmmK/lkKbmnInmlbDmja5cbiAgICAvLyAx44CB5aaC5p6c5pyJ77ya57+76aG1K+iBmueEpuesrOS4gOihjOesrOS4gOS4quWFg+e0oFxuICAgIC8vIDLjgIHlpoLmnpzmsqHmnInvvJrmlrDlop7ooYwr57+76aG1K+iBmueEpuesrOS4gOihjOesrOS4gOS4quWFg+e0oFxuICAgIGlmICh0aGlzLmFjdGl2ZURvbVggPT09IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplIC0gMSkge1xuICAgICAgLy8g5Yik5pat5LiL5LiA6aG15piv5ZCm5pyJ5pWw5o2uXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCA8XG4gICAgICAgIE1hdGguY2VpbCh0aGlzLmZvcm1MaW5lc0xlbmd0aCAvIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplKVxuICAgICAgKSB7XG4gICAgICAgIC8vIOe/u+mhtSvogZrnhKbnrKzkuIDooYznrKzkuIDkuKrlhYPntKBcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4Kys7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29sbGVjdERvbURhdGEoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIuaJp+ihjOi/h+eoizNcIik7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSgwLCAwLCBcInJpZ2h0XCIpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOaWsOWinuihjCvnv7vpobUr6IGa54Sm56ys5LiA6KGM56ys5LiA5Liq5YWD57SgXG4gICAgICAgIHRoaXMuYWRkRm9ybUxpbmUoKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4Kys7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29sbGVjdERvbURhdGEoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIuaJp+ihjOi/h+eoizRcIik7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSgwLCAwKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRm9ybUxpbmUoKTtcbiAgICB9XG4gIH1cblxuICAvLyDogZrnhKbliLDkuIrkuIDkuKpkb21cbiAganVtcFRvUHJldklucHV0KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgeCA9PT0gbnVsbCB8fFxuICAgICAgeSA9PT0gbnVsbCB8fFxuICAgICAgIXRoaXMuY29sbGVjdERvbUxpc3QgfHxcbiAgICAgIHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgIC8vIOWmguaenOaYr+esrOS4gOS4quWPr+i+k+WFpeWFg+e0oO+8jCDliKTmlq3mmK/lkKbmnInkuIrkuIDpobXvvIwg5aaC5p6c5pyJ77yM5YiZ57+76aG1K+iBmueEpuWIsOS4iuS4gOmhteacgOWQjuS4gOS4quWFg+e0oFxuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCA+IDEpIHtcbiAgICAgICAgLy8g57+76aG1K+iBmueEpuWIsOS4iuS4gOmhteacgOWQjuS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXgtLTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwi5omn6KGM6L+H56iLNVwiKTtcbiAgICAgICAgICB0aGlzLmZvY3VzRG9tKFxuICAgICAgICAgICAgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggLSAxLFxuICAgICAgICAgICAgdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoeSA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIuaJp+ihjOi/h+eoizZcIik7XG4gICAgICAgIC8vIOWmguaenOaYr+esrOS4gOWIl++8jOWImei3s+i9rOWIsOS4iuS4gOihjOacgOWQjuS4gOS4qui+k+WFpeahhlxuICAgICAgICB0aGlzLmZvY3VzRG9tKHggLSAxLCB0aGlzLmNvbGxlY3REb21MaXN0WzBdLmxlbmd0aCAtIDEsIFwibGVmdFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5omn6KGM6L+H56iLN1wiKTtcbiAgICAgICAgLy8g5aaC5p6c5LiN5piv56ys5LiA5YiX77yM5YiZ6Lez6L2s5Yiw5b2T5YmN6KGM5LiK5LiA5Liq6L6T5YWl5qGGXG4gICAgICAgIHRoaXMuZm9jdXNEb20oeCwgeSAtIDEsIFwibGVmdFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6IGa54Sm5Yiw5p+Q5LiqZG9tXG4gICAqIEBwYXJhbSB4IOWdkOagh3hcbiAgICogQHBhcmFtIHkg5Z2Q5qCHeVxuICAgKiBAcGFyYW0ganVtcERpcmVjdGlvbiDot7PovazmlrnlkJFcbiAgICovXG4gIGZvY3VzRG9tKHg6IG51bWJlciwgeTogbnVtYmVyLCBqdW1wRGlyZWN0aW9uOiBzdHJpbmcgPSBcInJpZ2h0XCIpIHtcbiAgICBpZiAoXG4gICAgICB4ID09PSBudWxsIHx8XG4gICAgICB5ID09PSBudWxsIHx8XG4gICAgICAhdGhpcy5jb2xsZWN0RG9tTGlzdCB8fFxuICAgICAgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5YWI5riF6Zmk5LiA5LiL5b2T5YmN55qE54Sm54K5XG4gICAgdGhpcy5jbGVhbkZvY3VzRG9tKHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICBpZiAodGhpcy5jb2xsZWN0RG9tTGlzdFt4XSAmJiB0aGlzLmNvbGxlY3REb21MaXN0W3hdW3ldKSB7XG4gICAgICBjb25zdCBkb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W3hdW3ldO1xuICAgICAgLy8g6ZyA6KaB5Yik5pat5LiL5LiA5LiqZm9jdXPnmoRkb23mmK/lkKbmmK/npoHnlKjnirbmgIHvvIzlpoLmnpzmmK/npoHnlKjnirbmgIHpnIDopoHot7Pov4dcbiAgICAgIGlmIChkb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICBpZiAoZG9tLm56RGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoanVtcERpcmVjdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh4LCB5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGp1bXBEaXJlY3Rpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgICAgICB0aGlzLmp1bXBUb1ByZXZJbnB1dCh4LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRvbS5uelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoXG4gICAgICAgICAgeyBiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwiY2VudGVyXCIsIGlubGluZTogXCJjZW50ZXJcIiB9LFxuICAgICAgICApO1xuICAgICAgICAvLyDov5nph4zlpJrpgInmoYbpnIDopoHpop3lpJblpITnkIbkuIvvvIzlm6DkuLrlkJHkuIvnmoTml7blgJnkvJrop6blj5HlhoXpg6hJbnB1dOeahOiBmueEpu+8jOaKiuS4i+S4gOS4qmRvbeeahGZvY3Vz5pS+5Yiw5a6P5Lu75Yqh5Lit77yM5bu26L+f5aSE55CG44CCXG4gICAgICAgIGlmIChkb20ubnpTZWxlY3RTZXJ2aWNlLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZG9tLmZvY3VzKCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZG9tIGluc3RhbmNlb2YgTnpJbnB1dE51bWJlckNvbXBvbmVudCkge1xuICAgICAgICBpZiAoZG9tLm56RGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoanVtcERpcmVjdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh4LCB5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGp1bXBEaXJlY3Rpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgICAgICB0aGlzLmp1bXBUb1ByZXZJbnB1dCh4LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0RG9tOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb20ubnpJZCk7XG4gICAgICAgIGlucHV0RG9tLmZvY3VzKCk7XG4gICAgICAgIGlucHV0RG9tLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgICBiZWhhdmlvcjogXCJzbW9vdGhcIixcbiAgICAgICAgICBibG9jazogXCJjZW50ZXJcIixcbiAgICAgICAgICBpbmxpbmU6IFwiY2VudGVyXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpbnB1dERvbS5zZWxlY3QoKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYpIHtcbiAgICAgICAgaWYgKGRvbS5uYXRpdmVFbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9QcmV2SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkb20ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBkb20ubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCIsXG4gICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCIsXG4gICAgICAgICAgaW5saW5lOiBcImNlbnRlclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZG9tIGluc3RhbmNlb2YgTnpEYXRlUGlja2VyQ29tcG9uZW50IHx8XG4gICAgICAgIGRvbSBpbnN0YW5jZW9mIE56UmFuZ2VQaWNrZXJDb21wb25lbnQgfHxcbiAgICAgICAgZG9tIGluc3RhbmNlb2YgTnpUaW1lUGlja2VyQ29tcG9uZW50XG4gICAgICApIHtcbiAgICAgICAgLy8gVE9ETzrlnKhuZ3pvcnJvOC41LnjniYjmnKzvvIzml7bpl7Tnm7jlhbPnmoTpgInmi6nlmajmsqHmnInmmrTpnLLlh7pvcGVu5pa55rOV77yM5pqC5pe25YWI5LiN5aSE55CG44CC77yIMTAueOWPiuS7peS4iueJiOacrOaPkOS+m+S6hm9wZW7mlrnms5XvvIlcbiAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgIHRoaXMuanVtcFRvTmV4dElucHV0KHgsIHkpO1xuICAgICAgICB9IGVsc2UgaWYgKGp1bXBEaXJlY3Rpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgICAgdGhpcy5qdW1wVG9QcmV2SW5wdXQoeCwgeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRBY3RpdmVEb20oeCwgeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOayoeaciWRvbeeahOWcuuaZr+S4i++8jOmcgOimgeWIpOaWreaYr+W3pui/mOaYr+WPs++8jFxuICAgIH1cbiAgfVxuXG4gIGNsZWFuRm9jdXNEb20oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICBpZiAoXG4gICAgICB4ID09PSBudWxsIHx8XG4gICAgICB5ID09PSBudWxsIHx8XG4gICAgICAhdGhpcy5jb2xsZWN0RG9tTGlzdCB8fFxuICAgICAgdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sbGVjdERvbUxpc3RbeF0gJiYgdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XSkge1xuICAgICAgY29uc3QgZG9tID0gdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XTtcbiAgICAgIGlmIChkb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICBkb20uYmx1cigpO1xuICAgICAgICBkb20ubnpPcGVuID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIE56SW5wdXROdW1iZXJDb21wb25lbnQpIHtcbiAgICAgICAgZG9tLmJsdXIoKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9tIGluc3RhbmNlb2YgRWxlbWVudFJlZikge1xuICAgICAgICBkb20ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEFjdGl2ZURvbSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlRG9tWCA9IHg7XG4gICAgdGhpcy5hY3RpdmVEb21ZID0geTtcbiAgICB0aGlzLmFjdGl2ZURvbSA9IHRoaXMuY29sbGVjdERvbUxpc3RbdGhpcy5hY3RpdmVEb21YXVt0aGlzLmFjdGl2ZURvbVldO1xuICAgIGlmICh0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3Blbih0aGlzLmFjdGl2ZURvbS5vcGVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qC55o2u6KGM5Y+35ZKM5YiX5Y+35ZCN56ew6I635Y+W5b2T5YmN6IGa54Sm55qEZG9t5L2N572uXG4gICAqIEBwYXJhbSByb3dOdW1iZXIg6KGM5Y+3XG4gICAqIEBwYXJhbSBjb2xOdW1iZXIg5YiX5Y+3XG4gICAqL1xuICBzZXRBY3RpdmVEb21JbkZvcm1MaW5lcyhyb3dOdW1iZXI6IG51bWJlciwgY29sTnVtYmVyOiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZURvbVggPSByb3dOdW1iZXI7XG4gICAgdGhpcy5hY3RpdmVEb21ZID0gdGhpcy5nZXREb21JbmRleChjb2xOdW1iZXIsIHRoaXMuZm9ybUxpbmVzKTtcbiAgICB0aGlzLnNldEFjdGl2ZURvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gIH1cblxuICAvKipcbiAgICog6ZSu55uY54K55Ye75LqL5Lu2XG4gICAqIEBwYXJhbSBldmVudCDplK7nm5jkuovku7ZcbiAgICogQHJldHVybnNcbiAgICovXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVLZXlib2FyZE9wZXJhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWN0aXZlRG9tWCA9PT0gbnVsbCB8fCB0aGlzLmFjdGl2ZURvbVkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50ICYmXG4gICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURvbVggIT09IDApIHtcbiAgICAgICAgICB0aGlzLmZvY3VzRG9tKHRoaXMuYWN0aXZlRG9tWCAtIDEsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50ICYmXG4gICAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWIpOaWreaYr+WQpuWcqOacgOWQjuS4gOihjO+8jOWKoOihjFxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb21YID09PSB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLmNsZWFuRm9jdXNEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgIHRoaXMuYWRkTmV3TGluZUFuZEZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVggKyAxLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkFycm93TGVmdFwiOlxuICAgICAgICB0aGlzLmp1bXBUb1ByZXZJbnB1dCh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJFbnRlclwiOlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuKHRoaXMuYWN0aXZlRG9tLm9wZW4pO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZURvbVggPT09IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHRoaXMuYWRkTmV3TGluZUFuZEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURvbSBpbnN0YW5jZW9mIE56U2VsZWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3Qgbm93QWN0aXZlRG9tID0gdGhpcy5hY3RpdmVEb20gYXMgTnpTZWxlY3RDb21wb25lbnQ7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3Blbihub3dBY3RpdmVEb20ub3Blbik7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGlmIChub3dBY3RpdmVEb20ubnpTZWxlY3RTZXJ2aWNlLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIOWmguaenOW9k+WJjeiBmueEpueahOaYr+mAieaLqeahhu+8jOS4lOmUruWFpTAtOWEtekEtWu+8jOWImeW8ueWHulxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCAmJlxuICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID09PSBmYWxzZSAmJlxuICAgICAgICAgIC9eWzAtOWEtekEtWl0kLy50ZXN0KGV2ZW50LmtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZG9tID0gdGhpcy5hY3RpdmVEb207XG4gICAgICAgICAgZG9tLm56T3BlbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4odHJ1ZSk7XG4gICAgICAgICAgLy8gLy8gVE9ETzrov5nph4zmmoLml7bms6jph4rvvIzkuI3og73nm7TmjqXluKblhaXplK7lhaXlgLzvvIzov5nmoLfkvJrlr7zoh7TovpPlhaXkuK3mlofnmoTml7blgJnluKblhaXoi7HmloflrZfnrKbvvIzkuI3nrKblkIjpooTmnJ9cbiAgICAgICAgICAvLyBkb20ubnpTZWxlY3RUb3BDb250cm9sQ29tcG9uZW50LmlucHV0VmFsdWUgPSBldmVudC5rZXk7XG4gICAgICAgICAgLy8gLy8g6I635Y+WIGlucHV0IOWFg+e0oFxuICAgICAgICAgIC8vIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvbS5uelNlbGVjdFRvcENvbnRyb2xDb21wb25lbnQuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gICAvLyDop6blj5HovpPlhaXkuovku7bvvIzku6Xnoa7kv50gQW5ndWxhciDmo4DmtYvliLDlgLznmoTlj5jljJZcbiAgICAgICAgICAvLyAgIGNvbnN0IGV2ZW50SW5wdXQgPSBuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pO1xuICAgICAgICAgIC8vICAgaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnRJbnB1dCk7XG4gICAgICAgICAgLy8gfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagueaNruWcqOWIneWni2RvbeS4i+agh+WSjOaVsOaNrumbhiDojrflj5blnKhjb2xsZWN0RG9tTGlzdOS4reeahOS4i+agh1xuICAgKiBAcGFyYW0gaW5kZXgg5Yid5aeL5LiL5qCHXG4gICAqIEBwYXJhbSBsaXN0IOiAgeaVsOaNrumbhlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXREb21JbmRleChpbmRleDogbnVtYmVyLCBsaXN0OiBBcnJheTxGb3JtTGluZT4pOiBudW1iZXIge1xuICAgIGNvbnN0IHR5cGVMaXN0ID0gW1xuICAgICAgXCJJbnB1dFwiLFxuICAgICAgXCJTZWxlY3RcIixcbiAgICAgIFwiRGF0ZVwiLFxuICAgICAgXCJEYXRlUmFuZ2VcIixcbiAgICAgIFwiVGV4dEFyZWFcIixcbiAgICAgIFwiSW5wdXROdW1iZXJcIixcbiAgICAgIFwiTXVsdGlwbGVTZWxlY3RcIixcbiAgICBdO1xuICAgIGxldCBmaWx0ZXJMaXN0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSA9PT0gaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckxpc3QubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8g5LiO5qih5p2/5LiA6Ie077yaaGlkZSAvIGlzU2hvdz1mYWxzZSDnmoTliJfkuI3muLLmn5MgI2Zvcm1JbnB1dERvbe+8jOS4jeiuoeWFpSBjb2xsZWN0RG9tTGlzdCDnmoTliJfkuIvmoIdcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZUxpc3QuaW5jbHVkZXMobGlzdFtpXS50eXBlKSAmJlxuICAgICAgICAhbGlzdFtpXS5oaWRlICYmXG4gICAgICAgIGxpc3RbaV0uaXNTaG93ICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGZpbHRlckxpc3QucHVzaChsaXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICog5qC55o2u5ZyoY29sbGVjdERvbUxpc3TkuK3nmoTkuIvmoIflkozmlbDmja7pm4Yg6I635Y+W5Yid5aeLZG9t5LiL5qCHXG4gICAqIEBwYXJhbSBpbmRleCDmlrDkuIvmoIdcbiAgICogQHBhcmFtIGxpc3Qg6ICB5pWw5o2u6ZuGXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcml2YXRlIGdldE9sZERvbUluZGV4KGluZGV4OiBudW1iZXIsIGxpc3Q6IEFycmF5PEZvcm1MaW5lPik6IG51bWJlciB7XG4gICAgY29uc29sZS5sb2coXCJpbmRleFwiLCBpbmRleCk7XG4gICAgY29uc29sZS5sb2coXCJsaXN0XCIsIGxpc3QpO1xuICAgIGNvbnN0IHR5cGVMaXN0ID0gW1xuICAgICAgXCJJbnB1dFwiLFxuICAgICAgXCJTZWxlY3RcIixcbiAgICAgIFwiRGF0ZVwiLFxuICAgICAgXCJEYXRlUmFuZ2VcIixcbiAgICAgIFwiVGV4dEFyZWFcIixcbiAgICAgIFwiSW5wdXROdW1iZXJcIixcbiAgICAgIFwiTXVsdGlwbGVTZWxlY3RcIixcbiAgICBdO1xuICAgIGxldCBmaWx0ZXJMaXN0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVMaXN0LmluY2x1ZGVzKGxpc3RbaV0udHlwZSkgJiZcbiAgICAgICAgIWxpc3RbaV0uaGlkZSAmJlxuICAgICAgICBsaXN0W2ldLmlzU2hvdyAhPT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICBmaWx0ZXJMaXN0LnB1c2gobGlzdFtpXSk7XG4gICAgICAgIGlmIChmaWx0ZXJMaXN0Lmxlbmd0aCA9PT0gaW5kZXggKyAxKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbGluZXNGb3JtQXJyYXkoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLmdldChcImxpbmVzXCIpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIGdldCBMb2Rhc2hSb3VuZCgpIHtcbiAgICByZXR1cm4gcm91bmQ7XG4gIH1cblxuICAvLyDmmrTpnLLnmoTmlrnms5XvvIznlKjkuo7ojrflj5bmiYDmnInmlbDmja7nmoR2YWxpZOeKtuaAgVxuICBwdWJsaWMgZ2V0VmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkO1xuICB9XG5cbiAgb25TZWFyY2hFdmVudChcbiAgICBmbjogYW55LFxuICAgIGV2ZW50OiBhbnksXG4gICAgbGluZTogYW55LFxuICAgIG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWU6IGFueSxcbiAgKSB7XG4gICAgaWYgKCFmbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgIG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbCA/IG9uU2VhcmNoRXZlbnREZWJvdW5jZVRpbWUgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoU3ViamVjdFxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpKVxuICAgICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgbGluZSB9KSA9PiB0aGlzLnRyaWdnZXJFdmVudChmbiwgZXZlbnQsIGxpbmUpKTtcbiAgICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50LCBsaW5lIH0pO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuKHRydWUpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgb25PcGVuQ2hhbmdlRXZlbnQoXG4gICAgZm46IGFueSxcbiAgICBvcGVuOiBib29sZWFuLFxuICAgIGxpbmU6IGFueSxcbiAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZTogYW55LFxuICAgIGZvcm1JdGVtPzogYW55LFxuICApIHtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWxleW8gOaXtuWFiOa4heepuuaXpyBvcHRpb25z77yM6YG/5YWN5p2h5Lu25Y+Y5YyW5ZCO6K+35rGC6L+U5Zue5YmN5LuN5bGV56S65LiK5LiA5om55LiL5ouJ5pWw5o2uXG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZvcm1JdGVtLCBsaW5lKTtcbiAgICB9XG4gICAgY29uc3QgZGVib3VuY2VNcyA9XG4gICAgICBvbk9wZW5DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgID8gb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgOiAwO1xuICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6Kem5Y+R77yM5LiN6LWwIGRlYm91bmNlVGltZe+8iOmBv+WFjeW8guatpe+8iVxuICAgIGlmICghZGVib3VuY2VNcykge1xuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIG9wZW4sIGxpbmUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VEZWJvdW5jZVRpbWVvdXQgPSBkZWJvdW5jZU1zO1xuICAgIGlmICh0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3BlbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm9wZW5DaGFuZ2VTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0KSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgZm4sIGV2ZW50LCBsaW5lIH0pID0+IHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3ViamVjdC5uZXh0KHsgZm4sIGV2ZW50OiBvcGVuLCBsaW5lIH0pO1xuICB9XG5cbiAgLyoqIOaciSBvbk9wZW5DaGFuZ2VFdmVudCDml7blsZXlvIDkuIvmi4nlhYjmuIXnqbrpgInpobnvvIznlLHkuJrliqHlm57osIPlho3lhpnlhaXmlrDmlbDmja4gKi9cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdE9wdGlvbnNPbk9wZW4oZm9ybUl0ZW06IGFueSwgbGluZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCFmb3JtSXRlbSB8fCAhZm9ybUl0ZW0uc2VsZWN0T3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wdCA9IGZvcm1JdGVtLnNlbGVjdE9wdGlvbjtcbiAgICBpZiAob3B0LnNlbGVjdExpc3QgIT0gbnVsbCkge1xuICAgICAgb3B0LnNlbGVjdExpc3QgPSBbXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgb3B0LnNlbGVjdExpc3ROYW1lICYmXG4gICAgICBsaW5lICYmXG4gICAgICBsaW5lLmdldCAmJlxuICAgICAgbGluZS5nZXQob3B0LnNlbGVjdExpc3ROYW1lKVxuICAgICkge1xuICAgICAgbGluZS5nZXQob3B0LnNlbGVjdExpc3ROYW1lKS5zZXRWYWx1ZShbXSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZm4g54i257uE5Lu25Ye95pWwXG4gICAqIEBwYXJhbSBldmVudCDkuovku7blgLxcbiAgICogQHBhcmFtIGxpbmUg6Kem5Y+R55qE6KGMXG4gICAqL1xuICB0cmlnZ2VyRXZlbnQoZm46IGFueSwgZXZlbnQ6IGFueSwgbGluZTogYW55KSB7XG4gICAgaWYgKGZuKSB7XG4gICAgICBmbihldmVudCwgbGluZSk7XG4gICAgfVxuICB9XG5cbiAgaW5uZXJHZXRWYWxpZCgpIHtcbiAgICBsZXQgdG1wVmFsaWRhdGVIZEZvcm1MaW5lcyA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgbGluZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxuICAgIH0pO1xuICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmZvckVhY2goKGZvcm1MaW5lc0RhdGFJdGVtKSA9PiB7XG4gICAgICBsZXQgZm9ybUdyb3VwT2JqOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuZm9ybUxpbmVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgLy8g5paw5aKe6KGMIOWIneWni+aVsOaNrumDveS4um51bGxcbiAgICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuanVkZ2VWYWx1ZUlzTm90RW1wdHkoZm9ybUxpbmVzRGF0YUl0ZW1baXRlbS5uYW1lXSlcbiAgICAgICAgICAgICAgPyBmb3JtTGluZXNEYXRhSXRlbVtpdGVtLm5hbWVdXG4gICAgICAgICAgICAgIDogaXRlbS52YWx1ZSB8fCBudWxsLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpdGVtLnJlcXVpcmUgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsKSB7XG4gICAgICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICAgIGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSB8fCBudWxsLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3JtR3JvdXBPYmoubGluZUluZGV4ID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICAodG1wVmFsaWRhdGVIZEZvcm1MaW5lcy5nZXQoXCJsaW5lc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmxlbmd0aCArIDEsXG4gICAgICAgIFtdLFxuICAgICAgKTtcbiAgICAgIGxldCBmb3JtR3JvdXBUbXAgPSB0aGlzLmZiLmdyb3VwKGZvcm1Hcm91cE9iaik7XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLm9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgICAgICAgIGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgICAgICAgID8gaXRlbS5vbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwVG1wLmdldChpdGVtLm5hbWUpO1xuICAgICAgICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6K6i6ZiF77yM5LiN6LWwIGRlYm91bmNlVGltZVxuICAgICAgICAgIGlmIChkZWJvdW5jZU1zID4gMCkge1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUsIGZvcm1Hcm91cFRtcCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUsIGZvcm1Hcm91cFRtcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgKHRtcFZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0KFwibGluZXNcIikgYXMgRm9ybUFycmF5KS5pbnNlcnQoXG4gICAgICAgICh0bXBWYWxpZGF0ZUhkRm9ybUxpbmVzLmdldChcImxpbmVzXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHMubGVuZ3RoLFxuICAgICAgICBmb3JtR3JvdXBUbXAsXG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiB0bXBWYWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkO1xuICB9XG5cbiAgLy8g5pq06Zyy55qE5pa55rOV77yM55So5LqO6I635Y+W5omA5pyJ5pWw5o2uXG4gIHB1YmxpYyBnZXRMaW5lcygpIHtcbiAgICBsZXQgYWxsTGluZXMgPSBbXTtcbiAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5mb3JFYWNoKChmb3JtTGluZXNEYXRhSXRlbSkgPT4ge1xuICAgICAgbGV0IGZvcm1Hcm91cE9iajogYW55ID0ge307XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIOaWsOWinuihjCDliJ3lp4vmlbDmja7pg73kuLpudWxsXG4gICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLm5hbWVdID0gZm9ybUxpbmVzRGF0YUl0ZW1baXRlbS5uYW1lXTtcbiAgICAgIH0pO1xuICAgICAgZm9ybUdyb3VwT2JqLmxpbmVJbmRleCA9IGZvcm1MaW5lc0RhdGFJdGVtLmxpbmVJbmRleDtcbiAgICAgIGFsbExpbmVzLnB1c2goZm9ybUdyb3VwT2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWxsTGluZXM7XG4gIH1cblxuICAvLyDlhajlsYDmgKfnmoTmkJzntKLvvIjmtrXnm5bpobXpnaLkuIrmiYDmnInnmoTlj6/op4bmloflrZfvvIlcbiAgc2VhcmNoTGluZXMoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmxlbmd0aCA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlO1xuICAgIC8vIOWmguaenOayoeaciei+k+WFpeaQnOe0ouWtl+espuS4su+8jOWImeaYvuekuue8k+WtmOWGheeahOaJgOacieaVsOaNrlxuICAgIGlmICghdGhpcy5maWx0ZXJTdHIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJEYXRhID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0b3JlRGF0YSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuZmlsdGVyU3RyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNGaWx0ZXJEYXRhID0gdHJ1ZTtcbiAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUgPSBbXTtcblxuICAgIC8vIOagueaNruaQnOe0ouWtl+espuS4sui/h+a7pOaVsOaNrlxuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmZpbHRlcihcbiAgICAgIChkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuZm9ybUxpbmVzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGl0ZW0uaGlkZSAmJiBpdGVtLmNhblNlYXJjaCkgfHxcbiAgICAgICAgICAgICghaXRlbS5oaWRlICYmIGl0ZW0ubmFtZSAhPT0gXCJ1dWlkXCIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIml0ZW1cIiwgaXRlbS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpdGVtLm5hbWVdXG4gICAgICAgICAgICAgID8gZGF0YVtpdGVtLm5hbWVdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICAvLyDnvJPlrZjkuIDkuIvnrZvpgInlkI7nmoTooajljZXmlbDmja5cbiAgICB0aGlzLmZpbHRlclN0b3JlRm9ybUxpbmVzRGF0YSA9IGZpbHRlcmVkRGF0YTtcbiAgICAvLyDlpITnkIbnrZvpgInlpb3nmoTmlbDmja4g54S25ZCO6YeN5paw5riy5p+TXG4gICAgdGhpcy5mb3JtTGluZXNEYXRhID0gZmlsdGVyZWREYXRhO1xuICAgIHRoaXMuaW5pdCh0cnVlKTtcbiAgfVxuXG4gIHNldFN0b3JlRGF0YSgpIHtcbiAgICB0aGlzLmZvcm1MaW5lc0RhdGEgPSB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YTtcbiAgICB0aGlzLmluaXQodHJ1ZSk7XG4gIH1cblxuICBnZXRTdHlsZShsaW5lOiBGb3JtR3JvdXAsIGZvcm1JdGVtOiBhbnksIHdpZHRoOiBzdHJpbmcpIHtcbiAgICBsZXQgc3R5bGVPYmogPSB7XG4gICAgICBcIm1pbi13aWR0aFwiOiB3aWR0aCxcbiAgICB9O1xuICAgIGlmIChmb3JtSXRlbS5zdHlsZSkge1xuICAgICAgc3R5bGVPYmogPSB7IC4uLnN0eWxlT2JqLCAuLi5mb3JtSXRlbS5zdHlsZSB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBmb3JtSXRlbS5jb2xvck9wdGlvbiAmJlxuICAgICAgZm9ybUl0ZW0uY29sb3JPcHRpb24ubmFtZSAmJlxuICAgICAgbGluZS5nZXQoZm9ybUl0ZW0uY29sb3JPcHRpb24ubmFtZSkudmFsdWVcbiAgICApIHtcbiAgICAgIHN0eWxlT2JqID0ge1xuICAgICAgICAuLi5zdHlsZU9iaixcbiAgICAgICAgLi4ueyBjb2xvcjogbGluZS5nZXQoZm9ybUl0ZW0uY29sb3JPcHRpb24ubmFtZSkudmFsdWUgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzdHlsZU9iajtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzW1wiZm9ybUxpbmVzRGF0YVwiXSAmJlxuICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcImZvcm1MaW5lc0RhdGFcIl0uY3VycmVudFZhbHVlKSAhPT1cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcImZvcm1MaW5lc0RhdGFcIl0ucHJldmlvdXNWYWx1ZSlcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSAmJiB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgPSB0aGlzLmZvcm1MaW5lc0RhdGE7XG4gICAgICB9XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcImZvcm1MaW5lc1wiXSAmJlxuICAgICAgY2hhbmdlc1tcImZvcm1MaW5lc1wiXS5wcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbXCJmb3JtTGluZXNcIl0uY3VycmVudFZhbHVlKSAhPT1cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcImZvcm1MaW5lc1wiXS5wcmV2aW91c1ZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5pbml0Q29sU2V0dGluZ3MoKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcInRvdGFsT3B0aW9uXCJdICYmXG4gICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzW1widG90YWxPcHRpb25cIl0uY3VycmVudFZhbHVlKSAhPT1cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcInRvdGFsT3B0aW9uXCJdLnByZXZpb3VzVmFsdWUpXG4gICAgKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVRvdGFsKCk7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlVG90YWwoKSB7XG4gICAgLy8g6L+Z6YeM5aSE55CG5ZCI6K6h5pWw5o2uXG4gICAgaWYgKHRoaXMuc2hvd1RvdGFsKSB7XG4gICAgICB0aGlzLnRvdGFsT3B0aW9uTGlzdCA9IG5ldyBBcnJheShOdW1iZXIodGhpcy5jb2x1bW5zTnVtYmVyKSAtIDEpLmZpbGwoXCJcIik7XG4gICAgICB0aGlzLnRvdGFsT3B0aW9uLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uaW5zZXJ0SW5kZXggJiYgKGl0ZW0uaW5zZXJ0VmFsdWUgfHwgaXRlbS5pbnNlcnRWYWx1ZSA9PT0gMCkpIHtcbiAgICAgICAgICB0aGlzLnRvdGFsT3B0aW9uTGlzdFtpdGVtLmluc2VydEluZGV4IC0gMV0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogaXRlbS5pbnNlcnRWYWx1ZSxcbiAgICAgICAgICAgIGFsaWduOiBpdGVtLmFsaWduIHx8IFwibGVmdFwiLFxuICAgICAgICAgICAgc2hvd0RlY2ltYWw6IGl0ZW0uc2hvd0RlY2ltYWwgfHwgZmFsc2UsXG4gICAgICAgICAgICBwcmVzZXJ2ZU51bWJlcjogaXRlbS5wcmVzZXJ2ZU51bWJlciAhPSBudWxsID8gaXRlbS5wcmVzZXJ2ZU51bWJlciA6IDIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KGlzRWRpdDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gMTtcbiAgICAvLyDlvILluLjmjZXojrdcbiAgICBpZiAoIXRoaXMuY2hlY2tMaXN0KHRoaXMuZm9ybUxpbmVzKSkge1xuICAgICAgdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gICAgLy8g5aaC5p6c5rKh5pyJZm9ybUxpbmVzRGF0Ye+8jOWImeiupOS4uuaYr+aWsOWinlxuICAgIGlmIChcbiAgICAgICFpc0VkaXQgJiZcbiAgICAgICghdGhpcy5mb3JtTGluZXNEYXRhIHx8XG4gICAgICAgICh0aGlzLmZvcm1MaW5lc0RhdGEgJiYgdGhpcy5mb3JtTGluZXNEYXRhLmxlbmd0aCA9PT0gMCkpXG4gICAgKSB7XG4gICAgICB0aGlzLnRhYmxlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgLy8gYWxsb3dFbXB0eSDkuJTku4XliKDpmaTmjInpkq7vvJrkuI3oh6rliqjooaXnqbrooYxcbiAgICAgIGlmICghdGhpcy5pc1RydWx5RW1wdHlBbGxvd2VkKSB7XG4gICAgICAgIHRoaXMuYWRkRm9ybUxpbmUobnVsbCwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5zaG93Rm9ybSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOe8lui+kemAu+i+kVxuICAgICAgdGhpcy5hZGRGb3JtTGluZVdpdGhEYXRhKCk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChkYXRhKSA9PlxuICAgICAgdGhpcy5vbkhkRm9ybVZhbHVlQ2hhbmdlZChkYXRhKSxcbiAgICApO1xuICAgIHRoaXMub25IZEZvcm1WYWx1ZUNoYW5nZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDliJvlu7rooajljZVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxpbmVzOiB0aGlzLmZiLmFycmF5KFtdKSxcbiAgICB9KTtcbiAgICB0aGlzLm5ld0xpbmUgPSB0aGlzLm5ld0xpbmVJdGVtKCk7XG4gIH1cblxuICBkZWxheUp1bXBUb05leHRJbnB1dCgpIHtcbiAgICAvLyDlhbPpl63plK7nm5jmk43kvZzml7bvvIzpgInmi6nmoYbpgInkuK3lkI7kuI3oh6rliqjot7PovazliLDkuIvkuIDkuKrovpPlhaXmjqfku7ZcbiAgICBpZiAoIXRoaXMuZW5hYmxlS2V5Ym9hcmRPcGVyYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIOWumuS5ieepuueahG5ld0xpbmVJdGVtIOe7k+aehFxuICAgKi9cbiAgcHJpdmF0ZSBuZXdMaW5lSXRlbSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxpbmVGcm9tVmFsdWVzKG51bGwsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIOagueaNruihjOaVsOaNruWIm+W7uiBGb3JtR3JvdXDvvIjlkKvpmpDol4/lrZfmrrXjgIFzZWxlY3Qg55qEIGxhYmVsIOetiemZhOWxnuWtl+aute+8iVxuICAgKiBAcGFyYW0gZm9ybUxpbmVzRGF0YUl0ZW0g6KGM5pWw5o2u77yM56m66KGM5LygIG51bGxcbiAgICogQHBhcmFtIGlzRW1wdHlMaW5lIOaYr+WQpuepuuihjO+8iOW9seWTjeW/heWhq+agoemqjOinhOWIme+8jOS4juWOhuWPsumAu+i+keS/neaMgeS4gOiHtO+8iVxuICAgKiBAcGFyYW0gcmVnZW5lcmF0ZVJvd0lkIOaYr+WQpuW8uuWItueUn+aIkOaWsOihjCBpZO+8iOWkjeWItuihjOaXtuS9v+eUqO+8iVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVMaW5lRnJvbVZhbHVlcyhcbiAgICBmb3JtTGluZXNEYXRhSXRlbTogYW55LFxuICAgIGlzRW1wdHlMaW5lOiBib29sZWFuID0gZmFsc2UsXG4gICAgcmVnZW5lcmF0ZVJvd0lkOiBib29sZWFuID0gZmFsc2UsXG4gICk6IEZvcm1Hcm91cCB7XG4gICAgbGV0IGZvcm1Hcm91cE9iajogYW55ID0ge307XG4gICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0ubmFtZV0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgIGZvcm1MaW5lc0RhdGFJdGVtICE9IG51bGxcbiAgICAgICAgICAgICAgPyBmb3JtTGluZXNEYXRhSXRlbVtpdGVtLm5hbWVdXG4gICAgICAgICAgICAgIDogaXRlbS52YWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgfSxcbiAgICAgICAgaXNFbXB0eUxpbmVcbiAgICAgICAgICA/IGl0ZW0ucmVxdWlyZSAmJiAhaXRlbS5oaWRlXG4gICAgICAgICAgICA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIDogaXRlbS5yZXF1aXJlXG4gICAgICAgICAgICA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICk7XG4gICAgICBpZiAoaXRlbS5zZWxlY3RPcHRpb24gJiYgaXRlbS5zZWxlY3RPcHRpb24ubGFiZWwpIHtcbiAgICAgICAgZm9ybUdyb3VwT2JqW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgICBmb3JtTGluZXNEYXRhSXRlbSAhPSBudWxsXG4gICAgICAgICAgICA/IGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsXSB8fCBudWxsXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgW10sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyDnqLPlrprooYwgaWTvvJrmkJzntKLph43lu7rooajljZXlkI7nlKjkuo7kv53nlZnli77pgIlcbiAgICBjb25zdCByb3dJZCA9XG4gICAgICAhcmVnZW5lcmF0ZVJvd0lkICYmIGZvcm1MaW5lc0RhdGFJdGVtICYmIGZvcm1MaW5lc0RhdGFJdGVtLl9oZFJvd0lkXG4gICAgICAgID8gZm9ybUxpbmVzRGF0YUl0ZW0uX2hkUm93SWRcbiAgICAgICAgOiB0aGlzLmdlbmVyYXRlUm93SWQoKTtcbiAgICBmb3JtR3JvdXBPYmouX2hkUm93SWQgPSB0aGlzLmZiLmNvbnRyb2wocm93SWQpO1xuICAgIGlmIChmb3JtTGluZXNEYXRhSXRlbSAmJiAhZm9ybUxpbmVzRGF0YUl0ZW0uX2hkUm93SWQpIHtcbiAgICAgIGZvcm1MaW5lc0RhdGFJdGVtLl9oZFJvd0lkID0gcm93SWQ7XG4gICAgfVxuXG4gICAgLy8g5aSN5Yi25rqQ6KGM5LiK5aSa5L2Z55qE5a2X5q6177yI6ZqQ6JeP6ZmE5bGe5a2X5q6144CBc2VsZWN0TGlzdE5hbWUg562J77yJXG4gICAgaWYgKGZvcm1MaW5lc0RhdGFJdGVtKSB7XG4gICAgICBPYmplY3Qua2V5cyhmb3JtTGluZXNEYXRhSXRlbSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09IFwibGluZUluZGV4XCIgfHxcbiAgICAgICAgICBrZXkgPT09IFwiaXNIZEZvcm1MaW5lU2VhcmNoQWRkXCIgfHxcbiAgICAgICAgICBrZXkgPT09IFwiX2hkUm93SWRcIlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3JtR3JvdXBPYmpba2V5XSkge1xuICAgICAgICAgIGZvcm1Hcm91cE9ialtrZXldID0gdGhpcy5mYi5jb250cm9sKGZvcm1MaW5lc0RhdGFJdGVtW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3JtR3JvdXBPYmoubGluZUluZGV4ID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyAxLFxuICAgICAgW10sXG4gICAgKTtcbiAgICBmb3JtR3JvdXBPYmouaXNIZEZvcm1MaW5lU2VhcmNoQWRkID0gdGhpcy5mYi5jb250cm9sKHRoaXMuaXNGaWx0ZXJEYXRhLCBbXSk7XG4gICAgbGV0IGZvcm1Hcm91cFN1Ym1pdCA9IHRoaXMuZmIuZ3JvdXAoZm9ybUdyb3VwT2JqKTtcbiAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRlYm91bmNlTXMgPVxuICAgICAgICAgIGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZSAhPSBudWxsXG4gICAgICAgICAgICA/IGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwU3VibWl0LmdldChpdGVtLm5hbWUpO1xuICAgICAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEZvcm1MaW5lVHlwZS5TZWxlY3QgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlKdW1wVG9OZXh0SW5wdXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoaXRlbS5vbkNoYW5nZUV2ZW50LCB2YWx1ZSwgZm9ybUdyb3VwU3VibWl0KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8g5pyq6YWN572u5oiW5Li6IDDvvJrlkIzmraXorqLpmIXvvIzkuI3otbAgZGVib3VuY2VUaW1lXG4gICAgICAgIGlmIChkZWJvdW5jZU1zID4gMCkge1xuICAgICAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoZGVib3VuY2VNcykpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGhhbmRsZUNoYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGhhbmRsZUNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybUdyb3VwU3VibWl0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVMaW5lTnVtYmVyKCkge1xuICAgIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uZ2V0KFwibGluZUluZGV4XCIpLnNldFZhbHVlKGluZGV4ICsgMSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOe8lui+keeahOaXtuWAmeaVsOaNruWkhOeQhlxuICAgKi9cbiAgYWRkRm9ybUxpbmVXaXRoRGF0YSgpIHtcbiAgICB0aGlzLmZvcm1MaW5lc0RhdGEuZm9yRWFjaCgoZm9ybUxpbmVzRGF0YUl0ZW0pID0+IHtcbiAgICAgIHRoaXMubGluZXNGb3JtQXJyYXkuaW5zZXJ0KFxuICAgICAgICB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCxcbiAgICAgICAgdGhpcy5jcmVhdGVMaW5lRnJvbVZhbHVlcyhmb3JtTGluZXNEYXRhSXRlbSksXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMuY2FsY3VsYXRlTGluZU51bWJlcigpO1xuICAgIHRoaXMudGFibGVMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zaG93Rm9ybSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICog5Zyo5oyH5a6a6KGM5LiL5pa55paw5aKe56m66KGM77yb5LiN5LygIGFmdGVyTGluZSDliJnov73liqDliLDmnKvlsL5cbiAgICogQHBhcmFtIGFmdGVyTGluZSDlvZPliY3ooYwgRm9ybUdyb3Vw77yI5LiN6KaB5LygIGxpbmVJbmRleO+8jOmBv+WFjeW6j+WPt+WBj+enu+WvvOiHtOaPkumUmeS9jee9ru+8iVxuICAgKi9cbiAgYWRkRm9ybUxpbmUoYWZ0ZXJMaW5lPzogRm9ybUdyb3VwIHwgbnVsbCwgaXNGb2N1czogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBpbnNlcnRBdCA9IHRoaXMuZ2V0SW5zZXJ0SW5kZXhBZnRlcihhZnRlckxpbmUpO1xuICAgIGNvbnN0IG5ld0xpbmUgPSB0aGlzLm5ld0xpbmVJdGVtKCk7XG4gICAgdGhpcy5saW5lc0Zvcm1BcnJheS5pbnNlcnQoaW5zZXJ0QXQsIG5ld0xpbmUpO1xuICAgIHRoaXMuY2FsY3VsYXRlTGluZU51bWJlcigpO1xuICAgIHRoaXMuYWRkTGluZUV2ZW50LmVtaXQobmV3TGluZSk7XG4gICAgLy8g6Lez5Yiw5paw5aKe6KGM5omA5Zyo6aG177yM6YG/5YWN6aG156CB5byC5bi45pe255yL5LiN5Yiw5pWw5o2uXG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID1cbiAgICAgIE1hdGguZmxvb3IoaW5zZXJ0QXQgLyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSkgKyAxO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgICAgaWYgKGlzRm9jdXMpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEb21YID0gdGhpcy50b1BhZ2VMb2NhbFJvd0luZGV4KGluc2VydEF0KTtcbiAgICAgICAgdGhpcy5hY3RpdmVEb21ZID0gMDtcbiAgICAgICAgY29uc29sZS5sb2coXCLmiafooYzov4fnqIsxM1wiKTtcbiAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICog5aSN5Yi25b2T5YmN6KGM77ya5Zyo5b2T5YmN6KGM5LiL5pa55paw5aKe5LiA6KGM77yM5aSN5Yi25omA5pyJ5a2X5q615YC877yI5ZCr6ZqQ6JeP5a2X5q6177yJXG4gICAqL1xuICBjb3B5Rm9ybUxpbmUobGluZTogRm9ybUdyb3VwKSB7XG4gICAgY29uc3Qgc291cmNlSW5kZXggPSB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmluZGV4T2YobGluZSk7XG4gICAgaWYgKHNvdXJjZUluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBnZXRSYXdWYWx1ZSDljIXlkKsgZGlzYWJsZWQg5a2X5q6177yb5aSN5Yi26KGM5L2/55So5paw55qEIF9oZFJvd0lkXG4gICAgY29uc3Qgc291cmNlVmFsdWVzID0gbGluZS5nZXRSYXdWYWx1ZSgpO1xuICAgIGNvbnN0IGluc2VydEF0ID0gc291cmNlSW5kZXggKyAxO1xuICAgIHRoaXMubGluZXNGb3JtQXJyYXkuaW5zZXJ0KFxuICAgICAgaW5zZXJ0QXQsXG4gICAgICB0aGlzLmNyZWF0ZUxpbmVGcm9tVmFsdWVzKHNvdXJjZVZhbHVlcywgZmFsc2UsIHRydWUpLFxuICAgICk7XG4gICAgdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICB0aGlzLmFjdGl2ZURvbVggPSB0aGlzLnRvUGFnZUxvY2FsUm93SW5kZXgoaW5zZXJ0QXQpO1xuICAgICAgdGhpcy5hY3RpdmVEb21ZID0gMDtcbiAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgQE91dHB1dCgpIGRlbGV0ZUxpbmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICog5Yig6Zmk6KGMXG4gICAqIEBwYXJhbSBsaW5lT3JJbmRleCDooYwgRm9ybUdyb3Vw77yM5oiWIDEtYmFzZWQg55qEIGxpbmVJbmRleO+8iOWFvOWuuSByZXNldEZvcm3vvIlcbiAgICovXG4gIGRlbGV0ZUZvcm1MaW5lKGxpbmVPckluZGV4OiBGb3JtR3JvdXAgfCBudW1iZXIpIHtcbiAgICBsZXQgcmVtb3ZlQXQgPSAtMTtcbiAgICBpZiAodHlwZW9mIGxpbmVPckluZGV4ID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZW1vdmVBdCA9IGxpbmVPckluZGV4IC0gMTtcbiAgICB9IGVsc2UgaWYgKGxpbmVPckluZGV4KSB7XG4gICAgICByZW1vdmVBdCA9IHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMuaW5kZXhPZihsaW5lT3JJbmRleCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJpbmRleFwiLFxuICAgICAgdHlwZW9mIGxpbmVPckluZGV4ID09PSBcIm51bWJlclwiID8gbGluZU9ySW5kZXggOiByZW1vdmVBdCxcbiAgICApO1xuICAgIGlmIChyZW1vdmVBdCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8g5pyA5ZCO5LiA5p2h5pWw5o2u55qE5pe25YCZ6KaB5Yik5pat5LiA5LiLXG4gICAgaWYgKHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoID09PSAxICYmICF0aGlzLmFsbG93RW1wdHkpIHtcbiAgICAgIGlmICh0aGlzLmRlbGV0ZUxhc3RMaW5lRXZlbnQpIHtcbiAgICAgICAgdGhpcy5kZWxldGVMYXN0TGluZUV2ZW50LmVtaXQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3ZlZExpbmUgPSB0aGlzLmxpbmVzRm9ybUFycmF5LmF0KHJlbW92ZUF0KSBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5saW5lc0Zvcm1BcnJheS5yZW1vdmVBdChyZW1vdmVBdCk7XG4gICAgdGhpcy5yZW1vdmVMaW5lRnJvbVNlbGVjdGlvbihyZW1vdmVkTGluZSk7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNGaWx0ZXJEYXRhICYmXG4gICAgICB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzICYmXG4gICAgICB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgIXRoaXMuaXNUcnVseUVtcHR5QWxsb3dlZFxuICAgICkge1xuICAgICAgdGhpcy5hZGRGb3JtTGluZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDlvZPliY3pobXlt7Lml6DmlbDmja7ml7blm57pgIDpobXnoIHvvIzkuJTpobXnoIHmnIDlsI/kuLogMe+8iOmBv+WFjeWIoOepuuWQjuWPmOaIkCAwIOWvvOiHtOWGjea3u+WKoOeci+S4jeinge+8iVxuICAgICAgY29uc3QgbWF4UGFnZSA9IE1hdGgubWF4KFxuICAgICAgICAxLFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGggLyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID4gbWF4UGFnZSkge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPSBtYXhQYWdlO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqIOWcqOaMh+WumuihjOWQjuaWueeahOaPkuWFpeS4i+agh++8m+aXoOihjOWImei/veWKoOWIsOacq+WwviAqL1xuICBwcml2YXRlIGdldEluc2VydEluZGV4QWZ0ZXIoYWZ0ZXJMaW5lPzogRm9ybUdyb3VwIHwgbnVsbCk6IG51bWJlciB7XG4gICAgaWYgKCFhZnRlckxpbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgaWR4ID0gdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5pbmRleE9mKGFmdGVyTGluZSk7XG4gICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgMSA6IHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIOWFqOWxgOihjOS4i+agh+i9rOW9k+WJjemhteWGheeahOihjOS4i+agh++8iOS+m+iBmueEpueUqO+8iSAqL1xuICBwcml2YXRlIHRvUGFnZUxvY2FsUm93SW5kZXgoZ2xvYmFsSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIGdsb2JhbEluZGV4IC0gKHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCAtIDEpICogdGhpcy5wYWdpbmF0aW9uUGFnZVNpemVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHBhZ2VJbmRleENoYW5nZShldmVudDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gZXZlbnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgcGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID0gZXZlbnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIG9uSGRGb3JtVmFsdWVDaGFuZ2VkKGRhdGE/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0ZpbHRlckRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGluZXMgJiYgdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBsaW5lcyA9IGRhdGEubGluZXM7XG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhW2l0ZW1dID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLmZpbHRlclN0b3JlRm9ybUxpbmVzRGF0YVtpbmRleF0sXG4gICAgICAgICAgICAgIC4uLmxpbmVzW2luZGV4XSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGluZXMubGVuZ3RoID4gdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aCkge1xuICAgICAgICAgIC8vIOacieaWsOWinuaVsOaNrueahOaDheWGtVxuICAgICAgICAgIC8vIHN0ZXAgMTog5YWI5om+5paw5aKe55qEaW5kZXjkuIvmoIdcbiAgICAgICAgICBjb25zdCBnZXROb3dMaW5lcyA9IHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy5nZXRSYXdWYWx1ZSgpLmxpbmVzO1xuICAgICAgICAgIGxldCBhZGRJbmRleCA9IC0xO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2V0Tm93TGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChnZXROb3dMaW5lc1tpXS5pc0hkRm9ybUxpbmVTZWFyY2hBZGQpIHtcbiAgICAgICAgICAgICAgYWRkSW5kZXggPSBpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFkZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuc3BsaWNlKFxuICAgICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmVbYWRkSW5kZXggLSAxXSArIDEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIGdldE5vd0xpbmVzW2FkZEluZGV4XSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wdXNoKHRoaXMuZmlsdGVySW5kZXhTdG9yZVthZGRJbmRleCAtIDFdICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g5pyJ5Yig6Zmk5pWw5o2u55qE5oOF5Ya1XG4gICAgICAgICAgLy8gc3RlcCAxOuWFiOaJvuWIsOWIoOmZpOeahGluZGV45LiL5qCHXG4gICAgICAgICAgbGV0IGRlbGV0ZWRJbmRleCA9IC0xO1xuICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlZEluZGV4ID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAobGluZXNbaV0ubGluZUluZGV4IC0gY291bnQgPiAxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVsZXRlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gc3RlcCAyOiDliKDpmaTmgLvmlbDmja7kuK3nmoTlr7nlupTmlbDmja4sIOaKiuS4i+agh+aVsOe7hOWSjGxpbmVz6ZW/5bqm5a+56b2Q77yM5ZCM5pe25oqK5LiL5qCH5pWw57uE5ZyoZGVsZXRlZEluZGV45ZCO6Z2i55qE5YC85YWo6YO9LTFcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT09IHRoaXMuZmlsdGVySW5kZXhTdG9yZVtkZWxldGVkSW5kZXhdO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5zcGxpY2UoZGVsZXRlZEluZGV4LCAxKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChpID49IGRlbGV0ZWRJbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZVtpXS0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN0ZXAgMjog5rKh5pyJ5om+5YiwZGVsZXRlZEluZGV46K+05piO5Yig6Zmk5pON5L2c5Zyo5pyA5ZCO5LiA6KGMXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJJbmRleCA9XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZVt0aGlzLmZpbHRlckluZGV4U3RvcmUubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICE9PSBmaWx0ZXJJbmRleDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxpbmVzKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgPSBkYXRhLmxpbmVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGluZXMpIHtcbiAgICAgICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgPSBkYXRhLmxpbmVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOaAu+ihqOWNlVxuICAgIGlmICghdGhpcy5pc0ZpbHRlckRhdGEpIHtcbiAgICAgIHRoaXMuZm9ybVZhbGlkID0gdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5mb3JtVmFsaWQpIHtcbiAgICAgICAgLy8g5aaC5p6c5pW05L2T6KGo5Y2V5pivdHJ1Ze+8jOS4jeeuoeWtkOihqOWNleaYr+S7gOS5iO+8jOmDveWPmOaIkOWtkOihqOWNleeahOeKtuaAgVxuICAgICAgICB0aGlzLmZvcm1WYWxpZCA9IHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy52YWxpZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOWmguaenOaVtOS9k+ihqOWNleaYr2ZhbHNl77yaMeOAgeWtkOihqOWNleS4unRydWXvvIzpnIDopoHph43nrpfvvJsy44CB5a2Q6KGo5Y2V5Li6ZmFsc2XvvIznlKjlrZDooajljZXnirbmgIFcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy52YWxpZCkge1xuICAgICAgICAgIHRoaXMuZm9ybVZhbGlkID0gdGhpcy5pbm5lckdldFZhbGlkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mb3JtVmFsaWQgPSB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMudmFsaWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcyk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTGlzdChsaXN0OiBBcnJheTxGb3JtTGluZT4pOiBib29sZWFuIHtcbiAgICBpZiAoIWxpc3QgfHwgKGxpc3QgJiYgbGlzdC5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBuYW1lTGlzdCA9IFtdO1xuICAgIGxldCBzZWxlY3RPcHRpb25DaGVja0xpc3QgPSBbXTtcbiAgICBsaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIC8vIOagoemqjOWNlemhuemAieaLqeWZqFxuICAgICAgLy8gaWYgKGl0ZW0udHlwZSA9PT0gRm9ybUxpbmVUeXBlLlNlbGVjdCAmJiAoIWl0ZW0uc2VsZWN0TGlzdCB8fCAoaXRlbS5zZWxlY3RMaXN0ICYmIGl0ZW0uc2VsZWN0TGlzdC5sZW5ndGggPT09IDApKSkge1xuICAgICAgLy8gICB0aHJvdyAnZm9ybUxpbmVz57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2Y5Zyo5Y2V6aG56YCJ5oup5Zmo5rKh5pyJ5Lyg5YWl6YCJ6aG5ISdcbiAgICAgIC8vIH1cbiAgICAgIG5hbWVMaXN0LnB1c2goaXRlbS5uYW1lKTtcblxuICAgICAgLy8g5qCh6aqM5pyJb25TZWFyY2jnmoTlrZfmrrXnmoRzZWxlY3RPcHRpb27nmoR2YWx1ZeOAgWxhYmVs5piv5ZCm5ZyoZm9ybUxpbmXph4zpnaLpg73lrprkuYnkuoZcbiAgICAgIGlmIChpdGVtLm9uU2VhcmNoRXZlbnQgJiYgaXRlbS5zZWxlY3RPcHRpb24pIHtcbiAgICAgICAgc2VsZWN0T3B0aW9uQ2hlY2tMaXN0ID0gW107XG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaW5uZXJJdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5uZXJJdGVtLm5hbWUgPT09IGl0ZW0uc2VsZWN0T3B0aW9uLnZhbHVlIHx8XG4gICAgICAgICAgICBpbm5lckl0ZW0ubmFtZSA9PT0gaXRlbS5zZWxlY3RPcHRpb24ubGFiZWxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlbGVjdE9wdGlvbkNoZWNrTGlzdC5wdXNoKGlubmVySXRlbS5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc2VsZWN0T3B0aW9uQ2hlY2tMaXN0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICB0aHJvdyBgZm9ybUxpbmVz57uE5Lu25pWw5o2u5qC85byP5LiN6KeE6IyD77yM5a2X5q61JHtpdGVtLm5hbWV955qEc2VsZWN0T3B0aW9u55qEdmFsdWXjgIFsYWJlbOWtl+auteacquiDveWcqGZvcm1MaW5lc+S4reaJvuWIsOWvueW6lOWtl+aute+8gWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyDmoKHpqoxuYW1l5piv5ZCm6YeN5aSNXG4gICAgaWYgKFsuLi5uZXcgU2V0KG5hbWVMaXN0KV0ubGVuZ3RoICE9PSBsaXN0Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgXCJmb3JtTGluZXPnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZjlnKjph43lpI1uYW1l5YC8IVwiO1xuICAgIH1cbiAgICAvLyAuLi5tb3JlIGNoZWNrXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICAvLyDliKDpmaRcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy5kZWxldGVGb3JtTGluZShpKTtcbiAgICB9XG4gICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4ID0gMTtcbiAgfVxuXG4gIHB1YmxpYyBpbnB1dENsZWFuKGZvcm1JdGVtOiBhbnksIGxpbmU6IGFueSk6IHZvaWQge1xuICAgIGxpbmUuZ2V0KGZvcm1JdGVtLm5hbWUpLnNldFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdFZhbHVlKGlkOiBzdHJpbmcsIHJvd051bWJlcjogbnVtYmVyLCBjb2xOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RG9tOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGlkKTtcbiAgICBpbnB1dERvbS5zZWxlY3QoKTtcbiAgICB0aGlzLnNldEFjdGl2ZURvbUluRm9ybUxpbmVzKHJvd051bWJlciwgY29sTnVtYmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgdGV4dFdpZHRoQ2FjaGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcblxuICBpc1RleHRPdmVyZmxvdyh0ZXh0OiBzdHJpbmcsIG1heFdpZHRoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjYWNoZWRXaWR0aCA9IHRoaXMudGV4dFdpZHRoQ2FjaGVbdGV4dF07XG4gICAgaWYgKGNhY2hlZFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRXaWR0aCArIDE1ID49IG1heFdpZHRoO1xuICAgIH1cblxuICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICBzcGFuLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgIHNwYW4uc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgc3Bhbi5zdHlsZS53aGl0ZVNwYWNlID0gXCJub3dyYXBcIjtcbiAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gXCIxNHB4XCI7XG4gICAgc3Bhbi5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjsgLy8g5bCG5qC35byP5L+u5pS55Li6IGlubGluZS1ibG9ja1xuICAgIHNwYW4uaW5uZXJUZXh0ID0gdGV4dDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgIGNvbnN0IGlzT3ZlcmZsb3cgPSBzcGFuLm9mZnNldFdpZHRoICsgMTUgPj0gbWF4V2lkdGg7XG4gICAgdGhpcy50ZXh0V2lkdGhDYWNoZVt0ZXh0XSA9IHNwYW4ub2Zmc2V0V2lkdGg7XG4gICAgc3Bhbi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICByZXR1cm4gaXNPdmVyZmxvdztcbiAgfVxuXG4gIGp1ZGdlQ29sRW1wdHkoc3RyOiBhbnkpIHtcbiAgICBpZiAoc3RyIHx8IHN0ciA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiPOepuj5cIjtcbiAgICB9XG4gIH1cblxuICBqdWRnZVZhbHVlSXNOb3RFbXB0eShzdHI6IGFueSkge1xuICAgIGlmIChzdHIgPT09IG51bGwgJiYgc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG4iXX0=
3371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGQtZm9ybS1saW5lcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mYW50YXN5LW5nem9ycm8vIiwic291cmNlcyI6WyJoZC1mb3JtLWxpbmVzL2hkLWZvcm0tbGluZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxLQUFLLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxFQUNMLFlBQVksRUFDWixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIscUJBQXFCLEdBQ3RCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQVksWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0lBR2pGLHNDQUFzQyxHQUFHLEVBQUU7QUFFakQ7SUFnSEUsOEJBQ1UsRUFBZSxFQUNmLEdBQXNCLEVBQ3RCLG9CQUEwQztRQUhwRCxpQkFxQkM7UUFwQlMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUEzRzNC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Q25DLDZDQUErQjs7SUFDL0IsNENBQW1DOztJQUNuQyw2Q0FBb0M7O0lBQ3BDLGtEQUF5Qzs7SUFDekMsbURBQTBDOztJQUMxQyxvREFBd0U7Ozs7O0lBQ3hFLDJDQUFnQzs7Ozs7SUFDaEMsNENBQWtDOzs7OztJQUNsQywyQ0FBeUI7Ozs7OztJQUV6QiwrQ0FBeUM7O0lBOGlEekMsK0NBQStDOzs7OztJQW1SL0MsOENBQXVEOzs7OztJQTl6RHJELGtDQUF1Qjs7Ozs7SUFDdkIsbUNBQThCOzs7OztJQUM5QixvREFBa0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgKiBhcyBsb2NhbGZvcmFnZSBmcm9tIFwibG9jYWxmb3JhZ2VcIjtcbmltcG9ydCB7XG4gIElucHV0Qm9vbGVhbixcbiAgTnpEYXRlUGlja2VyQ29tcG9uZW50LFxuICBOeklucHV0TnVtYmVyQ29tcG9uZW50LFxuICBOelJhbmdlUGlja2VyQ29tcG9uZW50LFxuICBOelNlbGVjdENvbXBvbmVudCxcbiAgTnpUaW1lUGlja2VyQ29tcG9uZW50LFxufSBmcm9tIFwibmctem9ycm8tYW50ZFwiO1xuaW1wb3J0IHsgTnpGb3JtYXRFbWl0RXZlbnQgfSBmcm9tIFwibmctem9ycm8tYW50ZC9jb3JlXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBUb3RhbE9wdGlvbiB9IGZyb20gXCIuLi9oZC1kZXRhaWwtbGluZXMvaGQtZGV0YWlsLWxpbmVzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRyZWVHcmlkIH0gZnJvbSBcIi4uL2hkLXRhYmxlL2hkLXRhYmxlLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNlbGVjdE9wdGlvblRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uL21vZGVsL2NvbW1vbi10eXBlXCI7XG5pbXBvcnQgeyBDb21tb25TZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlL2NvbW1vbi1zZXNzaW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZvcm1MaW5lLCBGb3JtTGluZVR5cGUsIEZvcm1MaW5lc0NhY2hlT3B0aW9uIH0gZnJvbSBcIi4vaGQtZm9ybS1saW5lcy5zZXJ2aWNlXCI7XG5cbi8qKiDkuI4gYW50LXNlbGVjdCDpgInpobnpobnmsLTlubPlhoXovrnot53kuIDoh7TvvIznlKjkuo7ooajlpLTkuI7pgInpobnooYzlr7npvZAgKi9cbmNvbnN0IFNFTEVDVF9UQUJMRV9PUFRJT05fSE9SSVpPTlRBTF9QQURESU5HID0gMTI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJoZC1mb3JtLWxpbmVzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vaGQtZm9ybS1saW5lcy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vaGQtZm9ybS1saW5lcy5jb21wb25lbnQubGVzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgSGRGb3JtTGluZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGRyZW4oXCJmb3JtSW5wdXREb21cIikgZm9ybUlucHV0RG9tTGlzdCE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0xpbmVOdW1iZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgYWxsb3dFbXB0eTogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKSBkZWxldGVMYXN0TGluZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0tleWJvYXJkT3BlcmF0ZVRpcDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiog5piv5ZCm5ZCv55So6ZSu55uY5pa55ZCR6ZSuL0VudGVyIOWcqOWNleWFg+agvOmXtOi3s+i9rO+8jOm7mOiupOW8gOWQryAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZW5hYmxlS2V5Ym9hcmRPcGVyYXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHRhYmxlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiog5piv5ZCm5bGV56S66KGM5Yu+6YCJ5YiX77yM55So5LqO5aSW6YOo5om56YeP5pON5L2c5Yu+6YCJ6KGMICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93Q2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIOaYr+WQpuWxleekuuWIl+iuvue9ru+8iOm9v+i9ru+8ie+8jOm7mOiupOWFs+mXre+8m+mcgOimgeaXtumhtemdouaJi+W3pSBgW3Nob3dDb2xTZXR0aW5nc109XCJ0cnVlXCJg77yb5LuF6Z2eIGhpZGUg55qEIFZpZXdEb20g5Y+v6YWN572u77yM56aB5q2i5ouW5ou96LCD5bqPICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93Q29sU2V0dGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIOWIl+iuvue9rue8k+WtmCBrZXkg54mH5q6177yb5pyJ5YC85pe25oyB5LmF5YyW5YiwIEluZGV4ZWREQu+8jOaXoOWImeS7heW9k+WJjeS8muivneeUn+aViCAqL1xuICBASW5wdXQoKSB1dWlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1MaW5lczogQXJyYXk8Rm9ybUxpbmU+O1xuICAvLyDpkojlr7lmb3JtTGluZXPph4zpnaLmiYDmnInnmoRuYW1l77yMXG4gIEBJbnB1dCgpIGZvcm1MaW5lc0RhdGE6IGFueTtcbiAgQElucHV0KCkgb3BlcmF0ZUJ1dHRvbnM6IEFycmF5PHN0cmluZz4gPSBbXCJhZGRcIiwgXCJkZWxldGVcIl07IC8vIOaTjeS9nOWIl+aMiemSru+8mmFkZCAvIGRlbGV0ZSAvIGNvcHlcbiAgQElucHV0KCkgc2Nyb2xsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0geyB4OiBcIjFweFwiIH07XG4gIEBPdXRwdXQoKSBjaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqIOaWsOWinuepuuihjOWQjuaKm+WHuuivpeihjCBGb3JtR3JvdXDvvIjmiYvliqjmt7vliqDjgIHplK7nm5jot7PooYzoh6rliqjooaXooYznrYnvvIkgKi9cbiAgQE91dHB1dCgpIGFkZExpbmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPigpO1xuICAvKiog5Yu+6YCJ5Y+Y5YyW5pe25oqb5Ye65b2T5YmN5Yu+6YCJ6KGMIEZvcm1Hcm91cCDliJfooaggKi9cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwW10+KCk7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93RGVsZXRlQ29uZmlybTogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdpbmF0aW9uUGFnZUluZGV4OiBudW1iZXIgPSAxO1xuICBwYWdpbmF0aW9uUGFnZVNpemU6IG51bWJlciA9IDEwO1xuICB2YWxpZGF0ZUhkRm9ybUxpbmVzOiBGb3JtR3JvdXA7XG4gIG5ld0xpbmU6IGFueTtcbiAgaW5wdXRWYWx1ZTogc3RyaW5nO1xuXG4gIC8vIOWQiOiuoeWMuuWfn1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd1RvdGFsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRvdGFsT3B0aW9uOiBBcnJheTxUb3RhbE9wdGlvbj4gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uc051bWJlcjogbnVtYmVyIHwgc3RyaW5nID0gMDtcbiAgdG90YWxPcHRpb25MaXN0ID0gW107XG5cbiAgc2hvd0Zvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyU3RyOiBzdHJpbmc7XG4gIHN0b3JlRm9ybUxpbmVzRGF0YTogYW55ID0gW107IC8vIOe8k+WtmOeahOaAu+eahOihqOWNleaVsOaNrlxuICBmaWx0ZXJTdG9yZUZvcm1MaW5lc0RhdGE6IGFueSA9IFtdOyAvLyDnrZvpgInlh7rmnaXnmoTmlbDmja7liJfooahcbiAgZmlsdGVySW5kZXhTdG9yZTogQXJyYXk8bnVtYmVyPiA9IFtdOyAvLyDnrZvpgInlh7rmnaXnmoTmlbDmja7lnKjljp/lp4vliJfooajkuK3nmoTkuIvmoIdcbiAgaXNGaWx0ZXJEYXRhOiBib29sZWFuID0gZmFsc2U7IC8vIOaYr+WQpuaYr+W3sue7j+etm+mAiei/h+eahOaVsOaNrlxuICBmb3JtVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8g6KGo5Y2V5b2T5YmN55qE54q25oCBXG4gIC8qKiDli77pgInnmoTooYwgaWTvvIjot6jpobXjgIHmkJzntKLph43lu7rlkI7ku43kv53nlZnvvIkgKi9cbiAgcHJpdmF0ZSBzZWxlY3RlZFJvd0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDx7IGZuOiBhbnk7IGV2ZW50OiBhbnk7IGxpbmU6IGFueSB9PigpO1xuICBwcml2YXRlIGRlYm91bmNlVGltZW91dDogbnVtYmVyID0gMDsgLy8g6buY6K6k6Ziy5oqW5pe26Ze0XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBmb3JtSW5wdXREb21MaXN0U3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHsgZm46IGFueTsgZXZlbnQ6IGFueTsgbGluZTogYW55IH0+KCk7XG4gIHByaXZhdGUgb3BlbkNoYW5nZURlYm91bmNlVGltZW91dDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBvcGVuQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLy8g5b2T5YmN6aG155qEZG9t5LqM57u05pWw57uEXG4gIGNvbGxlY3REb21MaXN0OiBBcnJheTxcbiAgICBBcnJheTxcbiAgICAgIHwgRWxlbWVudFJlZlxuICAgICAgfCBOelNlbGVjdENvbXBvbmVudFxuICAgICAgfCBOeklucHV0TnVtYmVyQ29tcG9uZW50XG4gICAgICB8IE56RGF0ZVBpY2tlckNvbXBvbmVudFxuICAgICAgfCBOelJhbmdlUGlja2VyQ29tcG9uZW50XG4gICAgICB8IE56VGltZVBpY2tlckNvbXBvbmVudFxuICAgID5cbiAgPiA9IFtdO1xuICAvLyDlvZPliY3ogZrnhKbnmoRkb23lhYPntKDlnZDmoIdcbiAgYWN0aXZlRG9tWDogbnVtYmVyID0gbnVsbDtcbiAgYWN0aXZlRG9tWTogbnVtYmVyID0gbnVsbDtcbiAgYWN0aXZlRG9tOlxuICAgIHwgRWxlbWVudFJlZlxuICAgIHwgTnpTZWxlY3RDb21wb25lbnRcbiAgICB8IE56SW5wdXROdW1iZXJDb21wb25lbnRcbiAgICB8IE56RGF0ZVBpY2tlckNvbXBvbmVudFxuICAgIHwgTnpSYW5nZVBpY2tlckNvbXBvbmVudFxuICAgIHwgTnpUaW1lUGlja2VyQ29tcG9uZW50ID0gbnVsbDtcbiAgYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBDb250ZW50Q2hpbGQoXCJWaWV3RG9tUmlnaHRUZW1wbGF0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgVmlld0RvbVJpZ2h0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKiDlt6XlhbfmoI/lt6bkvqfoh6rlrprkuYnmjInpkq7vvIznlKjms5XlkIwgaGQtdGFibGUg55qEIHRhYmxlTGVmdEJ1dHRvbiAqL1xuICBAQ29udGVudENoaWxkKFwiZm9ybUxpbmVzTGVmdEJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZm9ybUxpbmVzTGVmdEJ1dHRvbjogVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqIOW3peWFt+agj+WPs+S+p+iHquWumuS5ieaMiemSru+8jOeUqOazleWQjCBoZC10YWJsZSDnmoQgdGFibGVSaWdodEJ1dHRvbiAqL1xuICBAQ29udGVudENoaWxkKFwiZm9ybUxpbmVzUmlnaHRCdXR0b25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGZvcm1MaW5lc1JpZ2h0QnV0dG9uOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKiog6KGo5qC85LiK5pa56Ieq5a6a5LmJ5Yy65Z+f77yI5aaC5Yu+6YCJ5o+Q56S677yJ77yM55So5rOV5ZCMIGhkLXRhYmxlIOeahCB0YWJsZVRvdGFsICovXG4gIEBDb250ZW50Q2hpbGQoXCJ0YWJsZVRvdGFsXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICB0YWJsZVRvdGFsOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vIOWIl+iuvue9rlxuICBpc0Ryb3Bkb3duVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93TGlzdE5vZGVzOiBib29sZWFuID0gZmFsc2U7XG4gIG5vd0xpc3ROb2RlczogQXJyYXk8VHJlZUdyaWQ+ID0gW107XG4gIGhpZGVMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICBjYW5jZWxOb3dMaXN0Tm9kZXM6IEFycmF5PFRyZWVHcmlkPiA9IFtdO1xuICBjYW5jZWxIaWRlTGlzdE5vZGVzOiBBcnJheTxUcmVlR3JpZD4gPSBbXTtcbiAgZm9ybUxpbmVzQ2FjaGVPcHRpb246IEZvcm1MaW5lc0NhY2hlT3B0aW9uID0gbmV3IEZvcm1MaW5lc0NhY2hlT3B0aW9uKCk7XG4gIHByaXZhdGUgbG9jYWxmb3JhZ2U6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgbG9jYWx0aW9uVG1wOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIHVzZXJTZXNzaW9uOiBhbnk7XG4gIC8qKiDmmK/lkKblt7Lku44gSW5kZXhlZERCIOivu+WIsOi/h+WIl+iuvue9rue8k+WtmO+8iOWQqyBjb2xzIOS4uuepuu+8iSAqL1xuICBwcml2YXRlIGNvbHNDYWNoZUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbW1vblNlc3Npb25TZXJ2aWNlOiBDb21tb25TZXNzaW9uU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGZvcmFnZSA9IGxvY2FsZm9yYWdlLmNyZWF0ZUluc3RhbmNlKHtcbiAgICAgIGRyaXZlcjogbG9jYWxmb3JhZ2UuSU5ERVhFRERCLFxuICAgICAgbmFtZTogXCJoZC1mc2NtXCIsXG4gICAgICB2ZXJzaW9uOiAxLjAsXG4gICAgICBzdG9yZU5hbWU6IFwiaGQtZnNjbS1zdG9yZVwiLFxuICAgIH0pO1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2hTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVvdXQpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmbiwgZXZlbnQsIGxpbmUgfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBsaW5lKSk7XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5vcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMub3BlbkNoYW5nZURlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgbGluZSB9KSA9PiB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgbGluZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2NhbHRpb25UbXAgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICBpZiAodGhpcy5sb2NhbHRpb25UbXApIHtcbiAgICAgIHRoaXMubG9jYWx0aW9uVG1wID0gdGhpcy5sb2NhbHRpb25UbXAucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcbiAgICB9XG4gICAgdGhpcy51c2VyU2Vzc2lvbiA9IHRoaXMuY29tbW9uU2Vzc2lvblNlcnZpY2UuZ2V0U2Vzc2lvbihcbiAgICAgIFwiX19qeV9hdXRob3JpemF0aW9uX3Nlc3Npb25fX1wiLFxuICAgICk7XG4gICAgaWYgKCF0aGlzLnVzZXJTZXNzaW9uKSB7XG4gICAgICB0aGlzLnVzZXJTZXNzaW9uID0geyB1c2VyQ29kZTogXCJkZXZcIiB9O1xuICAgIH1cbiAgICAvLyDnvJPlrZjkuIDkuIvmgLvnmoTooajljZXmlbDmja5cbiAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IHRoaXMuZm9ybUxpbmVzRGF0YTtcbiAgICB0aGlzLmluaXRDb2xTZXR0aW5ncygpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY29sbGVjdERvbURhdGEoKTtcbiAgICB0aGlzLmZvcm1JbnB1dERvbUxpc3RTdWIgPSB0aGlzLmZvcm1JbnB1dERvbUxpc3QuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybUlucHV0RG9tTGlzdFN1Yikge1xuICAgICAgdGhpcy5mb3JtSW5wdXREb21MaXN0U3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZvcm1MaW5lc0xlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGg7XG4gIH1cblxuICBnZXQgb3BlcmF0ZUNvbFdpZHRoKCkge1xuICAgIGNvbnN0IGNvdW50ID0gKHRoaXMub3BlcmF0ZUJ1dHRvbnMgfHwgW10pLmZpbHRlcigoYnRuKSA9PlxuICAgICAgW1wiYWRkXCIsIFwiY29weVwiLCBcImRlbGV0ZVwiXS5pbmNsdWRlcyhidG4pLFxuICAgICkubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLm1heChjb3VudCAqIDQwLCA4MCk7XG4gIH1cblxuICAvKiogYWxsb3dFbXB0eSDkuJTmk43kvZzliJfku4XmnInliKDpmaTml7bvvJrlhYHorrggMCDooYzvvIzliJ3lp4vljJbkuI7liKDoh7Pnqbrpg73kuI3oh6rliqjooaXnqbrooYwgKi9cbiAgZ2V0IGlzVHJ1bHlFbXB0eUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYnV0dG9ucyA9ICh0aGlzLm9wZXJhdGVCdXR0b25zIHx8IFtdKS5maWx0ZXIoKGJ0bikgPT5cbiAgICAgIFtcImFkZFwiLCBcImNvcHlcIiwgXCJkZWxldGVcIl0uaW5jbHVkZXMoYnRuKSxcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsbG93RW1wdHkgJiZcbiAgICAgIGJ1dHRvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICBidXR0b25zWzBdID09PSBcImRlbGV0ZVwiXG4gICAgKTtcbiAgfVxuXG4gIC8qKiDli77pgInliJflm7rlrprml7bvvIzluo/lj7fliJfnmoQgbGVmdCDlgY/np7sgKi9cbiAgZ2V0IGxpbmVOdW1iZXJMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLnNob3dDaGVja2JveCA/IFwiNDBweFwiIDogXCIwcHhcIjtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVSb3dJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgaGRfcm93XyR7RGF0ZS5ub3coKX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA5KX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSb3dJZChsaW5lOiBGb3JtR3JvdXApOiBzdHJpbmcge1xuICAgIGlmICghbGluZSB8fCAhbGluZS5nZXQoXCJfaGRSb3dJZFwiKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBsaW5lLmdldChcIl9oZFJvd0lkXCIpLnZhbHVlO1xuICB9XG5cbiAgLyoqIOW9k+WJjemhteeahOihjO+8iOeUqOS6juihqOWktOWFqOmAie+8jOS7heS9nOeUqOS6juW9k+WJjemhte+8jOi3qOmhteWLvumAieS7jeS/neeVme+8iSAqL1xuICBwcml2YXRlIGdldEN1cnJlbnRQYWdlTGluZXMoKTogRm9ybUdyb3VwW10ge1xuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCAtIDEpICogdGhpcy5wYWdpbmF0aW9uUGFnZVNpemU7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZTtcbiAgICByZXR1cm4gKHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMgYXMgRm9ybUdyb3VwW10pLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgaXNMaW5lQ2hlY2tlZChsaW5lOiBGb3JtR3JvdXApOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQobGluZSk7XG4gICAgcmV0dXJuICEhaWQgJiYgdGhpcy5zZWxlY3RlZFJvd0lkcy5oYXMoaWQpO1xuICB9XG5cbiAgaXNBbGxDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhZ2VMaW5lcyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VMaW5lcygpO1xuICAgIHJldHVybiAoXG4gICAgICBwYWdlTGluZXMubGVuZ3RoID4gMCAmJlxuICAgICAgcGFnZUxpbmVzLmV2ZXJ5KChsaW5lKSA9PiB0aGlzLmlzTGluZUNoZWNrZWQobGluZSkpXG4gICAgKTtcbiAgfVxuXG4gIGlzSW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYWdlTGluZXMgPSB0aGlzLmdldEN1cnJlbnRQYWdlTGluZXMoKTtcbiAgICBjb25zdCBjaGVja2VkQ291bnQgPSBwYWdlTGluZXMuZmlsdGVyKChsaW5lKSA9PlxuICAgICAgdGhpcy5pc0xpbmVDaGVja2VkKGxpbmUpLFxuICAgICkubGVuZ3RoO1xuICAgIHJldHVybiBjaGVja2VkQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA8IHBhZ2VMaW5lcy5sZW5ndGg7XG4gIH1cblxuICBvbkFsbENoZWNrZWQoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZ2V0Q3VycmVudFBhZ2VMaW5lcygpLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChsaW5lKTtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0lkcy5hZGQoaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0lkcy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpO1xuICB9XG5cbiAgb25MaW5lQ2hlY2tlZENoYW5nZShsaW5lOiBGb3JtR3JvdXAsIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQobGluZSk7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd0lkcy5hZGQoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmRlbGV0ZShpZCk7XG4gICAgfVxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5nZXRTZWxlY3RlZExpbmVzKCkpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaW5lRnJvbVNlbGVjdGlvbihsaW5lOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQobGluZSk7XG4gICAgaWYgKGlkICYmIHRoaXMuc2VsZWN0ZWRSb3dJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd0lkcy5kZWxldGUoaWQpO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZhbHVlc1RvTGluZShcbiAgICBsaW5lOiBGb3JtR3JvdXAsXG4gICAgdmFsdWVzOiB7IFtmaWVsZDogc3RyaW5nXTogYW55IH0sXG4gICAgZW1pdEV2ZW50OiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbGV0IGNvbnRyb2wgPSBsaW5lLmdldChrZXkpO1xuICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgIGxpbmUuYWRkQ29udHJvbChrZXksIHRoaXMuZmIuY29udHJvbCh2YWx1ZXNba2V5XSkpO1xuICAgICAgICBjb250cm9sID0gbGluZS5nZXQoa2V5KTtcbiAgICAgIH1cbiAgICAgIC8vIOmdmem7mOi1i+WAvO+8jOmBv+WFjSB2YWx1ZUNoYW5nZXMgLyBET00gbWF4bGVuZ3RoIOWbnuWGmeaKiuagoemqjOaAgeaJk+S5sVxuICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZXNba2V5XSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZvcm1JdGVtID0gdGhpcy5mb3JtTGluZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBrZXkpO1xuICAgICAgICBpZiAoZm9ybUl0ZW0gJiYgZm9ybUl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZvcm1JdGVtLm9uQ2hhbmdlRXZlbnQsIHZhbHVlc1trZXldLCBsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDku4XlnKjnlKjmiLfkuqTkupLlkI7jgIHkuJTlvZPliY3lgLznoa7lrp7kuLrnqbrnmoQgcmVxdWlyZWQg6ZSZ6K+v5pe25bGV56S657qi5qGG77yMXG4gICAqIOmBv+WFjeaJuemHj+i1i+WAvOaXtiBuZy16b3JybyDmrovnlZnjgIzkuI3og73kuLrnqbrjgI3mj5DnpLpcbiAgICovXG4gIGdldENvbnRyb2xWYWxpZGF0ZVN0YXR1cyhsaW5lOiBGb3JtR3JvdXAsIGZvcm1JdGVtOiBGb3JtTGluZSk6IHN0cmluZyB7XG4gICAgY29uc3QgY29udHJvbCA9IGxpbmUuZ2V0KGZvcm1JdGVtLm5hbWUpO1xuICAgIGlmICghY29udHJvbCB8fCBjb250cm9sLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgZW1wdHkgPVxuICAgICAgY29udHJvbC52YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBjb250cm9sLnZhbHVlID09PSBcIlwiO1xuICAgIGlmIChcbiAgICAgIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZCkgJiZcbiAgICAgIGVtcHR5ICYmXG4gICAgICBjb250cm9sLmhhc0Vycm9yKFwicmVxdWlyZWRcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBcImVycm9yXCI7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLyoqIOeUqOaIt+i+k+WFpeaXtuaMiSBtYXhMZW5ndGgg5oiq5pat77yI5LiN5L2/55So5Y6f55SfIG1heGxlbmd0aO+8jOmBv+WFjeW5suaJsOeoi+W6j+WMlui1i+WAvO+8iSAqL1xuICBsaW1pdElucHV0TGVuZ3RoKGV2ZW50OiBFdmVudCwgbGluZTogRm9ybUdyb3VwLCBmb3JtSXRlbTogRm9ybUxpbmUpOiB2b2lkIHtcbiAgICBpZiAoIWZvcm1JdGVtIHx8ICFmb3JtSXRlbS5tYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudmFsdWUgJiYgaW5wdXQudmFsdWUubGVuZ3RoID4gZm9ybUl0ZW0ubWF4TGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0ID0gaW5wdXQudmFsdWUuc2xpY2UoMCwgZm9ybUl0ZW0ubWF4TGVuZ3RoKTtcbiAgICAgIGlucHV0LnZhbHVlID0gbmV4dDtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBsaW5lLmdldChmb3JtSXRlbS5uYW1lKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobmV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIOiOt+WPluW9k+WJjeWLvumAieS4lOW3suaMgui9veeahOihjCBGb3JtR3JvdXDvvIjlvZPliY3nrZvpgInnu5PmnpzlhoXvvIkgKi9cbiAgcHVibGljIGdldFNlbGVjdGVkTGluZXMoKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiAodGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scyBhcyBGb3JtR3JvdXBbXSkuZmlsdGVyKChsaW5lKSA9PlxuICAgICAgdGhpcy5pc0xpbmVDaGVja2VkKGxpbmUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5YWo6YOo5Yu+6YCJ6KGM5pWw5o2u77yI5ZCr6Leo6aG144CB5pCc57Si5ZCO5pyq5bGV56S65L2G5LuN5Yu+6YCJ55qE6KGM77yJXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VsZWN0ZWRMaW5lc0RhdGEoKTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IG1vdW50ZWRCeUlkID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAodGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scyBhcyBGb3JtR3JvdXBbXSkuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKGxpbmUpO1xuICAgICAgaWYgKGlkICYmIHRoaXMuc2VsZWN0ZWRSb3dJZHMuaGFzKGlkKSkge1xuICAgICAgICBtb3VudGVkQnlJZC5zZXQoaWQsIGxpbmUuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAodGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgfHwgW10pLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gZGF0YSAmJiBkYXRhLl9oZFJvd0lkO1xuICAgICAgaWYgKGlkICYmIHRoaXMuc2VsZWN0ZWRSb3dJZHMuaGFzKGlkKSkge1xuICAgICAgICByZXN1bHQucHVzaChtb3VudGVkQnlJZC5oYXMoaWQpID8gbW91bnRlZEJ5SWQuZ2V0KGlkKSA6IHsgLi4uZGF0YSB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIOWFnOW6le+8muWImuaWsOWinuOAgeWwmuacqui/myBzdG9yZSDnmoTli77pgInooYxcbiAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFyZXN1bHQuc29tZSgoaXRlbSkgPT4gaXRlbSAmJiBpdGVtLl9oZFJvd0lkID09PSBpZCkgJiZcbiAgICAgICAgbW91bnRlZEJ5SWQuaGFzKGlkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG1vdW50ZWRCeUlkLmdldChpZCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICog5om56YeP5aGr5YWF5Yu+6YCJ6KGM5a2X5q6177yI5pSv5oyB6Leo6aG144CB5pCc57Si5ZCO5pyq5bGV56S65L2G5LuN5Yu+6YCJ55qE6KGM77yJXG4gICAqIEBwYXJhbSB2YWx1ZXMg6KaB5YaZ5YWl55qE5a2X5q6177yM5aaCIHsgcmVtYXJrOiAn5om56YeP5aSH5rOoJywgcHJpY2U6IDEwIH1cbiAgICogQHBhcmFtIGVtaXRFdmVudCDmmK/lkKbop6blj5EgdmFsdWVDaGFuZ2VzIC8gb25DaGFuZ2VFdmVudO+8jOm7mOiupCB0cnVlXG4gICAqIEByZXR1cm5zIOWunumZheWhq+WFheeahOihjOaVsFxuICAgKi9cbiAgcHVibGljIGJhdGNoRmlsbFNlbGVjdGVkKFxuICAgIHZhbHVlczogeyBbZmllbGQ6IHN0cmluZ106IGFueSB9LFxuICAgIGVtaXRFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICk6IG51bWJlciB7XG4gICAgaWYgKCF2YWx1ZXMgfHwgdGhpcy5zZWxlY3RlZFJvd0lkcy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3QgbW91bnRlZEJ5SWQgPSBuZXcgTWFwPHN0cmluZywgRm9ybUdyb3VwPigpO1xuICAgICh0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdKS5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQobGluZSk7XG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgbW91bnRlZEJ5SWQuc2V0KGlkLCBsaW5lKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgdGhpcy5zZWxlY3RlZFJvd0lkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IG1vdW50ZWRCeUlkLmdldChpZCk7XG4gICAgICBpZiAobGluZSkge1xuICAgICAgICB0aGlzLmFwcGx5VmFsdWVzVG9MaW5lKGxpbmUsIHZhbHVlcywgZW1pdEV2ZW50KTtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8g5b2T5YmN562b6YCJL+mhtemdouacquaMgui9ve+8muebtOaOpeaUueaAu+aVsOaNru+8jOmAgOWHuuaQnOe0ouWQjuWPr+ingVxuICAgICAgY29uc3Qgc3RvcmVJdGVtID0gKHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhIHx8IFtdKS5maW5kKFxuICAgICAgICAoZGF0YSkgPT4gZGF0YSAmJiBkYXRhLl9oZFJvd0lkID09PSBpZCxcbiAgICAgICk7XG4gICAgICBpZiAoc3RvcmVJdGVtKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgc3RvcmVJdGVtW2tleV0gPSB2YWx1ZXNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgLyoqIOa4heepuuWLvumAiSAqL1xuICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dJZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93SWRzLmNsZWFyKCk7XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gIH1cblxuICAvKiog5b2T5YmN5Yu+6YCJ5pWw6YeP77yI5ZCr6Leo6aG144CB5pCc57Si5L+d55WZ77yJICovXG4gIHB1YmxpYyBnZXRTZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dJZHMuc2l6ZTtcbiAgfVxuXG4gIC8qKiDmmK/lkKblsZXnpLrpobbpg6jlt6XlhbfmoI8gKi9cbiAgZ2V0IHNob3dUb29sYmFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMuc2hvd1NlYXJjaCB8fFxuICAgICAgISF0aGlzLnNob3dDaGVja2JveCB8fFxuICAgICAgISF0aGlzLmZvcm1MaW5lc0xlZnRCdXR0b24gfHxcbiAgICAgICEhdGhpcy5mb3JtTGluZXNSaWdodEJ1dHRvbiB8fFxuICAgICAgdGhpcy5zaG93Q29sU2V0dGluZ3NCdXR0b25cbiAgICApO1xuICB9XG5cbiAgLyoqIOaYr+WQpuWxleekuuWIl+iuvue9rum9v+i9ru+8iOacieWPr+mFjee9riBWaWV3RG9tIOaXtu+8iSAqL1xuICBnZXQgc2hvd0NvbFNldHRpbmdzQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMuc2hvd0NvbFNldHRpbmdzICYmIHRoaXMuZ2V0Q29uZmlndXJhYmxlRm9ybUxpbmVzKCkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICAvKiog5YiX5piv5ZCm5riy5p+T77yaaGlkZSDmsLjkuI3lsZXnpLrvvJtWaWV3RG9tIOWPlyBpc1Nob3cg5o6n5Yi2ICovXG4gIGlzQ29sdW1uVmlzaWJsZShpdGVtOiBGb3JtTGluZSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSB8fCBpdGVtLmhpZGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gRm9ybUxpbmVUeXBlLlZpZXdEb20pIHtcbiAgICAgIHJldHVybiBpdGVtLmlzU2hvdyAhPT0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIOWPr+i/m+WFpeWIl+iuvue9rueahOWtl+aute+8mumdniBoaWRlIOeahCBWaWV3RG9tICovXG4gIGdldENvbmZpZ3VyYWJsZUZvcm1MaW5lcygpOiBGb3JtTGluZVtdIHtcbiAgICBpZiAoIXRoaXMuZm9ybUxpbmVzIHx8ICF0aGlzLmZvcm1MaW5lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9ybUxpbmVzLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IEZvcm1MaW5lVHlwZS5WaWV3RG9tICYmICFpdGVtLmhpZGUsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FjaGVLZXkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VyQ29kZSA9XG4gICAgICAodGhpcy51c2VyU2Vzc2lvbiAmJiB0aGlzLnVzZXJTZXNzaW9uLnVzZXJDb2RlKSB8fCBcImRldlwiO1xuICAgIHJldHVybiAoXG4gICAgICBcImhkLWZvcm0tbGluZXNfXCIgK1xuICAgICAgdXNlckNvZGUgK1xuICAgICAgXCJfXCIgK1xuICAgICAgdGhpcy5sb2NhbHRpb25UbXAgK1xuICAgICAgXCJfXCIgK1xuICAgICAgdGhpcy51dWlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbFNldHRpbmdzKCk6IHZvaWQge1xuICAgIHRoaXMuY29sc0NhY2hlTG9hZGVkID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnNob3dDb2xTZXR0aW5ncyB8fCAhdGhpcy5mb3JtTGluZXMgfHwgIXRoaXMuZm9ybUxpbmVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRDb2xzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy51dWlkKSB7XG4gICAgICB0aGlzLnNldENvbHMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2NhbGZvcmFnZVxuICAgICAgLnJlYWR5KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2NhbGZvcmFnZVxuICAgICAgICAgIC5nZXRJdGVtKHRoaXMuZ2V0Q2FjaGVLZXkoKSlcbiAgICAgICAgICAudGhlbigodmFsdWU6IEZvcm1MaW5lc0NhY2hlT3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5jb2xzKSkge1xuICAgICAgICAgICAgICB0aGlzLmZvcm1MaW5lc0NhY2hlT3B0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICAgIHRoaXMuY29sc0NhY2hlTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybUxpbmVzQ2FjaGVPcHRpb24gPSBuZXcgRm9ybUxpbmVzQ2FjaGVPcHRpb24oKTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xzQ2FjaGVMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0Q29scygpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUxpbmVzQ2FjaGVPcHRpb24gPSBuZXcgRm9ybUxpbmVzQ2FjaGVPcHRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY29sc0NhY2hlTG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldENvbHMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJsb2NhbGZvcmFnZeWKoOi9veW8guW4uFwiLCBlKTtcbiAgICAgICAgdGhpcy5mb3JtTGluZXNDYWNoZU9wdGlvbiA9IG5ldyBGb3JtTGluZXNDYWNoZU9wdGlvbigpO1xuICAgICAgICB0aGlzLmNvbHNDYWNoZUxvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldENvbHMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDb2xzQ2FjaGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sc0NhY2hlTG9hZGVkICYmIEFycmF5LmlzQXJyYXkodGhpcy5mb3JtTGluZXNDYWNoZU9wdGlvbi5jb2xzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZUZvcm1MaW5lc0NhY2hlT3B0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51dWlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9jYWxmb3JhZ2Uuc2V0SXRlbSh0aGlzLmdldENhY2hlS2V5KCksIHRoaXMuZm9ybUxpbmVzQ2FjaGVPcHRpb24pO1xuICB9XG5cbiAgLyoqIOaMiSBmb3JtTGluZXMg5Y6f5aeL6aG65bqP5o6S5YiX6IqC54K577yI56aB5q2i6LCD5bqP5pe25L+d5oyB5rqQ6aG65bqP77yJICovXG4gIHByaXZhdGUgc29ydE5vZGVzQnlGb3JtTGluZXNPcmRlcihub2RlczogVHJlZUdyaWRbXSk6IFRyZWVHcmlkW10ge1xuICAgIGNvbnN0IG9yZGVyID0gdGhpcy5nZXRDb25maWd1cmFibGVGb3JtTGluZXMoKS5tYXAoKGYpID0+IGYubmFtZSk7XG4gICAgcmV0dXJuIG5vZGVzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgcmV0dXJuIG9yZGVyLmluZGV4T2YoYS5rZXkpIC0gb3JkZXIuaW5kZXhPZihiLmtleSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRDb2xzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0xpc3ROb2RlcyA9IGZhbHNlO1xuICAgIHRoaXMubm93TGlzdE5vZGVzID0gW107XG4gICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gW107XG4gICAgY29uc3QgY29uZmlndXJhYmxlID0gdGhpcy5nZXRDb25maWd1cmFibGVGb3JtTGluZXMoKTtcbiAgICBjb25zdCBoYXNDYWNoZSA9IHRoaXMuaGFzQ29sc0NhY2hlKCk7XG4gICAgY29uZmlndXJhYmxlLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChoYXNDYWNoZSkge1xuICAgICAgICBlbGVtZW50LmlzU2hvdyA9IHRoaXMuZm9ybUxpbmVzQ2FjaGVPcHRpb24uY29scy5pbmNsdWRlcyhlbGVtZW50Lm5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzU2hvdyA9PT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQuaXNTaG93ID09PSBudWxsKSB7XG4gICAgICAgIGVsZW1lbnQuaXNTaG93ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5vZGU6IFRyZWVHcmlkID0ge1xuICAgICAgICB0aXRsZTogZWxlbWVudC5sYWJlbCxcbiAgICAgICAga2V5OiBlbGVtZW50Lm5hbWUsXG4gICAgICAgIGNoZWNrZWQ6IGVsZW1lbnQuaXNTaG93ICE9PSBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIGlmIChlbGVtZW50LmlzU2hvdyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMucHVzaChub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZUxpc3ROb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubm93TGlzdE5vZGVzID0gdGhpcy5zb3J0Tm9kZXNCeUZvcm1MaW5lc09yZGVyKHRoaXMubm93TGlzdE5vZGVzKTtcbiAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSB0aGlzLnNvcnROb2Rlc0J5Rm9ybUxpbmVzT3JkZXIodGhpcy5oaWRlTGlzdE5vZGVzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0xpc3ROb2RlcyA9IHRydWU7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGNhbmNlbERyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmhpZGVMaXN0Tm9kZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FuY2VsSGlkZUxpc3ROb2RlcykpO1xuICAgIHRoaXMubm93TGlzdE5vZGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbmNlbE5vd0xpc3ROb2RlcykpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY29uZmlybURyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsSGlkZUxpc3ROb2RlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5oaWRlTGlzdE5vZGVzKSk7XG4gICAgdGhpcy5jYW5jZWxOb3dMaXN0Tm9kZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubm93TGlzdE5vZGVzKSk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzdWJtaXRHcmlkcygpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmxlTmFtZXMgPSB0aGlzLm5vd0xpc3ROb2Rlcy5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KTtcbiAgICB0aGlzLmdldENvbmZpZ3VyYWJsZUZvcm1MaW5lcygpLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgIGxpbmUuaXNTaG93ID0gdmlzaWJsZU5hbWVzLmluY2x1ZGVzKGxpbmUubmFtZSk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtTGluZXNDYWNoZU9wdGlvbi5jb2xzID0gdmlzaWJsZU5hbWVzO1xuICAgIHRoaXMuY29sc0NhY2hlTG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVGb3JtTGluZXNDYWNoZU9wdGlvbigpO1xuICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiDli77pgIkv5Y+W5raI77ya5LuF5Zyo5pi+56S6L+makOiXj+S4pOe7hOmXtOenu+WKqO+8jOS4jeaUueWPmCBmb3JtTGluZXMg6aG65bqPICovXG4gIGNoZWNrQWN0aW9uKGV2ZW50OiBOekZvcm1hdEVtaXRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5ub2RlLm9yaWdpbi5jaGVja2VkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5oaWRlTGlzdE5vZGVzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBldmVudC5ub2RlLm9yaWdpbi5rZXk7XG4gICAgICB9KTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBub2RlLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gdGhpcy5oaWRlTGlzdE5vZGVzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5rZXkgIT09IGV2ZW50Lm5vZGUub3JpZ2luLmtleTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ub3dMaXN0Tm9kZXMgPSB0aGlzLnNvcnROb2Rlc0J5Rm9ybUxpbmVzT3JkZXIoXG4gICAgICAgIHRoaXMubm93TGlzdE5vZGVzLmNvbmNhdChbbm9kZV0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVtcG9yYXJ5Tm9kZUxpc3QgPSB0aGlzLmhpZGVMaXN0Tm9kZXMuc2xpY2UoMCk7XG4gICAgICB0aGlzLm5vd0xpc3ROb2Rlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmtleSA9PT0gZXZlbnQubm9kZS5vcmlnaW4ua2V5KSB7XG4gICAgICAgICAgY29uc3QgaW5uZXJJdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XG4gICAgICAgICAgaW5uZXJJdGVtLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICB0ZW1wb3JhcnlOb2RlTGlzdC5wdXNoKGlubmVySXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5oaWRlTGlzdE5vZGVzID0gdGhpcy5zb3J0Tm9kZXNCeUZvcm1MaW5lc09yZGVyKHRlbXBvcmFyeU5vZGVMaXN0KTtcbiAgICAgIHRoaXMubm93TGlzdE5vZGVzID0gdGhpcy5ub3dMaXN0Tm9kZXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmtleSAhPT0gZXZlbnQubm9kZS5vcmlnaW4ua2V5O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0QWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkb21MaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICBcIi5hbnQtc2VsZWN0LWRyb3Bkb3duLmhkLXNlbGVjdC10YWJsZVwiLFxuICAgICAgICApO1xuICAgICAgICBpZiAoZG9tTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZG9tID0gZG9tTGlzdFswXTtcbiAgICAgICAgICBkb21cbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFwiLmhkLW9wdGlvbi1oZWFkZXJcIilcbiAgICAgICAgICAgIC5mb3JFYWNoKChoZWFkZXIpID0+IGhlYWRlci5yZW1vdmUoKSk7XG4gICAgICAgICAgY29uc3Qgb2xkSW5kZXggPSB0aGlzLmdldE9sZERvbUluZGV4KHRoaXMuYWN0aXZlRG9tWSwgdGhpcy5mb3JtTGluZXMpO1xuICAgICAgICAgIGRvbS5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURPTVN0cnVjdHVyZShcbiAgICAgICAgICAgICAgdGhpcy5mb3JtTGluZXNbb2xkSW5kZXhdLFxuICAgICAgICAgICAgICB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLnNsaWNlKFxuICAgICAgICAgICAgICAgICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplLFxuICAgICAgICAgICAgICAgICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplICtcbiAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplLFxuICAgICAgICAgICAgICApW3RoaXMuYWN0aXZlRG9tWF0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZG9tLmZpcnN0Q2hpbGQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0VGFibGVDb2x1bW5TdHlsZShjb2x1bW46IFNlbGVjdE9wdGlvblRhYmxlQ29sdW1uKToge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSB7XG4gICAgaWYgKCFjb2x1bW4gfHwgIWNvbHVtbi53aWR0aCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IFwidW5zZXRcIiB9O1xuICAgIH1cbiAgICByZXR1cm4geyB3aWR0aDogYCR7Y29sdW1uLndpZHRofXB4YCB9O1xuICB9XG5cbiAgY3JlYXRlRE9NU3RydWN0dXJlKGZvcm1JdGVtLCBsaW5lKSB7XG4gICAgLy8g5Yib5bu65aSW6YOoIGRpdlxuICAgIGNvbnN0IGhkT3B0aW9uSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBoZE9wdGlvbkhlYWRlci5jbGFzc05hbWUgPSBcImhkLW9wdGlvbi1oZWFkZXJcIjtcbiAgICBoZE9wdGlvbkhlYWRlci5zdHlsZS5wYWRkaW5nTGVmdCA9IGAke1NFTEVDVF9UQUJMRV9PUFRJT05fSE9SSVpPTlRBTF9QQURESU5HfXB4YDtcbiAgICBoZE9wdGlvbkhlYWRlci5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHtTRUxFQ1RfVEFCTEVfT1BUSU9OX0hPUklaT05UQUxfUEFERElOR31weGA7XG5cbiAgICAvLyDmo4Dmn6XmnaHku7bvvIznoa7lrprmmK/lkKbopoHliJvlu7rlrZDlhYPntKBcbiAgICAvLyBjb25zdCBzZWxlY3RMaXN0TGVuZ3RoID0gKGZvcm1JdGVtICYmIGZvcm1JdGVtLnNlbGVjdE9wdGlvbiAmJiBmb3JtSXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdCAmJiBmb3JtSXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdC5sZW5ndGgpIHx8IDA7XG4gICAgLy8gaWZcbiAgICAvLyBjb25zdCBsaW5lVmFsdWVMZW5ndGggPSAobGluZS5nZXQoZm9ybUl0ZW0uc2VsZWN0T3B0aW9uLnNlbGVjdExpc3ROYW1lKSAmJiBsaW5lLmdldChmb3JtSXRlbS5zZWxlY3RPcHRpb24uc2VsZWN0TGlzdE5hbWUpLnZhbHVlICYmIGxpbmUuZ2V0KGZvcm1JdGVtLnNlbGVjdE9wdGlvbi5zZWxlY3RMaXN0TmFtZSkudmFsdWUubGVuZ3RoKSB8fCAwO1xuXG4gICAgLy8gaWYgKHNlbGVjdExpc3RMZW5ndGggPiAwIHx8IGxpbmVWYWx1ZUxlbmd0aCA+IDApIHtcbiAgICAvLyDpgY3ljoYgdGFibGVDb2x1bW5zIOWIm+W7uuWGhemDqOWIlyBkaXZcbiAgICBmb3JtSXRlbS5zZWxlY3RPcHRpb24udGFibGVDb2x1bW5zLmZvckVhY2goKHNlbGVjdE9wdGlvblRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY29sdW1uRGl2LmNsYXNzTmFtZSA9IFwiaGQtb3B0aW9uLWhlYWRlci1jb2x1bW5cIjtcblxuICAgICAgY29uc3Qgd2lkdGhTdHlsZSA9IHRoaXMuZ2V0U2VsZWN0VGFibGVDb2x1bW5TdHlsZShcbiAgICAgICAgc2VsZWN0T3B0aW9uVGFibGVDb2x1bW4sXG4gICAgICApO1xuICAgICAgY29sdW1uRGl2LnN0eWxlLndpZHRoID0gd2lkdGhTdHlsZS53aWR0aDtcblxuICAgICAgLy8g5re75Yqg5YiX5qCH562+5YaF5a65XG4gICAgICBpZiAoc2VsZWN0T3B0aW9uVGFibGVDb2x1bW4ubGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXG4gICAgICAgICAgc2VsZWN0T3B0aW9uVGFibGVDb2x1bW4ubGFiZWwsXG4gICAgICAgICk7XG4gICAgICAgIGNvbHVtbkRpdi5hcHBlbmRDaGlsZChsYWJlbFRleHQpO1xuICAgICAgfVxuXG4gICAgICAvLyDmt7vliqDliJcgZGl2IOWIsOWklumDqCBkaXZcbiAgICAgIGhkT3B0aW9uSGVhZGVyLmFwcGVuZENoaWxkKGNvbHVtbkRpdik7XG4gICAgfSk7XG4gICAgLy8gfVxuXG4gICAgcmV0dXJuIGhkT3B0aW9uSGVhZGVyO1xuICB9XG5cbiAgY29sbGVjdERvbURhdGEoKSB7XG4gICAgdGhpcy5jb2xsZWN0RG9tTGlzdCA9IFtdO1xuICAgIGNvbnN0IHBhZ2VEb21MaXN0ID0gdGhpcy5mb3JtSW5wdXREb21MaXN0LnRvQXJyYXkoKTtcbiAgICAvLyBTdGVwIDE6IOiOt+WPluW9k+WJjemhteeahOaVsOaNrumHj1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAodGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4IC0gMSkgKiB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgIGNvbnN0IGFkanVzdGVkRW5kSW5kZXggPVxuICAgICAgZW5kSW5kZXggPiB0aGlzLmZvcm1MaW5lc0xlbmd0aCA/IHRoaXMuZm9ybUxpbmVzTGVuZ3RoIDogZW5kSW5kZXg7XG4gICAgY29uc3QgcGFnZUxpbmVzTGVuZ3RoID0gYWRqdXN0ZWRFbmRJbmRleCAtIHN0YXJ0SW5kZXg7XG5cbiAgICBjb25zdCBpbnRlcnZhbCA9IHBhZ2VEb21MaXN0Lmxlbmd0aCAvIHBhZ2VMaW5lc0xlbmd0aDtcbiAgICAvLyBTdGVwIDI6IOaLhuWIhmZvcm1JbnB1dERvbUxpc3RcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VMaW5lc0xlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNvbGxlY3REb21MaXN0LnB1c2gocGFnZURvbUxpc3Quc3BsaWNlKDAsIGludGVydmFsKSk7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZUlucHV0TnVtYmVyS2V5Ym9hcmRTdGVwKCk7XG4gIH1cblxuICAvKipcbiAgICogbmctem9ycm8gOCDlnKggaW5wdXQg55qEIG9uS2V5RG93biDph4znlKjkuIrkuIvplK7osIMgdXAoKS9kb3duKCkg5pS5IHN0ZXDjgIJcbiAgICog5Y+q6KaG55uWIG9uS2V5RG93bu+8iOS4jeWKqCB1cC9kb3du77yJ77yM6ZSu55uY5pa55ZCR6ZSu5Lqk57uZ6KGo5Y2V6Lez6L2s77yMKy8tIOaMiemSruS7jeWPr+eUqOOAglxuICAgKi9cbiAgcHJpdmF0ZSBkaXNhYmxlSW5wdXROdW1iZXJLZXlib2FyZFN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUtleWJvYXJkT3BlcmF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb2xsZWN0RG9tTGlzdFtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBkb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W2ldW2pdO1xuICAgICAgICBpZiAoZG9tIGluc3RhbmNlb2YgTnpJbnB1dE51bWJlckNvbXBvbmVudCkge1xuICAgICAgICAgIGRvbS5vbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMzggfHwgZS5rZXlDb2RlID09PSA0MCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgICBkb20uc2V0VmFsaWRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDogZrnhKbkuIvkuIDkuKpkb21cbiAganVtcFRvTmV4dElucHV0KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgeCA9PT0gbnVsbCB8fFxuICAgICAgeSA9PT0gbnVsbCB8fFxuICAgICAgIXRoaXMuY29sbGVjdERvbUxpc3QgfHxcbiAgICAgIHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWmguaenOaYr+acgOWQjuS4gOS4quWPr+i+k+WFpeWFg+e0oO+8jOaWsOWinuihjFxuICAgIGlmIChcbiAgICAgICEodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkgJiZcbiAgICAgIHggPT09IHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoIC0gMSAmJlxuICAgICAgeSA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxXG4gICAgKSB7XG4gICAgICB0aGlzLmFkZE5ld0xpbmVBbmRGb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoeSA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5omn6KGM6L+H56iLMVwiKTtcbiAgICAgICAgLy8g5aaC5p6c5piv5pyA5ZCO5LiA5YiX77yM5YiZ6Lez6L2s5Yiw5LiL5LiA6KGM56ys5LiA5Liq6L6T5YWl5qGGXG4gICAgICAgIHRoaXMuZm9jdXNEb20oeCArIDEsIDAsIFwicmlnaHRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIuaJp+ihjOi/h+eoizJcIik7XG4gICAgICAgIC8vIOWmguaenOS4jeaYr+acgOWQjuS4gOWIl++8jOWImei3s+i9rOWIsOW9k+WJjeihjOS4i+S4gOS4qui+k+WFpeahhlxuICAgICAgICB0aGlzLmZvY3VzRG9tKHgsIHkgKyAxLCBcInJpZ2h0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlop7liqDmlrDooYzlubbkuJTogZrnhKbliLDnrKzkuIDkuKrlhYPntKDvvIxcbiAgICog6L+Z6YeM6KaB5rOo5oSP77yM5aaC5p6c5a2Y5Zyo57+76aG15oOF5Ya177yM6ZyA6KaB5aSE55CGXG4gICAqL1xuICBhZGROZXdMaW5lQW5kRm9jdXMoKSB7XG4gICAgLy8g5b2T5YmN6KGM5Li65b2T5YmN6aG15pyA5ZCO5LiA6KGM55qE5pe25YCZ77yM5Yik5pat5LiL5LiA6aG15piv5ZCm5pyJ5pWw5o2uXG4gICAgLy8gMeOAgeWmguaenOacie+8mue/u+mhtSvogZrnhKbnrKzkuIDooYznrKzkuIDkuKrlhYPntKBcbiAgICAvLyAy44CB5aaC5p6c5rKh5pyJ77ya5paw5aKe6KGMK+e/u+mhtSvogZrnhKbnrKzkuIDooYznrKzkuIDkuKrlhYPntKBcbiAgICBpZiAodGhpcy5hY3RpdmVEb21YID09PSB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSAtIDEpIHtcbiAgICAgIC8vIOWIpOaWreS4i+S4gOmhteaYr+WQpuacieaVsOaNrlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPFxuICAgICAgICBNYXRoLmNlaWwodGhpcy5mb3JtTGluZXNMZW5ndGggLyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSlcbiAgICAgICkge1xuICAgICAgICAvLyDnv7vpobUr6IGa54Sm56ys5LiA6KGM56ys5LiA5Liq5YWD57SgXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCsrO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coXCLmiafooYzov4fnqIszXCIpO1xuICAgICAgICAgIHRoaXMuZm9jdXNEb20oMCwgMCwgXCJyaWdodFwiKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDmlrDlop7ooYwr57+76aG1K+iBmueEpuesrOS4gOihjOesrOS4gOS4quWFg+e0oFxuICAgICAgICB0aGlzLmFkZEZvcm1MaW5lKCk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCsrO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coXCLmiafooYzov4fnqIs0XCIpO1xuICAgICAgICAgIHRoaXMuZm9jdXNEb20oMCwgMCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZEZvcm1MaW5lKCk7XG4gICAgfVxuICB9XG5cbiAgLy8g6IGa54Sm5Yiw5LiK5LiA5LiqZG9tXG4gIGp1bXBUb1ByZXZJbnB1dCh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIGlmIChcbiAgICAgIHggPT09IG51bGwgfHxcbiAgICAgIHkgPT09IG51bGwgfHxcbiAgICAgICF0aGlzLmNvbGxlY3REb21MaXN0IHx8XG4gICAgICB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7XG4gICAgICAvLyDlpoLmnpzmmK/nrKzkuIDkuKrlj6/ovpPlhaXlhYPntKDvvIwg5Yik5pat5piv5ZCm5pyJ5LiK5LiA6aG177yMIOWmguaenOacie+8jOWImee/u+mhtSvogZrnhKbliLDkuIrkuIDpobXmnIDlkI7kuIDkuKrlhYPntKBcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPiAxKSB7XG4gICAgICAgIC8vIOe/u+mhtSvogZrnhKbliLDkuIrkuIDpobXmnIDlkI7kuIDkuKrlhYPntKBcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uUGFnZUluZGV4LS07XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29sbGVjdERvbURhdGEoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIuaJp+ihjOi/h+eoizVcIik7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbShcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdERvbUxpc3RbMF0ubGVuZ3RoIC0gMSxcbiAgICAgICAgICApO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHkgPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCLmiafooYzov4fnqIs2XCIpO1xuICAgICAgICAvLyDlpoLmnpzmmK/nrKzkuIDliJfvvIzliJnot7PovazliLDkuIrkuIDooYzmnIDlkI7kuIDkuKrovpPlhaXmoYZcbiAgICAgICAgdGhpcy5mb2N1c0RvbSh4IC0gMSwgdGhpcy5jb2xsZWN0RG9tTGlzdFswXS5sZW5ndGggLSAxLCBcImxlZnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIuaJp+ihjOi/h+eoizdcIik7XG4gICAgICAgIC8vIOWmguaenOS4jeaYr+esrOS4gOWIl++8jOWImei3s+i9rOWIsOW9k+WJjeihjOS4iuS4gOS4qui+k+WFpeahhlxuICAgICAgICB0aGlzLmZvY3VzRG9tKHgsIHkgLSAxLCBcImxlZnRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiBmueEpuWIsOafkOS4qmRvbVxuICAgKiBAcGFyYW0geCDlnZDmoId4XG4gICAqIEBwYXJhbSB5IOWdkOagh3lcbiAgICogQHBhcmFtIGp1bXBEaXJlY3Rpb24g6Lez6L2s5pa55ZCRXG4gICAqL1xuICBmb2N1c0RvbSh4OiBudW1iZXIsIHk6IG51bWJlciwganVtcERpcmVjdGlvbjogc3RyaW5nID0gXCJyaWdodFwiKSB7XG4gICAgaWYgKFxuICAgICAgeCA9PT0gbnVsbCB8fFxuICAgICAgeSA9PT0gbnVsbCB8fFxuICAgICAgIXRoaXMuY29sbGVjdERvbUxpc3QgfHxcbiAgICAgIHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIOWFiOa4hemZpOS4gOS4i+W9k+WJjeeahOeEpueCuVxuICAgIHRoaXMuY2xlYW5Gb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgaWYgKHRoaXMuY29sbGVjdERvbUxpc3RbeF0gJiYgdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XSkge1xuICAgICAgY29uc3QgZG9tID0gdGhpcy5jb2xsZWN0RG9tTGlzdFt4XVt5XTtcbiAgICAgIC8vIOmcgOimgeWIpOaWreS4i+S4gOS4qmZvY3Vz55qEZG9t5piv5ZCm5piv56aB55So54q25oCB77yM5aaC5p6c5piv56aB55So54q25oCB6ZyA6KaB6Lez6L+HXG4gICAgICBpZiAoZG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGRvbS5uekRpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9QcmV2SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkb20ubnpTZWxlY3RUb3BDb250cm9sQ29tcG9uZW50LmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KFxuICAgICAgICAgIHsgYmVoYXZpb3I6IFwic21vb3RoXCIsIGJsb2NrOiBcImNlbnRlclwiLCBpbmxpbmU6IFwiY2VudGVyXCIgfSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8g6L+Z6YeM5aSa6YCJ5qGG6ZyA6KaB6aKd5aSW5aSE55CG5LiL77yM5Zug5Li65ZCR5LiL55qE5pe25YCZ5Lya6Kem5Y+R5YaF6YOoSW5wdXTnmoTogZrnhKbvvIzmiorkuIvkuIDkuKpkb23nmoRmb2N1c+aUvuWIsOWuj+S7u+WKoeS4re+8jOW7tui/n+WkhOeQhuOAglxuICAgICAgICBpZiAoZG9tLm56U2VsZWN0U2VydmljZS5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvbS5mb2N1cygpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIE56SW5wdXROdW1iZXJDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGRvbS5uekRpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKGp1bXBEaXJlY3Rpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG9QcmV2SW5wdXQoeCwgeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dERvbTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZG9tLm56SWQpO1xuICAgICAgICBpbnB1dERvbS5mb2N1cygpO1xuICAgICAgICBpbnB1dERvbS5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCIsXG4gICAgICAgICAgYmxvY2s6IFwiY2VudGVyXCIsXG4gICAgICAgICAgaW5saW5lOiBcImNlbnRlclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaW5wdXREb20uc2VsZWN0KCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIGlmIChkb20gaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XG4gICAgICAgIGlmIChkb20ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCkge1xuICAgICAgICAgIGlmIChqdW1wRGlyZWN0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvTmV4dElucHV0KHgsIHkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoanVtcERpcmVjdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHgsIHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiLFxuICAgICAgICAgIGJsb2NrOiBcImNlbnRlclwiLFxuICAgICAgICAgIGlubGluZTogXCJjZW50ZXJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGRvbS5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGRvbSBpbnN0YW5jZW9mIE56RGF0ZVBpY2tlckNvbXBvbmVudCB8fFxuICAgICAgICBkb20gaW5zdGFuY2VvZiBOelJhbmdlUGlja2VyQ29tcG9uZW50IHx8XG4gICAgICAgIGRvbSBpbnN0YW5jZW9mIE56VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAgKSB7XG4gICAgICAgIC8vIFRPRE865Zyobmd6b3JybzguNS5454mI5pys77yM5pe26Ze055u45YWz55qE6YCJ5oup5Zmo5rKh5pyJ5pq06Zyy5Ye6b3BlbuaWueazle+8jOaaguaXtuWFiOS4jeWkhOeQhuOAgu+8iDEwLnjlj4rku6XkuIrniYjmnKzmj5DkvpvkuoZvcGVu5pa55rOV77yJXG4gICAgICAgIGlmIChqdW1wRGlyZWN0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICB0aGlzLmp1bXBUb05leHRJbnB1dCh4LCB5KTtcbiAgICAgICAgfSBlbHNlIGlmIChqdW1wRGlyZWN0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICAgIHRoaXMuanVtcFRvUHJldklucHV0KHgsIHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0QWN0aXZlRG9tKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDmsqHmnIlkb23nmoTlnLrmma/kuIvvvIzpnIDopoHliKTmlq3mmK/lt6bov5jmmK/lj7PvvIxcbiAgICB9XG4gIH1cblxuICBjbGVhbkZvY3VzRG9tKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgaWYgKFxuICAgICAgeCA9PT0gbnVsbCB8fFxuICAgICAgeSA9PT0gbnVsbCB8fFxuICAgICAgIXRoaXMuY29sbGVjdERvbUxpc3QgfHxcbiAgICAgIHRoaXMuY29sbGVjdERvbUxpc3QubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbGxlY3REb21MaXN0W3hdICYmIHRoaXMuY29sbGVjdERvbUxpc3RbeF1beV0pIHtcbiAgICAgIGNvbnN0IGRvbSA9IHRoaXMuY29sbGVjdERvbUxpc3RbeF1beV07XG4gICAgICBpZiAoZG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQpIHtcbiAgICAgICAgZG9tLmJsdXIoKTtcbiAgICAgICAgZG9tLm56T3BlbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChkb20gaW5zdGFuY2VvZiBOeklucHV0TnVtYmVyQ29tcG9uZW50KSB7XG4gICAgICAgIGRvbS5ibHVyKCk7XG4gICAgICB9IGVsc2UgaWYgKGRvbSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYpIHtcbiAgICAgICAgZG9tLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVEb20oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2ZURvbVggPSB4O1xuICAgIHRoaXMuYWN0aXZlRG9tWSA9IHk7XG4gICAgdGhpcy5hY3RpdmVEb20gPSB0aGlzLmNvbGxlY3REb21MaXN0W3RoaXMuYWN0aXZlRG9tWF1bdGhpcy5hY3RpdmVEb21ZXTtcbiAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgdGhpcy5zZXRBY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4odGhpcy5hY3RpdmVEb20ub3Blbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagueaNruihjOWPt+WSjOWIl+WPt+WQjeensOiOt+WPluW9k+WJjeiBmueEpueahGRvbeS9jee9rlxuICAgKiBAcGFyYW0gcm93TnVtYmVyIOihjOWPt1xuICAgKiBAcGFyYW0gY29sTnVtYmVyIOWIl+WPt1xuICAgKi9cbiAgc2V0QWN0aXZlRG9tSW5Gb3JtTGluZXMocm93TnVtYmVyOiBudW1iZXIsIGNvbE51bWJlcjogbnVtYmVyKSB7XG4gICAgdGhpcy5hY3RpdmVEb21YID0gcm93TnVtYmVyO1xuICAgIHRoaXMuYWN0aXZlRG9tWSA9IHRoaXMuZ2V0RG9tSW5kZXgoY29sTnVtYmVyLCB0aGlzLmZvcm1MaW5lcyk7XG4gICAgdGhpcy5zZXRBY3RpdmVEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOmUruebmOeCueWHu+S6i+S7tlxuICAgKiBAcGFyYW0gZXZlbnQg6ZSu55uY5LqL5Lu2XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlS2V5Ym9hcmRPcGVyYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGl2ZURvbVggPT09IG51bGwgfHwgdGhpcy5hY3RpdmVEb21ZID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlIFwiQXJyb3dVcFwiOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCAmJlxuICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb21YICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVggLSAxLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkFycm93RG93blwiOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCAmJlxuICAgICAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyDliKTmlq3mmK/lkKblnKjmnIDlkI7kuIDooYzvvIzliqDooYxcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRG9tWCA9PT0gdGhpcy5jb2xsZWN0RG9tTGlzdC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbkZvY3VzRG9tKHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgICB0aGlzLmFkZE5ld0xpbmVBbmRGb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YICsgMSwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJBcnJvd0xlZnRcIjpcbiAgICAgICAgdGhpcy5qdW1wVG9QcmV2SW5wdXQodGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJBcnJvd1JpZ2h0XCI6XG4gICAgICAgIHRoaXMuanVtcFRvTmV4dElucHV0KHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRW50ZXJcIjpcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQpIHtcbiAgICAgICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3Blbih0aGlzLmFjdGl2ZURvbS5vcGVuKTtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRG9tKHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVEb21YID09PSB0aGlzLmNvbGxlY3REb21MaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLmFkZE5ld0xpbmVBbmRGb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkVzY2FwZVwiOlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEb20gaW5zdGFuY2VvZiBOelNlbGVjdENvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IG5vd0FjdGl2ZURvbSA9IHRoaXMuYWN0aXZlRG9tIGFzIE56U2VsZWN0Q29tcG9uZW50O1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVTZWxlY3RlZENvbXBvbmVudE9wZW4obm93QWN0aXZlRG9tLm9wZW4pO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBpZiAobm93QWN0aXZlRG9tLm56U2VsZWN0U2VydmljZS5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNEb20odGhpcy5hY3RpdmVEb21YLCB0aGlzLmFjdGl2ZURvbVkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyDlpoLmnpzlvZPliY3ogZrnhKbnmoTmmK/pgInmi6nmoYbvvIzkuJTplK7lhaUwLTlhLXpBLVrvvIzliJnlvLnlh7pcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYWN0aXZlRG9tIGluc3RhbmNlb2YgTnpTZWxlY3RDb21wb25lbnQgJiZcbiAgICAgICAgICB0aGlzLmFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3BlbiA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAvXlswLTlhLXpBLVpdJC8udGVzdChldmVudC5rZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRvbSA9IHRoaXMuYWN0aXZlRG9tO1xuICAgICAgICAgIGRvbS5uek9wZW4gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRDb21wb25lbnRPcGVuKHRydWUpO1xuICAgICAgICAgIC8vIC8vIFRPRE866L+Z6YeM5pqC5pe25rOo6YeK77yM5LiN6IO955u05o6l5bim5YWl6ZSu5YWl5YC877yM6L+Z5qC35Lya5a+86Ie06L6T5YWl5Lit5paH55qE5pe25YCZ5bim5YWl6Iux5paH5a2X56ym77yM5LiN56ym5ZCI6aKE5pyfXG4gICAgICAgICAgLy8gZG9tLm56U2VsZWN0VG9wQ29udHJvbENvbXBvbmVudC5pbnB1dFZhbHVlID0gZXZlbnQua2V5O1xuICAgICAgICAgIC8vIC8vIOiOt+WPliBpbnB1dCDlhYPntKBcbiAgICAgICAgICAvLyBjb25zdCBpbnB1dEVsZW1lbnQgPSBkb20ubnpTZWxlY3RUb3BDb250cm9sQ29tcG9uZW50LmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vICAgLy8g6Kem5Y+R6L6T5YWl5LqL5Lu277yM5Lul56Gu5L+dIEFuZ3VsYXIg5qOA5rWL5Yiw5YC855qE5Y+Y5YyWXG4gICAgICAgICAgLy8gICBjb25zdCBldmVudElucHV0ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KTtcbiAgICAgICAgICAvLyAgIGlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50SW5wdXQpO1xuICAgICAgICAgIC8vIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7lnKjliJ3lp4tkb23kuIvmoIflkozmlbDmja7pm4Yg6I635Y+W5ZyoY29sbGVjdERvbUxpc3TkuK3nmoTkuIvmoIdcbiAgICogQHBhcmFtIGluZGV4IOWIneWni+S4i+agh1xuICAgKiBAcGFyYW0gbGlzdCDogIHmlbDmja7pm4ZcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgZ2V0RG9tSW5kZXgoaW5kZXg6IG51bWJlciwgbGlzdDogQXJyYXk8Rm9ybUxpbmU+KTogbnVtYmVyIHtcbiAgICBjb25zdCB0eXBlTGlzdCA9IFtcbiAgICAgIFwiSW5wdXRcIixcbiAgICAgIFwiU2VsZWN0XCIsXG4gICAgICBcIkRhdGVcIixcbiAgICAgIFwiRGF0ZVJhbmdlXCIsXG4gICAgICBcIlRleHRBcmVhXCIsXG4gICAgICBcIklucHV0TnVtYmVyXCIsXG4gICAgICBcIk11bHRpcGxlU2VsZWN0XCIsXG4gICAgXTtcbiAgICBsZXQgZmlsdGVyTGlzdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPT09IGluZGV4KSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJMaXN0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIOS4juaooeadv+S4gOiHtO+8mmhpZGUgLyBpc1Nob3c9ZmFsc2Ug55qE5YiX5LiN5riy5p+TICNmb3JtSW5wdXREb23vvIzkuI3orqHlhaUgY29sbGVjdERvbUxpc3Qg55qE5YiX5LiL5qCHXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVMaXN0LmluY2x1ZGVzKGxpc3RbaV0udHlwZSkgJiZcbiAgICAgICAgIWxpc3RbaV0uaGlkZSAmJlxuICAgICAgICBsaXN0W2ldLmlzU2hvdyAhPT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICBmaWx0ZXJMaXN0LnB1c2gobGlzdFtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOagueaNruWcqGNvbGxlY3REb21MaXN05Lit55qE5LiL5qCH5ZKM5pWw5o2u6ZuGIOiOt+WPluWIneWni2RvbeS4i+agh1xuICAgKiBAcGFyYW0gaW5kZXgg5paw5LiL5qCHXG4gICAqIEBwYXJhbSBsaXN0IOiAgeaVsOaNrumbhlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRPbGREb21JbmRleChpbmRleDogbnVtYmVyLCBsaXN0OiBBcnJheTxGb3JtTGluZT4pOiBudW1iZXIge1xuICAgIGNvbnNvbGUubG9nKFwiaW5kZXhcIiwgaW5kZXgpO1xuICAgIGNvbnNvbGUubG9nKFwibGlzdFwiLCBsaXN0KTtcbiAgICBjb25zdCB0eXBlTGlzdCA9IFtcbiAgICAgIFwiSW5wdXRcIixcbiAgICAgIFwiU2VsZWN0XCIsXG4gICAgICBcIkRhdGVcIixcbiAgICAgIFwiRGF0ZVJhbmdlXCIsXG4gICAgICBcIlRleHRBcmVhXCIsXG4gICAgICBcIklucHV0TnVtYmVyXCIsXG4gICAgICBcIk11bHRpcGxlU2VsZWN0XCIsXG4gICAgXTtcbiAgICBsZXQgZmlsdGVyTGlzdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlTGlzdC5pbmNsdWRlcyhsaXN0W2ldLnR5cGUpICYmXG4gICAgICAgICFsaXN0W2ldLmhpZGUgJiZcbiAgICAgICAgbGlzdFtpXS5pc1Nob3cgIT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgZmlsdGVyTGlzdC5wdXNoKGxpc3RbaV0pO1xuICAgICAgICBpZiAoZmlsdGVyTGlzdC5sZW5ndGggPT09IGluZGV4ICsgMSkge1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0IGxpbmVzRm9ybUFycmF5KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy5nZXQoXCJsaW5lc1wiKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBnZXQgTG9kYXNoUm91bmQoKSB7XG4gICAgcmV0dXJuIHJvdW5kO1xuICB9XG5cbiAgLy8g5pq06Zyy55qE5pa55rOV77yM55So5LqO6I635Y+W5omA5pyJ5pWw5o2u55qEdmFsaWTnirbmgIFcbiAgcHVibGljIGdldFZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZDtcbiAgfVxuXG4gIG9uU2VhcmNoRXZlbnQoXG4gICAgZm46IGFueSxcbiAgICBldmVudDogYW55LFxuICAgIGxpbmU6IGFueSxcbiAgICBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lOiBhbnksXG4gICkge1xuICAgIGlmICghZm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVib3VuY2VNcyA9XG4gICAgICBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lICE9IG51bGwgPyBvblNlYXJjaEV2ZW50RGVib3VuY2VUaW1lIDogMDtcbiAgICAvLyDmnKrphY3nva7miJbkuLogMO+8muWQjOatpeinpuWPke+8jOS4jei1sCBkZWJvdW5jZVRpbWXvvIjpgb/lhY3lvILmraXvvIlcbiAgICBpZiAoIWRlYm91bmNlTXMpIHtcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgbGluZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gZGVib3VuY2VNcztcbiAgICAgIGlmICh0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlYXJjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lb3V0KSlcbiAgICAgICAgLnN1YnNjcmliZSgoeyBmbiwgZXZlbnQsIGxpbmUgfSkgPT4gdGhpcy50cmlnZ2VyRXZlbnQoZm4sIGV2ZW50LCBsaW5lKSk7XG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3QubmV4dCh7IGZuLCBldmVudCwgbGluZSB9KTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkQ29tcG9uZW50T3Blbih0cnVlKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIG9uT3BlbkNoYW5nZUV2ZW50KFxuICAgIGZuOiBhbnksXG4gICAgb3BlbjogYm9vbGVhbixcbiAgICBsaW5lOiBhbnksXG4gICAgb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWU6IGFueSxcbiAgICBmb3JtSXRlbT86IGFueSxcbiAgKSB7XG4gICAgaWYgKCFmbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyDlsZXlvIDml7blhYjmuIXnqbrml6cgb3B0aW9uc++8jOmBv+WFjeadoeS7tuWPmOWMluWQjuivt+axgui/lOWbnuWJjeS7jeWxleekuuS4iuS4gOaJueS4i+aLieaVsOaNrlxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0T3B0aW9uc09uT3Blbihmb3JtSXRlbSwgbGluZSk7XG4gICAgfVxuICAgIGNvbnN0IGRlYm91bmNlTXMgPVxuICAgICAgb25PcGVuQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICA/IG9uT3BlbkNoYW5nZUV2ZW50RGVib3VuY2VUaW1lXG4gICAgICAgIDogMDtcbiAgICAvLyDmnKrphY3nva7miJbkuLogMO+8muWQjOatpeinpuWPke+8jOS4jei1sCBkZWJvdW5jZVRpbWXvvIjpgb/lhY3lvILmraXvvIlcbiAgICBpZiAoIWRlYm91bmNlTXMpIHtcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBvcGVuLCBsaW5lKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcGVuQ2hhbmdlRGVib3VuY2VUaW1lb3V0ID0gZGVib3VuY2VNcztcbiAgICBpZiAodGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5vcGVuQ2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMub3BlbkNoYW5nZURlYm91bmNlVGltZW91dCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZuLCBldmVudCwgbGluZSB9KSA9PiB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGZuLCBldmVudCwgbGluZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMub3BlbkNoYW5nZVN1YmplY3QubmV4dCh7IGZuLCBldmVudDogb3BlbiwgbGluZSB9KTtcbiAgfVxuXG4gIC8qKiDmnIkgb25PcGVuQ2hhbmdlRXZlbnQg5pe25bGV5byA5LiL5ouJ5YWI5riF56m66YCJ6aG577yM55Sx5Lia5Yqh5Zue6LCD5YaN5YaZ5YWl5paw5pWw5o2uICovXG4gIHByaXZhdGUgY2xlYXJTZWxlY3RPcHRpb25zT25PcGVuKGZvcm1JdGVtOiBhbnksIGxpbmU6IGFueSk6IHZvaWQge1xuICAgIGlmICghZm9ybUl0ZW0gfHwgIWZvcm1JdGVtLnNlbGVjdE9wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHQgPSBmb3JtSXRlbS5zZWxlY3RPcHRpb247XG4gICAgaWYgKG9wdC5zZWxlY3RMaXN0ICE9IG51bGwpIHtcbiAgICAgIG9wdC5zZWxlY3RMaXN0ID0gW107XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG9wdC5zZWxlY3RMaXN0TmFtZSAmJlxuICAgICAgbGluZSAmJlxuICAgICAgbGluZS5nZXQgJiZcbiAgICAgIGxpbmUuZ2V0KG9wdC5zZWxlY3RMaXN0TmFtZSlcbiAgICApIHtcbiAgICAgIGxpbmUuZ2V0KG9wdC5zZWxlY3RMaXN0TmFtZSkuc2V0VmFsdWUoW10sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGZuIOeItue7hOS7tuWHveaVsFxuICAgKiBAcGFyYW0gZXZlbnQg5LqL5Lu25YC8XG4gICAqIEBwYXJhbSBsaW5lIOinpuWPkeeahOihjFxuICAgKi9cbiAgdHJpZ2dlckV2ZW50KGZuOiBhbnksIGV2ZW50OiBhbnksIGxpbmU6IGFueSkge1xuICAgIGlmIChmbikge1xuICAgICAgZm4oZXZlbnQsIGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIGlubmVyR2V0VmFsaWQoKSB7XG4gICAgbGV0IHRtcFZhbGlkYXRlSGRGb3JtTGluZXMgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGxpbmVzOiB0aGlzLmZiLmFycmF5KFtdKSxcbiAgICB9KTtcbiAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5mb3JFYWNoKChmb3JtTGluZXNEYXRhSXRlbSkgPT4ge1xuICAgICAgbGV0IGZvcm1Hcm91cE9iajogYW55ID0ge307XG4gICAgICB0aGlzLmZvcm1MaW5lcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIOaWsOWinuihjCDliJ3lp4vmlbDmja7pg73kuLpudWxsXG4gICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmp1ZGdlVmFsdWVJc05vdEVtcHR5KGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0ubmFtZV0pXG4gICAgICAgICAgICAgID8gZm9ybUxpbmVzRGF0YUl0ZW1baXRlbS5uYW1lXVxuICAgICAgICAgICAgICA6IGl0ZW0udmFsdWUgfHwgbnVsbCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXRlbS5yZXF1aXJlID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW10sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpdGVtLnNlbGVjdE9wdGlvbiAmJiBpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbCkge1xuICAgICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbF0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgICBmb3JtTGluZXNEYXRhSXRlbVtpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbF0gfHwgbnVsbCxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZm9ybUdyb3VwT2JqLmxpbmVJbmRleCA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgKHRtcFZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0KFwibGluZXNcIikgYXMgRm9ybUFycmF5KS5jb250cm9scy5sZW5ndGggKyAxLFxuICAgICAgICBbXSxcbiAgICAgICk7XG4gICAgICBsZXQgZm9ybUdyb3VwVG1wID0gdGhpcy5mYi5ncm91cChmb3JtR3JvdXBPYmopO1xuICAgICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5vbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgICAgY29uc3QgZGVib3VuY2VNcyA9XG4gICAgICAgICAgICBpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICAgICAgICA/IGl0ZW0ub25DaGFuZ2VFdmVudERlYm91bmNlVGltZVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cFRtcC5nZXQoaXRlbS5uYW1lKTtcbiAgICAgICAgICAvLyDmnKrphY3nva7miJbkuLogMO+8muWQjOatpeiuoumYhe+8jOS4jei1sCBkZWJvdW5jZVRpbWVcbiAgICAgICAgICBpZiAoZGVib3VuY2VNcyA+IDApIHtcbiAgICAgICAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZShkZWJvdW5jZU1zKSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChpdGVtLm9uQ2hhbmdlRXZlbnQsIHZhbHVlLCBmb3JtR3JvdXBUbXApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChpdGVtLm9uQ2hhbmdlRXZlbnQsIHZhbHVlLCBmb3JtR3JvdXBUbXApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgICh0bXBWYWxpZGF0ZUhkRm9ybUxpbmVzLmdldChcImxpbmVzXCIpIGFzIEZvcm1BcnJheSkuaW5zZXJ0KFxuICAgICAgICAodG1wVmFsaWRhdGVIZEZvcm1MaW5lcy5nZXQoXCJsaW5lc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzLmxlbmd0aCxcbiAgICAgICAgZm9ybUdyb3VwVG1wLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG1wVmFsaWRhdGVIZEZvcm1MaW5lcy52YWxpZDtcbiAgfVxuXG4gIC8vIOaatOmcsueahOaWueazle+8jOeUqOS6juiOt+WPluaJgOacieaVsOaNrlxuICBwdWJsaWMgZ2V0TGluZXMoKSB7XG4gICAgbGV0IGFsbExpbmVzID0gW107XG4gICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuZm9yRWFjaCgoZm9ybUxpbmVzRGF0YUl0ZW0pID0+IHtcbiAgICAgIGxldCBmb3JtR3JvdXBPYmo6IGFueSA9IHt9O1xuICAgICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAvLyDmlrDlop7ooYwg5Yid5aeL5pWw5o2u6YO95Li6bnVsbFxuICAgICAgICBmb3JtR3JvdXBPYmpbaXRlbS5uYW1lXSA9IGZvcm1MaW5lc0RhdGFJdGVtW2l0ZW0ubmFtZV07XG4gICAgICB9KTtcbiAgICAgIGZvcm1Hcm91cE9iai5saW5lSW5kZXggPSBmb3JtTGluZXNEYXRhSXRlbS5saW5lSW5kZXg7XG4gICAgICBhbGxMaW5lcy5wdXNoKGZvcm1Hcm91cE9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFsbExpbmVzO1xuICB9XG5cbiAgLy8g5YWo5bGA5oCn55qE5pCc57Si77yI5ra155uW6aG16Z2i5LiK5omA5pyJ55qE5Y+v6KeG5paH5a2X77yJXG4gIHNlYXJjaExpbmVzKCkge1xuICAgIGlmICh0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudGFibGVMb2FkaW5nID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmsqHmnInovpPlhaXmkJzntKLlrZfnrKbkuLLvvIzliJnmmL7npLrnvJPlrZjlhoXnmoTmiYDmnInmlbDmja5cbiAgICBpZiAoIXRoaXMuZmlsdGVyU3RyKSB7XG4gICAgICB0aGlzLmlzRmlsdGVyRGF0YSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRTdG9yZURhdGEoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSB0aGlzLmZpbHRlclN0ci50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLmlzRmlsdGVyRGF0YSA9IHRydWU7XG4gICAgdGhpcy5maWx0ZXJJbmRleFN0b3JlID0gW107XG5cbiAgICAvLyDmoLnmja7mkJzntKLlrZfnrKbkuLLov4fmu6TmlbDmja5cbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5maWx0ZXIoXG4gICAgICAoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmZvcm1MaW5lcykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChpdGVtLmhpZGUgJiYgaXRlbS5jYW5TZWFyY2gpIHx8XG4gICAgICAgICAgICAoIWl0ZW0uaGlkZSAmJiBpdGVtLm5hbWUgIT09IFwidXVpZFwiKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJpdGVtXCIsIGl0ZW0ubmFtZSk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbaXRlbS5uYW1lXVxuICAgICAgICAgICAgICA/IGRhdGFbaXRlbS5uYW1lXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmUucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICk7XG4gICAgLy8g57yT5a2Y5LiA5LiL562b6YCJ5ZCO55qE6KGo5Y2V5pWw5o2uXG4gICAgdGhpcy5maWx0ZXJTdG9yZUZvcm1MaW5lc0RhdGEgPSBmaWx0ZXJlZERhdGE7XG4gICAgLy8g5aSE55CG562b6YCJ5aW955qE5pWw5o2uIOeEtuWQjumHjeaWsOa4suafk1xuICAgIHRoaXMuZm9ybUxpbmVzRGF0YSA9IGZpbHRlcmVkRGF0YTtcbiAgICB0aGlzLmluaXQodHJ1ZSk7XG4gIH1cblxuICBzZXRTdG9yZURhdGEoKSB7XG4gICAgdGhpcy5mb3JtTGluZXNEYXRhID0gdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGE7XG4gICAgdGhpcy5pbml0KHRydWUpO1xuICB9XG5cbiAgZ2V0U3R5bGUobGluZTogRm9ybUdyb3VwLCBmb3JtSXRlbTogYW55LCB3aWR0aDogc3RyaW5nKSB7XG4gICAgbGV0IHN0eWxlT2JqID0ge1xuICAgICAgXCJtaW4td2lkdGhcIjogd2lkdGgsXG4gICAgfTtcbiAgICBpZiAoZm9ybUl0ZW0uc3R5bGUpIHtcbiAgICAgIHN0eWxlT2JqID0geyAuLi5zdHlsZU9iaiwgLi4uZm9ybUl0ZW0uc3R5bGUgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZm9ybUl0ZW0uY29sb3JPcHRpb24gJiZcbiAgICAgIGZvcm1JdGVtLmNvbG9yT3B0aW9uLm5hbWUgJiZcbiAgICAgIGxpbmUuZ2V0KGZvcm1JdGVtLmNvbG9yT3B0aW9uLm5hbWUpLnZhbHVlXG4gICAgKSB7XG4gICAgICBzdHlsZU9iaiA9IHtcbiAgICAgICAgLi4uc3R5bGVPYmosXG4gICAgICAgIC4uLnsgY29sb3I6IGxpbmUuZ2V0KGZvcm1JdGVtLmNvbG9yT3B0aW9uLm5hbWUpLnZhbHVlIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGVPYmo7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1tcImZvcm1MaW5lc0RhdGFcIl0gJiZcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbXCJmb3JtTGluZXNEYXRhXCJdLmN1cnJlbnRWYWx1ZSkgIT09XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbXCJmb3JtTGluZXNEYXRhXCJdLnByZXZpb3VzVmFsdWUpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgJiYgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5mb3JtTGluZXNEYXRhO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbXCJmb3JtTGluZXNcIl0gJiZcbiAgICAgIGNoYW5nZXNbXCJmb3JtTGluZXNcIl0ucHJldmlvdXNWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzW1wiZm9ybUxpbmVzXCJdLmN1cnJlbnRWYWx1ZSkgIT09XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbXCJmb3JtTGluZXNcIl0ucHJldmlvdXNWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuaW5pdENvbFNldHRpbmdzKCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbXCJ0b3RhbE9wdGlvblwiXSAmJlxuICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1tcInRvdGFsT3B0aW9uXCJdLmN1cnJlbnRWYWx1ZSkgIT09XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbXCJ0b3RhbE9wdGlvblwiXS5wcmV2aW91c1ZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5jYWxjdWxhdGVUb3RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVRvdGFsKCkge1xuICAgIC8vIOi/memHjOWkhOeQhuWQiOiuoeaVsOaNrlxuICAgIGlmICh0aGlzLnNob3dUb3RhbCkge1xuICAgICAgdGhpcy50b3RhbE9wdGlvbkxpc3QgPSBuZXcgQXJyYXkoTnVtYmVyKHRoaXMuY29sdW1uc051bWJlcikgLSAxKS5maWxsKFwiXCIpO1xuICAgICAgdGhpcy50b3RhbE9wdGlvbi5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmluc2VydEluZGV4ICYmIChpdGVtLmluc2VydFZhbHVlIHx8IGl0ZW0uaW5zZXJ0VmFsdWUgPT09IDApKSB7XG4gICAgICAgICAgdGhpcy50b3RhbE9wdGlvbkxpc3RbaXRlbS5pbnNlcnRJbmRleCAtIDFdID0ge1xuICAgICAgICAgICAgdmFsdWU6IGl0ZW0uaW5zZXJ0VmFsdWUsXG4gICAgICAgICAgICBhbGlnbjogaXRlbS5hbGlnbiB8fCBcImxlZnRcIixcbiAgICAgICAgICAgIHNob3dEZWNpbWFsOiBpdGVtLnNob3dEZWNpbWFsIHx8IGZhbHNlLFxuICAgICAgICAgICAgcHJlc2VydmVOdW1iZXI6IGl0ZW0ucHJlc2VydmVOdW1iZXIgIT0gbnVsbCA/IGl0ZW0ucHJlc2VydmVOdW1iZXIgOiAyLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdChpc0VkaXQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCA9IDE7XG4gICAgLy8g5byC5bi45o2V6I63XG4gICAgaWYgKCF0aGlzLmNoZWNrTGlzdCh0aGlzLmZvcm1MaW5lcykpIHtcbiAgICAgIHRoaXMudGFibGVMb2FkaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIC8vIOWmguaenOayoeaciWZvcm1MaW5lc0RhdGHvvIzliJnorqTkuLrmmK/mlrDlop5cbiAgICBpZiAoXG4gICAgICAhaXNFZGl0ICYmXG4gICAgICAoIXRoaXMuZm9ybUxpbmVzRGF0YSB8fFxuICAgICAgICAodGhpcy5mb3JtTGluZXNEYXRhICYmIHRoaXMuZm9ybUxpbmVzRGF0YS5sZW5ndGggPT09IDApKVxuICAgICkge1xuICAgICAgdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIC8vIGFsbG93RW1wdHkg5LiU5LuF5Yig6Zmk5oyJ6ZKu77ya5LiN6Ieq5Yqo6KGl56m66KGMXG4gICAgICBpZiAoIXRoaXMuaXNUcnVseUVtcHR5QWxsb3dlZCkge1xuICAgICAgICB0aGlzLmFkZEZvcm1MaW5lKG51bGwsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDnvJbovpHpgLvovpFcbiAgICAgIHRoaXMuYWRkRm9ybUxpbmVXaXRoRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZGF0YSkgPT5cbiAgICAgIHRoaXMub25IZEZvcm1WYWx1ZUNoYW5nZWQoZGF0YSksXG4gICAgKTtcbiAgICB0aGlzLm9uSGRGb3JtVmFsdWVDaGFuZ2VkKCk7XG4gIH1cblxuICAvKipcbiAgICog5Yib5bu66KGo5Y2VXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBsaW5lczogdGhpcy5mYi5hcnJheShbXSksXG4gICAgfSk7XG4gICAgdGhpcy5uZXdMaW5lID0gdGhpcy5uZXdMaW5lSXRlbSgpO1xuICB9XG5cbiAgZGVsYXlKdW1wVG9OZXh0SW5wdXQoKSB7XG4gICAgLy8g5YWz6Zet6ZSu55uY5pON5L2c5pe277yM6YCJ5oup5qGG6YCJ5Lit5ZCO5LiN6Ieq5Yqo6Lez6L2s5Yiw5LiL5LiA5Liq6L6T5YWl5o6n5Lu2XG4gICAgaWYgKCF0aGlzLmVuYWJsZUtleWJvYXJkT3BlcmF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuanVtcFRvTmV4dElucHV0KHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlrprkuYnnqbrnmoRuZXdMaW5lSXRlbSDnu5PmnoRcbiAgICovXG4gIHByaXZhdGUgbmV3TGluZUl0ZW0oKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMaW5lRnJvbVZhbHVlcyhudWxsLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7ooYzmlbDmja7liJvlu7ogRm9ybUdyb3Vw77yI5ZCr6ZqQ6JeP5a2X5q6144CBc2VsZWN0IOeahCBsYWJlbCDnrYnpmYTlsZ7lrZfmrrXvvIlcbiAgICogQHBhcmFtIGZvcm1MaW5lc0RhdGFJdGVtIOihjOaVsOaNru+8jOepuuihjOS8oCBudWxsXG4gICAqIEBwYXJhbSBpc0VtcHR5TGluZSDmmK/lkKbnqbrooYzvvIjlvbHlk43lv4XloavmoKHpqozop4TliJnvvIzkuI7ljoblj7LpgLvovpHkv53mjIHkuIDoh7TvvIlcbiAgICogQHBhcmFtIHJlZ2VuZXJhdGVSb3dJZCDmmK/lkKblvLrliLbnlJ/miJDmlrDooYwgaWTvvIjlpI3liLbooYzml7bkvb/nlKjvvIlcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTGluZUZyb21WYWx1ZXMoXG4gICAgZm9ybUxpbmVzRGF0YUl0ZW06IGFueSxcbiAgICBpc0VtcHR5TGluZTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHJlZ2VuZXJhdGVSb3dJZDogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBGb3JtR3JvdXAge1xuICAgIGxldCBmb3JtR3JvdXBPYmo6IGFueSA9IHt9O1xuICAgIHRoaXMuZm9ybUxpbmVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGZvcm1Hcm91cE9ialtpdGVtLm5hbWVdID0gdGhpcy5mYi5jb250cm9sKFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICBmb3JtTGluZXNEYXRhSXRlbSAhPSBudWxsXG4gICAgICAgICAgICAgID8gZm9ybUxpbmVzRGF0YUl0ZW1baXRlbS5uYW1lXVxuICAgICAgICAgICAgICA6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsXG4gICAgICAgIH0sXG4gICAgICAgIGlzRW1wdHlMaW5lXG4gICAgICAgICAgPyBpdGVtLnJlcXVpcmUgJiYgIWl0ZW0uaGlkZVxuICAgICAgICAgICAgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgICAgIDogW11cbiAgICAgICAgICA6IGl0ZW0ucmVxdWlyZVxuICAgICAgICAgICAgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgICAgIDogW10sXG4gICAgICApO1xuICAgICAgaWYgKGl0ZW0uc2VsZWN0T3B0aW9uICYmIGl0ZW0uc2VsZWN0T3B0aW9uLmxhYmVsKSB7XG4gICAgICAgIGZvcm1Hcm91cE9ialtpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbF0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgICAgZm9ybUxpbmVzRGF0YUl0ZW0gIT0gbnVsbFxuICAgICAgICAgICAgPyBmb3JtTGluZXNEYXRhSXRlbVtpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbF0gfHwgbnVsbFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFtdLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g56iz5a6a6KGMIGlk77ya5pCc57Si6YeN5bu66KGo5Y2V5ZCO55So5LqO5L+d55WZ5Yu+6YCJXG4gICAgY29uc3Qgcm93SWQgPVxuICAgICAgIXJlZ2VuZXJhdGVSb3dJZCAmJiBmb3JtTGluZXNEYXRhSXRlbSAmJiBmb3JtTGluZXNEYXRhSXRlbS5faGRSb3dJZFxuICAgICAgICA/IGZvcm1MaW5lc0RhdGFJdGVtLl9oZFJvd0lkXG4gICAgICAgIDogdGhpcy5nZW5lcmF0ZVJvd0lkKCk7XG4gICAgZm9ybUdyb3VwT2JqLl9oZFJvd0lkID0gdGhpcy5mYi5jb250cm9sKHJvd0lkKTtcbiAgICBpZiAoZm9ybUxpbmVzRGF0YUl0ZW0gJiYgIWZvcm1MaW5lc0RhdGFJdGVtLl9oZFJvd0lkKSB7XG4gICAgICBmb3JtTGluZXNEYXRhSXRlbS5faGRSb3dJZCA9IHJvd0lkO1xuICAgIH1cblxuICAgIC8vIOWkjeWItua6kOihjOS4iuWkmuS9meeahOWtl+aute+8iOmakOiXj+mZhOWxnuWtl+auteOAgXNlbGVjdExpc3ROYW1lIOetie+8iVxuICAgIGlmIChmb3JtTGluZXNEYXRhSXRlbSkge1xuICAgICAgT2JqZWN0LmtleXMoZm9ybUxpbmVzRGF0YUl0ZW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSBcImxpbmVJbmRleFwiIHx8XG4gICAgICAgICAga2V5ID09PSBcImlzSGRGb3JtTGluZVNlYXJjaEFkZFwiIHx8XG4gICAgICAgICAga2V5ID09PSBcIl9oZFJvd0lkXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9ybUdyb3VwT2JqW2tleV0pIHtcbiAgICAgICAgICBmb3JtR3JvdXBPYmpba2V5XSA9IHRoaXMuZmIuY29udHJvbChmb3JtTGluZXNEYXRhSXRlbVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9ybUdyb3VwT2JqLmxpbmVJbmRleCA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoICsgMSxcbiAgICAgIFtdLFxuICAgICk7XG4gICAgLy8g5LuF55yf5q2j5paw5aKeL+WkjeWItueahOihjOWcqOaPkuWFpeWJjeWNleeLrOe9riB0cnVl77yb5pCc57Si6YeN5bu65bey5pyJ6KGM5b+F6aG75Li6IGZhbHNl77yMXG4gICAgLy8g5ZCm5YiZ562b6YCJ5oCB5LiL54K544CM5re75Yqg44CN5Lya5oqK56ys5LiA6KGM5Y+v6KeB5pWw5o2u5YaN5o+S5YWl5LiA5Lu9XG4gICAgZm9ybUdyb3VwT2JqLmlzSGRGb3JtTGluZVNlYXJjaEFkZCA9IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW10pO1xuICAgIGxldCBmb3JtR3JvdXBTdWJtaXQgPSB0aGlzLmZiLmdyb3VwKGZvcm1Hcm91cE9iaik7XG4gICAgdGhpcy5mb3JtTGluZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub25DaGFuZ2VFdmVudCkge1xuICAgICAgICBjb25zdCBkZWJvdW5jZU1zID1cbiAgICAgICAgICBpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWUgIT0gbnVsbFxuICAgICAgICAgICAgPyBpdGVtLm9uQ2hhbmdlRXZlbnREZWJvdW5jZVRpbWVcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cFN1Ym1pdC5nZXQoaXRlbS5uYW1lKTtcbiAgICAgICAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5SnVtcFRvTmV4dElucHV0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGl0ZW0ub25DaGFuZ2VFdmVudCwgdmFsdWUsIGZvcm1Hcm91cFN1Ym1pdCk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIOacqumFjee9ruaIluS4uiAw77ya5ZCM5q2l6K6i6ZiF77yM5LiN6LWwIGRlYm91bmNlVGltZVxuICAgICAgICBpZiAoZGVib3VuY2VNcyA+IDApIHtcbiAgICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKGRlYm91bmNlTXMpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShoYW5kbGVDaGFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShoYW5kbGVDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1Hcm91cFN1Ym1pdDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTGluZU51bWJlcigpIHtcbiAgICB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLmdldChcImxpbmVJbmRleFwiKS5zZXRWYWx1ZShpbmRleCArIDEsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDnvJbovpHnmoTml7blgJnmlbDmja7lpITnkIZcbiAgICovXG4gIGFkZEZvcm1MaW5lV2l0aERhdGEoKSB7XG4gICAgdGhpcy5mb3JtTGluZXNEYXRhLmZvckVhY2goKGZvcm1MaW5lc0RhdGFJdGVtKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzRm9ybUFycmF5Lmluc2VydChcbiAgICAgICAgdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGgsXG4gICAgICAgIHRoaXMuY3JlYXRlTGluZUZyb21WYWx1ZXMoZm9ybUxpbmVzRGF0YUl0ZW0pLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmNhbGN1bGF0ZUxpbmVOdW1iZXIoKTtcbiAgICB0aGlzLnRhYmxlTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOWcqOaMh+WumuihjOS4i+aWueaWsOWinuepuuihjO+8m+S4jeS8oCBhZnRlckxpbmUg5YiZ6L+95Yqg5Yiw5pyr5bC+XG4gICAqIEBwYXJhbSBhZnRlckxpbmUg5b2T5YmN6KGMIEZvcm1Hcm91cO+8iOS4jeimgeS8oCBsaW5lSW5kZXjvvIzpgb/lhY3luo/lj7flgY/np7vlr7zoh7Tmj5LplJnkvY3nva7vvIlcbiAgICovXG4gIGFkZEZvcm1MaW5lKGFmdGVyTGluZT86IEZvcm1Hcm91cCB8IG51bGwsIGlzRm9jdXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgaW5zZXJ0QXQgPSB0aGlzLmdldEluc2VydEluZGV4QWZ0ZXIoYWZ0ZXJMaW5lKTtcbiAgICBjb25zdCBuZXdMaW5lID0gdGhpcy5uZXdMaW5lSXRlbSgpO1xuICAgIHRoaXMubWFya1NlYXJjaEFkZGVkTGluZShuZXdMaW5lKTtcbiAgICB0aGlzLmxpbmVzRm9ybUFycmF5Lmluc2VydChpbnNlcnRBdCwgbmV3TGluZSk7XG4gICAgdGhpcy5jYWxjdWxhdGVMaW5lTnVtYmVyKCk7XG4gICAgdGhpcy5hZGRMaW5lRXZlbnQuZW1pdChuZXdMaW5lKTtcbiAgICAvLyDot7PliLDmlrDlop7ooYzmiYDlnKjpobXvvIzpgb/lhY3pobXnoIHlvILluLjml7bnnIvkuI3liLDmlbDmja5cbiAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPVxuICAgICAgTWF0aC5mbG9vcihpbnNlcnRBdCAvIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplKSArIDE7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgICBpZiAoaXNGb2N1cykge1xuICAgICAgICB0aGlzLmFjdGl2ZURvbVggPSB0aGlzLnRvUGFnZUxvY2FsUm93SW5kZXgoaW5zZXJ0QXQpO1xuICAgICAgICB0aGlzLmFjdGl2ZURvbVkgPSAwO1xuICAgICAgICBjb25zb2xlLmxvZyhcIuaJp+ihjOi/h+eoizEzXCIpO1xuICAgICAgICB0aGlzLmZvY3VzRG9tKHRoaXMuYWN0aXZlRG9tWCwgdGhpcy5hY3RpdmVEb21ZKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlpI3liLblvZPliY3ooYzvvJrlnKjlvZPliY3ooYzkuIvmlrnmlrDlop7kuIDooYzvvIzlpI3liLbmiYDmnInlrZfmrrXlgLzvvIjlkKvpmpDol4/lrZfmrrXvvIlcbiAgICovXG4gIGNvcHlGb3JtTGluZShsaW5lOiBGb3JtR3JvdXApIHtcbiAgICBjb25zdCBzb3VyY2VJbmRleCA9IHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMuaW5kZXhPZihsaW5lKTtcbiAgICBpZiAoc291cmNlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGdldFJhd1ZhbHVlIOWMheWQqyBkaXNhYmxlZCDlrZfmrrXvvJvlpI3liLbooYzkvb/nlKjmlrDnmoQgX2hkUm93SWRcbiAgICBjb25zdCBzb3VyY2VWYWx1ZXMgPSBsaW5lLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgaW5zZXJ0QXQgPSBzb3VyY2VJbmRleCArIDE7XG4gICAgY29uc3QgY29waWVkTGluZSA9IHRoaXMuY3JlYXRlTGluZUZyb21WYWx1ZXMoc291cmNlVmFsdWVzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgdGhpcy5tYXJrU2VhcmNoQWRkZWRMaW5lKGNvcGllZExpbmUpO1xuICAgIHRoaXMubGluZXNGb3JtQXJyYXkuaW5zZXJ0KGluc2VydEF0LCBjb3BpZWRMaW5lKTtcbiAgICB0aGlzLmNhbGN1bGF0ZUxpbmVOdW1iZXIoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29sbGVjdERvbURhdGEoKTtcbiAgICAgIHRoaXMuYWN0aXZlRG9tWCA9IHRoaXMudG9QYWdlTG9jYWxSb3dJbmRleChpbnNlcnRBdCk7XG4gICAgICB0aGlzLmFjdGl2ZURvbVkgPSAwO1xuICAgICAgdGhpcy5mb2N1c0RvbSh0aGlzLmFjdGl2ZURvbVgsIHRoaXMuYWN0aXZlRG9tWSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBAT3V0cHV0KCkgZGVsZXRlTGluZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiDliKDpmaTooYxcbiAgICogQHBhcmFtIGxpbmVPckluZGV4IOihjCBGb3JtR3JvdXDvvIzmiJYgMS1iYXNlZCDnmoQgbGluZUluZGV477yI5YW85a65IHJlc2V0Rm9ybe+8iVxuICAgKi9cbiAgZGVsZXRlRm9ybUxpbmUobGluZU9ySW5kZXg6IEZvcm1Hcm91cCB8IG51bWJlcikge1xuICAgIGxldCByZW1vdmVBdCA9IC0xO1xuICAgIGlmICh0eXBlb2YgbGluZU9ySW5kZXggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJlbW92ZUF0ID0gbGluZU9ySW5kZXggLSAxO1xuICAgIH0gZWxzZSBpZiAobGluZU9ySW5kZXgpIHtcbiAgICAgIHJlbW92ZUF0ID0gdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5pbmRleE9mKGxpbmVPckluZGV4KTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coXG4gICAgICBcImluZGV4XCIsXG4gICAgICB0eXBlb2YgbGluZU9ySW5kZXggPT09IFwibnVtYmVyXCIgPyBsaW5lT3JJbmRleCA6IHJlbW92ZUF0LFxuICAgICk7XG4gICAgaWYgKHJlbW92ZUF0IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyDmnIDlkI7kuIDmnaHmlbDmja7nmoTml7blgJnopoHliKTmlq3kuIDkuItcbiAgICBpZiAodGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGggPT09IDEgJiYgIXRoaXMuYWxsb3dFbXB0eSkge1xuICAgICAgaWYgKHRoaXMuZGVsZXRlTGFzdExpbmVFdmVudCkge1xuICAgICAgICB0aGlzLmRlbGV0ZUxhc3RMaW5lRXZlbnQuZW1pdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZW1vdmVkTGluZSA9IHRoaXMubGluZXNGb3JtQXJyYXkuYXQocmVtb3ZlQXQpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmxpbmVzRm9ybUFycmF5LnJlbW92ZUF0KHJlbW92ZUF0KTtcbiAgICB0aGlzLnJlbW92ZUxpbmVGcm9tU2VsZWN0aW9uKHJlbW92ZWRMaW5lKTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc0ZpbHRlckRhdGEgJiZcbiAgICAgIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMgJiZcbiAgICAgIHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoID09PSAwICYmXG4gICAgICAhdGhpcy5pc1RydWx5RW1wdHlBbGxvd2VkXG4gICAgKSB7XG4gICAgICB0aGlzLmFkZEZvcm1MaW5lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOW9k+WJjemhteW3suaXoOaVsOaNruaXtuWbnumAgOmhteegge+8jOS4lOmhteeggeacgOWwj+S4uiAx77yI6YG/5YWN5Yig56m65ZCO5Y+Y5oiQIDAg5a+86Ie05YaN5re75Yqg55yL5LiN6KeB77yJXG4gICAgICBjb25zdCBtYXhQYWdlID0gTWF0aC5tYXgoXG4gICAgICAgIDEsXG4gICAgICAgIE1hdGguY2VpbChcbiAgICAgICAgICB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCAvIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPiBtYXhQYWdlKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCA9IG1heFBhZ2U7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGN1bGF0ZUxpbmVOdW1iZXIoKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxlY3REb21EYXRhKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKiog562b6YCJ57uT5p6c5Lit5paw5aKeL+WkjeWItueahOihjOaJk+agh++8jOWGmeWbnuWFqOmHj+aVsOaNruWQjueri+WNs+a4heaOiSAqL1xuICBwcml2YXRlIG1hcmtTZWFyY2hBZGRlZExpbmUobGluZTogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRmlsdGVyRGF0YSB8fCAhbGluZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbGFnID0gbGluZS5nZXQoXCJpc0hkRm9ybUxpbmVTZWFyY2hBZGRcIik7XG4gICAgaWYgKGZsYWcpIHtcbiAgICAgIGZsYWcuc2V0VmFsdWUodHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiDlnKjmjIflrprooYzlkI7mlrnnmoTmj5LlhaXkuIvmoIfvvJvml6DooYzliJnov73liqDliLDmnKvlsL4gKi9cbiAgcHJpdmF0ZSBnZXRJbnNlcnRJbmRleEFmdGVyKGFmdGVyTGluZT86IEZvcm1Hcm91cCB8IG51bGwpOiBudW1iZXIge1xuICAgIGlmICghYWZ0ZXJMaW5lKSB7XG4gICAgICByZXR1cm4gdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IHRoaXMubGluZXNGb3JtQXJyYXkuY29udHJvbHMuaW5kZXhPZihhZnRlckxpbmUpO1xuICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIDEgOiB0aGlzLmxpbmVzRm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiDlhajlsYDooYzkuIvmoIfovazlvZPliY3pobXlhoXnmoTooYzkuIvmoIfvvIjkvpvogZrnhKbnlKjvvIkgKi9cbiAgcHJpdmF0ZSB0b1BhZ2VMb2NhbFJvd0luZGV4KGdsb2JhbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBnbG9iYWxJbmRleCAtICh0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggLSAxKSAqIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBwYWdlSW5kZXhDaGFuZ2UoZXZlbnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvblBhZ2VJbmRleCA9IGV2ZW50O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIHBhZ2VTaXplQ2hhbmdlKGV2ZW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSA9IGV2ZW50O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb2xsZWN0RG9tRGF0YSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkhkRm9ybVZhbHVlQ2hhbmdlZChkYXRhPzogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNGaWx0ZXJEYXRhKSB7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmxpbmVzICYmIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBkYXRhLmxpbmVzO1xuICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSB0aGlzLmZpbHRlckluZGV4U3RvcmUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJJbmRleFN0b3JlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YVtpdGVtXSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5maWx0ZXJTdG9yZUZvcm1MaW5lc0RhdGFbaW5kZXhdLFxuICAgICAgICAgICAgICAuLi5saW5lc1tpbmRleF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmVzLmxlbmd0aCA+IHRoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyDmnInmlrDlop7mlbDmja7nmoTmg4XlhrXvvJrlj6rorqTmnKzmrKHmoIforrDnmoTmlrDooYzvvIzlubbmj5LliLDnrZvpgInop4blm77kuK3nmoTlr7nlupTkvY3nva5cbiAgICAgICAgICBjb25zdCBnZXROb3dMaW5lcyA9IHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy5nZXRSYXdWYWx1ZSgpLmxpbmVzO1xuICAgICAgICAgIGxldCBhZGRJbmRleCA9IC0xO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2V0Tm93TGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChnZXROb3dMaW5lc1tpXS5pc0hkRm9ybUxpbmVTZWFyY2hBZGQpIHtcbiAgICAgICAgICAgICAgYWRkSW5kZXggPSBpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFkZEluZGV4ICE9PSAtMSAmJiB0aGlzLmZpbHRlckluZGV4U3RvcmUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0QXQgPVxuICAgICAgICAgICAgICBhZGRJbmRleCA8PSAwXG4gICAgICAgICAgICAgICAgPyB0aGlzLmZpbHRlckluZGV4U3RvcmVbMF1cbiAgICAgICAgICAgICAgICA6IHRoaXMuZmlsdGVySW5kZXhTdG9yZVthZGRJbmRleCAtIDFdICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkTGluZSA9IHtcbiAgICAgICAgICAgICAgLi4uZ2V0Tm93TGluZXNbYWRkSW5kZXhdLFxuICAgICAgICAgICAgICBpc0hkRm9ybUxpbmVTZWFyY2hBZGQ6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhLnNwbGljZShpbnNlcnRBdCwgMCwgYWRkZWRMaW5lKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJJbmRleFN0b3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlckluZGV4U3RvcmVbaV0gPj0gaW5zZXJ0QXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckluZGV4U3RvcmVbaV0rKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maWx0ZXJJbmRleFN0b3JlLnNwbGljZShhZGRJbmRleCwgMCwgaW5zZXJ0QXQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyU3RvcmVGb3JtTGluZXNEYXRhKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyU3RvcmVGb3JtTGluZXNEYXRhLnNwbGljZShhZGRJbmRleCwgMCwgYWRkZWRMaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZsYWdDdHJsID0gKHRoaXMubGluZXNGb3JtQXJyYXkuYXQoYWRkSW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KFxuICAgICAgICAgICAgICBcImlzSGRGb3JtTGluZVNlYXJjaEFkZFwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmbGFnQ3RybCkge1xuICAgICAgICAgICAgICBmbGFnQ3RybC5zZXRWYWx1ZShmYWxzZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDmnInliKDpmaTmlbDmja7nmoTmg4XlhrVcbiAgICAgICAgICAvLyBzdGVwIDE65YWI5om+5Yiw5Yig6Zmk55qEaW5kZXjkuIvmoIdcbiAgICAgICAgICBsZXQgZGVsZXRlZEluZGV4ID0gLTE7XG4gICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGVkSW5kZXggPSAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChsaW5lc1tpXS5saW5lSW5kZXggLSBjb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVkSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZWxldGVkSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBzdGVwIDI6IOWIoOmZpOaAu+aVsOaNruS4reeahOWvueW6lOaVsOaNriwg5oqK5LiL5qCH5pWw57uE5ZKMbGluZXPplb/luqblr7npvZDvvIzlkIzml7bmiorkuIvmoIfmlbDnu4TlnKhkZWxldGVkSW5kZXjlkI7pnaLnmoTlgLzlhajpg70tMVxuICAgICAgICAgICAgdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEgPSB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YS5maWx0ZXIoXG4gICAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCAhPT0gdGhpcy5maWx0ZXJJbmRleFN0b3JlW2RlbGV0ZWRJbmRleF07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJJbmRleFN0b3JlLnNwbGljZShkZWxldGVkSW5kZXgsIDEpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpbHRlckluZGV4U3RvcmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGkgPj0gZGVsZXRlZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbmRleFN0b3JlW2ldLS07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RlcCAyOiDmsqHmnInmib7liLBkZWxldGVkSW5kZXjor7TmmI7liKDpmaTmk43kvZzlnKjmnIDlkI7kuIDooYxcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckluZGV4ID1cbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbmRleFN0b3JlW3RoaXMuZmlsdGVySW5kZXhTdG9yZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVGb3JtTGluZXNEYXRhID0gdGhpcy5zdG9yZUZvcm1MaW5lc0RhdGEuZmlsdGVyKFxuICAgICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT09IGZpbHRlckluZGV4O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySW5kZXhTdG9yZS5wb3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGluZXMpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IGRhdGEubGluZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5saW5lcykge1xuICAgICAgICB0aGlzLnN0b3JlRm9ybUxpbmVzRGF0YSA9IGRhdGEubGluZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g5oC76KGo5Y2VXG4gICAgaWYgKCF0aGlzLmlzRmlsdGVyRGF0YSkge1xuICAgICAgdGhpcy5mb3JtVmFsaWQgPSB0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMudmFsaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZvcm1WYWxpZCkge1xuICAgICAgICAvLyDlpoLmnpzmlbTkvZPooajljZXmmK90cnVl77yM5LiN566h5a2Q6KGo5Y2V5piv5LuA5LmI77yM6YO95Y+Y5oiQ5a2Q6KGo5Y2V55qE54q25oCBXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkID0gdGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5aaC5p6c5pW05L2T6KGo5Y2V5pivZmFsc2XvvJox44CB5a2Q6KGo5Y2V5Li6dHJ1Ze+8jOmcgOimgemHjeeul++8mzLjgIHlrZDooajljZXkuLpmYWxzZe+8jOeUqOWtkOihqOWNleeKtuaAgVxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzLnZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5mb3JtVmFsaWQgPSB0aGlzLmlubmVyR2V0VmFsaWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvcm1WYWxpZCA9IHRoaXMudmFsaWRhdGVIZEZvcm1MaW5lcy52YWxpZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB0aGlzLmNhbGN1bGF0ZUxpbmVOdW1iZXIoKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodGhpcy52YWxpZGF0ZUhkRm9ybUxpbmVzKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMaXN0KGxpc3Q6IEFycmF5PEZvcm1MaW5lPik6IGJvb2xlYW4ge1xuICAgIGlmICghbGlzdCB8fCAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IG5hbWVMaXN0ID0gW107XG4gICAgbGV0IHNlbGVjdE9wdGlvbkNoZWNrTGlzdCA9IFtdO1xuICAgIGxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgLy8g5qCh6aqM5Y2V6aG56YCJ5oup5ZmoXG4gICAgICAvLyBpZiAoaXRlbS50eXBlID09PSBGb3JtTGluZVR5cGUuU2VsZWN0ICYmICghaXRlbS5zZWxlY3RMaXN0IHx8IChpdGVtLnNlbGVjdExpc3QgJiYgaXRlbS5zZWxlY3RMaXN0Lmxlbmd0aCA9PT0gMCkpKSB7XG4gICAgICAvLyAgIHRocm93ICdmb3JtTGluZXPnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZjlnKjljZXpobnpgInmi6nlmajmsqHmnInkvKDlhaXpgInpobkhJ1xuICAgICAgLy8gfVxuICAgICAgbmFtZUxpc3QucHVzaChpdGVtLm5hbWUpO1xuXG4gICAgICAvLyDmoKHpqozmnIlvblNlYXJjaOeahOWtl+auteeahHNlbGVjdE9wdGlvbueahHZhbHVl44CBbGFiZWzmmK/lkKblnKhmb3JtTGluZemHjOmdoumDveWumuS5ieS6hlxuICAgICAgaWYgKGl0ZW0ub25TZWFyY2hFdmVudCAmJiBpdGVtLnNlbGVjdE9wdGlvbikge1xuICAgICAgICBzZWxlY3RPcHRpb25DaGVja0xpc3QgPSBbXTtcbiAgICAgICAgbGlzdC5mb3JFYWNoKChpbm5lckl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbm5lckl0ZW0ubmFtZSA9PT0gaXRlbS5zZWxlY3RPcHRpb24udmFsdWUgfHxcbiAgICAgICAgICAgIGlubmVySXRlbS5uYW1lID09PSBpdGVtLnNlbGVjdE9wdGlvbi5sYWJlbFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VsZWN0T3B0aW9uQ2hlY2tMaXN0LnB1c2goaW5uZXJJdGVtLm5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzZWxlY3RPcHRpb25DaGVja0xpc3QubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IGBmb3JtTGluZXPnu4Tku7bmlbDmja7moLzlvI/kuI3op4TojIPvvIzlrZfmrrUke2l0ZW0ubmFtZX3nmoRzZWxlY3RPcHRpb27nmoR2YWx1ZeOAgWxhYmVs5a2X5q615pyq6IO95ZyoZm9ybUxpbmVz5Lit5om+5Yiw5a+55bqU5a2X5q6177yBYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIOagoemqjG5hbWXmmK/lkKbph43lpI1cbiAgICBpZiAoWy4uLm5ldyBTZXQobmFtZUxpc3QpXS5sZW5ndGggIT09IGxpc3QubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBcImZvcm1MaW5lc+e7hOS7tuaVsOaNruagvOW8j+S4jeinhOiMg++8jOWtmOWcqOmHjeWkjW5hbWXlgLwhXCI7XG4gICAgfVxuICAgIC8vIC4uLm1vcmUgY2hlY2tcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlRXZlbnQuZW1pdCh0aGlzLnZhbGlkYXRlSGRGb3JtTGluZXMuZ2V0UmF3VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIC8vIOWIoOmZpFxuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5saW5lc0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZvcm1MaW5lKGkpO1xuICAgIH1cbiAgICB0aGlzLnBhZ2luYXRpb25QYWdlSW5kZXggPSAxO1xuICB9XG5cbiAgcHVibGljIGlucHV0Q2xlYW4oZm9ybUl0ZW06IGFueSwgbGluZTogYW55KTogdm9pZCB7XG4gICAgbGluZS5nZXQoZm9ybUl0ZW0ubmFtZSkuc2V0VmFsdWUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0VmFsdWUoaWQ6IHN0cmluZywgcm93TnVtYmVyOiBudW1iZXIsIGNvbE51bWJlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXREb206IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoaWQpO1xuICAgIGlucHV0RG9tLnNlbGVjdCgpO1xuICAgIHRoaXMuc2V0QWN0aXZlRG9tSW5Gb3JtTGluZXMocm93TnVtYmVyLCBjb2xOdW1iZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZXh0V2lkdGhDYWNoZTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuXG4gIGlzVGV4dE92ZXJmbG93KHRleHQ6IHN0cmluZywgbWF4V2lkdGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNhY2hlZFdpZHRoID0gdGhpcy50ZXh0V2lkdGhDYWNoZVt0ZXh0XTtcbiAgICBpZiAoY2FjaGVkV2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFdpZHRoICsgMTUgPj0gbWF4V2lkdGg7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgIHNwYW4uc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgc3Bhbi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICBzcGFuLnN0eWxlLndoaXRlU3BhY2UgPSBcIm5vd3JhcFwiO1xuICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBcIjE0cHhcIjtcbiAgICBzcGFuLnN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiOyAvLyDlsIbmoLflvI/kv67mlLnkuLogaW5saW5lLWJsb2NrXG4gICAgc3Bhbi5pbm5lclRleHQgPSB0ZXh0O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgY29uc3QgaXNPdmVyZmxvdyA9IHNwYW4ub2Zmc2V0V2lkdGggKyAxNSA+PSBtYXhXaWR0aDtcbiAgICB0aGlzLnRleHRXaWR0aENhY2hlW3RleHRdID0gc3Bhbi5vZmZzZXRXaWR0aDtcbiAgICBzcGFuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNwYW4pO1xuICAgIHJldHVybiBpc092ZXJmbG93O1xuICB9XG5cbiAganVkZ2VDb2xFbXB0eShzdHI6IGFueSkge1xuICAgIGlmIChzdHIgfHwgc3RyID09PSAwKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCI856m6PlwiO1xuICAgIH1cbiAgfVxuXG4gIGp1ZGdlVmFsdWVJc05vdEVtcHR5KHN0cjogYW55KSB7XG4gICAgaWYgKHN0ciA9PT0gbnVsbCAmJiBzdHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==