@tetacom/ng-components 1.0.10 → 1.0.14

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.
@@ -0,0 +1,3 @@
1
+ <svg width="8" height="8" viewBox="0 0 8 8" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M1.29539 8H0V6.70446L6.70446 0H8V1.29539L1.29539 8ZM8 6.70446V8H6.70446L8 6.70446ZM1.29539 0L0 1.29539V0H1.29539Z" fill="#474747"/>
3
+ </svg>
@@ -1,6 +1,6 @@
1
1
  <!-- SVG Sprite -->
2
2
  <svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" width="0"
3
- height="0" class="hidden">
3
+ height="0" class="hidden">
4
4
  <!-- SVG Sprite -->
5
5
  <symbol fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" id="icon1">
6
6
  <g clip-path="url(#clip0)">
@@ -376,6 +376,9 @@
376
376
  </clipPath>
377
377
  </defs>
378
378
  </symbol>
379
+ <symbol xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 8" id="intersect">
380
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M1.29539 8H0V6.70446L6.70446 0H8V1.29539L1.29539 8ZM8 6.70446V8H6.70446L8 6.70446ZM1.29539 0L0 1.29539V0H1.29539Z" fill="#474747"/>
381
+ </symbol>
379
382
  <defs>
380
383
  <pattern id="patternicon1" x="0" y="0" width="16" height="16" patternUnits="userSpaceOnUse">
381
384
  <use width="16" height="16" xlink:href="#icon1"></use>
@@ -419,5 +422,8 @@
419
422
  <pattern id="patternicon14" x="0" y="0" width="16" height="16" patternUnits="userSpaceOnUse">
420
423
  <use width="16" height="16" xlink:href="#icon14"></use>
421
424
  </pattern>
425
+ <pattern id="patternintersect" x="0" y="0" width="8" height="8" patternUnits="userSpaceOnUse">
426
+ <use width="8" height="8" xlink:href="#intersect"></use>
427
+ </pattern>
422
428
  </defs>
423
429
  </svg>
@@ -14,6 +14,7 @@ export declare class ChartComponent implements OnInit, AfterViewInit, OnDestroy,
14
14
  plotLinesMove: EventEmitter<IDragEvent<PlotLine>>;
15
15
  plotBandsMove: EventEmitter<IDragEvent<PlotBand>>;
16
16
  seriesMove: EventEmitter<IDragEvent<Series<BasePoint>>>;
17
+ pointMove: EventEmitter<IDragEvent<Series<BasePoint>>>;
17
18
  zoomChange: EventEmitter<IZoomEvent>;
18
19
  chart: ElementRef;
19
20
  hasSeriesData: boolean;
@@ -33,5 +34,5 @@ export declare class ChartComponent implements OnInit, AfterViewInit, OnDestroy,
33
34
  private resize;
34
35
  private setConfig;
35
36
  static ɵfac: i0.ɵɵFactoryDeclaration<ChartComponent, never>;
36
- static ɵcmp: i0.ɵɵComponentDeclaration<ChartComponent, "teta-chart", never, { "zoom": "zoom"; "config": "config"; }, { "plotLinesMove": "plotLinesMove"; "plotBandsMove": "plotBandsMove"; "seriesMove": "seriesMove"; "zoomChange": "zoomChange"; }, never, never>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChartComponent, "teta-chart", never, { "zoom": "zoom"; "config": "config"; }, { "plotLinesMove": "plotLinesMove"; "plotBandsMove": "plotBandsMove"; "seriesMove": "seriesMove"; "pointMove": "pointMove"; "zoomChange": "zoomChange"; }, never, never>;
37
38
  }
