@ai-table/grid 0.0.60 → 0.0.62

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.
@@ -23,6 +23,7 @@ export class AITableGrid extends AITableGridBase {
23
23
  this.isDragSelecting = false;
24
24
  this.dragSelectionStart = null;
25
25
  this.notifyService = inject(ThyNotifyService);
26
+ this.isPopoverOpen = false;
26
27
  this.fieldHeadHeight = AI_TABLE_FIELD_HEAD_HEIGHT;
27
28
  this.containerRect = signal({ width: 0, height: 0 });
28
29
  this.frozenColumnCount = signal(1);
@@ -215,7 +216,7 @@ export class AITableGrid extends AITableGridBase {
215
216
  context.setPointPosition(curMousePosition);
216
217
  }
217
218
  else {
218
- context.setPointPosition(DEFAULT_POINT_POSITION);
219
+ this.setDefaultPointPosition();
219
220
  }
220
221
  this.timer = null;
221
222
  if (this.isDragSelecting) {
@@ -293,8 +294,10 @@ export class AITableGrid extends AITableGridBase {
293
294
  cancelAnimationFrame(this.timer);
294
295
  }
295
296
  this.timer = requestAnimationFrame(() => {
296
- const { context } = this.aiTable;
297
- context.setPointPosition(DEFAULT_POINT_POSITION);
297
+ if (this.isPopoverOpen) {
298
+ return;
299
+ }
300
+ this.setDefaultPointPosition();
298
301
  });
299
302
  }
300
303
  stageContextmenu(e) {
@@ -385,7 +388,7 @@ export class AITableGrid extends AITableGridBase {
385
388
  y: containerRect.y + fieldGroupRect.y + fieldGroupRect.height
386
389
  };
387
390
  const editOrigin = this.containerElement().querySelector('.konvajs-content');
388
- this.aiTableGridFieldService.openFieldMenu(this.aiTable, {
391
+ const menuRef = this.aiTableGridFieldService.openFieldMenu(this.aiTable, {
389
392
  fieldId: fieldId,
390
393
  fieldMenus: this.fieldMenus(),
391
394
  origin: this.containerElement(),
@@ -393,6 +396,11 @@ export class AITableGrid extends AITableGridBase {
393
396
  editOrigin: editOrigin,
394
397
  editFieldPosition
395
398
  });
399
+ menuRef.afterClosed().subscribe(() => {
400
+ this.isPopoverOpen = false;
401
+ this.setDefaultPointPosition();
402
+ });
403
+ this.isPopoverOpen = true;
396
404
  }
397
405
  break;
398
406
  }
@@ -439,6 +447,10 @@ export class AITableGrid extends AITableGridBase {
439
447
  this.scrollAction({ deltaX: e.deltaX, deltaY: e.deltaY, shiftKey: e.shiftKey });
440
448
  });
441
449
  }
450
+ setDefaultPointPosition() {
451
+ const { context } = this.aiTable;
452
+ context.setPointPosition(DEFAULT_POINT_POSITION);
453
+ }
442
454
  bindScrollBarScroll() {
443
455
  fromEvent(this.horizontalBarRef().nativeElement, 'scroll', { passive: true })
444
456
  .pipe(takeUntilDestroyed(this.destroyRef))
@@ -619,4 +631,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
619
631
  class: 'ai-table-grid'
620
632
  }, imports: [AITableRenderer, AITableDragComponent], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n >\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n" }]
621
633
  }], ctorParameters: () => [] });
