@worktile/gantt 15.1.0-next.10 → 15.1.0-next.12

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.
@@ -16,6 +16,7 @@ export declare class GanttBarDrag implements OnDestroy {
16
16
  private get dragDisabled();
17
17
  private get linkDragDisabled();
18
18
  private get barHandleDragMoveAndScrollDistance();
19
+ private get autoScrollStep();
19
20
  private linkDraggingLine;
20
21
  private barDragRef;
21
22
  private dragRefs;
@@ -36,6 +37,8 @@ export declare class GanttBarDrag implements OnDestroy {
36
37
  private _horizontalScrollDirection;
37
38
  /** Record bar days when bar handle drag move. */
38
39
  private barHandleDragMoveRecordDays;
40
+ /** Speed ratio for auto scroll */
41
+ private autoScrollSpeedRates;
39
42
  constructor(dragDrop: DragDrop, dom: GanttDomService, dragContainer: GanttDragContainer, _ngZone: NgZone);
40
43
  private createDragRef;
41
44
  private createDragScrollEvent;
@@ -5,7 +5,7 @@ import { animationFrameScheduler, interval, Subject, fromEvent } from 'rxjs';
5
5
  import { takeUntil } from 'rxjs/operators';
6
6
  import { GanttLinkType } from '../../class/link';
7
7
  import { passiveListenerOptions } from '../../utils/passive-listeners';
8
- import { getHorizontalScrollDirection, isPointerNearClientRect } from '../../utils/drag-scroll';
8
+ import { getHorizontalScrollDirection, isPointerNearClientRect, getAutoScrollSpeedRates } from '../../utils/drag-scroll';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@angular/cdk/drag-drop";
11
11
  import * as i2 from "../../gantt-dom.service";
@@ -16,7 +16,7 @@ import * as i3 from "../../gantt-drag-container";
16
16
  */
17
17
  const DROP_PROXIMITY_THRESHOLD = 0.05;
18
18
  const dragMinWidth = 10;
19
- const autoScrollStep = 5;
19
+ const autoScrollBaseStep = 2;
20
20
  const activeClass = 'gantt-bar-active';
21
21
  const dropActiveClass = 'gantt-bar-drop-active';
22
22
  const singleDropActiveClass = 'gantt-bar-single-drop-active';
@@ -35,6 +35,9 @@ export class GanttBarDrag {
35
35
  get barHandleDragMoveAndScrollDistance() {
36
36
  return this.barHandleDragMoveDistance + this.dragScrollDistance;
37
37
  }
38
+ get autoScrollStep() {
39
+ return Math.pow(autoScrollBaseStep, this.autoScrollSpeedRates);
40
+ }
38
41
  constructor(dragDrop, dom, dragContainer, _ngZone) {
39
42
  this.dragDrop = dragDrop;
40
43
  this.dom = dom;
@@ -54,13 +57,15 @@ export class GanttBarDrag {
54
57
  this.dragScrollDistance = 0;
55
58
  /** Horizontal direction in which the list is currently scrolling. */
56
59
  this._horizontalScrollDirection = 0 /* AutoScrollHorizontalDirection.NONE */;
60
+ /** Speed ratio for auto scroll */
61
+ this.autoScrollSpeedRates = 1;
57
62
  this.startScrollInterval = () => {
58
63
  this.stopScrolling();
59
64
  interval(0, animationFrameScheduler)
60
65
  .pipe(takeUntil(this.stopScrollTimers$))
61
66
  .subscribe(() => {
62
67
  const node = this.dom.mainContainer;
63
- const scrollStep = autoScrollStep;
68
+ const scrollStep = this.autoScrollStep;
64
69
  if (this._horizontalScrollDirection === 1 /* AutoScrollHorizontalDirection.LEFT */) {
65
70
  node.scrollBy(-scrollStep, 0);
66
71
  }
@@ -276,10 +281,10 @@ export class GanttBarDrag {
276
281
  let left = dragRect.left - rootRect.left - (this.dom.side.clientWidth + 1);
277
282
  if (this.dragScrolling) {
278
283
  if (this._horizontalScrollDirection === 1 /* AutoScrollHorizontalDirection.LEFT */) {
279
- left += autoScrollStep;
284
+ left += this.autoScrollStep;
280
285
  }
281
286
  else if (this._horizontalScrollDirection === 2 /* AutoScrollHorizontalDirection.RIGHT */) {
282
- left -= autoScrollStep;
287
+ left -= this.autoScrollStep;
283
288
  }
284
289
  }
285
290
  const width = dragRect.right - dragRect.left;
@@ -412,6 +417,7 @@ export class GanttBarDrag {
412
417
  (horizontalScrollDirection === 2 /* AutoScrollHorizontalDirection.RIGHT */ &&
413
418
  scrollLeft < this.ganttUpper.view.width - clientRect.width)) {
414
419
  this._horizontalScrollDirection = horizontalScrollDirection;
420
+ this.autoScrollSpeedRates = getAutoScrollSpeedRates(clientRect, pointerX, horizontalScrollDirection);
415
421
  this.dragScrolling = true;
416
422
  this._ngZone.runOutsideAngular(this.startScrollInterval);
417
423
  }
@@ -511,4 +517,4 @@ GanttBarDrag.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version
511
517
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: GanttBarDrag, decorators: [{
512
518
  type: Injectable
513
519
  }], ctorParameters: function () { return [{ type: i1.DragDrop }, { type: i2.GanttDomService }, { type: i3.GanttDragContainer }, { type: i0.NgZone }]; } });
514
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWRyYWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9iYXIvYmFyLWRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFzQixhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRSxPQUFPLEVBQWEsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RSxPQUFPLEVBQWlDLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBRS9IOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDekIsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUM7QUFDdkMsTUFBTSxlQUFlLEdBQUcsdUJBQXVCLENBQUM7QUFDaEQsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUU3RCxTQUFTLGdCQUFnQixDQUFDLGFBQXFCLEVBQUUsU0FBaUI7SUFDOUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0RixPQUFPLENBQUMsU0FBUyxDQUFDLEdB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LEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQzthQUN2QztTQUNKO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUF1QjtRQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzt5R0FqakJRLFlBQVk7NkdBQVosWUFBWTsyRkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdSZWYsIERyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBHYW50dERvbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9nYW50dC1kb20uc2VydmljZSc7XG5pbXBvcnQgeyBHYW50dERyYWdDb250YWluZXIsIEluQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9nYW50dC1kcmFnLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCB9IGZyb20gJy4uLy4uL2NsYXNzL2l0ZW0nO1xuaW1wb3J0IHsgR2FudHREYXRlLCBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMsIGRpZmZlcmVuY2VJbkRheXMgfSBmcm9tICcuLi8uLi91dGlscy9kYXRlJztcbmltcG9ydCB7IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBpbnRlcnZhbCwgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRMaW5rVHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzL2xpbmsnO1xuaW1wb3J0IHsgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL3Bhc3NpdmUtbGlzdGVuZXJzJztcbmltcG9ydCB7IEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLCBnZXRIb3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCBpc1BvaW50ZXJOZWFyQ2xpZW50UmVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2RyYWctc2Nyb2xsJztcblxuLyoqXG4gKiBQcm94aW1pdHksIGFzIGEgcmF0aW8gdG8gd2lkdGgvaGVpZ2h0LCBhdCB3aGljaCBhXG4gKiBkcmFnZ2VkIGl0ZW0gd2lsbCBhZmZlY3QgdGhlIGRyb3AgY29udGFpbmVyLlxuICovXG5jb25zdCBEUk9QX1BST1hJTUlUWV9USFJFU0hPTEQgPSAwLjA1O1xuXG5jb25zdCBkcmFnTWluV2lkdGggPSAxMDtcbmNvbnN0IGF1dG9TY3JvbGxTdGVwID0gNTtcbmNvbnN0IGFjdGl2ZUNsYXNzID0gJ2dhbnR0LWJhci1hY3RpdmUnO1xuY29uc3QgZHJvcEFjdGl2ZUNsYXNzID0gJ2dhbnR0LWJhci1kcm9wLWFjdGl2ZSc7XG5jb25zdCBzaW5nbGVEcm9wQWN0aXZlQ2xhc3MgPSAnZ2FudHQtYmFyLXNpbmdsZS1kcm9wLWFjdGl2ZSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVN2Z0VsZW1lbnQocXVhbGlmaWVkTmFtZTogc3RyaW5nLCBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgcXVhbGlmaWVkTmFtZSk7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHYW50dEJhckRyYWcgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgZ2FudHRVcHBlcjogR2FudHRVcHBlcjtcblxuICAgIHByaXZhdGUgYmFyRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIGl0ZW06IEdhbnR0SXRlbUludGVybmFsO1xuXG4gICAgcHJpdmF0ZSBnZXQgZHJhZ0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXRlbS5kcmFnZ2FibGUgfHwgIXRoaXMuZ2FudHRVcHBlci5kcmFnZ2FibGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGlua0RyYWdEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLml0ZW0ubGlua2FibGUgfHwgIXRoaXMuZ2FudHRVcHBlci5saW5rYWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBiYXJIYW5kbGVEcmFnTW92ZUFuZFNjcm9sbERpc3RhbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXJIYW5kbGVEcmFnTW92ZURpc3RhbmNlICsgdGhpcy5kcmFnU2Nyb2xsRGlzdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaW5rRHJhZ2dpbmdMaW5lOiBTVkdFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBiYXJEcmFnUmVmOiBEcmFnUmVmO1xuXG4gICAgcHJpdmF0ZSBkcmFnUmVmczogRHJhZ1JlZltdID0gW107XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBVc2VkIHRvIHNpZ25hbCB0byB0aGUgY3VycmVudCBhdXRvLXNjcm9sbCBzZXF1ZW5jZSB3aGVuIHRvIHN0b3AuICovXG4gICAgcHJpdmF0ZSBzdG9wU2Nyb2xsVGltZXJzJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogY29udGFpbmVyIGVsZW1lbnQgc2Nyb2xsTGVmdCAqL1xuICAgIHByaXZhdGUgY29udGFpbmVyU2Nyb2xsTGVmdDogbnVtYmVyO1xuXG4gICAgLyoqIG1vdmUgZGlzdGFuY2Ugd2hlbiBkcmFnIGJhciAqL1xuICAgIHByaXZhdGUgYmFyRHJhZ01vdmVEaXN0YW5jZSA9IDA7XG5cbiAgICAvKiogbW92ZSBkaXN0YW5jZSB3aGVuIGRyYWcgYmFyIGhhbmRsZSAqL1xuICAgIHByaXZhdGUgYmFySGFuZGxlRHJhZ01vdmVEaXN0YW5jZSA9IDA7XG5cbiAgICAvKiogc2Nyb2xsaW5nIHN0YXRlIHdoZW4gZHJhZyAqL1xuICAgIHByaXZhdGUgZHJhZ1Njcm9sbGluZyA9IGZhbHNlO1xuXG4gICAgLyoqIGRyYWdTY3JvbGxEaXN0YW5jZSAqL1xuICAgIHByaXZhdGUgZHJhZ1Njcm9sbERpc3RhbmNlID0gMDtcblxuICAgIC8qKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgbGlzdCBpcyBjdXJyZW50bHkgc2Nyb2xsaW5nLiAqL1xuICAgIHByaXZhdGUgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBBdXRvU2Nyb2xsSG9yaXpvbnRhbERpcmVjdGlvbi5OT05FO1xuXG4gICAgLyoqIFJlY29yZCBiYXIgZGF5cyB3aGVuIGJhciBoYW5kbGUgZHJhZyBtb3ZlLiAqL1xuICAgIHByaXZhdGUgYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkcmFnRHJvcDogRHJhZ0Ryb3AsXG4gICAgICAgIHByaXZhdGUgZG9tOiBHYW50dERvbVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyLFxuICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZVxuICAgICkge31cblxuICAgIHByaXZhdGUgY3JlYXRlRHJhZ1JlZjxUID0gYW55PihlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50KTogRHJhZ1JlZjxUPiB7XG4gICAgICAgIGNvbnN0IGRyYWdSZWYgPSB0aGlzLmRyYWdEcm9wLmNyZWF0ZURyYWcoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBkcmFnUmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRHJhZ1Njcm9sbEV2ZW50KGRyYWdSZWY6IERyYWdSZWYpIHtcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudCh0aGlzLmRvbS5tYWluQ29udGFpbmVyLCAnc2Nyb2xsJywgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucykucGlwZSh0YWtlVW50aWwoZHJhZ1JlZi5lbmRlZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTW91c2VFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGRyb3BDbGFzcyA9XG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIuY29uZmlnLmxpbmtPcHRpb25zPy5kZXBlbmRlbmN5VHlwZXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmNvbmZpZy5saW5rT3B0aW9ucz8uZGVwZW5kZW5jeVR5cGVzWzBdID09PSBHYW50dExpbmtUeXBlLmZzXG4gICAgICAgICAgICAgICAgPyBzaW5nbGVEcm9wQWN0aXZlQ2xhc3NcbiAgICAgICAgICAgICAgICA6IGRyb3BBY3RpdmVDbGFzcztcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5iYXJFbGVtZW50LCAnbW91c2VlbnRlcicsIHBhc3NpdmVMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnZ2luZ0lkICYmIHRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ2dpbmdJZCAhPT0gdGhpcy5pdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW0ubGlua2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QuYWRkKGRyb3BDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZW1pdExpbmtEcmFnRW50ZXJlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuYmFyRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuYmFyRWxlbWVudCwgJ21vdXNlbGVhdmUnLCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdnaW5nSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5lbWl0TGlua0RyYWdMZWF2ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZHJvcENsYXNzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmFyRHJhZygpIHtcbiAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuY3JlYXRlRHJhZ1JlZih0aGlzLmJhckVsZW1lbnQpO1xuICAgICAgICBkcmFnUmVmLmxvY2tBeGlzID0gJ3gnO1xuICAgICAgICBkcmFnUmVmLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5kb20ubWFpbkl0ZW1zIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgZHJhZ1JlZi5zdGFydGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERyYWdnaW5nU3R5bGVzKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lclNjcm9sbExlZnQgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURyYWdTY3JvbGxFdmVudChkcmFnUmVmKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkcmFnUmVmLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkcmFnU2Nyb2xsRGlzdGFuY2UgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyLnNjcm9sbExlZnQgLSB0aGlzLmNvbnRhaW5lclNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1Njcm9sbERpc3RhbmNlID0gZHJhZ1Njcm9sbERpc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICBkcmFnUmVmWydfYm91bmRhcnlSZWN0J10gPSB0aGlzLmRvbS5tYWluSXRlbXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KTtcbiAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmVEaXN0YW5jZSA9IGV2ZW50LmRpc3RhbmNlLng7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ1Njcm9sbGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZHJhZ1JlZi5lbmRlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRHJhZ2dpbmdTdHlsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcmFnQmFja2Ryb3AoKTtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmRyYWdTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1Njcm9sbERpc3RhbmNlID0gMDtcbiAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmVEaXN0YW5jZSA9IDA7XG4gICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlUmVmcyh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVSYW5nZVdpZHRoKHRoaXMuaXRlbS5zdGFydC5zdGFydE9mRGF5KCksIHRoaXMuaXRlbS5lbmQuZW5kT2ZEYXkoKSksXG4gICAgICAgICAgICAgICAgeDogdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0WFBvaW50QnlEYXRlKHRoaXMuaXRlbS5zdGFydCksXG4gICAgICAgICAgICAgICAgeTogKHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodCAtIHRoaXMuZ2FudHRVcHBlci5zdHlsZXMuYmFySGVpZ2h0KSAvIDIgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhckRyYWdSZWYgPSBkcmFnUmVmO1xuXG4gICAgICAgIHJldHVybiBkcmFnUmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmFySGFuZGxlRHJhZ3MoKSB7XG4gICAgICAgIGNvbnN0IGRyYWdSZWZzID0gW107XG4gICAgICAgIGNvbnN0IGhhbmRsZXMgPSB0aGlzLmJhckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5kcmFnLWhhbmRsZXMgLmhhbmRsZScpO1xuICAgICAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQmVmb3JlID0gaW5kZXggPT09IDA7XG4gICAgICAgICAgICBjb25zdCBkcmFnUmVmID0gdGhpcy5jcmVhdGVEcmFnUmVmKGhhbmRsZSk7XG4gICAgICAgICAgICBkcmFnUmVmLmxvY2tBeGlzID0gJ3gnO1xuICAgICAgICAgICAgZHJhZ1JlZi53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuZG9tLm1haW5JdGVtcyBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBkcmFnUmVmLnN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERyYWdnaW5nU3R5bGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJTY3JvbGxMZWZ0ID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJhZ1Njcm9sbEV2ZW50KGRyYWdSZWYpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnUmVmLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJhZ1Njcm9sbERpc3RhbmNlID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0IC0gdGhpcy5jb250YWluZXJTY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnU2Nyb2xsRGlzdGFuY2UgPSBkcmFnU2Nyb2xsRGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnUmVmWydfYm91bmRhcnlSZWN0J10gPSB0aGlzLmRvbS5tYWluSXRlbXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdTY3JvbGxpbmcgJiYgdGhpcy5pc1N0YXJ0R3JlYXRlclRoYW5FbmRXaGVuQmFySGFuZGxlRHJhZ01vdmUoaXNCZWZvcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0JlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyQmVmb3JlSGFuZGxlRHJhZ01vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJBZnRlckhhbmRsZURyYWdNb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ1N0YXJ0ZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzICYmIHRoaXMuYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJIYW5kbGVEcmFnTW92ZURpc3RhbmNlID0gZXZlbnQuZGlzdGFuY2UueDtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ1Njcm9sbGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyQmVmb3JlSGFuZGxlRHJhZ01vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyQWZ0ZXJIYW5kbGVEcmFnTW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRyYWdSZWYuZW5kZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEcmFnZ2luZ1N0eWxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcmFnQmFja2Ryb3AoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTY3JvbGxEaXN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJIYW5kbGVEcmFnTW92ZURpc3RhbmNlID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlUmVmcyh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlUmFuZ2VXaWR0aCh0aGlzLml0ZW0uc3RhcnQuc3RhcnRPZkRheSgpLCB0aGlzLml0ZW0uZW5kLmVuZE9mRGF5KCkpLFxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXRYUG9pbnRCeURhdGUodGhpcy5pdGVtLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgeTogKHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodCAtIHRoaXMuZ2FudHRVcHBlci5zdHlsZXMuYmFySGVpZ2h0KSAvIDIgLSAxXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdFbmRlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZHJhZ1JlZnMucHVzaChkcmFnUmVmKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkcmFnUmVmcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxpbmtIYW5kbGVEcmFncygpIHtcbiAgICAgICAgY29uc3QgZHJhZ1JlZnMgPSBbXTtcbiAgICAgICAgY29uc3QgaGFuZGxlcyA9IHRoaXMuYmFyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmxpbmstaGFuZGxlcyAuaGFuZGxlJyk7XG4gICAgICAgIGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNCZWdpbiA9IGluZGV4ID09PSAwO1xuICAgICAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuZHJhZ0Ryb3AuY3JlYXRlRHJhZyhoYW5kbGUpO1xuICAgICAgICAgICAgZHJhZ1JlZi53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuZG9tLnJvb3QgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZHJhZ1JlZi5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFyRHJhZ1JlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckRyYWdSZWYuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUxpbmtEcmFnZ2luZ0xpbmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZW1pdExpbmtEcmFnU3RhcnRlZCh7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuYmFyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBwb3M6IGlzQmVnaW4gPyBJbkJhclBvc2l0aW9uLnN0YXJ0IDogSW5CYXJQb3NpdGlvbi5maW5pc2hcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkcmFnUmVmLm1vdmVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5jYWxjTGlua0xpbmVQb3NpdGlvbnMoaGFuZGxlLCBpc0JlZ2luKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd4MScsIHBvc2l0aW9ucy54MS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd5MScsIHBvc2l0aW9ucy55MS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd4MicsIHBvc2l0aW9ucy54Mi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd5MicsIHBvc2l0aW9ucy55Mi50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkcmFnUmVmLmVuZGVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuc3R5bGUucG9pbnRlckV2ZW50cyA9ICcnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhckRyYWdSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJEcmFnUmVmLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOiuoeeul2xpbmXmi5bliqjnmoTokL3ngrnkvY3kuo7nm67moIdCYXLnmoTlgLzvvIzlpoLmnpzlgLzlpKfkuo5CYXLlrr3luqbnmoTkuIDljYrvvIzor7TmmI7mmK/mi5bliqjliLBCZWdpbuS9jee9ru+8jOWQpuWImeWImeS4uuaLluWKqOWIsEVuZOS9jee9rlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdQYXRoLnRvKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlUG9pbnRYID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnggLVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnUGF0aC50by5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmVtaXRMaW5rRHJhZ0VuZGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ1BhdGgudG8sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VQb2ludFggPCB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdQYXRoLnRvLml0ZW0ucmVmcy53aWR0aCAvIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBJbkJhclBvc2l0aW9uLnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW5CYXJQb3NpdGlvbi5maW5pc2hcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmVtaXRMaW5rRHJhZ0VuZGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lMaW5rRHJhZ2dpbmdMaW5lKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZnMucHVzaChkcmFnUmVmKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkcmFnUmVmcztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5EcmFnQmFja2Ryb3AoZHJhZ0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdGFydDogR2FudHREYXRlLCBlbmQ6IEdhbnR0RGF0ZSkge1xuICAgICAgICBjb25zdCBkcmFnQmFja2Ryb3BFbGVtZW50ID0gdGhpcy5kb20ucm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtZHJhZy1iYWNrZHJvcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBkcmFnTWFza0VsZW1lbnQgPSB0aGlzLmRvbS5yb290LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1kcmFnLW1hc2snKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm9vdFJlY3QgPSB0aGlzLmRvbS5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBkcmFnUmVjdCA9IGRyYWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBsZXQgbGVmdCA9IGRyYWdSZWN0LmxlZnQgLSByb290UmVjdC5sZWZ0IC0gKHRoaXMuZG9tLnNpZGUuY2xpZW50V2lkdGggKyAxKTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ1Njcm9sbGluZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09IEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLkxFRlQpIHtcbiAgICAgICAgICAgICAgICBsZWZ0ICs9IGF1dG9TY3JvbGxTdGVwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSBBdXRvU2Nyb2xsSG9yaXpvbnRhbERpcmVjdGlvbi5SSUdIVCkge1xuICAgICAgICAgICAgICAgIGxlZnQgLT0gYXV0b1Njcm9sbFN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkdGggPSBkcmFnUmVjdC5yaWdodCAtIGRyYWdSZWN0LmxlZnQ7XG5cbiAgICAgICAgLy8gTm90ZTogdXBkYXRpbmcgc3R5bGVzIHdpbGwgY2F1c2UgcmUtbGF5b3V0IHNvIHdlIGhhdmUgdG8gcGxhY2UgdGhlbSBjb25zaXN0ZW50bHkgb25lIGJ5IG9uZS5cbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICBkcmFnTWFza0VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGRyYWdCYWNrZHJvcEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIHRoZSBsYXlvdXQsIGJ1dCB3ZSB3b24ndCBuZWVkIHJlLWxheW91dCwgYmVjYXVzZSB3ZSBzZXQgc3R5bGVzIHByZXZpb3VzbHkuXG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc3RhcnQnKS5pbm5lckhUTUwgPSBzdGFydC5mb3JtYXQoJ01NLWRkJyk7XG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZW5kJykuaW5uZXJIVE1MID0gZW5kLmZvcm1hdCgnTU0tZGQnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlRHJhZ0JhY2tkcm9wKCkge1xuICAgICAgICBjb25zdCBkcmFnQmFja2Ryb3BFbGVtZW50ID0gdGhpcy5kb20ucm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtZHJhZy1iYWNrZHJvcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBkcmFnTWFza0VsZW1lbnQgPSB0aGlzLmRvbS5yb290LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1kcmFnLW1hc2snKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIGRyYWdCYWNrZHJvcEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERyYWdnaW5nU3R5bGVzKCkge1xuICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2dhbnR0LWJhci1kcmFnZ2FibGUtZHJhZycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJEcmFnZ2luZ1N0eWxlcygpIHtcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnJztcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2dhbnR0LWJhci1kcmFnZ2FibGUtZHJhZycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmFyRHJhZ01vdmUoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRYID0gdGhpcy5pdGVtLnJlZnMueCArIHRoaXMuYmFyRHJhZ01vdmVEaXN0YW5jZSArIHRoaXMuZHJhZ1Njcm9sbERpc3RhbmNlO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVCeVhQb2ludChjdXJyZW50WCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGFydFggPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXRYUG9pbnRCeURhdGUoY3VycmVudERhdGUpO1xuICAgICAgICBjb25zdCBkYXlXaWR0aCA9IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERheU9jY3VwYW5jeVdpZHRoKGN1cnJlbnREYXRlKTtcbiAgICAgICAgY29uc3QgZGlmZkRheXMgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXModGhpcy5pdGVtLmVuZC52YWx1ZSwgdGhpcy5pdGVtLnN0YXJ0LnZhbHVlKTtcblxuICAgICAgICBsZXQgc3RhcnQgPSBjdXJyZW50RGF0ZTtcbiAgICAgICAgbGV0IGVuZCA9IGN1cnJlbnREYXRlLmFkZERheXMoZGlmZkRheXMpO1xuXG4gICAgICAgIGlmIChjdXJyZW50WCA+IGN1cnJlbnRTdGFydFggKyBkYXlXaWR0aCAvIDIpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQuYWRkRGF5cygxKTtcbiAgICAgICAgICAgIGVuZCA9IGVuZC5hZGREYXlzKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZHJhZ1Njcm9sbGluZykge1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGN1cnJlbnRYIC0gdGhpcy5iYXJEcmFnTW92ZURpc3RhbmNlO1xuICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlbkRyYWdCYWNrZHJvcChcbiAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudCxcbiAgICAgICAgICAgIHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVCeVhQb2ludChjdXJyZW50WCksXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoY3VycmVudFggKyB0aGlzLml0ZW0ucmVmcy53aWR0aClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNTdGFydE9yRW5kSW5zaWRlVmlldyhzdGFydCwgZW5kKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUoc3RhcnQsIGVuZCk7XG4gICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnTW92ZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiYXJCZWZvcmVIYW5kbGVEcmFnTW92ZSgpIHtcbiAgICAgICAgY29uc3QgeyB4LCBzdGFydCwgb25lRGF5V2lkdGggfSA9IHRoaXMuc3RhcnRPZkJhckhhbmRsZSgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaXRlbS5yZWZzLndpZHRoICsgdGhpcy5iYXJIYW5kbGVEcmFnTW92ZUFuZFNjcm9sbERpc3RhbmNlICogLTE7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkaWZmZXJlbmNlSW5EYXlzKHRoaXMuaXRlbS5lbmQudmFsdWUsIHN0YXJ0LnZhbHVlKTtcblxuICAgICAgICBpZiAod2lkdGggPiBkcmFnTWluV2lkdGggJiYgZGF5cyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS5sZWZ0ID0geCArICdweCc7XG4gICAgICAgICAgICB0aGlzLm9wZW5EcmFnQmFja2Ryb3AodGhpcy5iYXJFbGVtZW50LCBzdGFydCwgdGhpcy5pdGVtLmVuZCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1N0YXJ0T3JFbmRJbnNpZGVWaWV3KHN0YXJ0LCB0aGlzLml0ZW0uZW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUoc3RhcnQsIHRoaXMuaXRlbS5lbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzID4gMCAmJiBkYXlzIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUud2lkdGggPSBvbmVEYXlXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldFhQb2ludEJ5RGF0ZSh0aGlzLml0ZW0uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUubGVmdCA9IHggKyAncHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcGVuRHJhZ0JhY2tkcm9wKHRoaXMuYmFyRWxlbWVudCwgdGhpcy5pdGVtLmVuZC5zdGFydE9mRGF5KCksIHRoaXMuaXRlbS5lbmQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtLnVwZGF0ZURhdGUodGhpcy5pdGVtLmVuZC5zdGFydE9mRGF5KCksIHRoaXMuaXRlbS5lbmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzID0gZGF5cztcblxuICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ01vdmVkLmVtaXQoeyBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmFyQWZ0ZXJIYW5kbGVEcmFnTW92ZSgpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgZW5kIH0gPSB0aGlzLmVuZE9mQmFySGFuZGxlKCk7XG4gICAgICAgIGNvbnN0IGRheXMgPSBkaWZmZXJlbmNlSW5EYXlzKGVuZC52YWx1ZSwgdGhpcy5pdGVtLnN0YXJ0LnZhbHVlKTtcblxuICAgICAgICBpZiAod2lkdGggPiBkcmFnTWluV2lkdGggJiYgZGF5cyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIHRoaXMub3BlbkRyYWdCYWNrZHJvcCh0aGlzLmJhckVsZW1lbnQsIHRoaXMuaXRlbS5zdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1N0YXJ0T3JFbmRJbnNpZGVWaWV3KHRoaXMuaXRlbS5zdGFydCwgZW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHRoaXMuaXRlbS5zdGFydCwgZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJhckhhbmRsZURyYWdNb3ZlUmVjb3JkRGF5cyA+IDAgJiYgZGF5cyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb25lRGF5V2lkdGggPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlUmFuZ2VXaWR0aCh0aGlzLml0ZW0uc3RhcnQsIHRoaXMuaXRlbS5zdGFydC5lbmRPZkRheSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUud2lkdGggPSBvbmVEYXlXaWR0aCArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wZW5EcmFnQmFja2Ryb3AodGhpcy5iYXJFbGVtZW50LCB0aGlzLml0ZW0uc3RhcnQsIHRoaXMuaXRlbS5zdGFydC5lbmRPZkRheSgpKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHRoaXMuaXRlbS5zdGFydCwgdGhpcy5pdGVtLnN0YXJ0LmVuZE9mRGF5KCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzID0gZGF5cztcbiAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdNb3ZlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGNMaW5rTGluZVBvc2l0aW9ucyh0YXJnZXQ6IEhUTUxFbGVtZW50LCBpc0JlZm9yZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByb290UmVjdCA9IHRoaXMuZG9tLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGxheWVyUmVjdCA9IHRhcmdldC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4MTogbGF5ZXJSZWN0LmxlZnQgKyAoaXNCZWZvcmUgPyAwIDogbGF5ZXJSZWN0LndpZHRoKSAtIHJvb3RSZWN0LmxlZnQsXG4gICAgICAgICAgICB5MTogbGF5ZXJSZWN0LnRvcCArIGxheWVyUmVjdC5oZWlnaHQgLyAyIC0gcm9vdFJlY3QudG9wLFxuICAgICAgICAgICAgeDI6IHRhcmdldFJlY3QubGVmdCAtIHJvb3RSZWN0LmxlZnQgKyB0YXJnZXRSZWN0LndpZHRoIC8gMixcbiAgICAgICAgICAgIHkyOiB0YXJnZXRSZWN0LnRvcCAtIHJvb3RSZWN0LnRvcCArIHRhcmdldFJlY3QuaGVpZ2h0IC8gMlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTGlua0RyYWdnaW5nTGluZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpbmtEcmFnZ2luZ0xpbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSBjcmVhdGVTdmdFbGVtZW50KCdzdmcnLCAnZ2FudHQtbGluay1kcmFnLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgY29uc3QgbGluRWxlbWVudCA9IGNyZWF0ZVN2Z0VsZW1lbnQoJ2xpbmUnLCAnbGluay1kcmFnZ2luZy1saW5lJyk7XG4gICAgICAgICAgICBsaW5FbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICBzdmdFbGVtZW50LmFwcGVuZENoaWxkKGxpbkVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5kb20ucm9vdC5hcHBlbmRDaGlsZChzdmdFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZSA9IGxpbkVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lMaW5rRHJhZ2dpbmdMaW5lKCkge1xuICAgICAgICBpZiAodGhpcy5saW5rRHJhZ2dpbmdMaW5lKSB7XG4gICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUucGFyZW50RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMubGlua0RyYWdnaW5nTGluZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0U2Nyb2xsSW50ZXJ2YWwgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xuICAgICAgICBpbnRlcnZhbCgwLCBhbmltYXRpb25GcmFtZVNjaGVkdWxlcilcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnN0b3BTY3JvbGxUaW1lcnMkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFN0ZXAgPSBhdXRvU2Nyb2xsU3RlcDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uTEVGVCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNjcm9sbEJ5KC1zY3JvbGxTdGVwLCAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09IEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLlJJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2Nyb2xsQnkoc2Nyb2xsU3RlcCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShwb2ludGVyWDogbnVtYmVyLCBwb2ludGVyWTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoaXNQb2ludGVyTmVhckNsaWVudFJlY3QoY2xpZW50UmVjdCwgRFJPUF9QUk9YSU1JVFlfVEhSRVNIT0xELCBwb2ludGVyWCwgcG9pbnRlclkpKSB7XG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gZ2V0SG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbihjbGllbnRSZWN0LCBwb2ludGVyWCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uTEVGVCAmJiBzY3JvbGxMZWZ0ID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uUklHSFQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCA8IHRoaXMuZ2FudHRVcHBlci52aWV3LndpZHRoIC0gY2xpZW50UmVjdC53aWR0aClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1Njcm9sbGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuc3RhcnRTY3JvbGxJbnRlcnZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1Njcm9sbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29uZGl0aW9ucyB0byBzdG9wIGF1dG8tc2Nyb2xsOiB3aGVuIHRoZSBzdGFydCBpcyBncmVhdGVyIHRoYW4gdGhlIGVuZCBhbmQgdGhlIGJhciBhcHBlYXJzIGluIHRoZSB2aWV3XG4gICAgcHJpdmF0ZSBpc1N0YXJ0R3JlYXRlclRoYW5FbmRXaGVuQmFySGFuZGxlRHJhZ01vdmUoaXNCZWZvcmU6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGlzU3RhcnRHcmVhdGVyVGhhbkVuZDogYm9vbGVhbjtcbiAgICAgICAgbGV0IGlzQmFyQXBwZWFyc0luVmlldzogYm9vbGVhbjtcblxuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgICAgICBjb25zdCBjbGllbnRXaWR0aCA9IHRoaXMuZG9tLm1haW5Db250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IHhUaHJlc2hvbGQgPSBjbGllbnRXaWR0aCAqIERST1BfUFJPWElNSVRZX1RIUkVTSE9MRDtcblxuICAgICAgICBpZiAoaXNCZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQsIG9uZURheVdpZHRoIH0gPSB0aGlzLnN0YXJ0T2ZCYXJIYW5kbGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHhQb2ludGVyQnlFbmREYXRlID0gdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0WFBvaW50QnlEYXRlKHRoaXMuaXRlbS5lbmQpO1xuXG4gICAgICAgICAgICBpc1N0YXJ0R3JlYXRlclRoYW5FbmQgPSBzdGFydC52YWx1ZSA+IHRoaXMuaXRlbS5lbmQudmFsdWU7XG4gICAgICAgICAgICBpc0JhckFwcGVhcnNJblZpZXcgPSB4UG9pbnRlckJ5RW5kRGF0ZSArIG9uZURheVdpZHRoICsgeFRocmVzaG9sZCA8PSBzY3JvbGxMZWZ0ICsgY2xpZW50V2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IGVuZCB9ID0gdGhpcy5lbmRPZkJhckhhbmRsZSgpO1xuICAgICAgICAgICAgY29uc3QgeFBvaW50ZXJCeVN0YXJ0RGF0ZSA9IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldFhQb2ludEJ5RGF0ZSh0aGlzLml0ZW0uc3RhcnQpO1xuXG4gICAgICAgICAgICBpc1N0YXJ0R3JlYXRlclRoYW5FbmQgPSBlbmQudmFsdWUgPCB0aGlzLml0ZW0uc3RhcnQudmFsdWU7XG4gICAgICAgICAgICBpc0JhckFwcGVhcnNJblZpZXcgPSBzY3JvbGxMZWZ0ICsgeFRocmVzaG9sZCA8PSB4UG9pbnRlckJ5U3RhcnREYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzU3RhcnRHcmVhdGVyVGhhbkVuZCAmJiBpc0JhckFwcGVhcnNJblZpZXcgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU29tZSBkYXRhIGluZm9ybWF0aW9uIGFib3V0IGRyYWdnaW5nIHN0YXJ0IHVudGlsIGl0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiBlbmRcbiAgICBwcml2YXRlIHN0YXJ0T2ZCYXJIYW5kbGUoKSB7XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLml0ZW0ucmVmcy54ICsgdGhpcy5iYXJIYW5kbGVEcmFnTW92ZUFuZFNjcm9sbERpc3RhbmNlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoeCksXG4gICAgICAgICAgICBvbmVEYXlXaWR0aDogdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZVJhbmdlV2lkdGgodGhpcy5pdGVtLmVuZC5zdGFydE9mRGF5KCksIHRoaXMuaXRlbS5lbmQpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU29tZSBkYXRhIGluZm9ybWF0aW9uIGFib3V0IGRyYWdnaW5nIGVuZCBvZiBiYXIgaGFuZGxlXG4gICAgcHJpdmF0ZSBlbmRPZkJhckhhbmRsZSgpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLml0ZW0ucmVmcy53aWR0aCArIHRoaXMuYmFySGFuZGxlRHJhZ01vdmVBbmRTY3JvbGxEaXN0YW5jZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBlbmQ6IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVCeVhQb2ludCh0aGlzLml0ZW0ucmVmcy54ICsgd2lkdGgpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdG9wU2Nyb2xsaW5nKCkge1xuICAgICAgICB0aGlzLnN0b3BTY3JvbGxUaW1lcnMkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU3RhcnRPckVuZEluc2lkZVZpZXcoc3RhcnQ6IEdhbnR0RGF0ZSwgZW5kOiBHYW50dERhdGUpIHtcbiAgICAgICAgY29uc3QgaXRlbVN0YXJ0ID0gc3RhcnQuZ2V0VW5peFRpbWUoKTtcbiAgICAgICAgY29uc3QgaXRlbUVuZCA9IGVuZC5nZXRVbml4VGltZSgpO1xuICAgICAgICBjb25zdCB2aWV3U3RhcnQgPSB0aGlzLmdhbnR0VXBwZXIudmlldy5zdGFydC5nZXRVbml4VGltZSgpO1xuICAgICAgICBjb25zdCB2aWV3RW5kID0gdGhpcy5nYW50dFVwcGVyLnZpZXcuZW5kLmdldFVuaXhUaW1lKCk7XG4gICAgICAgIGlmIChpdGVtU3RhcnQgPCB2aWV3U3RhcnQgfHwgaXRlbUVuZCA+IHZpZXdFbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlRHJhZ3MoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgaXRlbTogR2FudHRJdGVtSW50ZXJuYWwsIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXIpIHtcbiAgICAgICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMuZ2FudHRVcHBlciA9IGdhbnR0VXBwZXI7XG4gICAgICAgIGlmICh0aGlzLmRyYWdEaXNhYmxlZCAmJiB0aGlzLmxpbmtEcmFnRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTW91c2VFdmVudHMoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5kcmFnRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnUmVmID0gdGhpcy5jcmVhdGVCYXJEcmFnKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZ0hhbmRsZXNSZWZzID0gdGhpcy5jcmVhdGVCYXJIYW5kbGVEcmFncygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1JlZnMucHVzaChkcmFnUmVmLCAuLi5kcmFnSGFuZGxlc1JlZnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpbmtEcmFnRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rRHJhZ1JlZnMgPSB0aGlzLmNyZWF0ZUxpbmtIYW5kbGVEcmFncygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1JlZnMucHVzaCguLi5saW5rRHJhZ1JlZnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlSXRlbShpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCkge1xuICAgICAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsb3NlRHJhZ0JhY2tkcm9wKCk7XG4gICAgICAgIHRoaXMuZHJhZ1JlZnMuZm9yRWFjaCgoZHJhZ1JlZikgPT4gZHJhZ1JlZi5kaXNwb3NlKCkpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcbiAgICAgICAgdGhpcy5zdG9wU2Nyb2xsVGltZXJzJC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWRyYWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvY29tcG9uZW50cy9iYXIvYmFyLWRyYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFHMUUsT0FBTyxFQUFzQixhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRSxPQUFPLEVBQWEsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RSxPQUFPLEVBRUgsNEJBQTRCLEVBQzVCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDMUIsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFFakM7OztHQUdHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUM7QUFFdEMsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDO0FBQ3ZDLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDO0FBQ2hELE1BQU0scUJBQXFCLEdBQUcsOEJBQThCLENBQUM7QUFFN0QsU0FBUyxnQkFBZ0IsQ0FBQyxhQUFxQixFQUFFLFNBQWlCO0lBQzlELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQztBQUdELE1BQU0sT0FBTyxZQUFZO0lBT3JCLElBQVksWUFBWTtRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBWSxnQkFBZ0I7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQVksa0NBQWtDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBWSxjQUFjO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBcUNELFlBQ1ksUUFBa0IsRUFDbEIsR0FBb0IsRUFDcEIsYUFBaUMsRUFDakMsT0FBZTtRQUhmLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFDcEIsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFuQ25CLGFBQVEsR0FBYyxFQUFFLENBQUM7UUFFekIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdkMsdUVBQXVFO1FBQy9ELHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFLaEQsa0NBQWtDO1FBQzFCLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUVoQyx5Q0FBeUM7UUFDakMsOEJBQXlCLEdBQUcsQ0FBQyxDQUFDO1FBRXRDLGdDQUFnQztRQUN4QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUU5Qix5QkFBeUI7UUFDakIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLHFFQUFxRTtRQUM3RCwrQkFBMEIsOENBQXNDO1FBS3hFLGtDQUFrQztRQUMxQix5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUE4WHpCLHdCQUFtQixHQUFHLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsUUFBUSxDQUFDLENBQUMsRUFBRSx1QkFBdUIsQ0FBQztpQkFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztpQkFDdkMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztnQkFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdkMsSUFBSSxJQUFJLENBQUMsMEJBQTBCLCtDQUF1QyxFQUFFO29CQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNqQztxQkFBTSxJQUFJLElBQUksQ0FBQywwQkFBMEIsZ0RBQXdDLEVBQUU7b0JBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNoQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO0lBcFlDLENBQUM7SUFFSSxhQUFhLENBQVUsT0FBOEM7UUFDekUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE9BQWdCO1FBQzFDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLEVBQUU7WUFDdkUsQ0FBQyxDQUFDLHFCQUFxQjtZQUN2QixDQUFDLENBQUMsZUFBZSxDQUFDO1FBRTFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxzQkFBc0IsQ0FBQzthQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDekYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDO3dCQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVO3FCQUMzQixDQUFDLENBQUM7aUJBQ047YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDOUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxzQkFBc0IsQ0FBQzthQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDakQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzNDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDdkIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBd0IsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQzdELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMvQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDdEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO29CQUN4RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7b0JBQzdDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUN0RSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3RCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN0QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckcsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDeEQsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2FBQ3BGLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztRQUUxQixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFjLHVCQUF1QixDQUFDLENBQUM7UUFDdkYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QixNQUFNLFFBQVEsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDdkIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBd0IsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQzdELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUMvQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRTt3QkFDdEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO3dCQUN4RixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7d0JBQzdDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3dCQUV0RSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLDBDQUEwQyxDQUFDLFFBQVEsQ0FBQyxFQUFFOzRCQUNqRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7NEJBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO3lCQUM5Qjt3QkFFRCxJQUFJLFFBQVEsRUFBRTs0QkFDVixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt5QkFDbEM7NkJBQU07NEJBQ0gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7eUJBQ2pDO3FCQUNKO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM5QixJQUFJLElBQUksQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxFQUFFO29CQUMxRSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEY7Z0JBQ0QsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtvQkFDckIsSUFBSSxRQUFRLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7cUJBQ2xDO3lCQUFNO3dCQUNILElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO3FCQUNqQztpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNyRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4RCxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7aUJBQ3BGLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQWMsdUJBQXVCLENBQUMsQ0FBQztRQUN2RixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlCLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBbUIsQ0FBQyxDQUFDO1lBQzFELE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDbkM7Z0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNO2lCQUM1RCxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztpQkFDcEM7Z0JBQ0QsZ0VBQWdFO2dCQUNoRSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRTtvQkFDcEMsTUFBTSxXQUFXLEdBQ2IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBRXpFLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7d0JBQ2pDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDckMsR0FBRyxFQUNDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQzs0QkFDaEUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLOzRCQUNyQixDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU07cUJBQ2pDLENBQUMsQ0FBQztpQkFDTjtxQkFBTTtvQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQzFDO2dCQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQXdCLEVBQUUsS0FBZ0IsRUFBRSxHQUFjO1FBQy9FLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFnQixDQUFDO1FBQy9GLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBZ0IsQ0FBQztRQUN2RixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3JELElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsMEJBQTBCLCtDQUF1QyxFQUFFO2dCQUN4RSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLElBQUksQ0FBQywwQkFBMEIsZ0RBQXdDLEVBQUU7Z0JBQ2hGLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO2FBQy9CO1NBQ0o7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFN0MsK0ZBQStGO1FBQy9GLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDekMsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMzQyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDeEMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDNUMsa0dBQWtHO1FBQ2xHLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFnQixDQUFDO1FBQy9GLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBZ0IsQ0FBQztRQUN2RixlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdkMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDL0MsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sV0FBVztRQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQ3ZGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEUsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRGLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUN4QixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLElBQUksUUFBUSxHQUFHLGFBQWEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUN4RSxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEUsSUFBSSxLQUFLLEdBQUcsWUFBWSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDcEQsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNILElBQUksSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDakQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3pDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25FO1FBQ0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztRQUV4QyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRSxJQUFJLEtBQUssR0FBRyxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNwRCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBQ0gsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7Z0JBQ25ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3hHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3BEO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFtQixFQUFFLFFBQWlCO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3RSxPQUFPO1lBQ0gsRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJO1lBQ3JFLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHO1lBQ3ZELEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDO1lBQzFELEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1NBQzVELENBQUM7SUFDTixDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDeEUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDbEUsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNoQztJQUNMLENBQUM7SUFpQk8seUJBQXlCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUNyRCxJQUFJLHVCQUF1QixDQUFDLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDbkYsTUFBTSx5QkFBeUIsR0FBRyw0QkFBNEIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFckYsSUFDSSxDQUFDLHlCQUF5QiwrQ0FBdUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixDQUFDLHlCQUF5QixnREFBd0M7b0JBQzlELFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUNqRTtnQkFDRSxJQUFJLENBQUMsMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7Z0JBQzVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixDQUFDLENBQUM7Z0JBQ3JHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQzVEO2lCQUFNO2dCQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDeEI7U0FDSjtJQUNMLENBQUM7SUFFRCx5R0FBeUc7SUFDakcsMENBQTBDLENBQUMsUUFBaUI7UUFDaEUsSUFBSSxxQkFBOEIsQ0FBQztRQUNuQyxJQUFJLGtCQUEyQixDQUFDO1FBRWhDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsV0FBVyxHQUFHLHdCQUF3QixDQUFDO1FBRTFELElBQUksUUFBUSxFQUFFO1lBQ1YsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN2RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTlFLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzFELGtCQUFrQixHQUFHLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxVQUFVLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQztTQUNqRzthQUFNO1lBQ0gsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWxGLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzFELGtCQUFrQixHQUFHLFVBQVUsR0FBRyxVQUFVLElBQUksbUJBQW1CLENBQUM7U0FDdkU7UUFFRCxPQUFPLHFCQUFxQixJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0RSxDQUFDO0lBRUQsc0ZBQXNGO0lBQzlFLGdCQUFnQjtRQUNwQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDO1FBQ3JFLE9BQU87WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2pHLENBQUM7SUFDTixDQUFDO0lBRUQseURBQXlEO0lBQ2pELGNBQWM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQztRQUU3RSxPQUFPO1lBQ0gsS0FBSztZQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUN0RSxDQUFDO0lBQ04sQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFnQixFQUFFLEdBQWM7UUFDM0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELElBQUksU0FBUyxHQUFHLFNBQVMsSUFBSSxPQUFPLEdBQUcsT0FBTyxFQUFFO1lBQzVDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxVQUFzQixFQUFFLElBQXVCLEVBQUUsVUFBc0I7UUFDL0UsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBRTNDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDNUMsT0FBTztTQUNWO2FBQU07WUFDSCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUM7YUFDbkQ7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQzthQUN2QztTQUNKO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUF1QjtRQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzt5R0F6akJRLFlBQVk7NkdBQVosWUFBWTsyRkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyYWdSZWYsIERyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBHYW50dERvbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9nYW50dC1kb20uc2VydmljZSc7XG5pbXBvcnQgeyBHYW50dERyYWdDb250YWluZXIsIEluQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9nYW50dC1kcmFnLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBHYW50dEl0ZW1JbnRlcm5hbCB9IGZyb20gJy4uLy4uL2NsYXNzL2l0ZW0nO1xuaW1wb3J0IHsgR2FudHREYXRlLCBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMsIGRpZmZlcmVuY2VJbkRheXMgfSBmcm9tICcuLi8uLi91dGlscy9kYXRlJztcbmltcG9ydCB7IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBpbnRlcnZhbCwgU3ViamVjdCwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRMaW5rVHlwZSB9IGZyb20gJy4uLy4uL2NsYXNzL2xpbmsnO1xuaW1wb3J0IHsgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL3Bhc3NpdmUtbGlzdGVuZXJzJztcbmltcG9ydCB7XG4gICAgQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24sXG4gICAgZ2V0SG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICBpc1BvaW50ZXJOZWFyQ2xpZW50UmVjdCxcbiAgICBnZXRBdXRvU2Nyb2xsU3BlZWRSYXRlc1xufSBmcm9tICcuLi8uLi91dGlscy9kcmFnLXNjcm9sbCc7XG5cbi8qKlxuICogUHJveGltaXR5LCBhcyBhIHJhdGlvIHRvIHdpZHRoL2hlaWdodCwgYXQgd2hpY2ggYVxuICogZHJhZ2dlZCBpdGVtIHdpbGwgYWZmZWN0IHRoZSBkcm9wIGNvbnRhaW5lci5cbiAqL1xuY29uc3QgRFJPUF9QUk9YSU1JVFlfVEhSRVNIT0xEID0gMC4wNTtcblxuY29uc3QgZHJhZ01pbldpZHRoID0gMTA7XG5jb25zdCBhdXRvU2Nyb2xsQmFzZVN0ZXAgPSAyO1xuY29uc3QgYWN0aXZlQ2xhc3MgPSAnZ2FudHQtYmFyLWFjdGl2ZSc7XG5jb25zdCBkcm9wQWN0aXZlQ2xhc3MgPSAnZ2FudHQtYmFyLWRyb3AtYWN0aXZlJztcbmNvbnN0IHNpbmdsZURyb3BBY3RpdmVDbGFzcyA9ICdnYW50dC1iYXItc2luZ2xlLWRyb3AtYWN0aXZlJztcblxuZnVuY3Rpb24gY3JlYXRlU3ZnRWxlbWVudChxdWFsaWZpZWROYW1lOiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBxdWFsaWZpZWROYW1lKTtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdhbnR0QmFyRHJhZyBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBnYW50dFVwcGVyOiBHYW50dFVwcGVyO1xuXG4gICAgcHJpdmF0ZSBiYXJFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIHByaXZhdGUgaXRlbTogR2FudHRJdGVtSW50ZXJuYWw7XG5cbiAgICBwcml2YXRlIGdldCBkcmFnRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pdGVtLmRyYWdnYWJsZSB8fCAhdGhpcy5nYW50dFVwcGVyLmRyYWdnYWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBsaW5rRHJhZ0Rpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXRlbS5saW5rYWJsZSB8fCAhdGhpcy5nYW50dFVwcGVyLmxpbmthYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGJhckhhbmRsZURyYWdNb3ZlQW5kU2Nyb2xsRGlzdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhckhhbmRsZURyYWdNb3ZlRGlzdGFuY2UgKyB0aGlzLmRyYWdTY3JvbGxEaXN0YW5jZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBhdXRvU2Nyb2xsU3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KGF1dG9TY3JvbGxCYXNlU3RlcCwgdGhpcy5hdXRvU2Nyb2xsU3BlZWRSYXRlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaW5rRHJhZ2dpbmdMaW5lOiBTVkdFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBiYXJEcmFnUmVmOiBEcmFnUmVmO1xuXG4gICAgcHJpdmF0ZSBkcmFnUmVmczogRHJhZ1JlZltdID0gW107XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBVc2VkIHRvIHNpZ25hbCB0byB0aGUgY3VycmVudCBhdXRvLXNjcm9sbCBzZXF1ZW5jZSB3aGVuIHRvIHN0b3AuICovXG4gICAgcHJpdmF0ZSBzdG9wU2Nyb2xsVGltZXJzJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogY29udGFpbmVyIGVsZW1lbnQgc2Nyb2xsTGVmdCAqL1xuICAgIHByaXZhdGUgY29udGFpbmVyU2Nyb2xsTGVmdDogbnVtYmVyO1xuXG4gICAgLyoqIG1vdmUgZGlzdGFuY2Ugd2hlbiBkcmFnIGJhciAqL1xuICAgIHByaXZhdGUgYmFyRHJhZ01vdmVEaXN0YW5jZSA9IDA7XG5cbiAgICAvKiogbW92ZSBkaXN0YW5jZSB3aGVuIGRyYWcgYmFyIGhhbmRsZSAqL1xuICAgIHByaXZhdGUgYmFySGFuZGxlRHJhZ01vdmVEaXN0YW5jZSA9IDA7XG5cbiAgICAvKiogc2Nyb2xsaW5nIHN0YXRlIHdoZW4gZHJhZyAqL1xuICAgIHByaXZhdGUgZHJhZ1Njcm9sbGluZyA9IGZhbHNlO1xuXG4gICAgLyoqIGRyYWdTY3JvbGxEaXN0YW5jZSAqL1xuICAgIHByaXZhdGUgZHJhZ1Njcm9sbERpc3RhbmNlID0gMDtcblxuICAgIC8qKiBIb3Jpem9udGFsIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgbGlzdCBpcyBjdXJyZW50bHkgc2Nyb2xsaW5nLiAqL1xuICAgIHByaXZhdGUgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBBdXRvU2Nyb2xsSG9yaXpvbnRhbERpcmVjdGlvbi5OT05FO1xuXG4gICAgLyoqIFJlY29yZCBiYXIgZGF5cyB3aGVuIGJhciBoYW5kbGUgZHJhZyBtb3ZlLiAqL1xuICAgIHByaXZhdGUgYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzOiBudW1iZXI7XG5cbiAgICAvKiogU3BlZWQgcmF0aW8gZm9yIGF1dG8gc2Nyb2xsICovXG4gICAgcHJpdmF0ZSBhdXRvU2Nyb2xsU3BlZWRSYXRlcyA9IDE7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkcmFnRHJvcDogRHJhZ0Ryb3AsXG4gICAgICAgIHByaXZhdGUgZG9tOiBHYW50dERvbVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZHJhZ0NvbnRhaW5lcjogR2FudHREcmFnQ29udGFpbmVyLFxuICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZVxuICAgICkge31cblxuICAgIHByaXZhdGUgY3JlYXRlRHJhZ1JlZjxUID0gYW55PihlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50KTogRHJhZ1JlZjxUPiB7XG4gICAgICAgIGNvbnN0IGRyYWdSZWYgPSB0aGlzLmRyYWdEcm9wLmNyZWF0ZURyYWcoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBkcmFnUmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRHJhZ1Njcm9sbEV2ZW50KGRyYWdSZWY6IERyYWdSZWYpIHtcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudCh0aGlzLmRvbS5tYWluQ29udGFpbmVyLCAnc2Nyb2xsJywgcGFzc2l2ZUxpc3RlbmVyT3B0aW9ucykucGlwZSh0YWtlVW50aWwoZHJhZ1JlZi5lbmRlZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTW91c2VFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGRyb3BDbGFzcyA9XG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIuY29uZmlnLmxpbmtPcHRpb25zPy5kZXBlbmRlbmN5VHlwZXM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLmNvbmZpZy5saW5rT3B0aW9ucz8uZGVwZW5kZW5jeVR5cGVzWzBdID09PSBHYW50dExpbmtUeXBlLmZzXG4gICAgICAgICAgICAgICAgPyBzaW5nbGVEcm9wQWN0aXZlQ2xhc3NcbiAgICAgICAgICAgICAgICA6IGRyb3BBY3RpdmVDbGFzcztcblxuICAgICAgICBmcm9tRXZlbnQodGhpcy5iYXJFbGVtZW50LCAnbW91c2VlbnRlcicsIHBhc3NpdmVMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnZ2luZ0lkICYmIHRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ2dpbmdJZCAhPT0gdGhpcy5pdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW0ubGlua2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QuYWRkKGRyb3BDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZW1pdExpbmtEcmFnRW50ZXJlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuYmFyRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuY2xhc3NMaXN0LmFkZChhY3RpdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuYmFyRWxlbWVudCwgJ21vdXNlbGVhdmUnLCBwYXNzaXZlTGlzdGVuZXJPcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdnaW5nSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYWN0aXZlQ2xhc3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5lbWl0TGlua0RyYWdMZWF2ZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZHJvcENsYXNzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmFyRHJhZygpIHtcbiAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuY3JlYXRlRHJhZ1JlZih0aGlzLmJhckVsZW1lbnQpO1xuICAgICAgICBkcmFnUmVmLmxvY2tBeGlzID0gJ3gnO1xuICAgICAgICBkcmFnUmVmLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5kb20ubWFpbkl0ZW1zIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgZHJhZ1JlZi5zdGFydGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERyYWdnaW5nU3R5bGVzKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lclNjcm9sbExlZnQgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURyYWdTY3JvbGxFdmVudChkcmFnUmVmKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkcmFnUmVmLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkcmFnU2Nyb2xsRGlzdGFuY2UgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyLnNjcm9sbExlZnQgLSB0aGlzLmNvbnRhaW5lclNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1Njcm9sbERpc3RhbmNlID0gZHJhZ1Njcm9sbERpc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICBkcmFnUmVmWydfYm91bmRhcnlSZWN0J10gPSB0aGlzLmRvbS5tYWluSXRlbXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnU3RhcnRlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KTtcbiAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmVEaXN0YW5jZSA9IGV2ZW50LmRpc3RhbmNlLng7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ1Njcm9sbGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZHJhZ1JlZi5lbmRlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRHJhZ2dpbmdTdHlsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VEcmFnQmFja2Ryb3AoKTtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmRyYWdTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1Njcm9sbERpc3RhbmNlID0gMDtcbiAgICAgICAgICAgIHRoaXMuYmFyRHJhZ01vdmVEaXN0YW5jZSA9IDA7XG4gICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlUmVmcyh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVSYW5nZVdpZHRoKHRoaXMuaXRlbS5zdGFydC5zdGFydE9mRGF5KCksIHRoaXMuaXRlbS5lbmQuZW5kT2ZEYXkoKSksXG4gICAgICAgICAgICAgICAgeDogdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0WFBvaW50QnlEYXRlKHRoaXMuaXRlbS5zdGFydCksXG4gICAgICAgICAgICAgICAgeTogKHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodCAtIHRoaXMuZ2FudHRVcHBlci5zdHlsZXMuYmFySGVpZ2h0KSAvIDIgLSAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhckRyYWdSZWYgPSBkcmFnUmVmO1xuXG4gICAgICAgIHJldHVybiBkcmFnUmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmFySGFuZGxlRHJhZ3MoKSB7XG4gICAgICAgIGNvbnN0IGRyYWdSZWZzID0gW107XG4gICAgICAgIGNvbnN0IGhhbmRsZXMgPSB0aGlzLmJhckVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5kcmFnLWhhbmRsZXMgLmhhbmRsZScpO1xuICAgICAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQmVmb3JlID0gaW5kZXggPT09IDA7XG4gICAgICAgICAgICBjb25zdCBkcmFnUmVmID0gdGhpcy5jcmVhdGVEcmFnUmVmKGhhbmRsZSk7XG4gICAgICAgICAgICBkcmFnUmVmLmxvY2tBeGlzID0gJ3gnO1xuICAgICAgICAgICAgZHJhZ1JlZi53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuZG9tLm1haW5JdGVtcyBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBkcmFnUmVmLnN0YXJ0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERyYWdnaW5nU3R5bGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJTY3JvbGxMZWZ0ID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJhZ1Njcm9sbEV2ZW50KGRyYWdSZWYpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnUmVmLmlzRHJhZ2dpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJhZ1Njcm9sbERpc3RhbmNlID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0IC0gdGhpcy5jb250YWluZXJTY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnU2Nyb2xsRGlzdGFuY2UgPSBkcmFnU2Nyb2xsRGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnUmVmWydfYm91bmRhcnlSZWN0J10gPSB0aGlzLmRvbS5tYWluSXRlbXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdTY3JvbGxpbmcgJiYgdGhpcy5pc1N0YXJ0R3JlYXRlclRoYW5FbmRXaGVuQmFySGFuZGxlRHJhZ01vdmUoaXNCZWZvcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0JlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyQmVmb3JlSGFuZGxlRHJhZ01vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJBZnRlckhhbmRsZURyYWdNb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ1N0YXJ0ZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZi5tb3ZlZC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzICYmIHRoaXMuYmFySGFuZGxlRHJhZ01vdmVSZWNvcmREYXlzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZXZlbnQucG9pbnRlclBvc2l0aW9uLngsIGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJIYW5kbGVEcmFnTW92ZURpc3RhbmNlID0gZXZlbnQuZGlzdGFuY2UueDtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZHJhZ1Njcm9sbGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyQmVmb3JlSGFuZGxlRHJhZ01vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFyQWZ0ZXJIYW5kbGVEcmFnTW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRyYWdSZWYuZW5kZWQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEcmFnZ2luZ1N0eWxlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcmFnQmFja2Ryb3AoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTY3JvbGxEaXN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJIYW5kbGVEcmFnTW92ZURpc3RhbmNlID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlUmVmcyh7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlUmFuZ2VXaWR0aCh0aGlzLml0ZW0uc3RhcnQuc3RhcnRPZkRheSgpLCB0aGlzLml0ZW0uZW5kLmVuZE9mRGF5KCkpLFxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXRYUG9pbnRCeURhdGUodGhpcy5pdGVtLnN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgeTogKHRoaXMuZ2FudHRVcHBlci5zdHlsZXMubGluZUhlaWdodCAtIHRoaXMuZ2FudHRVcHBlci5zdHlsZXMuYmFySGVpZ2h0KSAvIDIgLSAxXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdFbmRlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZHJhZ1JlZnMucHVzaChkcmFnUmVmKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkcmFnUmVmcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxpbmtIYW5kbGVEcmFncygpIHtcbiAgICAgICAgY29uc3QgZHJhZ1JlZnMgPSBbXTtcbiAgICAgICAgY29uc3QgaGFuZGxlcyA9IHRoaXMuYmFyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmxpbmstaGFuZGxlcyAuaGFuZGxlJyk7XG4gICAgICAgIGhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNCZWdpbiA9IGluZGV4ID09PSAwO1xuICAgICAgICAgICAgY29uc3QgZHJhZ1JlZiA9IHRoaXMuZHJhZ0Ryb3AuY3JlYXRlRHJhZyhoYW5kbGUpO1xuICAgICAgICAgICAgZHJhZ1JlZi53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuZG9tLnJvb3QgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICAgICAgZHJhZ1JlZi5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFyRHJhZ1JlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhckRyYWdSZWYuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUxpbmtEcmFnZ2luZ0xpbmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZW1pdExpbmtEcmFnU3RhcnRlZCh7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuYmFyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBwb3M6IGlzQmVnaW4gPyBJbkJhclBvc2l0aW9uLnN0YXJ0IDogSW5CYXJQb3NpdGlvbi5maW5pc2hcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkcmFnUmVmLm1vdmVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5jYWxjTGlua0xpbmVQb3NpdGlvbnMoaGFuZGxlLCBpc0JlZ2luKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd4MScsIHBvc2l0aW9ucy54MS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd5MScsIHBvc2l0aW9ucy55MS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd4MicsIHBvc2l0aW9ucy54Mi50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUuc2V0QXR0cmlidXRlKCd5MicsIHBvc2l0aW9ucy55Mi50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkcmFnUmVmLmVuZGVkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuc3R5bGUucG9pbnRlckV2ZW50cyA9ICcnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJhckRyYWdSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJEcmFnUmVmLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOiuoeeul2xpbmXmi5bliqjnmoTokL3ngrnkvY3kuo7nm67moIdCYXLnmoTlgLzvvIzlpoLmnpzlgLzlpKfkuo5CYXLlrr3luqbnmoTkuIDljYrvvIzor7TmmI7mmK/mi5bliqjliLBCZWdpbuS9jee9ru+8jOWQpuWImeWImeS4uuaLluWKqOWIsEVuZOS9jee9rlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdQYXRoLnRvKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlUG9pbnRYID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnggLVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmxpbmtEcmFnUGF0aC50by5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmVtaXRMaW5rRHJhZ0VuZGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZHJhZ0NvbnRhaW5lci5saW5rRHJhZ1BhdGgudG8sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VQb2ludFggPCB0aGlzLmRyYWdDb250YWluZXIubGlua0RyYWdQYXRoLnRvLml0ZW0ucmVmcy53aWR0aCAvIDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBJbkJhclBvc2l0aW9uLnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW5CYXJQb3NpdGlvbi5maW5pc2hcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmVtaXRMaW5rRHJhZ0VuZGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lMaW5rRHJhZ2dpbmdMaW5lKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZHJhZ1JlZnMucHVzaChkcmFnUmVmKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkcmFnUmVmcztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5EcmFnQmFja2Ryb3AoZHJhZ0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdGFydDogR2FudHREYXRlLCBlbmQ6IEdhbnR0RGF0ZSkge1xuICAgICAgICBjb25zdCBkcmFnQmFja2Ryb3BFbGVtZW50ID0gdGhpcy5kb20ucm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtZHJhZy1iYWNrZHJvcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBkcmFnTWFza0VsZW1lbnQgPSB0aGlzLmRvbS5yb290LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1kcmFnLW1hc2snKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm9vdFJlY3QgPSB0aGlzLmRvbS5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBkcmFnUmVjdCA9IGRyYWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBsZXQgbGVmdCA9IGRyYWdSZWN0LmxlZnQgLSByb290UmVjdC5sZWZ0IC0gKHRoaXMuZG9tLnNpZGUuY2xpZW50V2lkdGggKyAxKTtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ1Njcm9sbGluZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09IEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLkxFRlQpIHtcbiAgICAgICAgICAgICAgICBsZWZ0ICs9IHRoaXMuYXV0b1Njcm9sbFN0ZXA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09IEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLlJJR0hUKSB7XG4gICAgICAgICAgICAgICAgbGVmdCAtPSB0aGlzLmF1dG9TY3JvbGxTdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZHJhZ1JlY3QucmlnaHQgLSBkcmFnUmVjdC5sZWZ0O1xuXG4gICAgICAgIC8vIE5vdGU6IHVwZGF0aW5nIHN0eWxlcyB3aWxsIGNhdXNlIHJlLWxheW91dCBzbyB3ZSBoYXZlIHRvIHBsYWNlIHRoZW0gY29uc2lzdGVudGx5IG9uZSBieSBvbmUuXG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7XG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgZHJhZ01hc2tFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICBkcmFnQmFja2Ryb3BFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAvLyBUaGlzIHdpbGwgaW52YWxpZGF0ZSB0aGUgbGF5b3V0LCBidXQgd2Ugd29uJ3QgbmVlZCByZS1sYXlvdXQsIGJlY2F1c2Ugd2Ugc2V0IHN0eWxlcyBwcmV2aW91c2x5LlxuICAgICAgICBkcmFnTWFza0VsZW1lbnQucXVlcnlTZWxlY3RvcignLnN0YXJ0JykuaW5uZXJIVE1MID0gc3RhcnQuZm9ybWF0KCdNTS1kZCcpO1xuICAgICAgICBkcmFnTWFza0VsZW1lbnQucXVlcnlTZWxlY3RvcignLmVuZCcpLmlubmVySFRNTCA9IGVuZC5mb3JtYXQoJ01NLWRkJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZURyYWdCYWNrZHJvcCgpIHtcbiAgICAgICAgY29uc3QgZHJhZ0JhY2tkcm9wRWxlbWVudCA9IHRoaXMuZG9tLnJvb3QucXVlcnlTZWxlY3RvcignLmdhbnR0LWRyYWctYmFja2Ryb3AnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgZHJhZ01hc2tFbGVtZW50ID0gdGhpcy5kb20ucm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FudHQtZHJhZy1tYXNrJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGRyYWdNYXNrRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBkcmFnQmFja2Ryb3BFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREcmFnZ2luZ1N0eWxlcygpIHtcbiAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdnYW50dC1iYXItZHJhZ2dhYmxlLWRyYWcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyRHJhZ2dpbmdTdHlsZXMoKSB7XG4gICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJyc7XG4gICAgICAgIHRoaXMuYmFyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdnYW50dC1iYXItZHJhZ2dhYmxlLWRyYWcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJhckRyYWdNb3ZlKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50WCA9IHRoaXMuaXRlbS5yZWZzLnggKyB0aGlzLmJhckRyYWdNb3ZlRGlzdGFuY2UgKyB0aGlzLmRyYWdTY3JvbGxEaXN0YW5jZTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoY3VycmVudFgpO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhcnRYID0gdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0WFBvaW50QnlEYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgICAgY29uc3QgZGF5V2lkdGggPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXlPY2N1cGFuY3lXaWR0aChjdXJyZW50RGF0ZSk7XG4gICAgICAgIGNvbnN0IGRpZmZEYXlzID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKHRoaXMuaXRlbS5lbmQudmFsdWUsIHRoaXMuaXRlbS5zdGFydC52YWx1ZSk7XG5cbiAgICAgICAgbGV0IHN0YXJ0ID0gY3VycmVudERhdGU7XG4gICAgICAgIGxldCBlbmQgPSBjdXJyZW50RGF0ZS5hZGREYXlzKGRpZmZEYXlzKTtcblxuICAgICAgICBpZiAoY3VycmVudFggPiBjdXJyZW50U3RhcnRYICsgZGF5V2lkdGggLyAyKSB7XG4gICAgICAgICAgICBzdGFydCA9IHN0YXJ0LmFkZERheXMoMSk7XG4gICAgICAgICAgICBlbmQgPSBlbmQuYWRkRGF5cygxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRyYWdTY3JvbGxpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjdXJyZW50WCAtIHRoaXMuYmFyRHJhZ01vdmVEaXN0YW5jZTtcbiAgICAgICAgICAgIHRoaXMuYmFyRWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW5EcmFnQmFja2Ryb3AoXG4gICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQsXG4gICAgICAgICAgICB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlQnlYUG9pbnQoY3VycmVudFgpLFxuICAgICAgICAgICAgdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KGN1cnJlbnRYICsgdGhpcy5pdGVtLnJlZnMud2lkdGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU3RhcnRPckVuZEluc2lkZVZpZXcoc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHN0YXJ0LCBlbmQpO1xuICAgICAgICB0aGlzLmRyYWdDb250YWluZXIuZHJhZ01vdmVkLmVtaXQoeyBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmFyQmVmb3JlSGFuZGxlRHJhZ01vdmUoKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgc3RhcnQsIG9uZURheVdpZHRoIH0gPSB0aGlzLnN0YXJ0T2ZCYXJIYW5kbGUoKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLml0ZW0ucmVmcy53aWR0aCArIHRoaXMuYmFySGFuZGxlRHJhZ01vdmVBbmRTY3JvbGxEaXN0YW5jZSAqIC0xO1xuICAgICAgICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyh0aGlzLml0ZW0uZW5kLnZhbHVlLCBzdGFydC52YWx1ZSk7XG5cbiAgICAgICAgaWYgKHdpZHRoID4gZHJhZ01pbldpZHRoICYmIGRheXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUubGVmdCA9IHggKyAncHgnO1xuICAgICAgICAgICAgdGhpcy5vcGVuRHJhZ0JhY2tkcm9wKHRoaXMuYmFyRWxlbWVudCwgc3RhcnQsIHRoaXMuaXRlbS5lbmQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTdGFydE9yRW5kSW5zaWRlVmlldyhzdGFydCwgdGhpcy5pdGVtLmVuZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHN0YXJ0LCB0aGlzLml0ZW0uZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJhckhhbmRsZURyYWdNb3ZlUmVjb3JkRGF5cyA+IDAgJiYgZGF5cyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLndpZHRoID0gb25lRGF5V2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHggPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXRYUG9pbnRCeURhdGUodGhpcy5pdGVtLmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLmxlZnQgPSB4ICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3BlbkRyYWdCYWNrZHJvcCh0aGlzLmJhckVsZW1lbnQsIHRoaXMuaXRlbS5lbmQuc3RhcnRPZkRheSgpLCB0aGlzLml0ZW0uZW5kKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbS51cGRhdGVEYXRlKHRoaXMuaXRlbS5lbmQuc3RhcnRPZkRheSgpLCB0aGlzLml0ZW0uZW5kKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhckhhbmRsZURyYWdNb3ZlUmVjb3JkRGF5cyA9IGRheXM7XG5cbiAgICAgICAgdGhpcy5kcmFnQ29udGFpbmVyLmRyYWdNb3ZlZC5lbWl0KHsgaXRlbTogdGhpcy5pdGVtLm9yaWdpbiB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJhckFmdGVySGFuZGxlRHJhZ01vdmUoKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGVuZCB9ID0gdGhpcy5lbmRPZkJhckhhbmRsZSgpO1xuICAgICAgICBjb25zdCBkYXlzID0gZGlmZmVyZW5jZUluRGF5cyhlbmQudmFsdWUsIHRoaXMuaXRlbS5zdGFydC52YWx1ZSk7XG5cbiAgICAgICAgaWYgKHdpZHRoID4gZHJhZ01pbldpZHRoICYmIGRheXMgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmJhckVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG4gICAgICAgICAgICB0aGlzLm9wZW5EcmFnQmFja2Ryb3AodGhpcy5iYXJFbGVtZW50LCB0aGlzLml0ZW0uc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTdGFydE9yRW5kSW5zaWRlVmlldyh0aGlzLml0ZW0uc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlRGF0ZSh0aGlzLml0ZW0uc3RhcnQsIGVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5iYXJIYW5kbGVEcmFnTW92ZVJlY29yZERheXMgPiAwICYmIGRheXMgPD0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uZURheVdpZHRoID0gdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZVJhbmdlV2lkdGgodGhpcy5pdGVtLnN0YXJ0LCB0aGlzLml0ZW0uc3RhcnQuZW5kT2ZEYXkoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXJFbGVtZW50LnN0eWxlLndpZHRoID0gb25lRGF5V2lkdGggKyAncHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcGVuRHJhZ0JhY2tkcm9wKHRoaXMuYmFyRWxlbWVudCwgdGhpcy5pdGVtLnN0YXJ0LCB0aGlzLml0ZW0uc3RhcnQuZW5kT2ZEYXkoKSk7XG4gICAgICAgICAgICB0aGlzLml0ZW0udXBkYXRlRGF0ZSh0aGlzLml0ZW0uc3RhcnQsIHRoaXMuaXRlbS5zdGFydC5lbmRPZkRheSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhckhhbmRsZURyYWdNb3ZlUmVjb3JkRGF5cyA9IGRheXM7XG4gICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnTW92ZWQuZW1pdCh7IGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjTGlua0xpbmVQb3NpdGlvbnModGFyZ2V0OiBIVE1MRWxlbWVudCwgaXNCZWZvcmU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgcm9vdFJlY3QgPSB0aGlzLmRvbS5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0YXJnZXRSZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBsYXllclJlY3QgPSB0YXJnZXQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDE6IGxheWVyUmVjdC5sZWZ0ICsgKGlzQmVmb3JlID8gMCA6IGxheWVyUmVjdC53aWR0aCkgLSByb290UmVjdC5sZWZ0LFxuICAgICAgICAgICAgeTE6IGxheWVyUmVjdC50b3AgKyBsYXllclJlY3QuaGVpZ2h0IC8gMiAtIHJvb3RSZWN0LnRvcCxcbiAgICAgICAgICAgIHgyOiB0YXJnZXRSZWN0LmxlZnQgLSByb290UmVjdC5sZWZ0ICsgdGFyZ2V0UmVjdC53aWR0aCAvIDIsXG4gICAgICAgICAgICB5MjogdGFyZ2V0UmVjdC50b3AgLSByb290UmVjdC50b3AgKyB0YXJnZXRSZWN0LmhlaWdodCAvIDJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxpbmtEcmFnZ2luZ0xpbmUoKSB7XG4gICAgICAgIGlmICghdGhpcy5saW5rRHJhZ2dpbmdMaW5lKSB7XG4gICAgICAgICAgICBjb25zdCBzdmdFbGVtZW50ID0gY3JlYXRlU3ZnRWxlbWVudCgnc3ZnJywgJ2dhbnR0LWxpbmstZHJhZy1jb250YWluZXInKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbkVsZW1lbnQgPSBjcmVhdGVTdmdFbGVtZW50KCdsaW5lJywgJ2xpbmstZHJhZ2dpbmctbGluZScpO1xuICAgICAgICAgICAgbGluRWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgICAgICAgICAgc3ZnRWxlbWVudC5hcHBlbmRDaGlsZChsaW5FbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZG9tLnJvb3QuYXBwZW5kQ2hpbGQoc3ZnRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUgPSBsaW5FbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95TGlua0RyYWdnaW5nTGluZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGlua0RyYWdnaW5nTGluZSkge1xuICAgICAgICAgICAgdGhpcy5saW5rRHJhZ2dpbmdMaW5lLnBhcmVudEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmxpbmtEcmFnZ2luZ0xpbmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFNjcm9sbEludGVydmFsID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcbiAgICAgICAgaW50ZXJ2YWwoMCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5zdG9wU2Nyb2xsVGltZXJzJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxTdGVwID0gdGhpcy5hdXRvU2Nyb2xsU3RlcDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uTEVGVCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNjcm9sbEJ5KC1zY3JvbGxTdGVwLCAwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09IEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLlJJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2Nyb2xsQnkoc2Nyb2xsU3RlcCwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShwb2ludGVyWDogbnVtYmVyLCBwb2ludGVyWTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoaXNQb2ludGVyTmVhckNsaWVudFJlY3QoY2xpZW50UmVjdCwgRFJPUF9QUk9YSU1JVFlfVEhSRVNIT0xELCBwb2ludGVyWCwgcG9pbnRlclkpKSB7XG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gZ2V0SG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbihjbGllbnRSZWN0LCBwb2ludGVyWCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uTEVGVCAmJiBzY3JvbGxMZWZ0ID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uUklHSFQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCA8IHRoaXMuZ2FudHRVcHBlci52aWV3LndpZHRoIC0gY2xpZW50UmVjdC53aWR0aClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1Njcm9sbFNwZWVkUmF0ZXMgPSBnZXRBdXRvU2Nyb2xsU3BlZWRSYXRlcyhjbGllbnRSZWN0LCBwb2ludGVyWCwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnU2Nyb2xsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5zdGFydFNjcm9sbEludGVydmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb25kaXRpb25zIHRvIHN0b3AgYXV0by1zY3JvbGw6IHdoZW4gdGhlIHN0YXJ0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgZW5kIGFuZCB0aGUgYmFyIGFwcGVhcnMgaW4gdGhlIHZpZXdcbiAgICBwcml2YXRlIGlzU3RhcnRHcmVhdGVyVGhhbkVuZFdoZW5CYXJIYW5kbGVEcmFnTW92ZShpc0JlZm9yZTogYm9vbGVhbikge1xuICAgICAgICBsZXQgaXNTdGFydEdyZWF0ZXJUaGFuRW5kOiBib29sZWFuO1xuICAgICAgICBsZXQgaXNCYXJBcHBlYXJzSW5WaWV3OiBib29sZWFuO1xuXG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLmRvbS5tYWluQ29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IGNsaWVudFdpZHRoID0gdGhpcy5kb20ubWFpbkNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3QgeFRocmVzaG9sZCA9IGNsaWVudFdpZHRoICogRFJPUF9QUk9YSU1JVFlfVEhSRVNIT0xEO1xuXG4gICAgICAgIGlmIChpc0JlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydCwgb25lRGF5V2lkdGggfSA9IHRoaXMuc3RhcnRPZkJhckhhbmRsZSgpO1xuICAgICAgICAgICAgY29uc3QgeFBvaW50ZXJCeUVuZERhdGUgPSB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXRYUG9pbnRCeURhdGUodGhpcy5pdGVtLmVuZCk7XG5cbiAgICAgICAgICAgIGlzU3RhcnRHcmVhdGVyVGhhbkVuZCA9IHN0YXJ0LnZhbHVlID4gdGhpcy5pdGVtLmVuZC52YWx1ZTtcbiAgICAgICAgICAgIGlzQmFyQXBwZWFyc0luVmlldyA9IHhQb2ludGVyQnlFbmREYXRlICsgb25lRGF5V2lkdGggKyB4VGhyZXNob2xkIDw9IHNjcm9sbExlZnQgKyBjbGllbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW5kIH0gPSB0aGlzLmVuZE9mQmFySGFuZGxlKCk7XG4gICAgICAgICAgICBjb25zdCB4UG9pbnRlckJ5U3RhcnREYXRlID0gdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0WFBvaW50QnlEYXRlKHRoaXMuaXRlbS5zdGFydCk7XG5cbiAgICAgICAgICAgIGlzU3RhcnRHcmVhdGVyVGhhbkVuZCA9IGVuZC52YWx1ZSA8IHRoaXMuaXRlbS5zdGFydC52YWx1ZTtcbiAgICAgICAgICAgIGlzQmFyQXBwZWFyc0luVmlldyA9IHNjcm9sbExlZnQgKyB4VGhyZXNob2xkIDw9IHhQb2ludGVyQnlTdGFydERhdGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNTdGFydEdyZWF0ZXJUaGFuRW5kICYmIGlzQmFyQXBwZWFyc0luVmlldyA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTb21lIGRhdGEgaW5mb3JtYXRpb24gYWJvdXQgZHJhZ2dpbmcgc3RhcnQgdW50aWwgaXQgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIGVuZFxuICAgIHByaXZhdGUgc3RhcnRPZkJhckhhbmRsZSgpIHtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuaXRlbS5yZWZzLnggKyB0aGlzLmJhckhhbmRsZURyYWdNb3ZlQW5kU2Nyb2xsRGlzdGFuY2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FudHRVcHBlci52aWV3LmdldERhdGVCeVhQb2ludCh4KSxcbiAgICAgICAgICAgIG9uZURheVdpZHRoOiB0aGlzLmdhbnR0VXBwZXIudmlldy5nZXREYXRlUmFuZ2VXaWR0aCh0aGlzLml0ZW0uZW5kLnN0YXJ0T2ZEYXkoKSwgdGhpcy5pdGVtLmVuZClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTb21lIGRhdGEgaW5mb3JtYXRpb24gYWJvdXQgZHJhZ2dpbmcgZW5kIG9mIGJhciBoYW5kbGVcbiAgICBwcml2YXRlIGVuZE9mQmFySGFuZGxlKCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuaXRlbS5yZWZzLndpZHRoICsgdGhpcy5iYXJIYW5kbGVEcmFnTW92ZUFuZFNjcm9sbERpc3RhbmNlO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGVuZDogdGhpcy5nYW50dFVwcGVyLnZpZXcuZ2V0RGF0ZUJ5WFBvaW50KHRoaXMuaXRlbS5yZWZzLnggKyB3aWR0aClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0b3BTY3JvbGxpbmcoKSB7XG4gICAgICAgIHRoaXMuc3RvcFNjcm9sbFRpbWVycyQubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTdGFydE9yRW5kSW5zaWRlVmlldyhzdGFydDogR2FudHREYXRlLCBlbmQ6IEdhbnR0RGF0ZSkge1xuICAgICAgICBjb25zdCBpdGVtU3RhcnQgPSBzdGFydC5nZXRVbml4VGltZSgpO1xuICAgICAgICBjb25zdCBpdGVtRW5kID0gZW5kLmdldFVuaXhUaW1lKCk7XG4gICAgICAgIGNvbnN0IHZpZXdTdGFydCA9IHRoaXMuZ2FudHRVcHBlci52aWV3LnN0YXJ0LmdldFVuaXhUaW1lKCk7XG4gICAgICAgIGNvbnN0IHZpZXdFbmQgPSB0aGlzLmdhbnR0VXBwZXIudmlldy5lbmQuZ2V0VW5peFRpbWUoKTtcbiAgICAgICAgaWYgKGl0ZW1TdGFydCA8IHZpZXdTdGFydCB8fCBpdGVtRW5kID4gdmlld0VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVEcmFncyhlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBpdGVtOiBHYW50dEl0ZW1JbnRlcm5hbCwgZ2FudHRVcHBlcjogR2FudHRVcHBlcikge1xuICAgICAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgICB0aGlzLmJhckVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5nYW50dFVwcGVyID0gZ2FudHRVcHBlcjtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ0Rpc2FibGVkICYmIHRoaXMubGlua0RyYWdEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb3VzZUV2ZW50cygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRyYWdEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWdSZWYgPSB0aGlzLmNyZWF0ZUJhckRyYWcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnSGFuZGxlc1JlZnMgPSB0aGlzLmNyZWF0ZUJhckhhbmRsZURyYWdzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnUmVmcy5wdXNoKGRyYWdSZWYsIC4uLmRyYWdIYW5kbGVzUmVmcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlua0RyYWdEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtEcmFnUmVmcyA9IHRoaXMuY3JlYXRlTGlua0hhbmRsZURyYWdzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnUmVmcy5wdXNoKC4uLmxpbmtEcmFnUmVmcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVJdGVtKGl0ZW06IEdhbnR0SXRlbUludGVybmFsKSB7XG4gICAgICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2xvc2VEcmFnQmFja2Ryb3AoKTtcbiAgICAgICAgdGhpcy5kcmFnUmVmcy5mb3JFYWNoKChkcmFnUmVmKSA9PiBkcmFnUmVmLmRpc3Bvc2UoKSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xuICAgICAgICB0aGlzLnN0b3BTY3JvbGxUaW1lcnMkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIl19
@@ -35,7 +35,9 @@ export class NgxGanttBarComponent extends GanttItemUpper {
35
35
  if (!this.firstChange) {
36
36
  this.drag.updateItem(this.item);
37
37
  if (changes.item.currentValue.refs?.width !== changes.item.previousValue.refs?.width ||
38
- changes.item.currentValue.color !== changes.item.previousValue.color) {
38
+ changes.item.currentValue.color !== changes.item.previousValue.color ||
39
+ changes.item.currentValue.start?.value !== changes.item.previousValue.start?.value ||
40
+ changes.item.currentValue.end?.value !== changes.item.previousValue.end?.value) {
39
41
  this.setContentBackground();
40
42
  }
41
43
  }
@@ -118,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
118
120
  type: ViewChildren,
119
121
  args: ['handle']
120
122
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9jb21wb25lbnRzL2Jhci9iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvYmFyL2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFdBQVcsRUFJWCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBRVosWUFBWSxFQUlmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUV4RCxTQUFTLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxJQUFZO0lBQ3JFLE9BQU8sbUJBQW1CLFlBQVksSUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDdEUsQ0FBQztBQU9ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFjO0lBU3BELFlBQ1ksYUFBaUMsRUFDakMsSUFBa0IsRUFDMUIsVUFBc0MsRUFDSyxVQUFzQixFQUN6RCxNQUFjO1FB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OytCQUNJLHlCQUF5QixhQUV4QixDQUFDLFlBQVksQ0FBQzs7MEJBZXBCLE1BQU07MkJBQUMsaUJBQWlCO2lFQVpuQixRQUFRO3NCQUFqQixNQUFNO2dCQUVlLGlCQUFpQjtzQkFBdEMsU0FBUzt1QkFBQyxTQUFTO2dCQUVZLGNBQWM7c0JBQTdDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQUVOLE9BQU87c0JBQTlCLFlBQVk7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5qZWN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBOZ1pvbmUsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20sIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dEJhckRyYWcgfSBmcm9tICcuL2Jhci1kcmFnJztcbmltcG9ydCB7IGhleFRvUmdiIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBHYW50dERyYWdDb250YWluZXIgfSBmcm9tICcuLi8uLi9nYW50dC1kcmFnLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBiYXJCYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vZ2FudHQuc3R5bGVzJztcbmltcG9ydCB7IEdhbnR0QmFyQ2xpY2tFdmVudCB9IGZyb20gJy4uLy4uL2NsYXNzJztcbmltcG9ydCB7IEdBTlRUX1VQUEVSX1RPS0VOLCBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRJdGVtVXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC1pdGVtLXVwcGVyJztcblxuZnVuY3Rpb24gbGluZWFyR3JhZGllbnQoc2lkZU9yQ29ybmVyOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcsIHN0b3A6IHN0cmluZykge1xuICAgIHJldHVybiBgbGluZWFyLWdyYWRpZW50KCR7c2lkZU9yQ29ybmVyfSwke2NvbG9yfSAwJSwke3N0b3B9IDQwJSlgO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1nYW50dC1iYXIsZ2FudHQtYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtHYW50dEJhckRyYWddXG59KVxuZXhwb3J0IGNsYXNzIE5neEdhbnR0QmFyQ29tcG9uZW50IGV4dGVuZHMgR2FudHRJdGVtVXBwZXIgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBAT3V0cHV0KCkgYmFyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0QmFyQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LWJhcicpIGdhbnR0SXRlbUNsYXNzID0gdHJ1ZTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ2hhbmRsZScpIGhhbmRsZXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXIsXG4gICAgICAgIHByaXZhdGUgZHJhZzogR2FudHRCYXJEcmFnLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcbiAgICAgICAgQEluamVjdChHQU5UVF9VUFBFUl9UT0tFTikgcHVibGljIG92ZXJyaWRlIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXIsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgZ2FudHRVcHBlcik7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50QmFja2dyb3VuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICBpZiAoIXRoaXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZy51cGRhdGVJdGVtKHRoaXMuaXRlbSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW0uY3VycmVudFZhbHVlLnJlZnM/LndpZHRoICE9PSBjaGFuZ2VzLml0ZW0ucHJldmlvdXNWYWx1ZS5yZWZzPy53aWR0aCB8fFxuICAgICAgICAgICAgICAgIGNoYW5nZXMuaXRlbS5jdXJyZW50VmFsdWUuY29sb3IgIT09IGNoYW5nZXMuaXRlbS5wcmV2aW91c1ZhbHVlLmNvbG9yXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRlbnRCYWNrZ3JvdW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIC8vIE5vdGU6IHRoZSB6b25lIG1heSBiZSBub29wZWQgdGhyb3VnaCBgQm9vdHN0cmFwT3B0aW9uc2Agd2hlbiBib290c3RyYXBwaW5nIHRoZSByb290IG1vZHVsZS4gVGhpcyBtZWFuc1xuICAgICAgICAvLyB0aGUgYG9uU3RhYmxlYCB3aWxsIG5ldmVyIGVtaXQgYW55IHZhbHVlLlxuICAgICAgICBjb25zdCBvblN0YWJsZSQgPSB0aGlzLm5nWm9uZS5pc1N0YWJsZSA/IGZyb20oUHJvbWlzZS5yZXNvbHZlKCkpIDogdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKTtcbiAgICAgICAgLy8gTm9ybWFsbHkgdGhpcyBpc24ndCBpbiB0aGUgem9uZSwgYnV0IGl0IGNhbiBjYXVzZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBmb3IgYXBwc1xuICAgICAgICAvLyB1c2luZyBgem9uZS1wYXRjaC1yeGpzYCBiZWNhdXNlIGl0J2xsIHRyaWdnZXIgYSBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW4gaXQgdW5zdWJzY3JpYmVzLlxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBvblN0YWJsZSQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZy5jcmVhdGVEcmFncyh0aGlzLmVsZW1lbnRSZWYsIHRoaXMuaXRlbSwgdGhpcy5nYW50dFVwcGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNldENvbnRlbnRCYWNrZ3JvdW5kKCk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLmhhbmRsZXMpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gZXhwbGljaXRseSBzdWJzY3JpYmUgb3V0c2lkZSBvZiB0aGUgQW5ndWxhciB6b25lIHNpbmNlIGBhZGRFdmVudExpc3RlbmVyYFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgY2FsbGVkIHdoZW4gdGhlIGBmcm9tRXZlbnRgIGlzIHN1YnNjcmliZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxFdmVudD4oKHN1YnNjcmliZXIpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2UoLi4udGhpcy5oYW5kbGVzLnRvQXJyYXkoKS5tYXAoKGhhbmRsZSkgPT4gZnJvbUV2ZW50KGhhbmRsZS5uYXRpdmVFbGVtZW50LCAnbW91c2Vkb3duJykpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25CYXJDbGljayhldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5iYXJDbGljay5lbWl0KHsgZXZlbnQsIGl0ZW06IHRoaXMuaXRlbS5vcmlnaW4gfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDb250ZW50QmFja2dyb3VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbS5yZWZzPy53aWR0aCkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSB0aGlzLmNvbnRlbnRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuaXRlbS5jb2xvciB8fCBiYXJCYWNrZ3JvdW5kO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGU6IFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPSB0aGlzLml0ZW0uYmFyU3R5bGUgfHwge307XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtLm9yaWdpbi5zdGFydCAmJiB0aGlzLml0ZW0ub3JpZ2luLmVuZCkge1xuICAgICAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJSYWRpdXMgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW0ub3JpZ2luLnN0YXJ0ICYmICF0aGlzLml0ZW0ub3JpZ2luLmVuZCkge1xuICAgICAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQgPSBsaW5lYXJHcmFkaWVudCgndG8gbGVmdCcsIGhleFRvUmdiKGNvbG9yLCAwLjU1KSwgaGV4VG9SZ2IoY29sb3IsIDEpKTtcbiAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4IDEyLjVweCAxMi41cHggNHB4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5pdGVtLm9yaWdpbi5zdGFydCAmJiB0aGlzLml0ZW0ub3JpZ2luLmVuZCkge1xuICAgICAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQgPSBsaW5lYXJHcmFkaWVudCgndG8gcmlnaHQnLCBoZXhUb1JnYihjb2xvciwgMC41NSksIGhleFRvUmdiKGNvbG9yLCAxKSk7XG4gICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEyLjVweCA0cHggNHB4IDEyLjVweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtLnByb2dyZXNzID49IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50UHJvZ3Jlc3NFbGVtZW50ID0gY29udGVudEVsZW1lbnQucXVlcnlTZWxlY3RvcignLmdhbnR0LWJhci1jb250ZW50LXByb2dyZXNzJykgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZCA9IGhleFRvUmdiKGNvbG9yLCAwLjMpO1xuICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9ICcnO1xuICAgICAgICAgICAgICAgIGNvbnRlbnRQcm9ncmVzc0VsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdHlsZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LnN0eWxlW2tleV0gPSBzdHlsZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0b3BQcm9wYWdhdGlvbihldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdhbnR0LWJhci1sYXllclwiPlxuICA8ZGl2IGNsYXNzPVwiZHJhZy1oYW5kbGVzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uZHJhZ2dhYmxlICYmIGdhbnR0VXBwZXIuZHJhZ2dhYmxlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImhhbmRsZVwiICNoYW5kbGU+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJoYW5kbGVcIiAjaGFuZGxlPjwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJpdGVtLmxpbmthYmxlICYmIGdhbnR0VXBwZXIubGlua2FibGVcIiBjbGFzcz1cImxpbmstaGFuZGxlc1wiPlxuICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlXCI+PHNwYW4gY2xhc3M9XCJwb2ludFwiPjwvc3Bhbj48L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJoYW5kbGVcIj4gPHNwYW4gY2xhc3M9XCJwb2ludFwiPjwvc3Bhbj48L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZ2FudHQtYmFyLWJvcmRlclwiPjwvZGl2PlxuPGRpdiAjY29udGVudCBjbGFzcz1cImdhbnR0LWJhci1jb250ZW50XCIgKGNsaWNrKT1cIm9uQmFyQ2xpY2soJGV2ZW50KVwiPlxuICA8ZGl2IGNsYXNzPVwiZ2FudHQtYmFyLWNvbnRlbnQtcHJvZ3Jlc3NcIiAqbmdJZj1cIml0ZW0ucHJvZ3Jlc3MgPj0gMFwiIFtzdHlsZS53aWR0aC4lXT1cIml0ZW0ucHJvZ3Jlc3MgKiAxMDBcIj48L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbS5vcmlnaW4sIHJlZnM6IGl0ZW0ucmVmcyB9XCI+IDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dhbnR0L3NyYy9jb21wb25lbnRzL2Jhci9iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2FudHQvc3JjL2NvbXBvbmVudHMvYmFyL2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFdBQVcsRUFJWCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBRVosWUFBWSxFQUlmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUV4RCxTQUFTLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxJQUFZO0lBQ3JFLE9BQU8sbUJBQW1CLFlBQVksSUFBSSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDdEUsQ0FBQztBQU9ELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxjQUFjO0lBU3BELFlBQ1ksYUFBaUMsRUFDakMsSUFBa0IsRUFDMUIsVUFBc0MsRUFDSyxVQUFzQixFQUN6RCxNQUFjO1FB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QUFDLENBQUM7aUJBQzFDO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBWTtRQUN4QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7aUhBcEhRLG9CQUFvQiwwR0FhakIsaUJBQWlCO3FHQWJwQixvQkFBb0IseUpBRmxCLENBQUMsWUFBWSxDQUFDLDJQQ2xDN0IsZzJCQWlCQTsyRkRtQmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLHlCQUF5QixhQUV4QixDQUFDLFlBQVksQ0FBQzs7MEJBZXBCLE1BQU07MkJBQUMsaUJBQWlCO2lFQVpuQixRQUFRO3NCQUFqQixNQUFNO2dCQUVlLGlCQUFpQjtzQkFBdEMsU0FBUzt1QkFBQyxTQUFTO2dCQUVZLGNBQWM7c0JBQTdDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQUVOLE9BQU87c0JBQTlCLFlBQVk7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5qZWN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBOZ1pvbmUsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb20sIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHYW50dEJhckRyYWcgfSBmcm9tICcuL2Jhci1kcmFnJztcbmltcG9ydCB7IGhleFRvUmdiIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBHYW50dERyYWdDb250YWluZXIgfSBmcm9tICcuLi8uLi9nYW50dC1kcmFnLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBiYXJCYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vZ2FudHQuc3R5bGVzJztcbmltcG9ydCB7IEdhbnR0QmFyQ2xpY2tFdmVudCB9IGZyb20gJy4uLy4uL2NsYXNzJztcbmltcG9ydCB7IEdBTlRUX1VQUEVSX1RPS0VOLCBHYW50dFVwcGVyIH0gZnJvbSAnLi4vLi4vZ2FudHQtdXBwZXInO1xuaW1wb3J0IHsgR2FudHRJdGVtVXBwZXIgfSBmcm9tICcuLi8uLi9nYW50dC1pdGVtLXVwcGVyJztcblxuZnVuY3Rpb24gbGluZWFyR3JhZGllbnQoc2lkZU9yQ29ybmVyOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcsIHN0b3A6IHN0cmluZykge1xuICAgIHJldHVybiBgbGluZWFyLWdyYWRpZW50KCR7c2lkZU9yQ29ybmVyfSwke2NvbG9yfSAwJSwke3N0b3B9IDQwJSlgO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1nYW50dC1iYXIsZ2FudHQtYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtHYW50dEJhckRyYWddXG59KVxuZXhwb3J0IGNsYXNzIE5neEdhbnR0QmFyQ29tcG9uZW50IGV4dGVuZHMgR2FudHRJdGVtVXBwZXIgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBAT3V0cHV0KCkgYmFyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEdhbnR0QmFyQ2xpY2tFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmdhbnR0LWJhcicpIGdhbnR0SXRlbUNsYXNzID0gdHJ1ZTtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ2hhbmRsZScpIGhhbmRsZXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkcmFnQ29udGFpbmVyOiBHYW50dERyYWdDb250YWluZXIsXG4gICAgICAgIHByaXZhdGUgZHJhZzogR2FudHRCYXJEcmFnLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcbiAgICAgICAgQEluamVjdChHQU5UVF9VUFBFUl9UT0tFTikgcHVibGljIG92ZXJyaWRlIGdhbnR0VXBwZXI6IEdhbnR0VXBwZXIsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgZ2FudHRVcHBlcik7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZHJhZ0NvbnRhaW5lci5kcmFnRW5kZWQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50QmFja2dyb3VuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICBpZiAoIXRoaXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZy51cGRhdGVJdGVtKHRoaXMuaXRlbSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjaGFuZ2VzLml0ZW0uY3VycmVudFZhbHVlLnJlZnM/LndpZHRoICE9PSBjaGFuZ2VzLml0ZW0ucHJldmlvdXNWYWx1ZS5yZWZzPy53aWR0aCB8fFxuICAgICAgICAgICAgICAgIGNoYW5nZXMuaXRlbS5jdXJyZW50VmFsdWUuY29sb3IgIT09IGNoYW5nZXMuaXRlbS5wcmV2aW91c1ZhbHVlLmNvbG9yIHx8XG4gICAgICAgICAgICAgICAgY2hhbmdlcy5pdGVtLmN1cnJlbnRWYWx1ZS5zdGFydD8udmFsdWUgIT09IGNoYW5nZXMuaXRlbS5wcmV2aW91c1ZhbHVlLnN0YXJ0Py52YWx1ZSB8fFxuICAgICAgICAgICAgICAgIGNoYW5nZXMuaXRlbS5jdXJyZW50VmFsdWUuZW5kPy52YWx1ZSAhPT0gY2hhbmdlcy5pdGVtLnByZXZpb3VzVmFsdWUuZW5kPy52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50QmFja2dyb3VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBOb3RlOiB0aGUgem9uZSBtYXkgYmUgbm9vcGVkIHRocm91Z2ggYEJvb3RzdHJhcE9wdGlvbnNgIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUgcm9vdCBtb2R1bGUuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gdGhlIGBvblN0YWJsZWAgd2lsbCBuZXZlciBlbWl0IGFueSB2YWx1ZS5cbiAgICAgICAgY29uc3Qgb25TdGFibGUkID0gdGhpcy5uZ1pvbmUuaXNTdGFibGUgPyBmcm9tKFByb21pc2UucmVzb2x2ZSgpKSA6IHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSk7XG4gICAgICAgIC8vIE5vcm1hbGx5IHRoaXMgaXNuJ3QgaW4gdGhlIHpvbmUsIGJ1dCBpdCBjYW4gY2F1c2UgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgZm9yIGFwcHNcbiAgICAgICAgLy8gdXNpbmcgYHpvbmUtcGF0Y2gtcnhqc2AgYmVjYXVzZSBpdCdsbCB0cmlnZ2VyIGEgY2hhbmdlIGRldGVjdGlvbiB3aGVuIGl0IHVuc3Vic2NyaWJlcy5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgb25TdGFibGUkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWcuY3JlYXRlRHJhZ3ModGhpcy5lbGVtZW50UmVmLCB0aGlzLml0ZW0sIHRoaXMuZ2FudHRVcHBlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXRDb250ZW50QmFja2dyb3VuZCgpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlcy5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5oYW5kbGVzKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgc3Vic2NyaWJlIG91dHNpZGUgb2YgdGhlIEFuZ3VsYXIgem9uZSBzaW5jZSBgYWRkRXZlbnRMaXN0ZW5lcmBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGNhbGxlZCB3aGVuIHRoZSBgZnJvbUV2ZW50YCBpcyBzdWJzY3JpYmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9ic2VydmFibGU8RXZlbnQ+KChzdWJzY3JpYmVyKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKC4uLnRoaXMuaGFuZGxlcy50b0FycmF5KCkubWFwKChoYW5kbGUpID0+IGZyb21FdmVudChoYW5kbGUubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQmFyQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuYmFyQ2xpY2suZW1pdCh7IGV2ZW50LCBpdGVtOiB0aGlzLml0ZW0ub3JpZ2luIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29udGVudEJhY2tncm91bmQoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW0ucmVmcz8ud2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50ID0gdGhpcy5jb250ZW50RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLml0ZW0uY29sb3IgfHwgYmFyQmFja2dyb3VuZDtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+ID0gdGhpcy5pdGVtLmJhclN0eWxlIHx8IHt9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbS5vcmlnaW4uc3RhcnQgJiYgdGhpcy5pdGVtLm9yaWdpbi5lbmQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gY29sb3I7XG4gICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtLm9yaWdpbi5zdGFydCAmJiAhdGhpcy5pdGVtLm9yaWdpbi5lbmQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gbGluZWFyR3JhZGllbnQoJ3RvIGxlZnQnLCBoZXhUb1JnYihjb2xvciwgMC41NSksIGhleFRvUmdiKGNvbG9yLCAxKSk7XG4gICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCAxMi41cHggMTIuNXB4IDRweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbS5vcmlnaW4uc3RhcnQgJiYgdGhpcy5pdGVtLm9yaWdpbi5lbmQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gbGluZWFyR3JhZGllbnQoJ3RvIHJpZ2h0JywgaGV4VG9SZ2IoY29sb3IsIDAuNTUpLCBoZXhUb1JnYihjb2xvciwgMSkpO1xuICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9ICcxMi41cHggNHB4IDRweCAxMi41cHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbS5wcm9ncmVzcyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFByb2dyZXNzRWxlbWVudCA9IGNvbnRlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nYW50dC1iYXItY29udGVudC1wcm9ncmVzcycpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmQgPSBoZXhUb1JnYihjb2xvciwgMC4zKTtcbiAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJSYWRpdXMgPSAnJztcbiAgICAgICAgICAgICAgICBjb250ZW50UHJvZ3Jlc3NFbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSBjb2xvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50RWxlbWVudC5zdHlsZVtrZXldID0gc3R5bGVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnYW50dC1iYXItbGF5ZXJcIj5cbiAgPGRpdiBjbGFzcz1cImRyYWctaGFuZGxlc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmRyYWdnYWJsZSAmJiBnYW50dFVwcGVyLmRyYWdnYWJsZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJoYW5kbGVcIiAjaGFuZGxlPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlXCIgI2hhbmRsZT48L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaXRlbS5saW5rYWJsZSAmJiBnYW50dFVwcGVyLmxpbmthYmxlXCIgY2xhc3M9XCJsaW5rLWhhbmRsZXNcIj5cbiAgICA8c3BhbiBjbGFzcz1cImhhbmRsZVwiPjxzcGFuIGNsYXNzPVwicG9pbnRcIj48L3NwYW4+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiaGFuZGxlXCI+IDxzcGFuIGNsYXNzPVwicG9pbnRcIj48L3NwYW4+PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImdhbnR0LWJhci1ib3JkZXJcIj48L2Rpdj5cbjxkaXYgI2NvbnRlbnQgY2xhc3M9XCJnYW50dC1iYXItY29udGVudFwiIChjbGljayk9XCJvbkJhckNsaWNrKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cImdhbnR0LWJhci1jb250ZW50LXByb2dyZXNzXCIgKm5nSWY9XCJpdGVtLnByb2dyZXNzID49IDBcIiBbc3R5bGUud2lkdGguJV09XCJpdGVtLnByb2dyZXNzICogMTAwXCI+PC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0ub3JpZ2luLCByZWZzOiBpdGVtLnJlZnMgfVwiPiA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -32,4 +32,23 @@ export function isPointerNearClientRect(rect, threshold, pointerX, pointerY) {
32
32
  const yThreshold = height * threshold;
33
33
  return pointerY > top - yThreshold && pointerY < bottom + yThreshold && pointerX > left - xThreshold && pointerX < right + xThreshold;
34
34
  }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zY3JvbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvdXRpbHMvZHJhZy1zY3JvbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0E7OztHQUdHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFFeEM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxVQUFtQixFQUFFLFFBQWdCO0lBQzlFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsMEJBQTBCLENBQUM7SUFFdEQsSUFBSSxRQUFRLElBQUksSUFBSSxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksSUFBSSxHQUFHLFVBQVUsRUFBRTtRQUNoRSxrREFBMEM7S0FDN0M7U0FBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxJQUFJLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFO1FBQ3pFLG1EQUEyQztLQUM5QztJQUVELGtEQUEwQztBQUM5QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQWEsRUFBRSxTQUFpQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0I7SUFDeEcsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pELE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUM7SUFDckMsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUV0QyxPQUFPLFFBQVEsR0FBRyxHQUFHLEdBQUcsVUFBVSxJQUFJLFFBQVEsR0FBRyxNQUFNLEdBQUcsVUFBVSxJQUFJLFFBQVEsR0FBRyxJQUFJLEdBQUcsVUFBVSxJQUFJLFFBQVEsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQzFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogSG9yaXpvbnRhbCBkaXJlY3Rpb24gaW4gd2hpY2ggd2UgY2FuIGF1dG8tc2Nyb2xsLiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24ge1xuICAgIE5PTkUsXG4gICAgTEVGVCxcbiAgICBSSUdIVFxufVxuXG4vKipcbiAqIFByb3hpbWl0eSwgYXMgYSByYXRpbyB0byB3aWR0aC9oZWlnaHQgYXQgd2hpY2ggdG8gc3RhcnQgYXV0by1zY3JvbGxpbmcgdGhlIGRyb3AgbGlzdCBvciB0aGVcbiAqIHZpZXdwb3J0LiBUaGUgdmFsdWUgY29tZXMgZnJvbSB0cnlpbmcgaXQgb3V0IG1hbnVhbGx5IHVudGlsIGl0IGZlZWxzIHJpZ2h0LlxuICovXG5jb25zdCBTQ1JPTExfUFJPWElNSVRZX1RIUkVTSE9MRCA9IDAuMDU7XG5cbi8qKlxuICogR2V0cyB3aGV0aGVyIHRoZSBob3Jpem9udGFsIGF1dG8tc2Nyb2xsIGRpcmVjdGlvbiBvZiBhIG5vZGUuXG4gKiBAcGFyYW0gY2xpZW50UmVjdCBEaW1lbnNpb25zIG9mIHRoZSBub2RlLlxuICogQHBhcmFtIHBvaW50ZXJYIFBvc2l0aW9uIG9mIHRoZSB1c2VyJ3MgcG9pbnRlciBhbG9uZyB0aGUgeCBheGlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbihjbGllbnRSZWN0OiBET01SZWN0LCBwb2ludGVyWDogbnVtYmVyKSB7XG4gICAgY29uc3QgeyBsZWZ0LCByaWdodCwgd2lkdGggfSA9IGNsaWVudFJlY3Q7XG4gICAgY29uc3QgeFRocmVzaG9sZCA9IHdpZHRoICogU0NST0xMX1BST1hJTUlUWV9USFJFU0hPTEQ7XG5cbiAgICBpZiAocG9pbnRlclggPj0gbGVmdCAtIHhUaHJlc2hvbGQgJiYgcG9pbnRlclggPD0gbGVmdCArIHhUaHJlc2hvbGQpIHtcbiAgICAgICAgcmV0dXJuIEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLkxFRlQ7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyWCA+PSByaWdodCAtIHhUaHJlc2hvbGQgJiYgcG9pbnRlclggPD0gcmlnaHQgKyB4VGhyZXNob2xkKSB7XG4gICAgICAgIHJldHVybiBBdXRvU2Nyb2xsSG9yaXpvbnRhbERpcmVjdGlvbi5SSUdIVDtcbiAgICB9XG5cbiAgICByZXR1cm4gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uTk9ORTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcG9pbnRlciBjb29yZGluYXRlcyBhcmUgY2xvc2UgdG8gYSBDbGllbnRSZWN0LlxuICogQHBhcmFtIHJlY3QgQ2xpZW50UmVjdCB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIHRocmVzaG9sZCBUaHJlc2hvbGQgYXJvdW5kIHRoZSBDbGllbnRSZWN0LlxuICogQHBhcmFtIHBvaW50ZXJYIENvb3JkaW5hdGVzIGFsb25nIHRoZSBYIGF4aXMuXG4gKiBAcGFyYW0gcG9pbnRlclkgQ29vcmRpbmF0ZXMgYWxvbmcgdGhlIFkgYXhpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9pbnRlck5lYXJDbGllbnRSZWN0KHJlY3Q6IERPTVJlY3QsIHRocmVzaG9sZDogbnVtYmVyLCBwb2ludGVyWDogbnVtYmVyLCBwb2ludGVyWTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHdpZHRoLCBoZWlnaHQgfSA9IHJlY3Q7XG4gICAgY29uc3QgeFRocmVzaG9sZCA9IHdpZHRoICogdGhyZXNob2xkO1xuICAgIGNvbnN0IHlUaHJlc2hvbGQgPSBoZWlnaHQgKiB0aHJlc2hvbGQ7XG5cbiAgICByZXR1cm4gcG9pbnRlclkgPiB0b3AgLSB5VGhyZXNob2xkICYmIHBvaW50ZXJZIDwgYm90dG9tICsgeVRocmVzaG9sZCAmJiBwb2ludGVyWCA+IGxlZnQgLSB4VGhyZXNob2xkICYmIHBvaW50ZXJYIDwgcmlnaHQgKyB4VGhyZXNob2xkO1xufVxuIl19
35
+ /**
36
+ * Gets the speed rate of auto scrolling
37
+ * @param clientRect Dimensions of the node.
38
+ * @param pointerX Position of the user's pointer along the x axis.
39
+ * @param horizontalScrollDirection The direction in which the mouse is dragged horizontally
40
+ */
41
+ export function getAutoScrollSpeedRates(clientRect, pointerX, horizontalScrollDirection) {
42
+ let autoScrollSpeedRates = 4;
43
+ const speedLevels = 4;
44
+ const { left, right, width } = clientRect;
45
+ const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;
46
+ if (horizontalScrollDirection === 1 /* AutoScrollHorizontalDirection.LEFT */) {
47
+ autoScrollSpeedRates = Math.ceil((xThreshold - (pointerX > left ? pointerX - left : 0)) / (xThreshold / speedLevels));
48
+ }
49
+ if (horizontalScrollDirection === 2 /* AutoScrollHorizontalDirection.RIGHT */) {
50
+ autoScrollSpeedRates = Math.ceil((xThreshold - (right > pointerX ? right - pointerX : 0)) / (xThreshold / speedLevels));
51
+ }
52
+ return autoScrollSpeedRates;
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy1zY3JvbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9nYW50dC9zcmMvdXRpbHMvZHJhZy1zY3JvbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0E7OztHQUdHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFFeEM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxVQUFtQixFQUFFLFFBQWdCO0lBQzlFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsMEJBQTBCLENBQUM7SUFFdEQsSUFBSSxRQUFRLElBQUksSUFBSSxHQUFHLFVBQVUsSUFBSSxRQUFRLElBQUksSUFBSSxHQUFHLFVBQVUsRUFBRTtRQUNoRSxrREFBMEM7S0FDN0M7U0FBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxJQUFJLFFBQVEsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFO1FBQ3pFLG1EQUEyQztLQUM5QztJQUVELGtEQUEwQztBQUM5QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQWEsRUFBRSxTQUFpQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0I7SUFDeEcsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pELE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUM7SUFDckMsTUFBTSxVQUFVLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUV0QyxPQUFPLFFBQVEsR0FBRyxHQUFHLEdBQUcsVUFBVSxJQUFJLFFBQVEsR0FBRyxNQUFNLEdBQUcsVUFBVSxJQUFJLFFBQVEsR0FBRyxJQUFJLEdBQUcsVUFBVSxJQUFJLFFBQVEsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQzFJLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxVQUFtQixFQUFFLFFBQWdCLEVBQUUseUJBQXdEO0lBQ25JLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN0QixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLDBCQUEwQixDQUFDO0lBRXRELElBQUkseUJBQXlCLCtDQUF1QyxFQUFFO1FBQ2xFLG9CQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDekg7SUFDRCxJQUFJLHlCQUF5QixnREFBd0MsRUFBRTtRQUNuRSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQzNIO0lBRUQsT0FBTyxvQkFBb0IsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEhvcml6b250YWwgZGlyZWN0aW9uIGluIHdoaWNoIHdlIGNhbiBhdXRvLXNjcm9sbC4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uIHtcbiAgICBOT05FLFxuICAgIExFRlQsXG4gICAgUklHSFRcbn1cblxuLyoqXG4gKiBQcm94aW1pdHksIGFzIGEgcmF0aW8gdG8gd2lkdGgvaGVpZ2h0IGF0IHdoaWNoIHRvIHN0YXJ0IGF1dG8tc2Nyb2xsaW5nIHRoZSBkcm9wIGxpc3Qgb3IgdGhlXG4gKiB2aWV3cG9ydC4gVGhlIHZhbHVlIGNvbWVzIGZyb20gdHJ5aW5nIGl0IG91dCBtYW51YWxseSB1bnRpbCBpdCBmZWVscyByaWdodC5cbiAqL1xuY29uc3QgU0NST0xMX1BST1hJTUlUWV9USFJFU0hPTEQgPSAwLjA1O1xuXG4vKipcbiAqIEdldHMgd2hldGhlciB0aGUgaG9yaXpvbnRhbCBhdXRvLXNjcm9sbCBkaXJlY3Rpb24gb2YgYSBub2RlLlxuICogQHBhcmFtIGNsaWVudFJlY3QgRGltZW5zaW9ucyBvZiB0aGUgbm9kZS5cbiAqIEBwYXJhbSBwb2ludGVyWCBQb3NpdGlvbiBvZiB0aGUgdXNlcidzIHBvaW50ZXIgYWxvbmcgdGhlIHggYXhpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24oY2xpZW50UmVjdDogRE9NUmVjdCwgcG9pbnRlclg6IG51bWJlcikge1xuICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQsIHdpZHRoIH0gPSBjbGllbnRSZWN0O1xuICAgIGNvbnN0IHhUaHJlc2hvbGQgPSB3aWR0aCAqIFNDUk9MTF9QUk9YSU1JVFlfVEhSRVNIT0xEO1xuXG4gICAgaWYgKHBvaW50ZXJYID49IGxlZnQgLSB4VGhyZXNob2xkICYmIHBvaW50ZXJYIDw9IGxlZnQgKyB4VGhyZXNob2xkKSB7XG4gICAgICAgIHJldHVybiBBdXRvU2Nyb2xsSG9yaXpvbnRhbERpcmVjdGlvbi5MRUZUO1xuICAgIH0gZWxzZSBpZiAocG9pbnRlclggPj0gcmlnaHQgLSB4VGhyZXNob2xkICYmIHBvaW50ZXJYIDw9IHJpZ2h0ICsgeFRocmVzaG9sZCkge1xuICAgICAgICByZXR1cm4gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uUklHSFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uLk5PTkU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHBvaW50ZXIgY29vcmRpbmF0ZXMgYXJlIGNsb3NlIHRvIGEgQ2xpZW50UmVjdC5cbiAqIEBwYXJhbSByZWN0IENsaWVudFJlY3QgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEBwYXJhbSB0aHJlc2hvbGQgVGhyZXNob2xkIGFyb3VuZCB0aGUgQ2xpZW50UmVjdC5cbiAqIEBwYXJhbSBwb2ludGVyWCBDb29yZGluYXRlcyBhbG9uZyB0aGUgWCBheGlzLlxuICogQHBhcmFtIHBvaW50ZXJZIENvb3JkaW5hdGVzIGFsb25nIHRoZSBZIGF4aXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BvaW50ZXJOZWFyQ2xpZW50UmVjdChyZWN0OiBET01SZWN0LCB0aHJlc2hvbGQ6IG51bWJlciwgcG9pbnRlclg6IG51bWJlciwgcG9pbnRlclk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0O1xuICAgIGNvbnN0IHhUaHJlc2hvbGQgPSB3aWR0aCAqIHRocmVzaG9sZDtcbiAgICBjb25zdCB5VGhyZXNob2xkID0gaGVpZ2h0ICogdGhyZXNob2xkO1xuXG4gICAgcmV0dXJuIHBvaW50ZXJZID4gdG9wIC0geVRocmVzaG9sZCAmJiBwb2ludGVyWSA8IGJvdHRvbSArIHlUaHJlc2hvbGQgJiYgcG9pbnRlclggPiBsZWZ0IC0geFRocmVzaG9sZCAmJiBwb2ludGVyWCA8IHJpZ2h0ICsgeFRocmVzaG9sZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzcGVlZCByYXRlIG9mIGF1dG8gc2Nyb2xsaW5nXG4gKiBAcGFyYW0gY2xpZW50UmVjdCBEaW1lbnNpb25zIG9mIHRoZSBub2RlLlxuICogQHBhcmFtIHBvaW50ZXJYIFBvc2l0aW9uIG9mIHRoZSB1c2VyJ3MgcG9pbnRlciBhbG9uZyB0aGUgeCBheGlzLlxuICogQHBhcmFtIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgbW91c2UgaXMgZHJhZ2dlZCBob3Jpem9udGFsbHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dG9TY3JvbGxTcGVlZFJhdGVzKGNsaWVudFJlY3Q6IERPTVJlY3QsIHBvaW50ZXJYOiBudW1iZXIsIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IEF1dG9TY3JvbGxIb3Jpem9udGFsRGlyZWN0aW9uKSB7XG4gICAgbGV0IGF1dG9TY3JvbGxTcGVlZFJhdGVzID0gNDtcbiAgICBjb25zdCBzcGVlZExldmVscyA9IDQ7XG4gICAgY29uc3QgeyBsZWZ0LCByaWdodCwgd2lkdGggfSA9IGNsaWVudFJlY3Q7XG4gICAgY29uc3QgeFRocmVzaG9sZCA9IHdpZHRoICogU0NST0xMX1BST1hJTUlUWV9USFJFU0hPTEQ7XG5cbiAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gQXV0b1Njcm9sbEhvcml6b250YWxEaXJlY3Rpb24uTEVGVCkge1xuICAgICAgICBhdXRvU2Nyb2xsU3BlZWRSYXRlcyA9IE1hdGguY2VpbCgoeFRocmVzaG9sZCAtIChwb2ludGVyWCA+IGxlZnQgPyBwb2ludGVyWCAtIGxlZnQgOiAwKSkgLyAoeFRocmVzaG9sZCAvIHNwZWVkTGV2ZWxzKSk7XG4gICAgfVxuICAgIGlmIChob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSBBdXRvU2Nyb2xsSG9yaXpvbnRhbERpcmVjdGlvbi5SSUdIVCkge1xuICAgICAgICBhdXRvU2Nyb2xsU3BlZWRSYXRlcyA9IE1hdGguY2VpbCgoeFRocmVzaG9sZCAtIChyaWdodCA+IHBvaW50ZXJYID8gcmlnaHQgLSBwb2ludGVyWCA6IDApKSAvICh4VGhyZXNob2xkIC8gc3BlZWRMZXZlbHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXV0b1Njcm9sbFNwZWVkUmF0ZXM7XG59XG4iXX0=
@@ -2552,6 +2552,25 @@ function isPointerNearClientRect(rect, threshold, pointerX, pointerY) {
2552
2552
  const yThreshold = height * threshold;
2553
2553
  return pointerY > top - yThreshold && pointerY < bottom + yThreshold && pointerX > left - xThreshold && pointerX < right + xThreshold;
2554
2554
  }
2555
+ /**
2556
+ * Gets the speed rate of auto scrolling
2557
+ * @param clientRect Dimensions of the node.
2558
+ * @param pointerX Position of the user's pointer along the x axis.
2559
+ * @param horizontalScrollDirection The direction in which the mouse is dragged horizontally
2560
+ */
2561
+ function getAutoScrollSpeedRates(clientRect, pointerX, horizontalScrollDirection) {
2562
+ let autoScrollSpeedRates = 4;
2563
+ const speedLevels = 4;
2564
+ const { left, right, width } = clientRect;
2565
+ const xThreshold = width * SCROLL_PROXIMITY_THRESHOLD;
2566
+ if (horizontalScrollDirection === 1 /* AutoScrollHorizontalDirection.LEFT */) {
2567
+ autoScrollSpeedRates = Math.ceil((xThreshold - (pointerX > left ? pointerX - left : 0)) / (xThreshold / speedLevels));
2568
+ }
2569
+ if (horizontalScrollDirection === 2 /* AutoScrollHorizontalDirection.RIGHT */) {
2570
+ autoScrollSpeedRates = Math.ceil((xThreshold - (right > pointerX ? right - pointerX : 0)) / (xThreshold / speedLevels));
2571
+ }
2572
+ return autoScrollSpeedRates;
2573
+ }
2555
2574
 
2556
2575
  const scrollThreshold = 50;
2557
2576
  var ScrollDirection;
@@ -2668,7 +2687,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
2668
2687
  */
2669
2688
  const DROP_PROXIMITY_THRESHOLD = 0.05;
2670
2689
  const dragMinWidth = 10;
2671
- const autoScrollStep = 5;
2690
+ const autoScrollBaseStep = 2;
2672
2691
  const activeClass = 'gantt-bar-active';
2673
2692
  const dropActiveClass = 'gantt-bar-drop-active';
2674
2693
  const singleDropActiveClass = 'gantt-bar-single-drop-active';
@@ -2687,6 +2706,9 @@ class GanttBarDrag {
2687
2706
  get barHandleDragMoveAndScrollDistance() {
2688
2707
  return this.barHandleDragMoveDistance + this.dragScrollDistance;
2689
2708
  }
2709
+ get autoScrollStep() {
2710
+ return Math.pow(autoScrollBaseStep, this.autoScrollSpeedRates);
2711
+ }
2690
2712
  constructor(dragDrop, dom, dragContainer, _ngZone) {
2691
2713
  this.dragDrop = dragDrop;
2692
2714
  this.dom = dom;
@@ -2706,13 +2728,15 @@ class GanttBarDrag {
2706
2728
  this.dragScrollDistance = 0;
2707
2729
  /** Horizontal direction in which the list is currently scrolling. */
2708
2730
  this._horizontalScrollDirection = 0 /* AutoScrollHorizontalDirection.NONE */;
2731
+ /** Speed ratio for auto scroll */
2732
+ this.autoScrollSpeedRates = 1;
2709
2733
  this.startScrollInterval = () => {
2710
2734
  this.stopScrolling();
2711
2735
  interval(0, animationFrameScheduler)
2712
2736
  .pipe(takeUntil(this.stopScrollTimers$))
2713
2737
  .subscribe(() => {
2714
2738
  const node = this.dom.mainContainer;
2715
- const scrollStep = autoScrollStep;
2739
+ const scrollStep = this.autoScrollStep;
2716
2740
  if (this._horizontalScrollDirection === 1 /* AutoScrollHorizontalDirection.LEFT */) {
2717
2741
  node.scrollBy(-scrollStep, 0);
2718
2742
  }
@@ -2926,10 +2950,10 @@ class GanttBarDrag {
2926
2950
  let left = dragRect.left - rootRect.left - (this.dom.side.clientWidth + 1);
2927
2951
  if (this.dragScrolling) {
2928
2952
  if (this._horizontalScrollDirection === 1 /* AutoScrollHorizontalDirection.LEFT */) {
2929
- left += autoScrollStep;
2953
+ left += this.autoScrollStep;
2930
2954
  }
2931
2955
  else if (this._horizontalScrollDirection === 2 /* AutoScrollHorizontalDirection.RIGHT */) {
2932
- left -= autoScrollStep;
2956
+ left -= this.autoScrollStep;
2933
2957
  }
2934
2958
  }
2935
2959
  const width = dragRect.right - dragRect.left;
@@ -3062,6 +3086,7 @@ class GanttBarDrag {
3062
3086
  (horizontalScrollDirection === 2 /* AutoScrollHorizontalDirection.RIGHT */ &&
3063
3087
  scrollLeft < this.ganttUpper.view.width - clientRect.width)) {
3064
3088
  this._horizontalScrollDirection = horizontalScrollDirection;
3089
+ this.autoScrollSpeedRates = getAutoScrollSpeedRates(clientRect, pointerX, horizontalScrollDirection);
3065
3090
  this.dragScrolling = true;
3066
3091
  this._ngZone.runOutsideAngular(this.startScrollInterval);
3067
3092
  }
@@ -3244,12 +3269,14 @@ class NgxGanttBarComponent extends GanttItemUpper {
3244
3269
  });
3245
3270
  }
3246
3271
  ngOnChanges(changes) {
3247
- var _a, _b;
3272
+ var _a, _b, _c, _d, _e, _f;
3248
3273
  super.ngOnChanges(changes);
3249
3274
  if (!this.firstChange) {
3250
3275
  this.drag.updateItem(this.item);
3251
3276
  if (((_a = changes.item.currentValue.refs) === null || _a === void 0 ? void 0 : _a.width) !== ((_b = changes.item.previousValue.refs) === null || _b === void 0 ? void 0 : _b.width) ||
3252
- changes.item.currentValue.color !== changes.item.previousValue.color) {
3277
+ changes.item.currentValue.color !== changes.item.previousValue.color ||
3278
+ ((_c = changes.item.currentValue.start) === null || _c === void 0 ? void 0 : _c.value) !== ((_d = changes.item.previousValue.start) === null || _d === void 0 ? void 0 : _d.value) ||
3279
+ ((_e = changes.item.currentValue.end) === null || _e === void 0 ? void 0 : _e.value) !== ((_f = changes.item.previousValue.end) === null || _f === void 0 ? void 0 : _f.value)) {
3253
3280
  this.setContentBackground();
3254
3281
  }
3255
3282
  }