@@ -16,9 +16,11 @@ export declare class TetaChart {
16
16
  plotBandsMove: Observable<IDragEvent<PlotBand>>;
17
17
  zoom: Observable<IZoomEvent>;
18
18
  seriesMove: Observable<IDragEvent<Series<BasePoint>>>;
19
+ pointMove: Observable<IDragEvent<Series<BasePoint>>>;
19
20
  private plotLinesMove$;
20
21
  private plotBandsMove$;
21
22
  private seriesMove$;
23
+ private pointMove$;
22
24
  private zoom$;
23
25
  private _container;
24
26
  private _canvas;
@@ -1,3 +1,4 @@
1
1
  export declare enum DispatchType {
2
- moveLine = "moveLine"
2
+ moveLine = "moveLine",
3
+ movePoint = "movePoint"
3
4
  }
@@ -0,0 +1,5 @@
1
+ export declare enum DragPointType {
2
+ x = 0,
3
+ y = 1,
4
+ xy = 2
5
+ }
@@ -4,6 +4,7 @@ export declare class PlotBand {
4
4
  to: number;
5
5
  label?: string;
6
6
  color?: string;
7
+ image?: string;
7
8
  showGrabbers?: boolean;
8
9
  draggable?: boolean;
9
10
  resizable?: boolean;
@@ -16,6 +17,7 @@ export declare class PlotBand {
16
17
  to: number;
17
18
  label?: string;
18
19
  color?: string;
20
+ image?: string;
19
21
  showGrabbers?: boolean;
20
22
  draggable?: boolean;
21
23
  resizable?: boolean;
@@ -1,7 +1,9 @@
1
+ import { MarkerOptions } from './marker-options';
1
2
  export interface BasePoint {
2
3
  x: number;
3
4
  x1?: number;
4
5
  y: number;
5
6
  y1?: number;
6
7
  color?: string | number;
8
+ marker?: MarkerOptions;
7
9
  }
@@ -0,0 +1,11 @@
1
+ import { DragPointType } from '../enum/drag-point-type';
2
+ export interface MarkerOptions {
3
+ draggable?: boolean;
4
+ dragType: DragPointType;
5
+ style?: {
6
+ radius?: number;
7
+ stroke?: number;
8
+ strokeWidth?: number;
9
+ color?: string;
10
+ };
11
+ }
@@ -3,7 +3,7 @@ import { IconService } from './icon.service';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class IconSpriteDirective implements OnInit {
5
5
  private _iconService;
6
- tetaIconSprite: string;
6
+ tetaIconSprite: string | string[];
7
7
  bypassInterceptors: boolean;
8
8
  constructor(_iconService: IconService);
9
9
  ngOnInit(): void;
@@ -10,6 +10,7 @@ export class ChartComponent {
10
10
  this.plotLinesMove = new EventEmitter();
11
11
  this.plotBandsMove = new EventEmitter();
12
12
  this.seriesMove = new EventEmitter();
13
+ this.pointMove = new EventEmitter();
13
14
  this.zoomChange = new EventEmitter();
14
15
  this._alive = true;
15
16
  this.size$ = new Subject();
@@ -61,8 +62,7 @@ export class ChartComponent {
61
62
  this._chart?.setZoom(this.zoom);
62
63
  }
63
64
  }
64
- ngOnInit() {
65
- }
65
+ ngOnInit() { }
66
66
  ngAfterViewInit() {
67
67
  this._observer = new ResizeObserver((entries) => {
68
68
  const { contentRect } = entries[0];
@@ -108,6 +108,11 @@ export class ChartComponent {
108
108
  this._chart.seriesMove
109
109
  .pipe(takeWhile((_) => this._alive))
110
110
  .subscribe((_) => this.seriesMove.emit(_));
111
+ this._chart.pointMove
112
+ .pipe(takeWhile((_) => this._alive))
113
+ .subscribe((_) => {
114
+ this.pointMove.emit(_);
115
+ });
111
116
  this._chart.zoom
112
117
  .pipe(takeWhile((_) => this._alive), map((_) => {
113
118
  this.zoomChange.emit(_);
@@ -125,7 +130,7 @@ export class ChartComponent {
125
130
  }
126
131
  }
127
132
  ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ChartComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
128
- ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: ChartComponent, selector: "teta-chart", inputs: { zoom: "zoom", config: "config" }, outputs: { plotLinesMove: "plotLinesMove", plotBandsMove: "plotBandsMove", seriesMove: "seriesMove", zoomChange: "zoomChange" }, host: { listeners: { "click": "click($event)" } }, viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n</div>\n\n\n", styles: [":host{display:flex;width:100%;height:100%;flex-direction:column}.chart-container{position:relative;min-height:0;flex-grow:1;flex-basis:1px}.chart-placeholder{margin:auto;width:100%}.chart-placeholder span{text-overflow:ellipsis;overflow:hidden;display:block}.legend-container{flex-shrink:0;flex-basis:1px}::ng-deep .grid line{stroke-dasharray:1,4}::ng-deep .tooltip-chart{padding:8px 12px;border-radius:2px}::ng-deep .legend{grid-gap:8px;padding-bottom:5px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly}::ng-deep .legend .item{display:flex;align-items:center;cursor:pointer}::ng-deep .legend .item .swatch{width:10px;height:10px}::ng-deep .legend .item .line{width:12px;height:2px}::ng-deep .legend .item .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
133
+ ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.1", type: ChartComponent, selector: "teta-chart", inputs: { zoom: "zoom", config: "config" }, outputs: { plotLinesMove: "plotLinesMove", plotBandsMove: "plotBandsMove", seriesMove: "seriesMove", pointMove: "pointMove", zoomChange: "zoomChange" }, host: { listeners: { "click": "click($event)" } }, viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n</div>\n\n\n", styles: [":host{display:flex;width:100%;height:100%;flex-direction:column}.chart-container{position:relative;min-height:0;flex-grow:1;flex-basis:1px}.chart-placeholder{margin:auto;width:100%}.chart-placeholder span{text-overflow:ellipsis;overflow:hidden;display:block}.legend-container{flex-shrink:0;flex-basis:1px}::ng-deep .grid line{stroke-dasharray:1,4}::ng-deep .tooltip-chart{padding:8px 12px;border-radius:2px}::ng-deep .legend{grid-gap:8px;padding-bottom:5px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly}::ng-deep .legend .item{display:flex;align-items:center;cursor:pointer}::ng-deep .legend .item .swatch{width:10px;height:10px}::ng-deep .legend .item .line{width:12px;height:2px}::ng-deep .legend .item .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
129
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: ChartComponent, decorators: [{
130
135
  type: Component,
131
136
  args: [{ selector: 'teta-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [style.display]=\"hasSeriesData ? 'contents' : 'none'\">\n <div #chart class=\"chart-container\"></div>\n <div class=\"legend-container\"></div>\n</div>\n<div [style.display]=\"!hasSeriesData ? 'block' : 'none'\" class=\"chart-placeholder text-align-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n</div>\n\n\n", styles: [":host{display:flex;width:100%;height:100%;flex-direction:column}.chart-container{position:relative;min-height:0;flex-grow:1;flex-basis:1px}.chart-placeholder{margin:auto;width:100%}.chart-placeholder span{text-overflow:ellipsis;overflow:hidden;display:block}.legend-container{flex-shrink:0;flex-basis:1px}::ng-deep .grid line{stroke-dasharray:1,4}::ng-deep .tooltip-chart{padding:8px 12px;border-radius:2px}::ng-deep .legend{grid-gap:8px;padding-bottom:5px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-evenly}::ng-deep .legend .item{display:flex;align-items:center;cursor:pointer}::ng-deep .legend .item .swatch{width:10px;height:10px}::ng-deep .legend .item .line{width:12px;height:2px}::ng-deep .legend .item .label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-left:5px}\n"] }]
@@ -139,6 +144,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
139
144
  type: Output
140
145
  }], seriesMove: [{
141
146
  type: Output
147
+ }], pointMove: [{
148
+ type: Output
142
149
  }], zoomChange: [{
143
150
  type: Output
144
151
  }], chart: [{
@@ -150,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
150
157
  type: HostListener,
151
158
  args: ['click', ['$event']]
152
159
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29tcG9uZW50L2NoYXJ0L2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9jaGFydC9jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFLTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVF4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7O0FBU3JELE1BQU0sT0FBTyxjQUFjO0lBOEJ6QixZQUFvQixLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQXZCakMsa0JBQWEsR0FBdUMsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFN0Ysa0JBQWEsR0FBdUMsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFHN0YsZUFBVSxHQUFnRCxJQUFJLFlBQVksRUFBaUMsQ0FBQztRQUc1RyxlQUFVLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFTOUQsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0lBTW5DLENBQUM7SUFFa0MsS0FBSyxDQUFDLEtBQVU7UUFDakQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlB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QU07Z0JBSVAsVUFBVTtzQkFEVCxNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTTtnQkFNUCxLQUFLO3NCQUhKLFNBQVM7dUJBQUMsT0FBTyxFQUFFO3dCQUNsQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFja0MsS0FBSztzQkFBdkMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2VXaGlsZSwgdGhyb3R0bGVUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1RldGFDaGFydH0gZnJvbSAnLi4vY29yZS9jaGFydCc7XG5pbXBvcnQge0NoYXJ0T3B0aW9uc30gZnJvbSAnLi4vbW9kZWwvY2hhcnQtb3B0aW9ucyc7XG5pbXBvcnQge0Jhc2VQb2ludH0gZnJvbSAnLi4vbW9kZWwvcG9pbnQvYmFzZS1wb2ludCc7XG5pbXBvcnQge1Nlcmllc30gZnJvbSAnLi4vbW9kZWwvc2VyaWVzJztcbmltcG9ydCB7UGxvdExpbmV9IGZyb20gJy4uL21vZGVsL3Bsb3QtbGluZSc7XG5pbXBvcnQge1Bsb3RCYW5kfSBmcm9tICcuLi9tb2RlbC9wbG90LWJhbmQnO1xuaW1wb3J0IHtJRHJhZ0V2ZW50fSBmcm9tICcuLi9tb2RlbC9pLWRyYWctZXZlbnQnO1xuaW1wb3J0IHtJWm9vbUV2ZW50fSBmcm9tICcuLi9tb2RlbC9pLXpvb20tZXZlbnQnO1xuaW1wb3J0IHtTZXJpZXNUeXBlfSBmcm9tICcuLi9tb2RlbC9lbnVtL3Nlcmllcy10eXBlJztcbmltcG9ydCB7QmFyUG9pbnR9IGZyb20gJy4uL21vZGVsL3BvaW50L2Jhci1wb2ludCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgem9vbTogSVpvb21FdmVudDtcblxuICBASW5wdXQoKSBjb25maWc6IENoYXJ0T3B0aW9ucztcblxuICBAT3V0cHV0KClcbiAgcGxvdExpbmVzTW92ZTogRXZlbnRFbWl0dGVyPElEcmFnRXZlbnQ8UGxvdExpbmU+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SURyYWdFdmVudDxQbG90TGluZT4+KCk7XG4gIEBPdXRwdXQoKVxuICBwbG90QmFuZHNNb3ZlOiBFdmVudEVtaXR0ZXI8SURyYWdFdmVudDxQbG90QmFuZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJRHJhZ0V2ZW50PFBsb3RCYW5kPj4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VyaWVzTW92ZTogRXZlbnRFbWl0dGVyPElEcmFnRXZlbnQ8U2VyaWVzPEJhc2VQb2ludD4+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SURyYWdFdmVudDxTZXJpZXM8QmFzZVBvaW50Pj4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHpvb21DaGFuZ2U6IEV2ZW50RW1pdHRlcjxJWm9vbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SVpvb21FdmVudD4oKTtcblxuICBAVmlld0NoaWxkKCdjaGFydCcsIHtcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIGNoYXJ0OiBFbGVtZW50UmVmO1xuICBoYXNTZXJpZXNEYXRhOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2NvbmZpZzogQ2hhcnRPcHRpb25zO1xuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgc2l6ZSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByaXZhdGUgX29ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBfY2hhcnQ6IFRldGFDaGFydDtcbiAgcHJpdmF0ZSBfem9vbTogSVpvb21FdmVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF96b25lOiBOZ1pvbmUpIHtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgY2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuICAgIGNvbnN0IHRyaWdnZXJUb2tlbiA9ICdsZWdlbmQnO1xuXG4gICAgY29uc3QgaXNMZWdlbmQgPSBjb21wb3NlZFBhdGguc29tZSgoXykgPT5cbiAgICAgIF8uY2xhc3NMaXN0Py5jb250YWlucyh0cmlnZ2VyVG9rZW4pXG4gICAgKTtcblxuICAgIGlmIChpc0xlZ2VuZCkge1xuICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnQ6IGFueSA9IGV2ZW50LnRhcmdldD8uX19kYXRhX187XG5cbiAgICAgIGlmICghY2xpY2tlZEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXJpZUluZGV4ID0gdGhpcy5fY29uZmlnPy5zZXJpZXM/LmluZGV4T2YoY2xpY2tlZEVsZW1lbnQpO1xuXG4gICAgICBpZiAoY2xpY2tlZEVsZW1lbnQuc2VyaWVUeXBlID09PSBTZXJpZXNUeXBlLmJhcikge1xuICAgICAgICBjb25zdCBmb3VuZFNlcmllID0gdGhpcy5fY29uZmlnLnNlcmllc1tjbGlja2VkRWxlbWVudC5zZXJpZUluZGV4XTtcblxuICAgICAgICB0aGlzLl9jb25maWcuc2VyaWVzW2ZvdW5kU2VyaWUuaWRdLmRhdGEgPSB0aGlzLl9jb25maWcuc2VyaWVzW1xuICAgICAgICAgIGZvdW5kU2VyaWUuaWRcbiAgICAgICAgICBdLmRhdGEubWFwKChfOiBCYXNlUG9pbnQgJiBCYXJQb2ludCkgPT4ge1xuICAgICAgICAgIGlmIChjbGlja2VkRWxlbWVudC5pZCA9PT0gXy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgICAgdmlzaWJsZTogIV8udmlzaWJsZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF87XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVkcmF3KHRoaXMuX2NvbmZpZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXJpZUluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBmb3VuZFNlcmllID0gdGhpcy5fY29uZmlnLnNlcmllc1tzZXJpZUluZGV4XTtcblxuICAgICAgICBjb25zdCB5QXhpc0luZGV4ID0gZm91bmRTZXJpZT8ueUF4aXNJbmRleDtcblxuICAgICAgICB0aGlzLl9jb25maWcuc2VyaWVzW3NlcmllSW5kZXhdLnZpc2libGUgPSAhZm91bmRTZXJpZS52aXNpYmxlO1xuXG4gICAgICAgIGNvbnN0IGF0dGFjaGVkWUF4ZXMgPSB0aGlzLl9jb25maWcuc2VyaWVzXG4gICAgICAgICAgPy5maWx0ZXIoKF8pID0+IF8udmlzaWJsZSlcbiAgICAgICAgICAubWFwKChfKSA9PiBfLnlBeGlzSW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IHNob3VsZFZpc2libGVZQXhpcyA9IGF0dGFjaGVkWUF4ZXM/LmluY2x1ZGVzKHlBeGlzSW5kZXgpO1xuXG4gICAgICAgIHRoaXMuX2NvbmZpZy55QXhpc1t5QXhpc0luZGV4XS52aXNpYmxlID0gc2hvdWxkVmlzaWJsZVlBeGlzO1xuICAgICAgICB0aGlzLnJlZHJhdyh0aGlzLl9jb25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5jb25maWcgJiYgY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnY29uZmlnJykpIHtcbiAgICAgIHRoaXMuc2V0Q29uZmlnKHRoaXMuY29uZmlnKTtcblxuICAgICAgaWYgKHRoaXMuem9vbSkge1xuICAgICAgICB0aGlzLl9jaGFydD8uc2V0Wm9vbSh0aGlzLnpvb20pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnpvb20gJiYgY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnem9vbScpKSB7XG4gICAgICB0aGlzLl9jaGFydD8uc2V0Wm9vbSh0aGlzLnpvb20pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBjb25zdCB7Y29udGVudFJlY3R9ID0gZW50cmllc1swXTtcbiAgICAgIHRoaXMuc2l6ZSQubmV4dChjb250ZW50UmVjdCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuY2hhcnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0aGlzLnNpemUkXG4gICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTAwLCB1bmRlZmluZWQsIHt0cmFpbGluZzogdHJ1ZX0pKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICBtYXAoKF8pID0+IHtcbiAgICAgICAgICB0aGlzLnJlc2l6ZShfKTtcbiAgICAgICAgICB0aGlzLnJlZHJhdyh0aGlzLl9jb25maWcpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9vYnNlcnZlcj8udW5vYnNlcnZlKHRoaXMuY2hhcnQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlZHJhdyhjb25maWc6IGFueSkge1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuX2NoYXJ0LnJlZHJhdyhjb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplKGNvbnRlbnRSZWN0OiBhbnkpIHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBjb250ZW50UmVjdDtcbiAgICB0aGlzLl9jaGFydC5zZXRTaXplKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25maWcoY29uZmlnOiBDaGFydE9wdGlvbnMpIHtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICB0aGlzLmhhc1Nlcmllc0RhdGEgPSAhIXRoaXMuX2NvbmZpZz8uc2VyaWVzPy5zb21lKChfKSA9PiBfLmRhdGEubGVuZ3RoKTtcblxuICAgICAgaWYgKCF0aGlzLl9jaGFydCkge1xuICAgICAgICB0aGlzLl9jaGFydCA9IG5ldyBUZXRhQ2hhcnQodGhpcy5fY29uZmlnLCB0aGlzLmNoYXJ0KTtcblxuICAgICAgICB0aGlzLl9jaGFydC5wbG90TGluZXNNb3ZlXG4gICAgICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4gdGhpcy5wbG90TGluZXNNb3ZlLmVtaXQoXykpO1xuXG4gICAgICAgIHRoaXMuX2NoYXJ0LnBsb3RCYW5kc01vdmVcbiAgICAgICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB0aGlzLnBsb3RCYW5kc01vdmUuZW1pdChfKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhcnQuc2VyaWVzTW92ZVxuICAgICAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMuc2VyaWVzTW92ZS5lbWl0KF8pKTtcblxuICAgICAgICB0aGlzLl9jaGFydC56b29tXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSxcbiAgICAgICAgICAgIG1hcCgoXykgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnpvb21DaGFuZ2UuZW1pdChfKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzU2VyaWVzRGF0YSkge1xuICAgICAgICAgIGlmICghdGhpcy5fem9vbSB8fCB0aGlzLl96b29tPy5ldmVudD8udHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVkcmF3KHRoaXMuX2NvbmZpZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IFtzdHlsZS5kaXNwbGF5XT1cImhhc1Nlcmllc0RhdGEgPyAnY29udGVudHMnIDogJ25vbmUnXCI+XG4gIDxkaXYgI2NoYXJ0IGNsYXNzPVwiY2hhcnQtY29udGFpbmVyXCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJsZWdlbmQtY29udGFpbmVyXCI+PC9kaXY+XG48L2Rpdj5cbjxkaXYgW3N0eWxlLmRpc3BsYXldPVwiIWhhc1Nlcmllc0RhdGEgPyAnYmxvY2snIDogJ25vbmUnXCIgY2xhc3M9XCJjaGFydC1wbGFjZWhvbGRlciB0ZXh0LWFsaWduLWNlbnRlclwiPlxuICA8c3BhbiBjbGFzcz1cImZvbnQtYm9keS0zIGNvbG9yLXRleHQtNDBcIj7QlNCw0L3QvdGL0LUg0L7RgtGB0YPRgtGB0YLQstGD0Y7Rgjwvc3Bhbj5cbjwvZGl2PlxuXG5cbiJdfQ==
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvY29tcG9uZW50L2NoYXJ0L2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2NvbXBvbmVudC9jaGFydC9jaGFydC9jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFLTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVExQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBU3ZELE1BQU0sT0FBTyxjQUFjO0lBMEN6QixZQUFvQixLQUFhO1FBQWIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQWxDakMsa0JBQWEsR0FBdUMsSUFBSSxZQUFZLEVBRWpFLENBQUM7UUFFSixrQkFBYSxHQUF1QyxJQUFJLFlBQVksRUFFakUsQ0FBQztRQUdKLGVBQVUsR0FBZ0QsSUFBSSxZQUFZLEVBRXZFLENBQUM7UUFHSixjQUFTLEdBQWdELElBQUksWUFBWSxFQUV0RSxDQUFDO1FBR0osZUFBVSxHQUE2QixJQUFJLFlBQVksRUFBYyxDQUFDO1FBUzlELFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxVQUFLLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztJQUtDLENBQUM7SUFFRixLQUFLLENBQUMsS0FBVTtR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LE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQzNCO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7OzJHQXRNVSxjQUFjOytGQUFkLGNBQWMsNmFDcEMzQixzYkFTQTsyRkQyQmEsY0FBYztrQkFOMUIsU0FBUzsrQkFDRSxZQUFZLG1CQUdMLHVCQUF1QixDQUFDLE1BQU07NkZBS3RDLElBQUk7c0JBQVosS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR04sYUFBYTtzQkFEWixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFNUCxVQUFVO3NCQURULE1BQU07Z0JBTVAsU0FBUztzQkFEUixNQUFNO2dCQU1QLFVBQVU7c0JBRFQsTUFBTTtnQkFNUCxLQUFLO3NCQUhKLFNBQVM7dUJBQUMsT0FBTyxFQUFFO3dCQUNsQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFha0MsS0FBSztzQkFBdkMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHRha2VXaGlsZSwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGV0YUNoYXJ0IH0gZnJvbSAnLi4vY29yZS9jaGFydCc7XG5pbXBvcnQgeyBDaGFydE9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbC9jaGFydC1vcHRpb25zJztcbmltcG9ydCB7IEJhc2VQb2ludCB9IGZyb20gJy4uL21vZGVsL3BvaW50L2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHsgU2VyaWVzIH0gZnJvbSAnLi4vbW9kZWwvc2VyaWVzJztcbmltcG9ydCB7IFBsb3RMaW5lIH0gZnJvbSAnLi4vbW9kZWwvcGxvdC1saW5lJztcbmltcG9ydCB7IFBsb3RCYW5kIH0gZnJvbSAnLi4vbW9kZWwvcGxvdC1iYW5kJztcbmltcG9ydCB7IElEcmFnRXZlbnQgfSBmcm9tICcuLi9tb2RlbC9pLWRyYWctZXZlbnQnO1xuaW1wb3J0IHsgSVpvb21FdmVudCB9IGZyb20gJy4uL21vZGVsL2ktem9vbS1ldmVudCc7XG5pbXBvcnQgeyBTZXJpZXNUeXBlIH0gZnJvbSAnLi4vbW9kZWwvZW51bS9zZXJpZXMtdHlwZSc7XG5pbXBvcnQgeyBCYXJQb2ludCB9IGZyb20gJy4uL21vZGVsL3BvaW50L2Jhci1wb2ludCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzXG57XG4gIEBJbnB1dCgpIHpvb206IElab29tRXZlbnQ7XG5cbiAgQElucHV0KCkgY29uZmlnOiBDaGFydE9wdGlvbnM7XG5cbiAgQE91dHB1dCgpXG4gIHBsb3RMaW5lc01vdmU6IEV2ZW50RW1pdHRlcjxJRHJhZ0V2ZW50PFBsb3RMaW5lPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIElEcmFnRXZlbnQ8UGxvdExpbmU+XG4gID4oKTtcbiAgQE91dHB1dCgpXG4gIHBsb3RCYW5kc01vdmU6IEV2ZW50RW1pdHRlcjxJRHJhZ0V2ZW50PFBsb3RCYW5kPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIElEcmFnRXZlbnQ8UGxvdEJhbmQ+XG4gID4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VyaWVzTW92ZTogRXZlbnRFbWl0dGVyPElEcmFnRXZlbnQ8U2VyaWVzPEJhc2VQb2ludD4+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgSURyYWdFdmVudDxTZXJpZXM8QmFzZVBvaW50Pj5cbiAgPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwb2ludE1vdmU6IEV2ZW50RW1pdHRlcjxJRHJhZ0V2ZW50PFNlcmllczxCYXNlUG9pbnQ+Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIElEcmFnRXZlbnQ8U2VyaWVzPEJhc2VQb2ludD4+XG4gID4oKTtcblxuICBAT3V0cHV0KClcbiAgem9vbUNoYW5nZTogRXZlbnRFbWl0dGVyPElab29tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJWm9vbUV2ZW50PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2NoYXJ0Jywge1xuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgY2hhcnQ6IEVsZW1lbnRSZWY7XG4gIGhhc1Nlcmllc0RhdGE6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBfY29uZmlnOiBDaGFydE9wdGlvbnM7XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzaXplJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJpdmF0ZSBfb2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIF9jaGFydDogVGV0YUNoYXJ0O1xuICBwcml2YXRlIF96b29tOiBJWm9vbUV2ZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3pvbmU6IE5nWm9uZSkge31cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIGNsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICBjb25zdCB0cmlnZ2VyVG9rZW4gPSAnbGVnZW5kJztcblxuICAgIGNvbnN0IGlzTGVnZW5kID0gY29tcG9zZWRQYXRoLnNvbWUoKF8pID0+XG4gICAgICBfLmNsYXNzTGlzdD8uY29udGFpbnModHJpZ2dlclRva2VuKVxuICAgICk7XG5cbiAgICBpZiAoaXNMZWdlbmQpIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50OiBhbnkgPSBldmVudC50YXJnZXQ/Ll9fZGF0YV9fO1xuXG4gICAgICBpZiAoIWNsaWNrZWRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VyaWVJbmRleCA9IHRoaXMuX2NvbmZpZz8uc2VyaWVzPy5pbmRleE9mKGNsaWNrZWRFbGVtZW50KTtcblxuICAgICAgaWYgKGNsaWNrZWRFbGVtZW50LnNlcmllVHlwZSA9PT0gU2VyaWVzVHlwZS5iYXIpIHtcbiAgICAgICAgY29uc3QgZm91bmRTZXJpZSA9IHRoaXMuX2NvbmZpZy5zZXJpZXNbY2xpY2tlZEVsZW1lbnQuc2VyaWVJbmRleF07XG5cbiAgICAgICAgdGhpcy5fY29uZmlnLnNlcmllc1tmb3VuZFNlcmllLmlkXS5kYXRhID0gdGhpcy5fY29uZmlnLnNlcmllc1tcbiAgICAgICAgICBmb3VuZFNlcmllLmlkXG4gICAgICAgIF0uZGF0YS5tYXAoKF86IEJhc2VQb2ludCAmIEJhclBvaW50KSA9PiB7XG4gICAgICAgICAgaWYgKGNsaWNrZWRFbGVtZW50LmlkID09PSBfLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgICB2aXNpYmxlOiAhXy52aXNpYmxlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gXztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZWRyYXcodGhpcy5fY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlcmllSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kU2VyaWUgPSB0aGlzLl9jb25maWcuc2VyaWVzW3NlcmllSW5kZXhdO1xuXG4gICAgICAgIGNvbnN0IHlBeGlzSW5kZXggPSBmb3VuZFNlcmllPy55QXhpc0luZGV4O1xuXG4gICAgICAgIHRoaXMuX2NvbmZpZy5zZXJpZXNbc2VyaWVJbmRleF0udmlzaWJsZSA9ICFmb3VuZFNlcmllLnZpc2libGU7XG5cbiAgICAgICAgY29uc3QgYXR0YWNoZWRZQXhlcyA9IHRoaXMuX2NvbmZpZy5zZXJpZXNcbiAgICAgICAgICA/LmZpbHRlcigoXykgPT4gXy52aXNpYmxlKVxuICAgICAgICAgIC5tYXAoKF8pID0+IF8ueUF4aXNJbmRleCk7XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkVmlzaWJsZVlBeGlzID0gYXR0YWNoZWRZQXhlcz8uaW5jbHVkZXMoeUF4aXNJbmRleCk7XG5cbiAgICAgICAgdGhpcy5fY29uZmlnLnlBeGlzW3lBeGlzSW5kZXhdLnZpc2libGUgPSBzaG91bGRWaXNpYmxlWUF4aXM7XG4gICAgICAgIHRoaXMucmVkcmF3KHRoaXMuX2NvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmNvbmZpZyAmJiBjaGFuZ2VzLmhhc093blByb3BlcnR5KCdjb25maWcnKSkge1xuICAgICAgdGhpcy5zZXRDb25maWcodGhpcy5jb25maWcpO1xuXG4gICAgICBpZiAodGhpcy56b29tKSB7XG4gICAgICAgIHRoaXMuX2NoYXJ0Py5zZXRab29tKHRoaXMuem9vbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuem9vbSAmJiBjaGFuZ2VzLmhhc093blByb3BlcnR5KCd6b29tJykpIHtcbiAgICAgIHRoaXMuX2NoYXJ0Py5zZXRab29tKHRoaXMuem9vbSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgY29uc3QgeyBjb250ZW50UmVjdCB9ID0gZW50cmllc1swXTtcbiAgICAgIHRoaXMuc2l6ZSQubmV4dChjb250ZW50UmVjdCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuY2hhcnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0aGlzLnNpemUkXG4gICAgICAucGlwZSh0aHJvdHRsZVRpbWUoMTAwLCB1bmRlZmluZWQsIHsgdHJhaWxpbmc6IHRydWUgfSkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSksXG4gICAgICAgIG1hcCgoXykgPT4ge1xuICAgICAgICAgIHRoaXMucmVzaXplKF8pO1xuICAgICAgICAgIHRoaXMucmVkcmF3KHRoaXMuX2NvbmZpZyk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX29ic2VydmVyPy51bm9ic2VydmUodGhpcy5jaGFydC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVkcmF3KGNvbmZpZzogYW55KSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5fY2hhcnQucmVkcmF3KGNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNpemUoY29udGVudFJlY3Q6IGFueSkge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFJlY3Q7XG4gICAgdGhpcy5fY2hhcnQuc2V0U2l6ZSh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29uZmlnKGNvbmZpZzogQ2hhcnRPcHRpb25zKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgdGhpcy5oYXNTZXJpZXNEYXRhID0gISF0aGlzLl9jb25maWc/LnNlcmllcz8uc29tZSgoXykgPT4gXy5kYXRhLmxlbmd0aCk7XG5cbiAgICAgIGlmICghdGhpcy5fY2hhcnQpIHtcbiAgICAgICAgdGhpcy5fY2hhcnQgPSBuZXcgVGV0YUNoYXJ0KHRoaXMuX2NvbmZpZywgdGhpcy5jaGFydCk7XG5cbiAgICAgICAgdGhpcy5fY2hhcnQucGxvdExpbmVzTW92ZVxuICAgICAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHRoaXMucGxvdExpbmVzTW92ZS5lbWl0KF8pKTtcblxuICAgICAgICB0aGlzLl9jaGFydC5wbG90QmFuZHNNb3ZlXG4gICAgICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4gdGhpcy5wbG90QmFuZHNNb3ZlLmVtaXQoXykpO1xuXG4gICAgICAgIHRoaXMuX2NoYXJ0LnNlcmllc01vdmVcbiAgICAgICAgICAucGlwZSh0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB0aGlzLnNlcmllc01vdmUuZW1pdChfKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhcnQucG9pbnRNb3ZlXG4gICAgICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgdGhpcy5wb2ludE1vdmUuZW1pdChfKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jaGFydC56b29tXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlV2hpbGUoKF8pID0+IHRoaXMuX2FsaXZlKSxcbiAgICAgICAgICAgIG1hcCgoXykgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnpvb21DaGFuZ2UuZW1pdChfKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzU2VyaWVzRGF0YSkge1xuICAgICAgICAgIGlmICghdGhpcy5fem9vbSB8fCB0aGlzLl96b29tPy5ldmVudD8udHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVkcmF3KHRoaXMuX2NvbmZpZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IFtzdHlsZS5kaXNwbGF5XT1cImhhc1Nlcmllc0RhdGEgPyAnY29udGVudHMnIDogJ25vbmUnXCI+XG4gIDxkaXYgI2NoYXJ0IGNsYXNzPVwiY2hhcnQtY29udGFpbmVyXCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJsZWdlbmQtY29udGFpbmVyXCI+PC9kaXY+XG48L2Rpdj5cbjxkaXYgW3N0eWxlLmRpc3BsYXldPVwiIWhhc1Nlcmllc0RhdGEgPyAnYmxvY2snIDogJ25vbmUnXCIgY2xhc3M9XCJjaGFydC1wbGFjZWhvbGRlciB0ZXh0LWFsaWduLWNlbnRlclwiPlxuICA8c3BhbiBjbGFzcz1cImZvbnQtYm9keS0zIGNvbG9yLXRleHQtNDBcIj7QlNCw0L3QvdGL0LUg0L7RgtGB0YPRgtGB0YLQstGD0Y7Rgjwvc3Bhbj5cbjwvZGl2PlxuXG5cbiJdfQ==