622
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUlOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQ0gsYUFBYSxFQUNiLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUN2QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUgsVUFBVSxFQUNWLGVBQWUsRUFHZixRQUFRLEVBRVIsT0FBTyxFQUVWLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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Q0FBQyw2WUN6RjlGLGd3Q0EyQkEsNENENkRjLGVBQWUsNk1BQUUsb0JBQW9COzs0RkFHdEMsV0FBVztrQkFYdkIsU0FBUzsrQkFDSSxlQUFlLGNBRWIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxlQUFlO3FCQUN6QixXQUNRLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLGFBQ3JDLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGFmdGVyTmV4dFJlbmRlcixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2lnbmFsLFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgS29FdmVudE9iamVjdCB9IGZyb20gJy4vYW5ndWxhci1rb252YSc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0NFTEwsXG4gICAgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT04sXG4gICAgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFELFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hULFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX09QQUNJVFlfTElORSxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWCxcbiAgICBBSV9UQUJMRV9QUkVWRU5UX0NMRUFSX1NFTEVDVElPTl9DTEFTUyxcbiAgICBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTixcbiAgICBBSV9UQUJMRV9ST1dfRFJBRyxcbiAgICBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YLFxuICAgIERCTF9DTElDS19FRElUX1RZUEUsXG4gICAgREVGQVVMVF9QT0lOVF9QT1NJVElPTixcbiAgICBERUZBVUxUX1NDUk9MTF9TVEFURVxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZEZpZWxkT3B0aW9ucyxcbiAgICBBZGRSZWNvcmRPcHRpb25zLFxuICAgIEFJVGFibGVGaWVsZCxcbiAgICBDb29yZGluYXRlLFxuICAgIFJlbmRlcmVyQ29udGV4dCxcbiAgICBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucyxcbiAgICBEcmFnRW5kRGF0YSxcbiAgICBEcmFnVHlwZSxcbiAgICBBSVJlY29yZEZpZWxkSWRQYXRoLFxuICAgIEFJVGFibGUsXG4gICAgSWRQYXRoXG59IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEJhc2UgfSBmcm9tICcuL2dyaWQtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZVJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlci9yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRGaWVsZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICAgIEFJVGFibGVBcmVhVHlwZSxcbiAgICBBSVRhYmxlQ29udGV4dE1lbnVJdGVtLFxuICAgIEFJVGFibGVNb3VzZURvd25UeXBlLFxuICAgIEFJVGFibGVSZW5kZXJlckNvbmZpZyxcbiAgICBBSVRhYmxlU2VsZWN0QWxsU3RhdGUsXG4gICAgU2Nyb2xsQWN0aW9uT3B0aW9uc1xufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gICAgQUlUYWJsZUdyaWRJMThuS2V5LFxuICAgIGJ1aWxkR3JpZExpbmVhclJvd3MsXG4gICAgZ2V0Q29sdW1uSW5kaWNlc1NpemVNYXAsXG4gICAgZ2V0RGV0YWlsQnlUYXJnZXROYW1lLFxuICAgIGdldEkxOG5UZXh0QnlLZXksXG4gICAgaGFuZGxlTW91c2VTdHlsZSxcbiAgICBpc0NlbGxNYXRjaEtleXdvcmRzLFxuICAgIGlzV2luZG93c1xufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGdldE1vdXNlUG9zaXRpb24gfSBmcm9tICcuL3V0aWxzL3Bvc2l0aW9uJztcbmltcG9ydCB7IEFJVGFibGVEcmFnQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhLCB3cml0ZVRvQ2xpcGJvYXJkLCB3cml0ZVRvQUlUYWJsZSwgQUlUYWJsZUFjdGlvbnMgfSBmcm9tICcuL3V0aWxzL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBUaHlOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9ub3RpZnknO1xuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdhaS10YWJsZS1ncmlkJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW0FJVGFibGVSZW5kZXJlciwgQUlUYWJsZURyYWdDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW0FJVGFibGVHcmlkRXZlbnRTZXJ2aWNlLCBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSwgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlR3JpZCBleHRlbmRzIEFJVGFibGVHcmlkQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgICBwcml2YXRlIGlzRHJhZ1NlbGVjdGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZSA9IGluamVjdChUaHlOb3RpZnlTZXJ2aWNlKTtcblxuICAgIHRpbWVyITogbnVtYmVyIHwgbnVsbDtcblxuICAgIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBmaWVsZEhlYWRIZWlnaHQgPSBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVDtcblxuICAgIGNvbnRhaW5lclJlY3QgPSBzaWduYWwoeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xuXG4gICAgZnJvemVuQ29sdW1uQ291bnQgPSBzaWduYWwoMSk7XG5cbiAgICBoYXNDb250YWluZXJSZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXJSZWN0KCkud2lkdGggPiAwICYmIHRoaXMuY29udGFpbmVyUmVjdCgpLmhlaWdodCA+IDA7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lcicpO1xuXG4gICAgdmVydGljYWxCYXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3ZlcnRpY2FsQmFyJyk7XG5cbiAgICBob3Jpem9udGFsQmFyUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdob3Jpem9udGFsQmFyJyk7XG5cbiAgICBsaW5lYXJSb3dzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gYnVpbGRHcmlkTGluZWFyUm93cyh0aGlzLmdyaWREYXRhKCkucmVjb3JkcywgIXRoaXMuYWlSZWFkb25seSgpKTtcbiAgICB9KTtcblxuICAgIHZpc2libGVDb2x1bW5zSW5kZXhNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBBSVRhYmxlLmdldFZpc2libGVGaWVsZHModGhpcy5haVRhYmxlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAoY29sdW1ucz8ubWFwKChpdGVtLCBpbmRleCkgPT4gW2l0ZW0uX2lkLCBpbmRleF0pKTtcbiAgICB9KTtcblxuICAgIHZpc2libGVSb3dzSW5kZXhNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKHRoaXMubGluZWFyUm93cygpLm1hcCgocm93LCBpbmRleCkgPT4gW3Jvdy5faWQsIGluZGV4XSkpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyRWxlbWVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyKCkhLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfSk7XG5cbiAgICByZW5kZXJlckNvbmZpZzogU2lnbmFsPEFJVGFibGVSZW5kZXJlckNvbmZpZz4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICBjb25zdCBjb29yZGluYXRlID0gbmV3IENvb3JkaW5hdGUoe1xuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgIHJvd0hlaWdodDogQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgICAgICAgICByb3dDb3VudDogdGhpcy5saW5lYXJSb3dzKCkubGVuZ3RoLFxuICAgICAgICAgICAgY29sdW1uQ291bnQ6IGZpZWxkcy5sZW5ndGgsXG4gICAgICAgICAgICByb3dJbml0U2l6ZTogQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgICAgICAgICBjb2x1bW5Jbml0U2l6ZTogQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsXG4gICAgICAgICAgICByb3dJbmRpY2VzU2l6ZU1hcDoge30sXG4gICAgICAgICAgICBjb2x1bW5JbmRpY2VzU2l6ZU1hcDogZ2V0Q29sdW1uSW5kaWNlc1NpemVNYXAodGhpcy5haVRhYmxlLCBmaWVsZHMpLFxuICAgICAgICAgICAgZnJvemVuQ29sdW1uQ291bnQ6IHRoaXMuZnJvemVuQ29sdW1uQ291bnQoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFpVGFibGU6IHRoaXMuYWlUYWJsZSxcbiAgICAgICAgICAgIGdyaWREYXRhOiB0aGlzLmdyaWREYXRhKCksXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgY29vcmRpbmF0ZTogY29vcmRpbmF0ZSxcbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiB0aGlzLmNvbnRhaW5lclJlY3QoKS53aWR0aCxcbiAgICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0LFxuICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy5haVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLmFpUmVhZG9ubHkoKSxcbiAgICAgICAgICAgIHJvd0RyYWdEaXNhYmxlZDogdGhpcy5haVJvd0RyYWdEaXNhYmxlZCgpLFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWU6IChvcHRpb25zOiBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVXBkYXRlRmllbGRWYWx1ZS5lbWl0KG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvb3JkaW5hdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyQ29uZmlnKCkuY29vcmRpbmF0ZTtcbiAgICB9KTtcblxuICAgIHNjcm9sbFRvdGFsSGVpZ2h0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5jb29yZGluYXRlKCkudG90YWxIZWlnaHQsIHRoaXMuY29udGFpbmVyUmVjdCgpLmhlaWdodCAtIHRoaXMuZmllbGRIZWFkSGVpZ2h0KTtcbiAgICB9KTtcblxuICAgIHNjcm9sbGJhcldpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlKCkudG90YWxXaWR0aCArIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEg7XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGFpbmVyUmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5iaW5kR2xvYmFsTW91c2Vkb3duKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lclJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRXaGVlbCgpO1xuICAgICAgICAgICAgdGhpcy5iaW5kQ2xpcGJvYXJkU2hvcnRjdXRzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29udGFpbmVyUmVjdCgpICYmIHRoaXMuaG9yaXpvbnRhbEJhclJlZigpICYmIHRoaXMudmVydGljYWxCYXJSZWYoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZFNjcm9sbEJhclNjcm9sbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0S2V5d29yZHNNYXRjaGVkQ2VsbHMoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIOW9k+aWsOWinuihjOmAieS4reeahGNlbGws57yW6L6R5ZCO77yMYWN0aXZlQ2VsbCDkuI3lnKjmlrDlop7nmoTooYzkuK3ml7bvvIzmoLnmja7nrZvpgIkg6L+H5ruk6KGM5pWw5o2uLOinpuWPkemHjeaWsOa4suafk1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUNlbGxQYXRoID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLmFjdGl2ZUNlbGw7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVDZWxsUGF0aCB8fCAhdGhpcy5haVRhYmxlLnJlY29yZHNXaWxsSGlkZGVuKCkuaW5jbHVkZXMoYWN0aXZlQ2VsbFBhdGhbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5haVRhYmxlLnJlY29yZHNXaWxsSGlkZGVuKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5yZWNvcmRzV2lsbEhpZGRlbi5zZXQoW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG5cbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZElkU2V0ID0gbmV3IFNldDxzdHJpbmc+KHRoaXMuYWlUYWJsZS5yZWNvcmRzKCkubWFwKChpdGVtKSA9PiBpdGVtLl9pZCkpO1xuICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRSZWNvcmRJZCBvZiBzZWxlY3RlZFJlY29yZHMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVjb3JkSWRTZXQuaGFzKHNlbGVjdGVkUmVjb3JkSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSZWNvcmRzLmRlbGV0ZShzZWxlY3RlZFJlY29yZElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuc2VsZWN0aW9uLnVwZGF0ZSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUmVjb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGxTdGF0ZTogdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0QWxsU3RhdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaW5pdENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0ID0gbmV3IFJlbmRlcmVyQ29udGV4dCh7XG4gICAgICAgICAgICBsaW5lYXJSb3dzOiB0aGlzLmxpbmVhclJvd3MsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uc0luZGV4TWFwOiB0aGlzLnZpc2libGVDb2x1bW5zSW5kZXhNYXAsXG4gICAgICAgICAgICB2aXNpYmxlUm93c0luZGV4TWFwOiB0aGlzLnZpc2libGVSb3dzSW5kZXhNYXAsXG4gICAgICAgICAgICBwb2ludFBvc2l0aW9uOiBzaWduYWwoREVGQVVMVF9QT0lOVF9QT1NJVElPTiksXG4gICAgICAgICAgICBzY3JvbGxTdGF0ZTogc2lnbmFsKERFRkFVTFRfU0NST0xMX1NUQVRFKSxcbiAgICAgICAgICAgIGZyb3plbkNvbHVtbkNvdW50OiB0aGlzLmZyb3plbkNvbHVtbkNvdW50LFxuICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy5haVJlZmVyZW5jZXMsXG4gICAgICAgICAgICBhaUZpZWxkQ29uZmlnOiB0aGlzLmFpRmllbGRDb25maWcsXG4gICAgICAgICAgICBzY3JvbGxBY3Rpb246IHRoaXMuc2Nyb2xsQWN0aW9uXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0S2V5d29yZHNNYXRjaGVkQ2VsbHMoKSB7XG4gICAgICAgIGNvbnN0IGtleXdvcmRzID0gdGhpcy5haUtleXdvcmRzKCk7XG4gICAgICAgIGxldCBtYXRjaGVkQ2VsbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBpZiAoa2V5d29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmFpUmVmZXJlbmNlcygpO1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlLnJlY29yZHMoKS5mb3JFYWNoKChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuZmllbGRzKCkuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2VsbE1hdGNoS2V5d29yZHModGhpcy5haVRhYmxlLCBmaWVsZCwgcmVjb3JkLl9pZCwga2V5d29yZHMsIHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkQ2VsbHMuYWRkKGAke3JlY29yZC5faWR9OiR7ZmllbGQuX2lkfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWlUYWJsZS5rZXl3b3Jkc01hdGNoZWRDZWxscy5zZXQobWF0Y2hlZENlbGxzKTtcbiAgICB9XG5cbiAgICBzdGFnZU1vdXNlbW92ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgICAgICBjb25zdCBncmlkU3RhZ2UgPSBlLmV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0U3RhZ2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGdyaWRTdGFnZT8uZ2V0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgICAgICAgICBpZiAocG9zID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udGV4dCB9ID0gdGhpcy5haVRhYmxlO1xuICAgICAgICAgICAgY29uc3QgeyB4LCB5IH0gPSBwb3M7XG4gICAgICAgICAgICBjb25zdCBjdXJNb3VzZVBvc2l0aW9uID0gZ2V0TW91c2VQb3NpdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUsXG4gICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgIHRoaXMuY29vcmRpbmF0ZSgpLFxuICAgICAgICAgICAgICAgIEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpLFxuICAgICAgICAgICAgICAgIGNvbnRleHQhLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBoYW5kbGVNb3VzZVN0eWxlKFxuICAgICAgICAgICAgICAgIGN1ck1vdXNlUG9zaXRpb24ucmVhbFRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgY3VyTW91c2VQb3NpdGlvbi5hcmVhVHlwZSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmFpUmVhZG9ubHkoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmFpUm93RHJhZ0Rpc2FibGVkKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY3VyTW91c2VQb3NpdGlvbi5hcmVhVHlwZSAhPT0gQUlUYWJsZUFyZWFUeXBlLm5vbmUpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0IS5zZXRQb2ludFBvc2l0aW9uKGN1ck1vdXNlUG9zaXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0IS5zZXRQb2ludFBvc2l0aW9uKERFRkFVTFRfUE9JTlRfUE9TSVRJT04pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdTZWxlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZpZWxkSWQsIHJlY29yZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoY3VyTW91c2VQb3NpdGlvbi5yZWFsVGFyZ2V0TmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkSWQgJiYgcmVjb3JkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gdGhpcy5kcmFnU2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZENlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGggPSBbcmVjb3JkSWQsIGZpZWxkSWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRDZWxsICYmICEhc3RhcnRDZWxsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q2VsbHMoc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhZ2VNb3VzZWRvd24oZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIGNvbnN0IF90YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuXG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0TmFtZSwgZmllbGRJZCwgcmVjb3JkSWQgfSA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShfdGFyZ2V0TmFtZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1vdXNlRXZlbnQuYnV0dG9uID09PSBBSVRhYmxlTW91c2VEb3duVHlwZS5SaWdodCAmJlxuICAgICAgICAgICAgcmVjb3JkSWQgJiZcbiAgICAgICAgICAgIGZpZWxkSWQgJiZcbiAgICAgICAgICAgICh0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzLmhhcyhyZWNvcmRJZCkgfHwgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuaGFzKGAke3JlY29yZElkfToke2ZpZWxkSWR9YCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0YXJnZXROYW1lKSB7XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQUQ6XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZmllbGRJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdEZpZWxkKGZpZWxkSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmllbGREcmFnU3RhcnQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQURfT1BBQ0lUWV9MSU5FOlxuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpZWxkV2lkdGhEcmFnU3RhcnQoZmllbGRJZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9DRUxMOlxuICAgICAgICAgICAgICAgIGlmICghcmVjb3JkSWQgfHwgIWZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggPSBbcmVjb3JkSWQsIGZpZWxkSWRdO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKHRydWUsIGRyYWdTZWxlY3Rpb25TdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q2VsbHMoZHJhZ1NlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19EUkFHOlxuICAgICAgICAgICAgICAgIGlmICghcmVjb3JkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmRzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3JkcztcbiAgICAgICAgICAgICAgICBsZXQgZHJhZ1JlY29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmVjb3Jkcy5oYXMocmVjb3JkSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRyYWdSZWNvcmRzID0gW3JlY29yZElkLCAuLi5zZWxlY3RlZFJlY29yZHMudmFsdWVzKCldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOW9k+WJjeaLluaLveihjOS4jeWcqOmAieS4reihjOS4re+8jOWPquaLluaLveW9k+WJjeihjFxuICAgICAgICAgICAgICAgICAgICBkcmFnUmVjb3JkcyA9IFtyZWNvcmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93RHJhZ1N0YXJ0KGRyYWdSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFnZU1vdXNldXAoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICB0aGlzLnVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZShmYWxzZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgc3RhZ2VNb3VzZWxlYXZlKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgICAgICBjb250ZXh0IS5zZXRQb2ludFBvc2l0aW9uKERFRkFVTFRfUE9JTlRfUE9TSVRJT04pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGFnZUNvbnRleHRtZW51KGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGUuZXZlbnQuZXZ0O1xuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWlSZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuICAgICAgICBjb25zdCB7IGZpZWxkSWQsIHJlY29yZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUodGFyZ2V0TmFtZSk7XG4gICAgICAgIGlmICghcmVjb3JkSWQgfHwgIWZpZWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgeDogbW91c2VFdmVudC54LFxuICAgICAgICAgICAgeTogbW91c2VFdmVudC55XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVudUl0ZW1zOiBBSVRhYmxlQ29udGV4dE1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuYWlDb250ZXh0TWVudUl0ZW1zKCkpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKC4uLnRoaXMuYWlDb250ZXh0TWVudUl0ZW1zKCkhKHRoaXMuYWlUYWJsZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWVudUl0ZW1zLmxlbmd0aCB8fCBtZW51SXRlbXMuZXZlcnkoKGl0ZW0pID0+ICEhKGl0ZW0uaGlkZGVuICYmIGl0ZW0uaGlkZGVuKHRoaXMuYWlUYWJsZSwgdGFyZ2V0TmFtZSwgcG9zaXRpb24pKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2Uub3BlbkNvbnRleHRNZW51KHRoaXMuYWlUYWJsZSwge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgIG1lbnVJdGVtcyxcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZlxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGFnZUNsaWNrKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZURldGFpbCA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShlLmV2ZW50LnRhcmdldC5uYW1lKCkpO1xuICAgICAgICB0aGlzLmFpQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZURldGFpbFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGUuZXZlbnQuZXZ0O1xuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuY2xvc2VDZWxsRWRpdG9yKCk7XG5cbiAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0TmFtZSwgcm93SW5kZXg6IHBvaW50Um93SW5kZXggfSA9IGNvbnRleHQhLnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uICE9PSBBSVRhYmxlTW91c2VEb3duVHlwZS5MZWZ0IHx8ICh0YXJnZXROYW1lICE9PSBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUgJiYgdGhpcy5haVJlYWRvbmx5KCkpKSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAodGFyZ2V0TmFtZSkge1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHJlY29yZHMsIGZpZWxkcyB9ID0gdGhpcy5ncmlkRGF0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNldEFjdGl2ZUNlbGwoW3JlY29yZHNbcmVjb3Jkcy5sZW5ndGggLSAxXS5faWQsIGZpZWxkc1swXS5faWRdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50UmVjb3JkSWQgPSBjb250ZXh0IS5saW5lYXJSb3dzKClbcG9pbnRSb3dJbmRleF0/Ll9pZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJlY29yZChwb2ludFJlY29yZElkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRF9TRUxFQ1RfQ0hFQ0tCT1g6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0QWxsU3RhdGUgPT09IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5hbGw7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RBbGwoIWlzQ2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkR3JvdXBSZWN0ID0gZS5ldmVudC50YXJnZXQuZ2V0UGFyZW50KCk/LmdldENsaWVudFJlY3QoKSE7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmllbGQodGhpcy5jb250YWluZXJFbGVtZW50KCksIHtcbiAgICAgICAgICAgICAgICAgICAgeDogZmllbGRHcm91cFJlY3QueCArIGNvbnRhaW5lclJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgeTogY29udGFpbmVyUmVjdC55ICsgZmllbGRHcm91cFJlY3QueSArIGZpZWxkR3JvdXBSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkU6XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF90YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmllbGRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKF90YXJnZXROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3JlUmVjdCA9IGUuZXZlbnQudGFyZ2V0LmdldENsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cFJlY3QgPSBlLmV2ZW50LnRhcmdldC5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldENsaWVudFJlY3QoKSE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGNvbnRhaW5lclJlY3QueCArIG1vcmVSZWN0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjb250YWluZXJSZWN0LnkgKyBtb3JlUmVjdC55ICsgbW9yZVJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRGaWVsZFBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY29udGFpbmVyUmVjdC54ICsgZmllbGRHcm91cFJlY3QueCAtIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNvbnRhaW5lclJlY3QueSArIGZpZWxkR3JvdXBSZWN0LnkgKyBmaWVsZEdyb3VwUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0T3JpZ2luID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkucXVlcnlTZWxlY3RvcignLmtvbnZhanMtY29udGVudCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlLm9wZW5GaWVsZE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRNZW51czogdGhpcy5maWVsZE1lbnVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0T3JpZ2luOiBlZGl0T3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdEZpZWxkUG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGFnZURibGNsaWNrKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgX3RhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVEZXRhaWwgPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgICAgICB0aGlzLmFpRGJDbGljay5lbWl0KHtcbiAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICB0YXJnZXROYW1lRGV0YWlsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFpUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBmaWVsZElkLCByZWNvcmRJZCB9ID0gdGFyZ2V0TmFtZURldGFpbDtcbiAgICAgICAgaWYgKCFyZWNvcmRJZCB8fCAhZmllbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5haVRhYmxlLmZpZWxkc01hcCgpW2ZpZWxkSWRdO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICBpZiAoREJMX0NMSUNLX0VESVRfVFlQRS5pbmNsdWRlcyhmaWVsZFR5cGUpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm9wZW5DZWxsRWRpdG9yKHRoaXMuYWlUYWJsZSwge1xuICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZElkISxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWQ6IHJlY29yZElkISxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy5haVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWYWx1ZTogKHZhbHVlOiBVcGRhdGVGaWVsZFZhbHVlT3B0aW9uczxhbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVXBkYXRlRmllbGRWYWx1ZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRXaGVlbCgpIHtcbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuY29udGFpbmVyRWxlbWVudCgpLCAnd2hlZWwnLCB7IHBhc3NpdmU6IGZhbHNlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGU6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5jbG9zZUNlbGxFZGl0b3IoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEFjdGlvbih7IGRlbHRhWDogZS5kZWx0YVgsIGRlbHRhWTogZS5kZWx0YVksIHNoaWZ0S2V5OiBlLnNoaWZ0S2V5IH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsQWN0aW9uID0gKG9wdGlvbnM6IFNjcm9sbEFjdGlvbk9wdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSwgc2hpZnRLZXkgfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBmaXhlZERlbHRhWSA9IHNoaWZ0S2V5ICYmIGlzV2luZG93cyA/IDAgOiBkZWx0YVk7XG4gICAgICAgICAgICBjb25zdCBmaXhlZERlbHRhWCA9IHNoaWZ0S2V5ICYmIGlzV2luZG93cyA/IGRlbHRhWSA6IGRlbHRhWDtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxCYXIgPSB0aGlzLmhvcml6b250YWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsQmFyID0gdGhpcy52ZXJ0aWNhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGhvcml6b250YWxCYXIpIHtcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsQmFyLnNjcm9sbExlZnQgPSBob3Jpem9udGFsQmFyLnNjcm9sbExlZnQgKyBmaXhlZERlbHRhWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2ZXJ0aWNhbEJhcikge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsQmFyLnNjcm9sbFRvcCA9IHZlcnRpY2FsQmFyLnNjcm9sbFRvcCArIGZpeGVkRGVsdGFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFjayAmJiBvcHRpb25zLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYmluZFNjcm9sbEJhclNjcm9sbCgpIHtcbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuaG9yaXpvbnRhbEJhclJlZigpIS5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxTY3JvbGwoZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy52ZXJ0aWNhbEJhclJlZigpIS5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2FsU2Nyb2xsKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kR2xvYmFsTW91c2Vkb3duKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWRvd24nLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5jb250YWlucyhlLnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFlLnRhcmdldC5jbG9zZXN0KEFJX1RBQkxFX1BSRVZFTlRfQ0xFQVJfU0VMRUNUSU9OX0NMQVNTKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKGZhbHNlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUoaXNEcmFnU2VsZWN0aW5nOiBib29sZWFuLCBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggfCBudWxsKSB7XG4gICAgICAgIHRoaXMuaXNEcmFnU2VsZWN0aW5nID0gaXNEcmFnU2VsZWN0aW5nO1xuICAgICAgICB0aGlzLmRyYWdTZWxlY3Rpb25TdGFydCA9IGRyYWdTZWxlY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoe1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhvcml6b250YWxTY3JvbGwgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCB9ID0gZS50YXJnZXQ7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7XG4gICAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGxpbmcoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB2ZXJ0aWNhbFNjcm9sbChlOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AgfSA9IGUudGFyZ2V0O1xuICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoe1xuICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGxpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbnRhaW5lclJlY3QoKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyUmVjdC5zZXQoe1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5vZmZzZXRIZWlnaHRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250YWluZXJSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IHRoaXMuY29vcmRpbmF0ZSgpLnRvdGFsV2lkdGggKyBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRIO1xuICAgICAgICAgICAgdGhpcy5zZXRDb250YWluZXJSZWN0KCk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyV2lkdGggPj0gdG90YWxXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7IHNjcm9sbExlZnQ6IDAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGFpbmVyRWxlbWVudCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRDbGlwYm9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgKGV2ZW50LmtleSA9PT0gJ2MnIHx8IGV2ZW50LmtleSA9PT0gJ3YnKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWlSZWFkb25seSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNTZWxlY3RlZENlbGxzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuc2l6ZSA+IDA7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNTZWxlY3RlZENlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNFZGl0aW5nQ2VsbCA9ICEhdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5nZXRDdXJyZW50RWRpdENlbGwoKTtcblxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdjJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gYnVpbGRDbGlwYm9hcmREYXRhKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvQ2xpcGJvYXJkKGNsaXBib2FyZERhdGEpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcGllZENlbGxzQ291bnQgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXRJMThuVGV4dEJ5S2V5KHRoaXMuYWlUYWJsZSwgQUlUYWJsZUdyaWRJMThuS2V5LmNvcGllZENlbGxzKS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2NvdW50fScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZENlbGxzQ291bnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLnN1Y2Nlc3MobWVzc2FnZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbUxlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAndicgJiYgIWhhc0VkaXRpbmdDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uczogQUlUYWJsZUFjdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlOiAoZGF0YTogVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVXBkYXRlRmllbGRWYWx1ZS5lbWl0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpZWxkOiAoZmllbGQ6IEFJVGFibGVGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlTZXRGaWVsZC5lbWl0KGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWVsZDogKGRhdGE6IEFkZEZpZWxkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlBZGRGaWVsZC5lbWl0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlY29yZDogKGRhdGE6IEFkZFJlY29yZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFJlY29yZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVG9BSVRhYmxlKHRoaXMuYWlUYWJsZSwgYWN0aW9ucykudGhlbigoaXNQYXN0ZVN1Y2Nlc3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXN0ZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuZXJyb3IoZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUsIEFJVGFibGVHcmlkSTE4bktleS5pbnZhbGlkUGFzdGVDb250ZW50KSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbUxlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRmllbGREcmFnU3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5haVJlYWRvbmx5KCkgJiYgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0ZWRGaWVsZHMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmRyYWcoe1xuICAgICAgICAgICAgICAgIHR5cGU6IERyYWdUeXBlLmZpZWxkLFxuICAgICAgICAgICAgICAgIHNvdXJjZUlkczogdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0ZWRGaWVsZHMsXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVGaWVsZFdpZHRoRHJhZ1N0YXJ0KGZpZWxkSWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmIGZpZWxkSWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmRyYWcoe1xuICAgICAgICAgICAgICAgIHR5cGU6IERyYWdUeXBlLmNvbHVtbldpZHRoLFxuICAgICAgICAgICAgICAgIHNvdXJjZUlkczogbmV3IFNldChbZmllbGRJZF0pLFxuICAgICAgICAgICAgICAgIHNjcm9sbDogdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUm93RHJhZ1N0YXJ0KHJlY29yZElkczogc3RyaW5nW10pIHtcbiAgICAgICAgaWYgKCF0aGlzLmFpUmVhZG9ubHkoKSAmJiAhdGhpcy5haVJvd0RyYWdEaXNhYmxlZCgpICYmIHJlY29yZElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5kcmFnKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5yZWNvcmQsXG4gICAgICAgICAgICAgICAgc291cmNlSWRzOiBuZXcgU2V0KHJlY29yZElkcyksXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbEJhciA9IHRoaXMuaG9yaXpvbnRhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbEJhciA9IHRoaXMudmVydGljYWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgbGV0IHNjcm9sbExlZnQgPSBob3Jpem9udGFsQmFyPy5zY3JvbGxMZWZ0IHx8IDA7XG4gICAgICAgIGxldCBzY3JvbGxUb3AgPSB2ZXJ0aWNhbEJhcj8uc2Nyb2xsVG9wIHx8IDA7XG4gICAgICAgIHJldHVybiB7IHg6IHNjcm9sbExlZnQsIHk6IHNjcm9sbFRvcCB9O1xuICAgIH1cblxuICAgIGRyYWdFbmQoZGF0YTogRHJhZ0VuZERhdGEpIHtcbiAgICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuZmllbGQ6XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZmllbGRzSW5kZXggJiYgaXNOdW1iZXIoZGF0YS50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmZpZWxkc0luZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpTW92ZUZpZWxkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IFtkYXRhLmZpZWxkc0luZGV4W2ldXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXRoOiBbZGF0YS50YXJnZXRJbmRleCArIGldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuY29sdW1uV2lkdGg6XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZmllbGRJZHMgJiYgaXNOdW1iZXIoZGF0YS53aWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRJZCA9IGRhdGEuZmllbGRJZHMudmFsdWVzKCkubmV4dCgpLnZhbHVlITtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5haVNldEZpZWxkV2lkdGguZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbZmllbGRJZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZGF0YS53aWR0aFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLnJlY29yZDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZWNvcmRJZHMgJiYgaXNOdW1iZXIoZGF0YS50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5haU1vdmVSZWNvcmRzLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWRzOiBBcnJheS5mcm9tKGRhdGEucmVjb3JkSWRzKS5tYXAoKGlkKSA9PiBbaWRdIGFzIElkUGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXRoOiBbZGF0YS50YXJnZXRJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhckRyYWcoKTtcbiAgICB9XG59XG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJhaS10YWJsZS1ncmlkLXZpZXdcIj5cbiAgICBAaWYgKGhhc0NvbnRhaW5lclJlY3QoKSkge1xuICAgICAgICA8YWktdGFibGUtcmVuZGVyZXJcbiAgICAgICAgICAgIFtjb25maWddPVwicmVuZGVyZXJDb25maWcoKVwiXG4gICAgICAgICAgICAoa29Nb3VzZW1vdmUpPVwic3RhZ2VNb3VzZW1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29Nb3VzZWRvd24pPVwic3RhZ2VNb3VzZWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29Nb3VzZXVwKT1cInN0YWdlTW91c2V1cCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0NvbnRleHRtZW51KT1cInN0YWdlQ29udGV4dG1lbnUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29DbGljayk9XCJzdGFnZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKGtvRGJsY2xpY2spPVwic3RhZ2VEYmxjbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNlbGVhdmUpPVwic3RhZ2VNb3VzZWxlYXZlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2ICNob3Jpem9udGFsQmFyIGNsYXNzPVwiYWktdGFibGUtaG9yaXpvbnRhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIiBbc3R5bGUud2lkdGgucHhdPVwiY29udGFpbmVyUmVjdCgpLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXRhYmxlLXNjcm9sbC1iYXItaW5uZXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsYmFyV2lkdGgoKVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI3ZlcnRpY2FsQmFyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhaS10YWJsZS12ZXJ0aWNhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29udGFpbmVyUmVjdCgpLmhlaWdodCAtIGZpZWxkSGVhZEhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJmaWVsZEhlYWRIZWlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10YWJsZS1zY3JvbGwtYmFyLWlubmVyXCIgW3N0eWxlLmhlaWdodC5weF09XCJzY3JvbGxUb3RhbEhlaWdodCgpXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9haS10YWJsZS1yZW5kZXJlcj5cbiAgICB9XG4gICAgPGFpLXRhYmxlLWRyYWcgKGRyYWdFbmQpPVwiZHJhZ0VuZCgkZXZlbnQpXCI+PC9haS10YWJsZS1kcmFnPlxuPC9kaXY+XG4iXX0=
634
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUlOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQ0gsYUFBYSxFQUNiLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUN2QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUgsVUFBVSxFQUNWLGVBQWUsRUFHZixRQUFRLEVBRVIsT0FBTyxFQUVWLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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Q3BCLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUM7d0JBQ2pFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7cUJBQzlCLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELE9BQU87UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pELENBQUM7K0dBbHNCUSxXQUFXO21HQUFYLFdBQVcsdUdBRlQsQ0FBQyx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSwyQkFBMkIsQ0FBQyw2WUN6RjlGLGd3Q0EyQkEsNENENkRjLGVBQWUsNk1BQUUsb0JBQW9COzs0RkFHdEMsV0FBVztrQkFYdkIsU0FBUzsrQkFDSSxlQUFlLGNBRWIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxlQUFlO3FCQUN6QixXQUNRLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLGFBQ3JDLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGFmdGVyTmV4dFJlbmRlcixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2lnbmFsLFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgS29FdmVudE9iamVjdCB9IGZyb20gJy4vYW5ndWxhci1rb252YSc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0NFTEwsXG4gICAgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT04sXG4gICAgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFELFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hULFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX09QQUNJVFlfTElORSxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWCxcbiAgICBBSV9UQUJMRV9QUkVWRU5UX0NMRUFSX1NFTEVDVElPTl9DTEFTUyxcbiAgICBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTixcbiAgICBBSV9UQUJMRV9ST1dfRFJBRyxcbiAgICBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YLFxuICAgIERCTF9DTElDS19FRElUX1RZUEUsXG4gICAgREVGQVVMVF9QT0lOVF9QT1NJVElPTixcbiAgICBERUZBVUxUX1NDUk9MTF9TVEFURVxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZEZpZWxkT3B0aW9ucyxcbiAgICBBZGRSZWNvcmRPcHRpb25zLFxuICAgIEFJVGFibGVGaWVsZCxcbiAgICBDb29yZGluYXRlLFxuICAgIFJlbmRlcmVyQ29udGV4dCxcbiAgICBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucyxcbiAgICBEcmFnRW5kRGF0YSxcbiAgICBEcmFnVHlwZSxcbiAgICBBSVJlY29yZEZpZWxkSWRQYXRoLFxuICAgIEFJVGFibGUsXG4gICAgSWRQYXRoXG59IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEJhc2UgfSBmcm9tICcuL2dyaWQtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZVJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlci9yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRGaWVsZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICAgIEFJVGFibGVBcmVhVHlwZSxcbiAgICBBSVRhYmxlQ29udGV4dE1lbnVJdGVtLFxuICAgIEFJVGFibGVNb3VzZURvd25UeXBlLFxuICAgIEFJVGFibGVSZW5kZXJlckNvbmZpZyxcbiAgICBBSVRhYmxlU2VsZWN0QWxsU3RhdGUsXG4gICAgU2Nyb2xsQWN0aW9uT3B0aW9uc1xufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gICAgQUlUYWJsZUdyaWRJMThuS2V5LFxuICAgIGJ1aWxkR3JpZExpbmVhclJvd3MsXG4gICAgZ2V0Q29sdW1uSW5kaWNlc1NpemVNYXAsXG4gICAgZ2V0RGV0YWlsQnlUYXJnZXROYW1lLFxuICAgIGdldEkxOG5UZXh0QnlLZXksXG4gICAgaGFuZGxlTW91c2VTdHlsZSxcbiAgICBpc0NlbGxNYXRjaEtleXdvcmRzLFxuICAgIGlzV2luZG93c1xufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGdldE1vdXNlUG9zaXRpb24gfSBmcm9tICcuL3V0aWxzL3Bvc2l0aW9uJztcbmltcG9ydCB7IEFJVGFibGVEcmFnQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhLCB3cml0ZVRvQ2xpcGJvYXJkLCB3cml0ZVRvQUlUYWJsZSwgQUlUYWJsZUFjdGlvbnMgfSBmcm9tICcuL3V0aWxzL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBUaHlOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9ub3RpZnknO1xuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdhaS10YWJsZS1ncmlkJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW0FJVGFibGVSZW5kZXJlciwgQUlUYWJsZURyYWdDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW0FJVGFibGVHcmlkRXZlbnRTZXJ2aWNlLCBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSwgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlR3JpZCBleHRlbmRzIEFJVGFibGVHcmlkQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgICBwcml2YXRlIGlzRHJhZ1NlbGVjdGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZSA9IGluamVjdChUaHlOb3RpZnlTZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgaXNQb3BvdmVyT3BlbiA9IGZhbHNlO1xuXG4gICAgdGltZXIhOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcmVzaXplT2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcblxuICAgIGZpZWxkSGVhZEhlaWdodCA9IEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hUO1xuXG4gICAgY29udGFpbmVyUmVjdCA9IHNpZ25hbCh7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG5cbiAgICBmcm96ZW5Db2x1bW5Db3VudCA9IHNpZ25hbCgxKTtcblxuICAgIGhhc0NvbnRhaW5lclJlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclJlY3QoKS53aWR0aCA+IDAgJiYgdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0ID4gMDtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyJyk7XG5cbiAgICB2ZXJ0aWNhbEJhclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndmVydGljYWxCYXInKTtcblxuICAgIGhvcml6b250YWxCYXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2hvcml6b250YWxCYXInKTtcblxuICAgIGxpbmVhclJvd3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBidWlsZEdyaWRMaW5lYXJSb3dzKHRoaXMuZ3JpZERhdGEoKS5yZWNvcmRzLCAhdGhpcy5haVJlYWRvbmx5KCkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZUNvbHVtbnNJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcChjb2x1bW5zPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiBbaXRlbS5faWQsIGluZGV4XSkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZVJvd3NJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAodGhpcy5saW5lYXJSb3dzKCkubWFwKChyb3csIGluZGV4KSA9PiBbcm93Ll9pZCwgaW5kZXhdKSk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXJFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIoKSEubmF0aXZlRWxlbWVudDtcbiAgICB9KTtcblxuICAgIHJlbmRlcmVyQ29uZmlnOiBTaWduYWw8QUlUYWJsZVJlbmRlcmVyQ29uZmlnPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSBuZXcgQ29vcmRpbmF0ZSh7XG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgcm93SGVpZ2h0OiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIHJvd0NvdW50OiB0aGlzLmxpbmVhclJvd3MoKS5sZW5ndGgsXG4gICAgICAgICAgICBjb2x1bW5Db3VudDogZmllbGRzLmxlbmd0aCxcbiAgICAgICAgICAgIHJvd0luaXRTaXplOiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIGNvbHVtbkluaXRTaXplOiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICAgICAgICAgIHJvd0luZGljZXNTaXplTWFwOiB7fSxcbiAgICAgICAgICAgIGNvbHVtbkluZGljZXNTaXplTWFwOiBnZXRDb2x1bW5JbmRpY2VzU2l6ZU1hcCh0aGlzLmFpVGFibGUsIGZpZWxkcyksXG4gICAgICAgICAgICBmcm96ZW5Db2x1bW5Db3VudDogdGhpcy5mcm96ZW5Db2x1bW5Db3VudCgpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWlUYWJsZTogdGhpcy5haVRhYmxlLFxuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEoKSxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlLFxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGg6IHRoaXMuY29udGFpbmVyUmVjdCgpLndpZHRoLFxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0OiB0aGlzLmNvbnRhaW5lclJlY3QoKS5oZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcygpLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuYWlSZWFkb25seSgpLFxuICAgICAgICAgICAgcm93RHJhZ0Rpc2FibGVkOiB0aGlzLmFpUm93RHJhZ0Rpc2FibGVkKCksXG4gICAgICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWYWx1ZTogKG9wdGlvbnM6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlVcGRhdGVGaWVsZFZhbHVlLmVtaXQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29vcmRpbmF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXJDb25maWcoKS5jb29yZGluYXRlO1xuICAgIH0pO1xuXG4gICAgc2Nyb2xsVG90YWxIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmNvb3JkaW5hdGUoKS50b3RhbEhlaWdodCwgdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0IC0gdGhpcy5maWVsZEhlYWRIZWlnaHQpO1xuICAgIH0pO1xuXG4gICAgc2Nyb2xsYmFyV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGUoKS50b3RhbFdpZHRoICsgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSDtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250YWluZXJSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRHbG9iYWxNb3VzZWRvd24oKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyUmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZFdoZWVsKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRDbGlwYm9hcmRTaG9ydGN1dHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDb250YWluZXJSZWN0KCkgJiYgdGhpcy5ob3Jpem9udGFsQmFyUmVmKCkgJiYgdGhpcy52ZXJ0aWNhbEJhclJlZigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kU2Nyb2xsQmFyU2Nyb2xsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRLZXl3b3Jkc01hdGNoZWRDZWxscygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8g5b2T5paw5aKe6KGM6YCJ5Lit55qEY2VsbCznvJbovpHlkI7vvIxhY3RpdmVDZWxsIOS4jeWcqOaWsOWinueahOihjOS4reaXtu+8jOagueaNruetm+mAiSDov4fmu6TooYzmlbDmja4s6Kem5Y+R6YeN5paw5riy5p+TXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlQ2VsbFBhdGggPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuYWN0aXZlQ2VsbDtcbiAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZUNlbGxQYXRoIHx8ICF0aGlzLmFpVGFibGUucmVjb3Jkc1dpbGxIaWRkZW4oKS5pbmNsdWRlcyhhY3RpdmVDZWxsUGF0aFswXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFpVGFibGUucmVjb3Jkc1dpbGxIaWRkZW4oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlLnJlY29yZHNXaWxsSGlkZGVuLnNldChbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkSWRTZXQgPSBuZXcgU2V0PHN0cmluZz4odGhpcy5haVRhYmxlLnJlY29yZHMoKS5tYXAoKGl0ZW0pID0+IGl0ZW0uX2lkKSk7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmRzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZFJlY29yZElkIG9mIHNlbGVjdGVkUmVjb3Jkcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvcmRJZFNldC5oYXMoc2VsZWN0ZWRSZWNvcmRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJlY29yZHMuZGVsZXRlKHNlbGVjdGVkUmVjb3JkSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24udXBkYXRlKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEFsbFN0YXRlOiB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RBbGxTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pbml0Q29udGV4dCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0Q29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQgPSBuZXcgUmVuZGVyZXJDb250ZXh0KHtcbiAgICAgICAgICAgIGxpbmVhclJvd3M6IHRoaXMubGluZWFyUm93cyxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5zSW5kZXhNYXA6IHRoaXMudmlzaWJsZUNvbHVtbnNJbmRleE1hcCxcbiAgICAgICAgICAgIHZpc2libGVSb3dzSW5kZXhNYXA6IHRoaXMudmlzaWJsZVJvd3NJbmRleE1hcCxcbiAgICAgICAgICAgIHBvaW50UG9zaXRpb246IHNpZ25hbChERUZBVUxUX1BPSU5UX1BPU0lUSU9OKSxcbiAgICAgICAgICAgIHNjcm9sbFN0YXRlOiBzaWduYWwoREVGQVVMVF9TQ1JPTExfU1RBVEUpLFxuICAgICAgICAgICAgZnJvemVuQ29sdW1uQ291bnQ6IHRoaXMuZnJvemVuQ29sdW1uQ291bnQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcyxcbiAgICAgICAgICAgIGFpRmllbGRDb25maWc6IHRoaXMuYWlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgIHNjcm9sbEFjdGlvbjogdGhpcy5zY3JvbGxBY3Rpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRLZXl3b3Jkc01hdGNoZWRDZWxscygpIHtcbiAgICAgICAgY29uc3Qga2V5d29yZHMgPSB0aGlzLmFpS2V5d29yZHMoKTtcbiAgICAgICAgbGV0IG1hdGNoZWRDZWxscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGlmIChrZXl3b3Jkcykge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuYWlSZWZlcmVuY2VzKCk7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGUucmVjb3JkcygpLmZvckVhY2goKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5maWVsZHMoKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDZWxsTWF0Y2hLZXl3b3Jkcyh0aGlzLmFpVGFibGUsIGZpZWxkLCByZWNvcmQuX2lkLCBrZXl3b3JkcywgcmVmZXJlbmNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDZWxscy5hZGQoYCR7cmVjb3JkLl9pZH06JHtmaWVsZC5faWR9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5haVRhYmxlLmtleXdvcmRzTWF0Y2hlZENlbGxzLnNldChtYXRjaGVkQ2VsbHMpO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2Vtb3ZlKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRTdGFnZSA9IGUuZXZlbnQuY3VycmVudFRhcmdldC5nZXRTdGFnZSgpO1xuICAgICAgICAgICAgY29uc3QgcG9zID0gZ3JpZFN0YWdlPy5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgICAgICAgIGlmIChwb3MgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHBvcztcbiAgICAgICAgICAgIGNvbnN0IGN1ck1vdXNlUG9zaXRpb24gPSBnZXRNb3VzZVBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZSxcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgdGhpcy5jb29yZGluYXRlKCksXG4gICAgICAgICAgICAgICAgQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSksXG4gICAgICAgICAgICAgICAgY29udGV4dCEsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlU3R5bGUoXG4gICAgICAgICAgICAgICAgY3VyTW91c2VQb3NpdGlvbi5yZWFsVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICBjdXJNb3VzZVBvc2l0aW9uLmFyZWFUeXBlLFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgIHRoaXMuYWlSZWFkb25seSgpLFxuICAgICAgICAgICAgICAgIHRoaXMuYWlSb3dEcmFnRGlzYWJsZWQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjdXJNb3VzZVBvc2l0aW9uLmFyZWFUeXBlICE9PSBBSVRhYmxlQXJlYVR5cGUubm9uZSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQhLnNldFBvaW50UG9zaXRpb24oY3VyTW91c2VQb3NpdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnU2VsZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWVsZElkLCByZWNvcmRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKGN1ck1vdXNlUG9zaXRpb24ucmVhbFRhcmdldE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZElkICYmIHJlY29yZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHRoaXMuZHJhZ1NlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRDZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoID0gW3JlY29yZElkLCBmaWVsZElkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbCAmJiAhIXN0YXJ0Q2VsbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENlbGxzKHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2Vkb3duKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGUuZXZlbnQuZXZ0O1xuICAgICAgICBjb25zdCBfdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcblxuICAgICAgICBjb25zdCB7IHRhcmdldE5hbWUsIGZpZWxkSWQsIHJlY29yZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtb3VzZUV2ZW50LmJ1dHRvbiA9PT0gQUlUYWJsZU1vdXNlRG93blR5cGUuUmlnaHQgJiZcbiAgICAgICAgICAgIHJlY29yZElkICYmXG4gICAgICAgICAgICBmaWVsZElkICYmXG4gICAgICAgICAgICAodGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5oYXMocmVjb3JkSWQpIHx8IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLmhhcyhgJHtyZWNvcmRJZH06JHtmaWVsZElkfWApKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGFyZ2V0TmFtZSkge1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEOlxuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RGaWVsZChmaWVsZElkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpZWxkRHJhZ1N0YXJ0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX09QQUNJVFlfTElORTpcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWVsZElkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWVsZFdpZHRoRHJhZ1N0YXJ0KGZpZWxkSWQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfQ0VMTDpcbiAgICAgICAgICAgICAgICBpZiAoIXJlY29yZElkIHx8ICFmaWVsZElkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZ1NlbGVjdGlvblN0YXJ0OiBBSVJlY29yZEZpZWxkSWRQYXRoID0gW3JlY29yZElkLCBmaWVsZElkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZSh0cnVlLCBkcmFnU2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENlbGxzKGRyYWdTZWxlY3Rpb25TdGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfRFJBRzpcbiAgICAgICAgICAgICAgICBpZiAoIXJlY29yZElkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHM7XG4gICAgICAgICAgICAgICAgbGV0IGRyYWdSZWNvcmRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJlY29yZHMuaGFzKHJlY29yZElkKSkge1xuICAgICAgICAgICAgICAgICAgICBkcmFnUmVjb3JkcyA9IFtyZWNvcmRJZCwgLi4uc2VsZWN0ZWRSZWNvcmRzLnZhbHVlcygpXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyDlvZPliY3mi5bmi73ooYzkuI3lnKjpgInkuK3ooYzkuK3vvIzlj6rmi5bmi73lvZPliY3ooYxcbiAgICAgICAgICAgICAgICAgICAgZHJhZ1JlY29yZHMgPSBbcmVjb3JkSWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJvd0RyYWdTdGFydChkcmFnUmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjpcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTjpcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWDpcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRF9TRUxFQ1RfQ0hFQ0tCT1g6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhZ2VNb3VzZXVwKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUoZmFsc2UsIG51bGwpO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2VsZWF2ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUG9wb3Zlck9wZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQb2ludFBvc2l0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YWdlQ29udGV4dG1lbnUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5haVJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgIGNvbnN0IHsgZmllbGRJZCwgcmVjb3JkSWQgfSA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZSh0YXJnZXROYW1lKTtcbiAgICAgICAgaWYgKCFyZWNvcmRJZCB8fCAhZmllbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICAgICAgICB4OiBtb3VzZUV2ZW50LngsXG4gICAgICAgICAgICB5OiBtb3VzZUV2ZW50LnlcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtZW51SXRlbXM6IEFJVGFibGVDb250ZXh0TWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5haUNvbnRleHRNZW51SXRlbXMoKSkge1xuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5haUNvbnRleHRNZW51SXRlbXMoKSEodGhpcy5haVRhYmxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZW51SXRlbXMubGVuZ3RoIHx8IG1lbnVJdGVtcy5ldmVyeSgoaXRlbSkgPT4gISEoaXRlbS5oaWRkZW4gJiYgaXRlbS5oaWRkZW4odGhpcy5haVRhYmxlLCB0YXJnZXROYW1lLCBwb3NpdGlvbikpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5vcGVuQ29udGV4dE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICBvcmlnaW46IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgbWVudUl0ZW1zLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YWdlQ2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lRGV0YWlsID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKGUuZXZlbnQudGFyZ2V0Lm5hbWUoKSk7XG4gICAgICAgIHRoaXMuYWlDbGljay5lbWl0KHtcbiAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICB0YXJnZXROYW1lRGV0YWlsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5jbG9zZUNlbGxFZGl0b3IoKTtcblxuICAgICAgICBjb25zdCB7IGNvbnRleHQgfSA9IHRoaXMuYWlUYWJsZTtcbiAgICAgICAgY29uc3QgeyB0YXJnZXROYW1lLCByb3dJbmRleDogcG9pbnRSb3dJbmRleCB9ID0gY29udGV4dCEucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICBpZiAobW91c2VFdmVudC5idXR0b24gIT09IEFJVGFibGVNb3VzZURvd25UeXBlLkxlZnQgfHwgKHRhcmdldE5hbWUgIT09IEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSAmJiB0aGlzLmFpUmVhZG9ubHkoKSkpIHJldHVybjtcbiAgICAgICAgc3dpdGNoICh0YXJnZXROYW1lKSB7XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFJlY29yZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVjb3JkcywgZmllbGRzIH0gPSB0aGlzLmdyaWREYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2V0QWN0aXZlQ2VsbChbcmVjb3Jkc1tyZWNvcmRzLmxlbmd0aCAtIDFdLl9pZCwgZmllbGRzWzBdLl9pZF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRSZWNvcmRJZCA9IGNvbnRleHQhLmxpbmVhclJvd3MoKVtwb2ludFJvd0luZGV4XT8uX2lkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjb3JkKHBvaW50UmVjb3JkSWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RBbGxTdGF0ZSA9PT0gQUlUYWJsZVNlbGVjdEFsbFN0YXRlLmFsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdEFsbCghaXNDaGVja2VkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cFJlY3QgPSBlLmV2ZW50LnRhcmdldC5nZXRQYXJlbnQoKT8uZ2V0Q2xpZW50UmVjdCgpITtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGaWVsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSwge1xuICAgICAgICAgICAgICAgICAgICB4OiBmaWVsZEdyb3VwUmVjdC54ICsgY29udGFpbmVyUmVjdC54LFxuICAgICAgICAgICAgICAgICAgICB5OiBjb250YWluZXJSZWN0LnkgKyBmaWVsZEdyb3VwUmVjdC55ICsgZmllbGRHcm91cFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRTpcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgX3RhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWVsZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vcmVSZWN0ID0gZS5ldmVudC50YXJnZXQuZ2V0Q2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwUmVjdCA9IGUuZXZlbnQudGFyZ2V0LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0Q2xpZW50UmVjdCgpITtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY29udGFpbmVyUmVjdC54ICsgbW9yZVJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNvbnRhaW5lclJlY3QueSArIG1vcmVSZWN0LnkgKyBtb3JlUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpZWxkUG9zaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjb250YWluZXJSZWN0LnggKyBmaWVsZEdyb3VwUmVjdC54IC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY29udGFpbmVyUmVjdC55ICsgZmllbGRHcm91cFJlY3QueSArIGZpZWxkR3JvdXBSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRPcmlnaW4gPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcua29udmFqcy1jb250ZW50JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lbnVSZWYgPSB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlLm9wZW5GaWVsZE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRNZW51czogdGhpcy5maWVsZE1lbnVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0T3JpZ2luOiBlZGl0T3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdEZpZWxkUG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1BvcG92ZXJPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQb2ludFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUG9wb3Zlck9wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhZ2VEYmxjbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGNvbnN0IF90YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lRGV0YWlsID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKF90YXJnZXROYW1lKTtcbiAgICAgICAgdGhpcy5haURiQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZURldGFpbFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5haVJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZmllbGRJZCwgcmVjb3JkSWQgfSA9IHRhcmdldE5hbWVEZXRhaWw7XG4gICAgICAgIGlmICghcmVjb3JkSWQgfHwgIWZpZWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWlUYWJsZS5maWVsZHNNYXAoKVtmaWVsZElkXTtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgaWYgKERCTF9DTElDS19FRElUX1RZUEUuaW5jbHVkZXMoZmllbGRUeXBlKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5vcGVuQ2VsbEVkaXRvcih0aGlzLmFpVGFibGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlOiB0aGlzLmNvb3JkaW5hdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGRJZCEsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZElkOiByZWNvcmRJZCEsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRoaXMuYWlSZWZlcmVuY2VzKCksXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWU6ICh2YWx1ZTogVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnM8YW55PikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVVwZGF0ZUZpZWxkVmFsdWUuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kV2hlZWwoKSB7XG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSwgJ3doZWVsJywgeyBwYXNzaXZlOiBmYWxzZSB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChlOiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuY2xvc2VDZWxsRWRpdG9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxBY3Rpb24oeyBkZWx0YVg6IGUuZGVsdGFYLCBkZWx0YVk6IGUuZGVsdGFZLCBzaGlmdEtleTogZS5zaGlmdEtleSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNjcm9sbEFjdGlvbiA9IChvcHRpb25zOiBTY3JvbGxBY3Rpb25PcHRpb25zKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGVsdGFYLCBkZWx0YVksIHNoaWZ0S2V5IH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgZml4ZWREZWx0YVkgPSBzaGlmdEtleSAmJiBpc1dpbmRvd3MgPyAwIDogZGVsdGFZO1xuICAgICAgICAgICAgY29uc3QgZml4ZWREZWx0YVggPSBzaGlmdEtleSAmJiBpc1dpbmRvd3MgPyBkZWx0YVkgOiBkZWx0YVg7XG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsQmFyID0gdGhpcy5ob3Jpem9udGFsQmFyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbEJhciA9IHRoaXMudmVydGljYWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChob3Jpem9udGFsQmFyKSB7XG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbEJhci5zY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbEJhci5zY3JvbGxMZWZ0ICsgZml4ZWREZWx0YVg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmVydGljYWxCYXIpIHtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEJhci5zY3JvbGxUb3AgPSB2ZXJ0aWNhbEJhci5zY3JvbGxUb3AgKyBmaXhlZERlbHRhWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2sgJiYgb3B0aW9ucy5jYWxsYmFjaygpO1xuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRQb2ludFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCB7IGNvbnRleHQgfSA9IHRoaXMuYWlUYWJsZTtcbiAgICAgICAgY29udGV4dCEuc2V0UG9pbnRQb3NpdGlvbihERUZBVUxUX1BPSU5UX1BPU0lUSU9OKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRTY3JvbGxCYXJTY3JvbGwoKSB7XG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLmhvcml6b250YWxCYXJSZWYoKSEubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsU2Nyb2xsKGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMudmVydGljYWxCYXJSZWYoKSEubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0aWNhbFNjcm9sbChlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZEdsb2JhbE1vdXNlZG93bigpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2Vkb3duJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jb250YWluZXJFbGVtZW50KCkuY29udGFpbnMoZS50YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhZS50YXJnZXQuY2xvc2VzdChBSV9UQUJMRV9QUkVWRU5UX0NMRUFSX1NFTEVDVElPTl9DTEFTUylcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZShmYWxzZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKGlzRHJhZ1NlbGVjdGluZzogYm9vbGVhbiwgZHJhZ1NlbGVjdGlvblN0YXJ0OiBBSVJlY29yZEZpZWxkSWRQYXRoIHwgbnVsbCkge1xuICAgICAgICB0aGlzLmlzRHJhZ1NlbGVjdGluZyA9IGlzRHJhZ1NlbGVjdGluZztcbiAgICAgICAgdGhpcy5kcmFnU2VsZWN0aW9uU3RhcnQgPSBkcmFnU2VsZWN0aW9uU3RhcnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFNjcm9sbGluZyA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQhLnNldFNjcm9sbFN0YXRlKHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBob3Jpem9udGFsU2Nyb2xsID0gKGU6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNjcm9sbExlZnQgfSA9IGUudGFyZ2V0O1xuICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoe1xuICAgICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsaW5nKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgdmVydGljYWxTY3JvbGwoZTogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wIH0gPSBlLnRhcmdldDtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQhLnNldFNjcm9sbFN0YXRlKHtcbiAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsaW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDb250YWluZXJSZWN0KCkge1xuICAgICAgICB0aGlzLmNvbnRhaW5lclJlY3Quc2V0KHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5jb250YWluZXJFbGVtZW50KCkub2Zmc2V0SGVpZ2h0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udGFpbmVyUmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsV2lkdGggPSB0aGlzLmNvb3JkaW5hdGUoKS50b3RhbFdpZHRoICsgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSDtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGFpbmVyUmVjdCgpO1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lcldpZHRoID49IHRvdGFsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoeyBzY3JvbGxMZWZ0OiAwIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kQ2xpcGJvYXJkU2hvcnRjdXRzKCkge1xuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIChldmVudC5rZXkgPT09ICdjJyB8fCBldmVudC5rZXkgPT09ICd2JykpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFpUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWRDZWxscyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLnNpemUgPiAwO1xuICAgICAgICAgICAgICAgIGlmICghaGFzU2VsZWN0ZWRDZWxscykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRWRpdGluZ0NlbGwgPSAhIXRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZ2V0Q3VycmVudEVkaXRDZWxsKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGJ1aWxkQ2xpcGJvYXJkRGF0YSh0aGlzLmFpVGFibGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0NsaXBib2FyZChjbGlwYm9hcmREYXRhKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3BpZWRDZWxsc0NvdW50ID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUsIEFJVGFibGVHcmlkSTE4bktleS5jb3BpZWRDZWxscykucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tjb3VudH0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRDZWxsc0NvdW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5zdWNjZXNzKG1lc3NhZ2UsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3YnICYmICFoYXNFZGl0aW5nQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnM6IEFJVGFibGVBY3Rpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWYWx1ZTogKGRhdGE6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVVwZGF0ZUZpZWxkVmFsdWUuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWVsZDogKGZpZWxkOiBBSVRhYmxlRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpU2V0RmllbGQuZW1pdChmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmllbGQ6IChkYXRhOiBBZGRGaWVsZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpQWRkRmllbGQuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSZWNvcmQ6IChkYXRhOiBBZGRSZWNvcmRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB3cml0ZVRvQUlUYWJsZSh0aGlzLmFpVGFibGUsIGFjdGlvbnMpLnRoZW4oKGlzUGFzdGVTdWNjZXNzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUGFzdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmVycm9yKGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlLCBBSVRhYmxlR3JpZEkxOG5LZXkuaW52YWxpZFBhc3RlQ29udGVudCksIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUZpZWxkRHJhZ1N0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkRmllbGRzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5kcmFnKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5maWVsZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VJZHM6IHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkRmllbGRzLFxuICAgICAgICAgICAgICAgIHNjcm9sbDogdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRmllbGRXaWR0aERyYWdTdGFydChmaWVsZElkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFpUmVhZG9ubHkoKSAmJiBmaWVsZElkKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5kcmFnKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICBzb3VyY2VJZHM6IG5ldyBTZXQoW2ZpZWxkSWRdKSxcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlOiB0aGlzLmNvb3JkaW5hdGUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJvd0RyYWdTdGFydChyZWNvcmRJZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGlmICghdGhpcy5haVJlYWRvbmx5KCkgJiYgIXRoaXMuYWlSb3dEcmFnRGlzYWJsZWQoKSAmJiByZWNvcmRJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuZHJhZyh7XG4gICAgICAgICAgICAgICAgdHlwZTogRHJhZ1R5cGUucmVjb3JkLFxuICAgICAgICAgICAgICAgIHNvdXJjZUlkczogbmV3IFNldChyZWNvcmRJZHMpLFxuICAgICAgICAgICAgICAgIHNjcm9sbDogdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxCYXIgPSB0aGlzLmhvcml6b250YWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdmVydGljYWxCYXIgPSB0aGlzLnZlcnRpY2FsQmFyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBzY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbEJhcj8uc2Nyb2xsTGVmdCB8fCAwO1xuICAgICAgICBsZXQgc2Nyb2xsVG9wID0gdmVydGljYWxCYXI/LnNjcm9sbFRvcCB8fCAwO1xuICAgICAgICByZXR1cm4geyB4OiBzY3JvbGxMZWZ0LCB5OiBzY3JvbGxUb3AgfTtcbiAgICB9XG5cbiAgICBkcmFnRW5kKGRhdGE6IERyYWdFbmREYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmZpZWxkOlxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpZWxkc0luZGV4ICYmIGlzTnVtYmVyKGRhdGEudGFyZ2V0SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5maWVsZHNJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haU1vdmVGaWVsZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbZGF0YS5maWVsZHNJbmRleFtpXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGF0aDogW2RhdGEudGFyZ2V0SW5kZXggKyBpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmNvbHVtbldpZHRoOlxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpZWxkSWRzICYmIGlzTnVtYmVyKGRhdGEud2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSWQgPSBkYXRhLmZpZWxkSWRzLnZhbHVlcygpLm5leHQoKS52YWx1ZSE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlTZXRGaWVsZFdpZHRoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW2ZpZWxkSWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGRhdGEud2lkdGhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5yZWNvcmQ6XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucmVjb3JkSWRzICYmIGlzTnVtYmVyKGRhdGEudGFyZ2V0SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlNb3ZlUmVjb3Jkcy5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZElkczogQXJyYXkuZnJvbShkYXRhLnJlY29yZElkcykubWFwKChpZCkgPT4gW2lkXSBhcyBJZFBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGF0aDogW2RhdGEudGFyZ2V0SW5kZXhdXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuY2xlYXJEcmFnKCk7XG4gICAgfVxufVxuIiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiYWktdGFibGUtZ3JpZC12aWV3XCI+XG4gICAgQGlmIChoYXNDb250YWluZXJSZWN0KCkpIHtcbiAgICAgICAgPGFpLXRhYmxlLXJlbmRlcmVyXG4gICAgICAgICAgICBbY29uZmlnXT1cInJlbmRlcmVyQ29uZmlnKClcIlxuICAgICAgICAgICAgKGtvTW91c2Vtb3ZlKT1cInN0YWdlTW91c2Vtb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgKGtvTW91c2Vkb3duKT1cInN0YWdlTW91c2Vkb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGtvTW91c2V1cCk9XCJzdGFnZU1vdXNldXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29Db250ZXh0bWVudSk9XCJzdGFnZUNvbnRleHRtZW51KCRldmVudClcIlxuICAgICAgICAgICAgKGtvQ2xpY2spPVwic3RhZ2VDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0RibGNsaWNrKT1cInN0YWdlRGJsY2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29Nb3VzZWxlYXZlKT1cInN0YWdlTW91c2VsZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiAjaG9yaXpvbnRhbEJhciBjbGFzcz1cImFpLXRhYmxlLWhvcml6b250YWwtc2Nyb2xsLWJhci13cmFwcGVyXCIgW3N0eWxlLndpZHRoLnB4XT1cImNvbnRhaW5lclJlY3QoKS53aWR0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10YWJsZS1zY3JvbGwtYmFyLWlubmVyXCIgW3N0eWxlLndpZHRoLnB4XT1cInNjcm9sbGJhcldpZHRoKClcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICN2ZXJ0aWNhbEJhclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWktdGFibGUtdmVydGljYWwtc2Nyb2xsLWJhci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNvbnRhaW5lclJlY3QoKS5oZWlnaHQgLSBmaWVsZEhlYWRIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiZmllbGRIZWFkSGVpZ2h0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdGFibGUtc2Nyb2xsLWJhci1pbm5lclwiIFtzdHlsZS5oZWlnaHQucHhdPVwic2Nyb2xsVG90YWxIZWlnaHQoKVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYWktdGFibGUtcmVuZGVyZXI+XG4gICAgfVxuICAgIDxhaS10YWJsZS1kcmFnIChkcmFnRW5kKT1cImRyYWdFbmQoJGV2ZW50KVwiPjwvYWktdGFibGUtZHJhZz5cbjwvZGl2PlxuIl19
@@ -46,8 +46,8 @@ export const createActiveCellBorder = (config) => {
46
46
  const currentConfig = {
47
47
  x: x + offset + AI_TABLE_OFFSET,
48
48
  y: y + AI_TABLE_OFFSET,
49
- width: width - AI_TABLE_OFFSET,
50
- height: rowHeight - AI_TABLE_OFFSET,
49
+ width: width - AI_TABLE_CELL_BORDER / 2,
50
+ height: rowHeight - AI_TABLE_CELL_BORDER / 2,
51
51
  strokeWidth: AI_TABLE_CELL_BORDER,
52
52
  stroke: colors.primary,
53
53
  fillEnabled: false,
@@ -67,4 +67,4 @@ export const createActiveCellBorder = (config) => {
67
67
  frozenActiveCellBorder
68
68
  };
69
69
  };
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWFjdGl2ZS1jZWxsLWJvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2NyZWF0aW9ucy9jcmVhdGUtYWN0aXZlLWNlbGwtYm9yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBc0IsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtJQUNqRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN2RyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQVEsQ0FBQztJQUN4QyxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsVUFBVSxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFFL0MsSUFBSSxnQkFBZ0IsR0FBc0IsSUFBSSxDQUFDO0lBQy9DLElBQUksc0JBQXNCLEdBQXNCLElBQUksQ0FBQztJQUVyRCxJQUNJLEtB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QUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlY3RDb25maWcgfSBmcm9tICdrb252YS9saWIvc2hhcGVzL1JlY3QnO1xuaW1wb3J0IHsgQUlfVEFCTEVfQ0VMTF9CT1JERVIsIEFJX1RBQkxFX09GRlNFVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ2VsbHNDb25maWcsIEFJVGFibGVSb3dUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGl2ZUNlbGxCb3JkZXIgPSAoY29uZmlnOiBBSVRhYmxlQ2VsbHNDb25maWcpID0+IHtcbiAgICBjb25zdCB7IGFpVGFibGUsIGNvb3JkaW5hdGUsIGNvbHVtblN0YXJ0SW5kZXgsIGNvbHVtblN0b3BJbmRleCwgcm93U3RhcnRJbmRleCwgcm93U3RvcEluZGV4IH0gPSBjb25maWc7XG4gICAgY29uc3QgeyBsaW5lYXJSb3dzIH0gPSBhaVRhYmxlLmNvbnRleHQhO1xuICAgIGNvbnN0IHsgcm93SGVpZ2h0LCBmcm96ZW5Db2x1bW5Db3VudCB9ID0gY29vcmRpbmF0ZTtcbiAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKGFpVGFibGUpO1xuICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSBBSVRhYmxlLmdldEFjdGl2ZUNlbGwoYWlUYWJsZSk7XG4gICAgY29uc3QgdG90YWxDb2x1bW5Db3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGxldCBhY3RpdmVDZWxsQm9yZGVyOiBSZWN0Q29uZmlnIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGZyb3plbkFjdGl2ZUNlbGxCb3JkZXI6IFJlY3RDb25maWcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChcbiAgICAgICAgQXJyYXkuaXNBcnJheShhY3RpdmVDZWxsKSAmJlxuICAgICAgICAhIWFjdGl2ZUNlbGwubGVuZ3RoICYmXG4gICAgICAgIGFpVGFibGUuY29udGV4dCEudmlzaWJsZVJvd3NJbmRleE1hcCgpLmhhcyhhY3RpdmVDZWxsWzBdKSAmJlxuICAgICAgICBhaVRhYmxlLmNvbnRleHQhLnZpc2libGVDb2x1bW5zSW5kZXhNYXAoKS5oYXMoYWN0aXZlQ2VsbFsxXSlcbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGRJZCA9IGFjdGl2ZUNlbGxbMV07XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXgsIGNvbHVtbkluZGV4IH0gPSBBSVRhYmxlLmdldENlbGxJbmRleChhaVRhYmxlLCBhY3RpdmVDZWxsKSE7XG5cbiAgICAgICAgY29uc3QgY2hlY2tJc1Zpc2libGUgPSAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4IDwgZnJvemVuQ29sdW1uQ291bnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcm93SW5kZXggPj0gcm93U3RhcnRJbmRleCAmJiByb3dJbmRleCA8PSByb3dTdG9wSW5kZXggJiYgY29sdW1uSW5kZXggPj0gY29sdW1uU3RhcnRJbmRleCAmJiBjb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJvd0luZGV4ICE9IG51bGwgJiYgY29sdW1uSW5kZXggIT0gbnVsbCAmJiBjaGVja0lzVmlzaWJsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IGxpbmVhclJvd3MoKVtyb3dJbmRleF07XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBBSVRhYmxlUm93VHlwZS5yZWNvcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVGaWVsZCA9IHZpc2libGVDb2x1bW5zLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5faWQgPT09IGZpZWxkSWQpO1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDZWxsQm9yZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuQWN0aXZlQ2VsbEJvcmRlclxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IGNvb3JkaW5hdGUuZ2V0Um93T2Zmc2V0KHJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRnJvemVuQ29sdW1uID0gY29sdW1uSW5kZXggPCBmcm96ZW5Db2x1bW5Db3VudDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG9mZnNldCwgd2lkdGggfSA9IGdldENlbGxIb3Jpem9udGFsUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiB0b3RhbENvbHVtbkNvdW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIG9mZnNldCArIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHJvd0hlaWdodCAtIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFJX1RBQkxFX0NFTExfQk9SREVSLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IGNvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWxsRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZzogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnJvemVuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb3plbkFjdGl2ZUNlbGxCb3JkZXIgPSBjdXJyZW50Q29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNlbGxCb3JkZXIgPSBjdXJyZW50Q29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGFjdGl2ZUNlbGxCb3JkZXIsXG4gICAgICAgIGZyb3plbkFjdGl2ZUNlbGxCb3JkZXJcbiAgICB9O1xufTtcbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWFjdGl2ZS1jZWxsLWJvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2NyZWF0aW9ucy9jcmVhdGUtYWN0aXZlLWNlbGwtYm9yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBc0IsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtJQUNqRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN2RyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQVEsQ0FBQztJQUN4QyxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsVUFBVSxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFFL0MsSUFBSSxnQkFBZ0IsR0FBc0IsSUFBSSxDQUFDO0lBQy9DLElBQUksc0JBQXNCLEdBQXNCLElBQUksQ0FBQztJQUVyRCxJQUNJLEtB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QkFBc0I7S0FDekIsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlY3RDb25maWcgfSBmcm9tICdrb252YS9saWIvc2hhcGVzL1JlY3QnO1xuaW1wb3J0IHsgQUlfVEFCTEVfQ0VMTF9CT1JERVIsIEFJX1RBQkxFX09GRlNFVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ2VsbHNDb25maWcsIEFJVGFibGVSb3dUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGl2ZUNlbGxCb3JkZXIgPSAoY29uZmlnOiBBSVRhYmxlQ2VsbHNDb25maWcpID0+IHtcbiAgICBjb25zdCB7IGFpVGFibGUsIGNvb3JkaW5hdGUsIGNvbHVtblN0YXJ0SW5kZXgsIGNvbHVtblN0b3BJbmRleCwgcm93U3RhcnRJbmRleCwgcm93U3RvcEluZGV4IH0gPSBjb25maWc7XG4gICAgY29uc3QgeyBsaW5lYXJSb3dzIH0gPSBhaVRhYmxlLmNvbnRleHQhO1xuICAgIGNvbnN0IHsgcm93SGVpZ2h0LCBmcm96ZW5Db2x1bW5Db3VudCB9ID0gY29vcmRpbmF0ZTtcbiAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKGFpVGFibGUpO1xuICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSBBSVRhYmxlLmdldEFjdGl2ZUNlbGwoYWlUYWJsZSk7XG4gICAgY29uc3QgdG90YWxDb2x1bW5Db3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGxldCBhY3RpdmVDZWxsQm9yZGVyOiBSZWN0Q29uZmlnIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGZyb3plbkFjdGl2ZUNlbGxCb3JkZXI6IFJlY3RDb25maWcgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChcbiAgICAgICAgQXJyYXkuaXNBcnJheShhY3RpdmVDZWxsKSAmJlxuICAgICAgICAhIWFjdGl2ZUNlbGwubGVuZ3RoICYmXG4gICAgICAgIGFpVGFibGUuY29udGV4dCEudmlzaWJsZVJvd3NJbmRleE1hcCgpLmhhcyhhY3RpdmVDZWxsWzBdKSAmJlxuICAgICAgICBhaVRhYmxlLmNvbnRleHQhLnZpc2libGVDb2x1bW5zSW5kZXhNYXAoKS5oYXMoYWN0aXZlQ2VsbFsxXSlcbiAgICApIHtcbiAgICAgICAgY29uc3QgZmllbGRJZCA9IGFjdGl2ZUNlbGxbMV07XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXgsIGNvbHVtbkluZGV4IH0gPSBBSVRhYmxlLmdldENlbGxJbmRleChhaVRhYmxlLCBhY3RpdmVDZWxsKSE7XG5cbiAgICAgICAgY29uc3QgY2hlY2tJc1Zpc2libGUgPSAocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4IDwgZnJvemVuQ29sdW1uQ291bnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcm93SW5kZXggPj0gcm93U3RhcnRJbmRleCAmJiByb3dJbmRleCA8PSByb3dTdG9wSW5kZXggJiYgY29sdW1uSW5kZXggPj0gY29sdW1uU3RhcnRJbmRleCAmJiBjb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJvd0luZGV4ICE9IG51bGwgJiYgY29sdW1uSW5kZXggIT0gbnVsbCAmJiBjaGVja0lzVmlzaWJsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IGxpbmVhclJvd3MoKVtyb3dJbmRleF07XG5cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBBSVRhYmxlUm93VHlwZS5yZWNvcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVGaWVsZCA9IHZpc2libGVDb2x1bW5zLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5faWQgPT09IGZpZWxkSWQpO1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVDZWxsQm9yZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuQWN0aXZlQ2VsbEJvcmRlclxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IGNvb3JkaW5hdGUuZ2V0Um93T2Zmc2V0KHJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRnJvemVuQ29sdW1uID0gY29sdW1uSW5kZXggPCBmcm96ZW5Db2x1bW5Db3VudDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG9mZnNldCwgd2lkdGggfSA9IGdldENlbGxIb3Jpem9udGFsUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50OiB0b3RhbENvbHVtbkNvdW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIG9mZnNldCArIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoIC0gQUlfVEFCTEVfQ0VMTF9CT1JERVIgLyAyLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHJvd0hlaWdodCAtIEFJX1RBQkxFX0NFTExfQk9SREVSIC8gMixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFJX1RBQkxFX0NFTExfQk9SREVSLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IGNvbG9ycy5wcmltYXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWxsRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZzogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnJvemVuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb3plbkFjdGl2ZUNlbGxCb3JkZXIgPSBjdXJyZW50Q29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNlbGxCb3JkZXIgPSBjdXJyZW50Q29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGFjdGl2ZUNlbGxCb3JkZXIsXG4gICAgICAgIGZyb3plbkFjdGl2ZUNlbGxCb3JkZXJcbiAgICB9O1xufTtcbiJdfQ==
@@ -156,7 +156,7 @@ export class AITableGridEventService {
156
156
  aiTable: aiTable
157
157
  },
158
158
  panelClass: 'grid-cell-editor',
159
- outsideClosable: true,
159
+ outsideClosable: false,
160
160
  hasBackdrop: false,
161
161
  manualClosure: true,
162
162
  animationDisabled: true,
@@ -236,4 +236,4 @@ export class AITableGridEventService {
236
236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableGridEventService, decorators: [{
237
237
  type: Injectable
238
238
  }] });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQXVCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQUd2RixNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBTUksbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRTNDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUU1QyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFFNUMsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUVsRCwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBSTFDLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQXdPM0M7SUF0T0cs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QUFFLElBQUk7WUFDcEIsZ0JBQWdCO1lBQ2hCLFlBQVksRUFBRTtnQkFDVixPQUFPO2dCQUNQLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixRQUFRO2FBQ1g7U0FDSixDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7K0dBMVBRLHVCQUF1QjttSEFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUaHlBYnN0cmFjdEludGVybmFsT3ZlcmxheVJlZiB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlQb3BvdmVyLCBUaHlQb3BvdmVyUmVmIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEVkaXRDZWxsRWRpdG9yIH0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBHUklEX0NFTExfRURJVE9SX01BUCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVJlY29yZEZpZWxkSWRQYXRoLCBBSVRhYmxlLCBBSVRhYmxlRmllbGRUeXBlIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ29udGV4dE1lbnVPcHRpb25zLCBBSVRhYmxlR3JpZENlbGxSZW5kZXJTY2hlbWEsIEFJVGFibGVPcGVuRWRpdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRDZWxsSG9yaXpvbnRhbFBvc2l0aW9uLCBnZXRFZGl0b3JCb3hPZmZzZXQsIGdldEVkaXRvclNwYWNlLCBnZXRIb3ZlckVkaXRvckJveE9mZnNldCwgZ2V0SG92ZXJFZGl0b3JTcGFjZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEFJVGFibGVDb250ZXh0TWVudSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQUlUYWJsZUdyaWRFdmVudFNlcnZpY2Uge1xuICAgIGFpVGFibGUhOiBBSVRhYmxlO1xuXG4gICAgYWlGaWVsZFJlbmRlcmVycz86IFBhcnRpYWw8UmVjb3JkPEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVHcmlkQ2VsbFJlbmRlclNjaGVtYT4+O1xuXG4gICAgZGJsQ2xpY2tFdmVudCQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuXG4gICAgbW91c2Vkb3duRXZlbnQkID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuICAgIG1vdXNlb3ZlckV2ZW50JCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQ+KCk7XG5cbiAgICBnbG9iYWxNb3VzZW92ZXJFdmVudCQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuXG4gICAgZ2xvYmFsTW91c2Vkb3duRXZlbnQkID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuICAgIHByaXZhdGUgY2VsbEVkaXRvclBvcG92ZXJSZWYhOiBUaHlQb3BvdmVyUmVmPEFic3RyYWN0RWRpdENlbGxFZGl0b3I8YW55Pj4gfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSB0aHlQb3BvdmVyID0gaW5qZWN0KFRoeVBvcG92ZXIpO1xuXG4gICAgaW5pdGlhbGl6ZShhaVRhYmxlOiBBSVRhYmxlLCBhaUZpZWxkUmVuZGVyZXJzPzogUGFydGlhbDxSZWNvcmQ8QUlUYWJsZUZpZWxkVHlwZSwgQUlUYWJsZUdyaWRDZWxsUmVuZGVyU2NoZW1hPj4pIHtcbiAgICAgICAgdGhpcy5haVRhYmxlID0gYWlUYWJsZTtcbiAgICAgICAgdGhpcy5haUZpZWxkUmVuZGVyZXJzID0gYWlGaWVsZFJlbmRlcmVycztcbiAgICB9XG5cbiAgICByZWdpc3RlckV2ZW50cyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudCwgJ2RibGNsaWNrJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYmxDbGlja0V2ZW50JC5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50LCAnbW91c2VvdmVyJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoODApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZW92ZXJFdmVudCQubmV4dChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW92ZXInLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbE1vdXNlb3ZlckV2ZW50JC5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50LCAnbW91c2Vkb3duJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCQubmV4dChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWRvd24nLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbE1vdXNlZG93bkV2ZW50JC5uZXh0KGV2ZW50IGFzIE1vdXNlRXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFZGl0b3JDb21wb25lbnQodHlwZTogQUlUYWJsZUZpZWxkVHlwZSkge1xuICAgICAgICBjb25zdCBmaWxlZFJlbmRlclNjaGVtYSA9IHRoaXMuYWlGaWVsZFJlbmRlcmVycyAmJiB0aGlzLmFpRmllbGRSZW5kZXJlcnNbdHlwZV07XG4gICAgICAgIGlmIChmaWxlZFJlbmRlclNjaGVtYSAmJiBmaWxlZFJlbmRlclNjaGVtYS5lZGl0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBmaWxlZFJlbmRlclNjaGVtYS5lZGl0b3IsXG4gICAgICAgICAgICAgICAgaXNJbnRlcm5hbENvbXBvbmVudDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogR1JJRF9DRUxMX0VESVRPUl9NQVBbdHlwZV0sXG4gICAgICAgICAgICBpc0ludGVybmFsQ29tcG9uZW50OiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb3BlbkVkaXQoY2VsbERvbTogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBjZWxsRG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBmaWVsZElkID0gY2VsbERvbS5nZXRBdHRyaWJ1dGUoJ2ZpZWxkSWQnKSE7XG4gICAgICAgIGNvbnN0IHJlY29yZElkID0gY2VsbERvbS5nZXRBdHRyaWJ1dGUoJ3JlY29yZElkJykhO1xuICAgICAgICBjb25zdCB7IGNvbXBvbmVudCB9ID0gdGhpcy5nZXRFZGl0b3JDb21wb25lbnQodGhpcy5haVRhYmxlLmZpZWxkc01hcCgpW2ZpZWxkSWRdLnR5cGUpO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnRoeVBvcG92ZXIub3Blbihjb21wb25lbnQsIHtcbiAgICAgICAgICAgIG9yaWdpbjogY2VsbERvbSxcbiAgICAgICAgICAgIG9yaWdpblBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogeCAtIDEsXG4gICAgICAgICAgICAgICAgeTogeSArIDEsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoICsgMixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCArIDJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggKyAxICsgJ3B4JyxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgMiArICdweCcsXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgICAgb2Zmc2V0OiAtKGhlaWdodCArIDQpLFxuICAgICAgICAgICAgbWluV2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGRJZCxcbiAgICAgICAgICAgICAgICByZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgYWlUYWJsZTogdGhpcy5haVRhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2dyaWQtY2VsbC1lZGl0b3InLFxuICAgICAgICAgICAgb3V0c2lkZUNsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgIG1hbnVhbENsb3N1cmU6IHRydWUsXG4gICAgICAgICAgICBhbmltYXRpb25EaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9BZGFwdGl2ZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICB9XG5cbiAgICBnZXRPcmlnaW5Qb3NpdGlvbihhaVRhYmxlOiBBSVRhYmxlLCBvcHRpb25zOiBBSVRhYmxlT3BlbkVkaXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgY29udGFpbmVyLCBjb29yZGluYXRlLCByZWNvcmRJZCwgZmllbGRJZCwgaXNIb3ZlckVkaXQgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsU3RhdGUgfSA9IGFpVGFibGUuY29udGV4dCE7XG4gICAgICAgIGNvbnN0IHsgcm93SGVpZ2h0LCBjb2x1bW5Db3VudCB9ID0gY29vcmRpbmF0ZTtcbiAgICAgICAgY29uc3QgY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCA9IFtyZWNvcmRJZCwgZmllbGRJZF07XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXgsIGNvbHVtbkluZGV4IH0gPSBBSVRhYmxlLmdldENlbGxJbmRleChhaVRhYmxlLCBjZWxsKSE7XG4gICAgICAgIGNvbnN0IG9yaWdpblggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IG9yaWdpblkgPSBjb29yZGluYXRlLmdldFJvd09mZnNldChyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG9yaWdpbldpZHRoLCBvZmZzZXQ6IG9yaWdpbk9mZnNldCB9ID0gZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbih7XG4gICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgY29sdW1uQ291bnRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9yaWdpblJlY3QgPSBjb250YWluZXIhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBpc0Zyb3plbkNvbHVtbiA9IEFJVGFibGUuaXNGcm96ZW5Db2x1bW4oYWlUYWJsZSwgY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gaXNGcm96ZW5Db2x1bW4gPyAwIDogc2Nyb2xsU3RhdGUoKS5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBzY3JvbGxTdGF0ZSgpLnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3Qgb3JpZ2luUG9zaXRpb24gPSB7XG4gICAgICAgICAgICB4OiBvcmlnaW5YICsgb3JpZ2luT2Zmc2V0IC0gc2Nyb2xsTGVmdCArIG9yaWdpblJlY3QueCxcbiAgICAgICAgICAgIHk6IG9yaWdpblkgLSBzY3JvbGxUb3AgKyBvcmlnaW5SZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJvd0hlaWdodFxuICAgICAgICB9O1xuICAgICAgICBsZXQgeCA9IG9yaWdpblBvc2l0aW9uLnggKyBnZXRFZGl0b3JCb3hPZmZzZXQoKTtcbiAgICAgICAgbGV0IHkgPSBvcmlnaW5Qb3NpdGlvbi55ICsgZ2V0RWRpdG9yQm94T2Zmc2V0KCk7XG4gICAgICAgIGxldCB3aWR0aCA9IGdldEVkaXRvclNwYWNlKG9yaWdpblBvc2l0aW9uLndpZHRoKTtcbiAgICAgICAgbGV0IGhlaWdodCA9IGdldEVkaXRvclNwYWNlKG9yaWdpblBvc2l0aW9uLmhlaWdodCk7XG4gICAgICAgIC8vIGhvdmVyIOe8lui+kee7hOS7tuaXoOi+ueahhlxuICAgICAgICBpZiAoaXNIb3ZlckVkaXQpIHtcbiAgICAgICAgICAgIHggPSBvcmlnaW5Qb3NpdGlvbi54ICsgZ2V0SG92ZXJFZGl0b3JCb3hPZmZzZXQoKTtcbiAgICAgICAgICAgIHkgPSBvcmlnaW5Qb3NpdGlvbi55ICsgZ2V0SG92ZXJFZGl0b3JCb3hPZmZzZXQoKTtcbiAgICAgICAgICAgIHdpZHRoID0gZ2V0SG92ZXJFZGl0b3JTcGFjZShvcmlnaW5Qb3NpdGlvbi53aWR0aCk7XG4gICAgICAgICAgICBoZWlnaHQgPSBnZXRIb3ZlckVkaXRvclNwYWNlKG9yaWdpblBvc2l0aW9uLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm9yaWdpblBvc2l0aW9uLFxuICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgIHk6IHksXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9wZW5DZWxsRWRpdG9yKGFpVGFibGU6IEFJVGFibGUsIG9wdGlvbnM6IEFJVGFibGVPcGVuRWRpdE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBjb250YWluZXIsIHJlY29yZElkLCBmaWVsZElkLCBpc0hvdmVyRWRpdCwgcmVmZXJlbmNlcyB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBjb21wb25lbnQsIGlzSW50ZXJuYWxDb21wb25lbnQgfSA9IHRoaXMuZ2V0RWRpdG9yQ29tcG9uZW50KHRoaXMuYWlUYWJsZS5maWVsZHNNYXAoKVtmaWVsZElkXS50eXBlKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0T3JpZ2luUG9zaXRpb24gPSB0aGlzLmdldE9yaWdpblBvc2l0aW9uKGFpVGFibGUsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmID0gdGhpcy50aHlQb3BvdmVyLm9wZW4oY29tcG9uZW50LCB7XG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiBpc0ludGVybmFsQ29tcG9uZW50ID8gdW5kZWZpbmVkIDogb3B0aW9ucz8udmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIG9yaWdpbjogY29udGFpbmVyISxcbiAgICAgICAgICAgIG9yaWdpblBvc2l0aW9uOiBvZmZzZXRPcmlnaW5Qb3NpdGlvbixcbiAgICAgICAgICAgIHdpZHRoOiBvZmZzZXRPcmlnaW5Qb3NpdGlvbi53aWR0aCArICdweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IG9mZnNldE9yaWdpblBvc2l0aW9uLmhlaWdodCArICdweCcsXG4gICAgICAgICAgICBtaW5XaWR0aDogb2Zmc2V0T3JpZ2luUG9zaXRpb24ud2lkdGggKyAncHgnLFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICAgIG9mZnNldDogLW9mZnNldE9yaWdpblBvc2l0aW9uLmhlaWdodCxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkSWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMsXG4gICAgICAgICAgICAgICAgYWlUYWJsZTogYWlUYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdncmlkLWNlbGwtZWRpdG9yJyxcbiAgICAgICAgICAgIG91dHNpZGVDbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgIG1hbnVhbENsb3N1cmU6IHRydWUsXG4gICAgICAgICAgICBhbmltYXRpb25EaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9BZGFwdGl2ZTogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZikge1xuICAgICAgICAgICAgY29uc3Qgd2hlZWxFdmVudCA9IGZyb21FdmVudDxXaGVlbEV2ZW50PihcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmLmNvbXBvbmVudEluc3RhbmNlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAnd2hlZWwnXG4gICAgICAgICAgICApLnN1YnNjcmliZSgoZXZlbnQ6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGFpVGFibGUuZmllbGRzTWFwKClbZmllbGRJZF07XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUudGV4dCB8fCBmaWVsZC50eXBlID09PSBBSVRhYmxlRmllbGRUeXBlLnJpY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dD8uc2Nyb2xsQWN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFYOiBldmVudC5kZWx0YVgsXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWTogZXZlbnQuZGVsdGFZLFxuICAgICAgICAgICAgICAgICAgICBzaGlmdEtleTogZXZlbnQuc2hpZnRLZXksXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5Qb3NpdGlvbiA9IHRoaXMuZ2V0T3JpZ2luUG9zaXRpb24oYWlUYWJsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gKHRoaXMuY2VsbEVkaXRvclBvcG92ZXJSZWYgYXMgVGh5QWJzdHJhY3RJbnRlcm5hbE92ZXJsYXlSZWY8YW55LCBhbnksIGFueT4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldE92ZXJsYXlSZWYoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb25maWcoKS5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3kuc2V0T3JpZ2luKG9yaWdpblBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aGVlbEV2ZW50LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZiA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICh0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmLmNvbXBvbmVudEluc3RhbmNlIGFzIEFic3RyYWN0RWRpdENlbGxFZGl0b3I8YW55PikudXBkYXRlRmllbGRWYWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy51cGRhdGVGaWVsZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmO1xuICAgIH1cblxuICAgIGNsb3NlQ2VsbEVkaXRvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbEVkaXRvclBvcG92ZXJSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY2VsbEVkaXRvclBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuY2VsbEVkaXRvclBvcG92ZXJSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEVkaXRDZWxsKCkge1xuICAgICAgICBpZiAodGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZikge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkSWQgPSB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmLmNvbXBvbmVudEluc3RhbmNlPy5yZWNvcmRJZDtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkSWQgPSB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmLmNvbXBvbmVudEluc3RhbmNlPy5maWVsZElkO1xuXG4gICAgICAgICAgICBpZiAocmVjb3JkSWQgJiYgZmllbGRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZElkLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZElkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG9wZW5Db250ZXh0TWVudShhaVRhYmxlOiBBSVRhYmxlLCBvcHRpb25zOiBBSVRhYmxlQ29udGV4dE1lbnVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luLCBwb3NpdGlvbiwgbWVudUl0ZW1zLCB0YXJnZXROYW1lLCB2aWV3Q29udGFpbmVyUmVmIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnRoeVBvcG92ZXIub3BlbihBSVRhYmxlQ29udGV4dE1lbnUsIHtcbiAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgb3JpZ2luUG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tTGVmdCcsXG4gICAgICAgICAgICBpbnNpZGVDbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgICAgICBhaVRhYmxlLFxuICAgICAgICAgICAgICAgIG1lbnVJdGVtcyxcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVmO1xuICAgIH1cbn1cbiJdfQ==
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQWlCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQXVCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOztBQUd2RixNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBTUksbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRTNDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUU1QyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFFNUMsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUVsRCwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBSTFDLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQXdPM0M7SUF0T0cs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QUFFLElBQUk7WUFDcEIsZ0JBQWdCO1lBQ2hCLFlBQVksRUFBRTtnQkFDVixPQUFPO2dCQUNQLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixRQUFRO2FBQ1g7U0FDSixDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7K0dBMVBRLHVCQUF1QjttSEFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUaHlBYnN0cmFjdEludGVybmFsT3ZlcmxheVJlZiB9IGZyb20gJ25neC10ZXRoeXMvY29yZSc7XG5pbXBvcnQgeyBUaHlQb3BvdmVyLCBUaHlQb3BvdmVyUmVmIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEVkaXRDZWxsRWRpdG9yIH0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBHUklEX0NFTExfRURJVE9SX01BUCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVJlY29yZEZpZWxkSWRQYXRoLCBBSVRhYmxlLCBBSVRhYmxlRmllbGRUeXBlIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ29udGV4dE1lbnVPcHRpb25zLCBBSVRhYmxlR3JpZENlbGxSZW5kZXJTY2hlbWEsIEFJVGFibGVPcGVuRWRpdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRDZWxsSG9yaXpvbnRhbFBvc2l0aW9uLCBnZXRFZGl0b3JCb3hPZmZzZXQsIGdldEVkaXRvclNwYWNlLCBnZXRIb3ZlckVkaXRvckJveE9mZnNldCwgZ2V0SG92ZXJFZGl0b3JTcGFjZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEFJVGFibGVDb250ZXh0TWVudSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQUlUYWJsZUdyaWRFdmVudFNlcnZpY2Uge1xuICAgIGFpVGFibGUhOiBBSVRhYmxlO1xuXG4gICAgYWlGaWVsZFJlbmRlcmVycz86IFBhcnRpYWw8UmVjb3JkPEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVHcmlkQ2VsbFJlbmRlclNjaGVtYT4+O1xuXG4gICAgZGJsQ2xpY2tFdmVudCQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuXG4gICAgbW91c2Vkb3duRXZlbnQkID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuICAgIG1vdXNlb3ZlckV2ZW50JCA9IG5ldyBTdWJqZWN0PE1vdXNlRXZlbnQ+KCk7XG5cbiAgICBnbG9iYWxNb3VzZW92ZXJFdmVudCQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuXG4gICAgZ2xvYmFsTW91c2Vkb3duRXZlbnQkID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuICAgIHByaXZhdGUgY2VsbEVkaXRvclBvcG92ZXJSZWYhOiBUaHlQb3BvdmVyUmVmPEFic3RyYWN0RWRpdENlbGxFZGl0b3I8YW55Pj4gfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSB0aHlQb3BvdmVyID0gaW5qZWN0KFRoeVBvcG92ZXIpO1xuXG4gICAgaW5pdGlhbGl6ZShhaVRhYmxlOiBBSVRhYmxlLCBhaUZpZWxkUmVuZGVyZXJzPzogUGFydGlhbDxSZWNvcmQ8QUlUYWJsZUZpZWxkVHlwZSwgQUlUYWJsZUdyaWRDZWxsUmVuZGVyU2NoZW1hPj4pIHtcbiAgICAgICAgdGhpcy5haVRhYmxlID0gYWlUYWJsZTtcbiAgICAgICAgdGhpcy5haUZpZWxkUmVuZGVyZXJzID0gYWlGaWVsZFJlbmRlcmVycztcbiAgICB9XG5cbiAgICByZWdpc3RlckV2ZW50cyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudCwgJ2RibGNsaWNrJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYmxDbGlja0V2ZW50JC5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50LCAnbW91c2VvdmVyJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoODApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZW92ZXJFdmVudCQubmV4dChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW92ZXInLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbE1vdXNlb3ZlckV2ZW50JC5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50LCAnbW91c2Vkb3duJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25FdmVudCQubmV4dChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWRvd24nLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbE1vdXNlZG93bkV2ZW50JC5uZXh0KGV2ZW50IGFzIE1vdXNlRXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFZGl0b3JDb21wb25lbnQodHlwZTogQUlUYWJsZUZpZWxkVHlwZSkge1xuICAgICAgICBjb25zdCBmaWxlZFJlbmRlclNjaGVtYSA9IHRoaXMuYWlGaWVsZFJlbmRlcmVycyAmJiB0aGlzLmFpRmllbGRSZW5kZXJlcnNbdHlwZV07XG4gICAgICAgIGlmIChmaWxlZFJlbmRlclNjaGVtYSAmJiBmaWxlZFJlbmRlclNjaGVtYS5lZGl0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBmaWxlZFJlbmRlclNjaGVtYS5lZGl0b3IsXG4gICAgICAgICAgICAgICAgaXNJbnRlcm5hbENvbXBvbmVudDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogR1JJRF9DRUxMX0VESVRPUl9NQVBbdHlwZV0sXG4gICAgICAgICAgICBpc0ludGVybmFsQ29tcG9uZW50OiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb3BlbkVkaXQoY2VsbERvbTogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBjZWxsRG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBmaWVsZElkID0gY2VsbERvbS5nZXRBdHRyaWJ1dGUoJ2ZpZWxkSWQnKSE7XG4gICAgICAgIGNvbnN0IHJlY29yZElkID0gY2VsbERvbS5nZXRBdHRyaWJ1dGUoJ3JlY29yZElkJykhO1xuICAgICAgICBjb25zdCB7IGNvbXBvbmVudCB9ID0gdGhpcy5nZXRFZGl0b3JDb21wb25lbnQodGhpcy5haVRhYmxlLmZpZWxkc01hcCgpW2ZpZWxkSWRdLnR5cGUpO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnRoeVBvcG92ZXIub3Blbihjb21wb25lbnQsIHtcbiAgICAgICAgICAgIG9yaWdpbjogY2VsbERvbSxcbiAgICAgICAgICAgIG9yaWdpblBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgeDogeCAtIDEsXG4gICAgICAgICAgICAgICAgeTogeSArIDEsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoICsgMixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCArIDJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggKyAxICsgJ3B4JyxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgMiArICdweCcsXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnLFxuICAgICAgICAgICAgb2Zmc2V0OiAtKGhlaWdodCArIDQpLFxuICAgICAgICAgICAgbWluV2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGRJZCxcbiAgICAgICAgICAgICAgICByZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgYWlUYWJsZTogdGhpcy5haVRhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2dyaWQtY2VsbC1lZGl0b3InLFxuICAgICAgICAgICAgb3V0c2lkZUNsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgIG1hbnVhbENsb3N1cmU6IHRydWUsXG4gICAgICAgICAgICBhbmltYXRpb25EaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9BZGFwdGl2ZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICB9XG5cbiAgICBnZXRPcmlnaW5Qb3NpdGlvbihhaVRhYmxlOiBBSVRhYmxlLCBvcHRpb25zOiBBSVRhYmxlT3BlbkVkaXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHsgY29udGFpbmVyLCBjb29yZGluYXRlLCByZWNvcmRJZCwgZmllbGRJZCwgaXNIb3ZlckVkaXQgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsU3RhdGUgfSA9IGFpVGFibGUuY29udGV4dCE7XG4gICAgICAgIGNvbnN0IHsgcm93SGVpZ2h0LCBjb2x1bW5Db3VudCB9ID0gY29vcmRpbmF0ZTtcbiAgICAgICAgY29uc3QgY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCA9IFtyZWNvcmRJZCwgZmllbGRJZF07XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXgsIGNvbHVtbkluZGV4IH0gPSBBSVRhYmxlLmdldENlbGxJbmRleChhaVRhYmxlLCBjZWxsKSE7XG4gICAgICAgIGNvbnN0IG9yaWdpblggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IG9yaWdpblkgPSBjb29yZGluYXRlLmdldFJvd09mZnNldChyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IG9yaWdpbldpZHRoLCBvZmZzZXQ6IG9yaWdpbk9mZnNldCB9ID0gZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbih7XG4gICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgY29sdW1uQ291bnRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9yaWdpblJlY3QgPSBjb250YWluZXIhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBpc0Zyb3plbkNvbHVtbiA9IEFJVGFibGUuaXNGcm96ZW5Db2x1bW4oYWlUYWJsZSwgY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gaXNGcm96ZW5Db2x1bW4gPyAwIDogc2Nyb2xsU3RhdGUoKS5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBzY3JvbGxTdGF0ZSgpLnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3Qgb3JpZ2luUG9zaXRpb24gPSB7XG4gICAgICAgICAgICB4OiBvcmlnaW5YICsgb3JpZ2luT2Zmc2V0IC0gc2Nyb2xsTGVmdCArIG9yaWdpblJlY3QueCxcbiAgICAgICAgICAgIHk6IG9yaWdpblkgLSBzY3JvbGxUb3AgKyBvcmlnaW5SZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJvd0hlaWdodFxuICAgICAgICB9O1xuICAgICAgICBsZXQgeCA9IG9yaWdpblBvc2l0aW9uLnggKyBnZXRFZGl0b3JCb3hPZmZzZXQoKTtcbiAgICAgICAgbGV0IHkgPSBvcmlnaW5Qb3NpdGlvbi55ICsgZ2V0RWRpdG9yQm94T2Zmc2V0KCk7XG4gICAgICAgIGxldCB3aWR0aCA9IGdldEVkaXRvclNwYWNlKG9yaWdpblBvc2l0aW9uLndpZHRoKTtcbiAgICAgICAgbGV0IGhlaWdodCA9IGdldEVkaXRvclNwYWNlKG9yaWdpblBvc2l0aW9uLmhlaWdodCk7XG4gICAgICAgIC8vIGhvdmVyIOe8lui+kee7hOS7tuaXoOi+ueahhlxuICAgICAgICBpZiAoaXNIb3ZlckVkaXQpIHtcbiAgICAgICAgICAgIHggPSBvcmlnaW5Qb3NpdGlvbi54ICsgZ2V0SG92ZXJFZGl0b3JCb3hPZmZzZXQoKTtcbiAgICAgICAgICAgIHkgPSBvcmlnaW5Qb3NpdGlvbi55ICsgZ2V0SG92ZXJFZGl0b3JCb3hPZmZzZXQoKTtcbiAgICAgICAgICAgIHdpZHRoID0gZ2V0SG92ZXJFZGl0b3JTcGFjZShvcmlnaW5Qb3NpdGlvbi53aWR0aCk7XG4gICAgICAgICAgICBoZWlnaHQgPSBnZXRIb3ZlckVkaXRvclNwYWNlKG9yaWdpblBvc2l0aW9uLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm9yaWdpblBvc2l0aW9uLFxuICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgIHk6IHksXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9wZW5DZWxsRWRpdG9yKGFpVGFibGU6IEFJVGFibGUsIG9wdGlvbnM6IEFJVGFibGVPcGVuRWRpdE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBjb250YWluZXIsIHJlY29yZElkLCBmaWVsZElkLCBpc0hvdmVyRWRpdCwgcmVmZXJlbmNlcyB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgeyBjb21wb25lbnQsIGlzSW50ZXJuYWxDb21wb25lbnQgfSA9IHRoaXMuZ2V0RWRpdG9yQ29tcG9uZW50KHRoaXMuYWlUYWJsZS5maWVsZHNNYXAoKVtmaWVsZElkXS50eXBlKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0T3JpZ2luUG9zaXRpb24gPSB0aGlzLmdldE9yaWdpblBvc2l0aW9uKGFpVGFibGUsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmID0gdGhpcy50aHlQb3BvdmVyLm9wZW4oY29tcG9uZW50LCB7XG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiBpc0ludGVybmFsQ29tcG9uZW50ID8gdW5kZWZpbmVkIDogb3B0aW9ucz8udmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIG9yaWdpbjogY29udGFpbmVyISxcbiAgICAgICAgICAgIG9yaWdpblBvc2l0aW9uOiBvZmZzZXRPcmlnaW5Qb3NpdGlvbixcbiAgICAgICAgICAgIHdpZHRoOiBvZmZzZXRPcmlnaW5Qb3NpdGlvbi53aWR0aCArICdweCcsXG4gICAgICAgICAgICBoZWlnaHQ6IG9mZnNldE9yaWdpblBvc2l0aW9uLmhlaWdodCArICdweCcsXG4gICAgICAgICAgICBtaW5XaWR0aDogb2Zmc2V0T3JpZ2luUG9zaXRpb24ud2lkdGggKyAncHgnLFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgICAgICAgIG9mZnNldDogLW9mZnNldE9yaWdpblBvc2l0aW9uLmhlaWdodCxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkSWQsXG4gICAgICAgICAgICAgICAgcmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMsXG4gICAgICAgICAgICAgICAgYWlUYWJsZTogYWlUYWJsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdncmlkLWNlbGwtZWRpdG9yJyxcbiAgICAgICAgICAgIG91dHNpZGVDbG9zYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICBtYW51YWxDbG9zdXJlOiB0cnVlLFxuICAgICAgICAgICAgYW5pbWF0aW9uRGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBhdXRvQWRhcHRpdmU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY2VsbEVkaXRvclBvcG92ZXJSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZWVsRXZlbnQgPSBmcm9tRXZlbnQ8V2hlZWxFdmVudD4oXG4gICAgICAgICAgICAgICAgdGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZi5jb21wb25lbnRJbnN0YW5jZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgJ3doZWVsJ1xuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBhaVRhYmxlLmZpZWxkc01hcCgpW2ZpZWxkSWRdO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBBSVRhYmxlRmllbGRUeXBlLnRleHQgfHwgZmllbGQudHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5yaWNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQ/LnNjcm9sbEFjdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWDogZXZlbnQuZGVsdGFYLFxuICAgICAgICAgICAgICAgICAgICBkZWx0YVk6IGV2ZW50LmRlbHRhWSxcbiAgICAgICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luUG9zaXRpb24gPSB0aGlzLmdldE9yaWdpblBvc2l0aW9uKGFpVGFibGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9ICh0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmIGFzIFRoeUFic3RyYWN0SW50ZXJuYWxPdmVybGF5UmVmPGFueSwgYW55LCBhbnk+KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRPdmVybGF5UmVmKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbihvcmlnaW5Qb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LmFwcGx5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2hlZWxFdmVudC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2VsbEVkaXRvclBvcG92ZXJSZWYgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAodGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZi5jb21wb25lbnRJbnN0YW5jZSBhcyBBYnN0cmFjdEVkaXRDZWxsRWRpdG9yPGFueT4pLnVwZGF0ZUZpZWxkVmFsdWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudXBkYXRlRmllbGRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZjtcbiAgICB9XG5cbiAgICBjbG9zZUNlbGxFZGl0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmNlbGxFZGl0b3JQb3BvdmVyUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEN1cnJlbnRFZGl0Q2VsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbEVkaXRvclBvcG92ZXJSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZElkID0gdGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZi5jb21wb25lbnRJbnN0YW5jZT8ucmVjb3JkSWQ7XG4gICAgICAgICAgICBjb25zdCBmaWVsZElkID0gdGhpcy5jZWxsRWRpdG9yUG9wb3ZlclJlZi5jb21wb25lbnRJbnN0YW5jZT8uZmllbGRJZDtcblxuICAgICAgICAgICAgaWYgKHJlY29yZElkICYmIGZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRJZCxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRJZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBvcGVuQ29udGV4dE1lbnUoYWlUYWJsZTogQUlUYWJsZSwgb3B0aW9uczogQUlUYWJsZUNvbnRleHRNZW51T3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IG9yaWdpbiwgcG9zaXRpb24sIG1lbnVJdGVtcywgdGFyZ2V0TmFtZSwgdmlld0NvbnRhaW5lclJlZiB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy50aHlQb3BvdmVyLm9wZW4oQUlUYWJsZUNvbnRleHRNZW51LCB7XG4gICAgICAgICAgICBvcmlnaW46IG9yaWdpbiBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgIG9yaWdpblBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbUxlZnQnLFxuICAgICAgICAgICAgaW5zaWRlQ2xvc2FibGU6IHRydWUsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICAgICAgYWlUYWJsZSxcbiAgICAgICAgICAgICAgICBtZW51SXRlbXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICB9XG59XG4iXX0=