@hestia-earth/ui-components 0.23.21 → 0.23.22

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.
@@ -1,26 +1,30 @@
1
1
  /// <reference types="google.maps" />
2
- import { OnInit, AfterViewInit, OnDestroy, EventEmitter } from '@angular/core';
2
+ import { OnInit, OnDestroy, EventEmitter, DestroyRef } from '@angular/core';
3
+ import { Observable } from 'rxjs';
3
4
  import * as i0 from "@angular/core";
4
- export declare class MapsDrawingConfirmComponent implements OnInit, AfterViewInit, OnDestroy {
5
+ export declare class MapsDrawingConfirmComponent implements OnInit, OnDestroy {
6
+ protected mapLoaded$: Observable<boolean>;
5
7
  private listeners;
6
8
  private shapes;
7
9
  private feature?;
8
10
  private coordinates?;
9
11
  private map?;
10
12
  value?: string;
11
- modes: google.maps.drawing.OverlayType[];
13
+ modes?: google.maps.drawing.OverlayType[];
12
14
  center: {
13
15
  lat: number;
14
16
  lng: number;
15
17
  };
16
18
  zoom: number;
17
19
  closed: EventEmitter<string | google.maps.LatLngLiteral>;
18
- options: google.maps.MapOptions;
20
+ protected options: import("@angular/core").WritableSignal<google.maps.MapOptions>;
21
+ constructor(destroyRef: DestroyRef, mapLoaded$: Observable<boolean>);
19
22
  ngOnInit(): void;
20
- ngAfterViewInit(): void;
21
23
  ngOnDestroy(): void;
22
24
  private onPolygonAdded;
23
25
  private onMarkerAdded;
26
+ private loadData;
27
+ protected mapInitialized(): void;
24
28
  confirm(): void;
25
29
  clear(): void;
26
30
  static ɵfac: i0.ɵɵFactoryDeclaration<MapsDrawingConfirmComponent, never>;
@@ -1,4 +1,3 @@
1
- import { OnChanges, SimpleChanges } from '@angular/core';
2
1
  import { IsActiveMatchOptions } from '@angular/router';
3
2
  import { NavigationMenuService } from '../navigation-menu.service';
4
3
  import { ResponsiveService } from '../responsive.service';
@@ -12,15 +11,15 @@ export interface INavigationMenuLink {
12
11
  [key: string]: string;
13
12
  };
14
13
  fragment?: string;
14
+ expanded?: boolean;
15
15
  }
16
- export declare class NavigationMenuComponent implements OnChanges {
16
+ export declare class NavigationMenuComponent {
17
17
  private service;
18
18
  protected responsiveService: ResponsiveService;
19
19
  protected sticky: boolean;
20
20
  protected collapsible: boolean;
21
21
  protected links: INavigationMenuLink[];
22
22
  protected routerLinkMatchOptions: IsActiveMatchOptions;
23
- protected listExpanded: string[];
24
23
  collapsed: boolean;
25
24
  opened: boolean;
26
25
  protected classes: string;
@@ -28,10 +27,10 @@ export declare class NavigationMenuComponent implements OnChanges {
28
27
  constructor(service: NavigationMenuService, responsiveService: ResponsiveService);
29
28
  get maxHeight(): string;
30
29
  get withPrimaryIcons(): boolean;
31
- ngOnChanges(changes: SimpleChanges): void;
32
30
  toggle(): void;
33
- onExpandableItemClick(title: string, index: number): void;
34
- listActiveLinkChange(title: string, index: number, isActive: boolean): string;
31
+ private collapseOtherLinks;
32
+ toggleLinks(item: INavigationMenuLink, index: number): void;
33
+ listActiveLinkChange(item: INavigationMenuLink): void;
35
34
  static ɵfac: i0.ɵɵFactoryDeclaration<NavigationMenuComponent, never>;
36
35
  static ɵcmp: i0.ɵɵComponentDeclaration<NavigationMenuComponent, "he-navigation-menu", never, { "sticky": { "alias": "sticky"; "required": false; }; "collapsible": { "alias": "collapsible"; "required": false; }; "links": { "alias": "links"; "required": false; }; "routerLinkMatchOptions": { "alias": "routerLinkMatchOptions"; "required": false; }; }, {}, never, ["[outer-content]", "[inner-content]"], false, never>;
37
36
  }
@@ -1,46 +1,38 @@
1
- import { Component, Output, EventEmitter, Input, ViewChild } from '@angular/core';
1
+ import { Component, Output, EventEmitter, Input, ViewChild, Inject, signal } from '@angular/core';
2
2
  import { GoogleMap } from '@angular/google-maps';
3
3
  import { isNumber } from '@hestia-earth/utils';
4
- import { defaultFeature, addPolygonToFeature, polygonsFromFeature, strokeStyle } from '../maps-utils';
4
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
+ import { HE_MAP_LOADED, defaultFeature, addPolygonToFeature, polygonsFromFeature, strokeStyle } from '../maps-utils';
5
6
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/google-maps";
7
- import * as i2 from "@fortawesome/angular-fontawesome";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "@angular/google-maps";
9
+ import * as i3 from "@fortawesome/angular-fontawesome";
10
+ import * as i4 from "rxjs";
8
11
  export class MapsDrawingConfirmComponent {
9
- constructor() {
12
+ constructor(destroyRef, mapLoaded$) {
13
+ this.mapLoaded$ = mapLoaded$;
10
14
  this.listeners = [];
11
15
  this.shapes = [];
12
16
  this.feature = defaultFeature();
13
- this.modes = [google.maps.drawing.OverlayType.POLYGON];
14
17
  this.center = { lat: 0, lng: 0 };
15
18
  this.zoom = 3;
16
19
  this.closed = new EventEmitter();
17
- this.options = {
18
- fullscreenControl: false,
19
- mapTypeControl: true,
20
- streetViewControl: false,
21
- zoomControl: true,
22
- zoomControlOptions: {
23
- position: google.maps.ControlPosition.TOP_RIGHT
24
- }
25
- };
20
+ this.options = signal({});
21
+ mapLoaded$.pipe(takeUntilDestroyed(destroyRef)).subscribe(() => {
22
+ this.options.set({
23
+ fullscreenControl: false,
24
+ mapTypeControl: true,
25
+ streetViewControl: false,
26
+ zoomControl: true,
27
+ zoomControlOptions: {
28
+ position: google.maps.ControlPosition.TOP_RIGHT
29
+ }
30
+ });
31
+ });
26
32
  }
27
33
  ngOnInit() {
28
34
  this.feature = this.value && !isNumber(this.value) ? JSON.parse(this.value) : this.feature;
29
35
  }
30
- ngAfterViewInit() {
31
- this.shapes = polygonsFromFeature(this.feature);
32
- this.shapes.forEach(polygon => polygon.setMap(this.map?.googleMap));
33
- const drawingManager = new google.maps.drawing.DrawingManager({
34
- drawingControlOptions: {
35
- position: google.maps.ControlPosition.TOP_CENTER,
36
- drawingModes: this.modes
37
- },
38
- polygonOptions: strokeStyle
39
- });
40
- drawingManager.setMap(this.map?.googleMap);
41
- this.listeners.push(google.maps.event.addListener(drawingManager, 'polygoncomplete', polygon => this.onPolygonAdded(polygon)));
42
- this.listeners.push(google.maps.event.addListener(drawingManager, 'markercomplete', marker => this.onMarkerAdded(marker)));
43
- }
44
36
  ngOnDestroy() {
45
37
  this.listeners.map(listener => google.maps.event.removeListener(listener));
46
38
  }
@@ -54,6 +46,23 @@ export class MapsDrawingConfirmComponent {
54
46
  const position = marker.getPosition();
55
47
  this.coordinates = position?.toJSON();
56
48
  }
49
+ loadData() {
50
+ this.shapes = polygonsFromFeature(this.feature);
51
+ this.shapes.forEach(polygon => polygon.setMap(this.map?.googleMap));
52
+ const drawingManager = new google.maps.drawing.DrawingManager({
53
+ drawingControlOptions: {
54
+ position: google.maps.ControlPosition.TOP_CENTER,
55
+ drawingModes: this.modes || [google.maps.drawing.OverlayType.POLYGON]
56
+ },
57
+ polygonOptions: strokeStyle
58
+ });
59
+ drawingManager.setMap(this.map?.googleMap);
60
+ this.listeners.push(google.maps.event.addListener(drawingManager, 'polygoncomplete', polygon => this.onPolygonAdded(polygon)));
61
+ this.listeners.push(google.maps.event.addListener(drawingManager, 'markercomplete', marker => this.onMarkerAdded(marker)));
62
+ }
63
+ mapInitialized() {
64
+ setTimeout(() => this.loadData());
65
+ }
57
66
  confirm() {
58
67
  this.closed.next(this.coordinates || JSON.stringify(this.feature) || '');
59
68
  }
@@ -63,13 +72,16 @@ export class MapsDrawingConfirmComponent {
63
72
  this.coordinates = undefined;
64
73
  this.feature = undefined;
65
74
  }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: MapsDrawingConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: MapsDrawingConfirmComponent, selector: "he-maps-drawing-confirm", inputs: { value: "value", modes: "modes", center: "center", zoom: "zoom" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Draw on Map</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.next(value)\"></button>\n </header>\n <section class=\"modal-card-body p-0\">\n <google-map height=\"100%\" width=\"100%\" [zoom]=\"zoom\" [center]=\"center\" [options]=\"options\"></google-map>\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"closed.next(value)\">\n <span>Close</span>\n </button>\n <button class=\"button is-danger\" (click)=\"clear()\">\n <fa-icon class=\"mr-2\" icon=\"times\"></fa-icon>\n <span>Clear</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: ["google-map{display:block;height:100%;max-height:calc(100vh - 146px);min-height:500px}\n"], dependencies: [{ kind: "component", type: i1.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: MapsDrawingConfirmComponent, deps: [{ token: i0.DestroyRef }, { token: HE_MAP_LOADED }], target: i0.ɵɵFactoryTarget.Component }); }
76
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: MapsDrawingConfirmComponent, selector: "he-maps-drawing-confirm", inputs: { value: "value", modes: "modes", center: "center", zoom: "zoom" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "map", first: true, predicate: GoogleMap, descendants: true }], ngImport: i0, template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Draw on Map</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.next(value)\"></button>\n </header>\n <section class=\"modal-card-body p-0\">\n <google-map\n *ngIf=\"mapLoaded$ | async\"\n (mapInitialized)=\"mapInitialized()\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"center\"\n [options]=\"options()\"></google-map>\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"closed.next(value)\">\n <span>Close</span>\n </button>\n <button class=\"button is-danger\" (click)=\"clear()\">\n <fa-icon class=\"mr-2\" icon=\"times\"></fa-icon>\n <span>Clear</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: ["google-map{display:block;height:100%;max-height:calc(100vh - 146px);min-height:500px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.GoogleMap, selector: "google-map", inputs: ["height", "width", "mapTypeId", "center", "zoom", "options"], outputs: ["mapInitialized", "authFailure", "boundsChanged", "centerChanged", "mapClick", "mapDblclick", "mapDrag", "mapDragend", "mapDragstart", "headingChanged", "idle", "maptypeidChanged", "mapMousemove", "mapMouseout", "mapMouseover", "projectionChanged", "mapRightclick", "tilesloaded", "tiltChanged", "zoomChanged"], exportAs: ["googleMap"] }, { kind: "component", type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
68
77
  }
69
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: MapsDrawingConfirmComponent, decorators: [{
70
79
  type: Component,
71
- args: [{ selector: 'he-maps-drawing-confirm', template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Draw on Map</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.next(value)\"></button>\n </header>\n <section class=\"modal-card-body p-0\">\n <google-map height=\"100%\" width=\"100%\" [zoom]=\"zoom\" [center]=\"center\" [options]=\"options\"></google-map>\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"closed.next(value)\">\n <span>Close</span>\n </button>\n <button class=\"button is-danger\" (click)=\"clear()\">\n <fa-icon class=\"mr-2\" icon=\"times\"></fa-icon>\n <span>Clear</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: ["google-map{display:block;height:100%;max-height:calc(100vh - 146px);min-height:500px}\n"] }]
72
- }], propDecorators: { map: [{
80
+ args: [{ selector: 'he-maps-drawing-confirm', template: "<div class=\"modal is-large is-active\">\n <div class=\"modal-background\"></div>\n <div class=\"modal-card\">\n <header class=\"modal-card-head\">\n <p class=\"modal-card-title\">Draw on Map</p>\n <button class=\"delete\" aria-label=\"close\" (click)=\"closed.next(value)\"></button>\n </header>\n <section class=\"modal-card-body p-0\">\n <google-map\n *ngIf=\"mapLoaded$ | async\"\n (mapInitialized)=\"mapInitialized()\"\n height=\"100%\"\n width=\"100%\"\n [zoom]=\"zoom\"\n [center]=\"center\"\n [options]=\"options()\"></google-map>\n </section>\n <footer class=\"modal-card-foot\">\n <button class=\"button is-primary\" (click)=\"confirm()\">\n <span>Confirm</span>\n </button>\n <button class=\"button is-ghost\" (click)=\"closed.next(value)\">\n <span>Close</span>\n </button>\n <button class=\"button is-danger\" (click)=\"clear()\">\n <fa-icon class=\"mr-2\" icon=\"times\"></fa-icon>\n <span>Clear</span>\n </button>\n </footer>\n </div>\n</div>\n", styles: ["google-map{display:block;height:100%;max-height:calc(100vh - 146px);min-height:500px}\n"] }]
81
+ }], ctorParameters: function () { return [{ type: i0.DestroyRef }, { type: i4.Observable, decorators: [{
82
+ type: Inject,
83
+ args: [HE_MAP_LOADED]
84
+ }] }]; }, propDecorators: { map: [{
73
85
  type: ViewChild,
74
86
  args: [GoogleMap]
75
87
  }], value: [{
@@ -83,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImpor
83
95
  }], closed: [{
84
96
  type: Output
85
97
  }] } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcy1kcmF3aW5nLWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9tYXBzLWRyYXdpbmctY29uZmlybS9tYXBzLWRyYXdpbmctY29uZmlybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL21hcHMtZHJhd2luZy1jb25maXJtL21hcHMtZHJhd2luZy1jb25maXJtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE9BQU8sRUFHTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7Ozs7QUFPdkIsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQU1VLGNBQVMsR0FBb0MsRUFBRSxDQUFDO1FBQ2hELFdBQU0sR0FBaUQsRUFBRSxDQUFDO1FBRTFELFlBQU8sR0FBbUMsY0FBYyxFQUFFLENBQUM7UUFTNUQsVUFBSyxHQUFzQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRixXQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUU1QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBR1QsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFzQyxDQUFDO1FBRWhFLFlBQU8sR0FBMkI7WUFDdkMsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixjQUFjLEVBQUUsSUFBSTtZQUNw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Q0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7SUFDM0IsQ0FBQzs4R0FoRlUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsK01BTzNCLFNBQVMsZ0RDekJ0Qiw0OEJBd0JBOzsyRkROYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UseUJBQXlCOzhCQVkzQixHQUFHO3NCQURWLFNBQVM7dUJBQUMsU0FBUztnQkFJYixLQUFLO3NCQURYLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLO2dCQUdDLE1BQU07c0JBRFosS0FBSztnQkFHQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsTUFBTTtzQkFEWixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdvb2dsZU1hcCB9IGZyb20gJ0Bhbmd1bGFyL2dvb2dsZS1tYXBzJztcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7XG4gIElGZWF0dXJlLFxuICBJRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGRlZmF1bHRGZWF0dXJlLFxuICBhZGRQb2x5Z29uVG9GZWF0dXJlLFxuICBwb2x5Z29uc0Zyb21GZWF0dXJlLFxuICBzdHJva2VTdHlsZVxufSBmcm9tICcuLi9tYXBzLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbWFwcy1kcmF3aW5nLWNvbmZpcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwcy1kcmF3aW5nLWNvbmZpcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXBzLWRyYXdpbmctY29uZmlybS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1hcHNEcmF3aW5nQ29uZmlybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBzaGFwZXM6IChnb29nbGUubWFwcy5NYXJrZXIgfCBnb29nbGUubWFwcy5Qb2x5Z29uKVtdID0gW107XG5cbiAgcHJpdmF0ZSBmZWF0dXJlPzogSUZlYXR1cmUgfCBJRmVhdHVyZUNvbGxlY3Rpb24gPSBkZWZhdWx0RmVhdHVyZSgpO1xuICBwcml2YXRlIGNvb3JkaW5hdGVzPzogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbDtcblxuICBAVmlld0NoaWxkKEdvb2dsZU1hcClcbiAgcHJpdmF0ZSBtYXA/OiBHb29nbGVNYXA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHZhbHVlPzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbW9kZXM6IGdvb2dsZS5tYXBzLmRyYXdpbmcuT3ZlcmxheVR5cGVbXSA9IFtnb29nbGUubWFwcy5kcmF3aW5nLk92ZXJsYXlUeXBlLlBPTFlHT05dO1xuICBASW5wdXQoKVxuICBwdWJsaWMgY2VudGVyID0geyBsYXQ6IDAsIGxuZzogMCB9O1xuICBASW5wdXQoKVxuICBwdWJsaWMgem9vbSA9IDM7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwgfCBzdHJpbmc+KCk7XG5cbiAgcHVibGljIG9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMgPSB7XG4gICAgZnVsbHNjcmVlbkNvbnRyb2w6IGZhbHNlLFxuICAgIG1hcFR5cGVDb250cm9sOiB0cnVlLFxuICAgIHN0cmVldFZpZXdDb250cm9sOiBmYWxzZSxcbiAgICB6b29tQ29udHJvbDogdHJ1ZSxcbiAgICB6b29tQ29udHJvbE9wdGlvbnM6IHtcbiAgICAgIHBvc2l0aW9uOiBnb29nbGUubWFwcy5Db250cm9sUG9zaXRpb24uVE9QX1JJR0hUXG4gICAgfVxuICB9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmVhdHVyZSA9IHRoaXMudmFsdWUgJiYgIWlzTnVtYmVyKHRoaXMudmFsdWUpID8gSlNPTi5wYXJzZSh0aGlzLnZhbHVlKSA6IHRoaXMuZmVhdHVyZTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnNoYXBlcyA9IHBvbHlnb25zRnJvbUZlYXR1cmUodGhpcy5mZWF0dXJlKTtcbiAgICB0aGlzLnNoYXBlcy5mb3JFYWNoKHBvbHlnb24gPT4gcG9seWdvbi5zZXRNYXAodGhpcy5tYXA/Lmdvb2dsZU1hcCkpO1xuICAgIGNvbnN0IGRyYXdpbmdNYW5hZ2VyID0gbmV3IGdvb2dsZS5tYXBzLmRyYXdpbmcuRHJhd2luZ01hbmFnZXIoe1xuICAgICAgZHJhd2luZ0NvbnRyb2xPcHRpb25zOiB7XG4gICAgICAgIHBvc2l0aW9uOiBnb29nbGUubWFwcy5Db250cm9sUG9zaXRpb24uVE9QX0NFTlRFUixcbiAgICAgICAgZHJhd2luZ01vZGVzOiB0aGlzLm1vZGVzXG4gICAgICB9LFxuICAgICAgcG9seWdvbk9wdGlvbnM6IHN0cm9rZVN0eWxlXG4gICAgfSk7XG4gICAgZHJhd2luZ01hbmFnZXIuc2V0TWFwKHRoaXMubWFwPy5nb29nbGVNYXApO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goXG4gICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihkcmF3aW5nTWFuYWdlciwgJ3BvbHlnb25jb21wbGV0ZScsIHBvbHlnb24gPT4gdGhpcy5vblBvbHlnb25BZGRlZChwb2x5Z29uKSlcbiAgICApO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goXG4gICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihkcmF3aW5nTWFuYWdlciwgJ21hcmtlcmNvbXBsZXRlJywgbWFya2VyID0+IHRoaXMub25NYXJrZXJBZGRlZChtYXJrZXIpKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5tYXAobGlzdGVuZXIgPT4gZ29vZ2xlLm1hcHMuZXZlbnQucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Qb2x5Z29uQWRkZWQocG9seWdvbjogZ29vZ2xlLm1hcHMuUG9seWdvbikge1xuICAgIHRoaXMuc2hhcGVzLnB1c2gocG9seWdvbik7XG4gICAgdGhpcy5mZWF0dXJlID0gdGhpcy5mZWF0dXJlIHx8IGRlZmF1bHRGZWF0dXJlKCk7XG4gICAgYWRkUG9seWdvblRvRmVhdHVyZSh0aGlzLmZlYXR1cmUsIHBvbHlnb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcmtlckFkZGVkKG1hcmtlcjogZ29vZ2xlLm1hcHMuTWFya2VyKSB7XG4gICAgdGhpcy5zaGFwZXMucHVzaChtYXJrZXIpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gbWFya2VyLmdldFBvc2l0aW9uKCk7XG4gICAgdGhpcy5jb29yZGluYXRlcyA9IHBvc2l0aW9uPy50b0pTT04oKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maXJtKCkge1xuICAgIHRoaXMuY2xvc2VkLm5leHQodGhpcy5jb29yZGluYXRlcyB8fCBKU09OLnN0cmluZ2lmeSh0aGlzLmZlYXR1cmUpIHx8ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLnNoYXBlcy5mb3JFYWNoKHNoYXBlID0+IHNoYXBlLnNldE1hcChudWxsKSk7XG4gICAgdGhpcy5zaGFwZXMgPSBbXTtcbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZmVhdHVyZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsIGlzLWxhcmdlIGlzLWFjdGl2ZVwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYmFja2dyb3VuZFwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtY2FyZFwiPlxuICAgIDxoZWFkZXIgY2xhc3M9XCJtb2RhbC1jYXJkLWhlYWRcIj5cbiAgICAgIDxwIGNsYXNzPVwibW9kYWwtY2FyZC10aXRsZVwiPkRyYXcgb24gTWFwPC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRlbGV0ZVwiIGFyaWEtbGFiZWw9XCJjbG9zZVwiIChjbGljayk9XCJjbG9zZWQubmV4dCh2YWx1ZSlcIj48L2J1dHRvbj5cbiAgICA8L2hlYWRlcj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWNhcmQtYm9keSBwLTBcIj5cbiAgICAgIDxnb29nbGUtbWFwIGhlaWdodD1cIjEwMCVcIiB3aWR0aD1cIjEwMCVcIiBbem9vbV09XCJ6b29tXCIgW2NlbnRlcl09XCJjZW50ZXJcIiBbb3B0aW9uc109XCJvcHRpb25zXCI+PC9nb29nbGUtbWFwPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8Zm9vdGVyIGNsYXNzPVwibW9kYWwtY2FyZC1mb290XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXByaW1hcnlcIiAoY2xpY2spPVwiY29uZmlybSgpXCI+XG4gICAgICAgIDxzcGFuPkNvbmZpcm08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZ2hvc3RcIiAoY2xpY2spPVwiY2xvc2VkLm5leHQodmFsdWUpXCI+XG4gICAgICAgIDxzcGFuPkNsb3NlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLWRhbmdlclwiIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwibXItMlwiIGljb249XCJ0aW1lc1wiPjwvZmEtaWNvbj5cbiAgICAgICAgPHNwYW4+Q2xlYXI8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Zvb3Rlcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcy1kcmF3aW5nLWNvbmZpcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9tYXBzLWRyYXdpbmctY29uZmlybS9tYXBzLWRyYXdpbmctY29uZmlybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL21hcHMtZHJhd2luZy1jb25maXJtL21hcHMtZHJhd2luZy1jb25maXJtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdoRSxPQUFPLEVBQ0wsYUFBYSxFQUdiLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBT3ZCLE1BQU0sT0FBTywyQkFBMkI7SUF3QnRDLFlBQ0UsVUFBc0IsRUFDVyxVQUErQjtRQUEvQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQXpCMUQsY0FBUyxHQUFvQyxFQUFFLENBQUM7UUFDaEQsV0FBTSxHQUFpRCxFQUFFLENBQUM7UUFFMUQsWUFBTyxHQUFtQyxjQUFjLEVBQUUsQ0FBQztRQVc1RCxXQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUU1QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBR1QsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFzQyxDQUFDO1FBRTdELFlBQU8sR0FBRyxNQUFNLENBQUMsRUFBNEIsQ0FBQyxDQUFDO1FBTXZELFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNmLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixpQkFBaUIsRUFBRSxLQUFLO2dCQUN4QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsa0JBQWtCLEVBQUU7b0JBQ2xCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTO2lCQUNoRDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3RixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUE0QjtRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksY0FBYyxFQUFFLENBQUM7UUFDaEQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQTBCO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDNUQscUJBQXFCLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVO2dCQUNoRCxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7YUFDdEU7WUFDRCxjQUFjLEVBQUUsV0FBVztTQUM1QixDQUFDLENBQUM7UUFDSCxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQzFHLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDdEcsQ0FBQztJQUNKLENBQUM7SUFFUyxjQUFjO1FBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDOzhHQTdGVSwyQkFBMkIsNENBMEI1QixhQUFhO2tHQTFCWiwyQkFBMkIsK01BTzNCLFNBQVMsZ0RDdkN0QixnbENBK0JBOzsyRkRDYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UseUJBQXlCOzswQkE4QmhDLE1BQU07MkJBQUMsYUFBYTs0Q0FsQmYsR0FBRztzQkFEVixTQUFTO3VCQUFDLFNBQVM7Z0JBSWIsS0FBSztzQkFEWCxLQUFLO2dCQUdDLEtBQUs7c0JBRFgsS0FBSztnQkFHQyxNQUFNO3NCQURaLEtBQUs7Z0JBR0MsSUFBSTtzQkFEVixLQUFLO2dCQUlDLE1BQU07c0JBRFosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBJbmplY3QsXG4gIHNpZ25hbCxcbiAgRGVzdHJveVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdvb2dsZU1hcCB9IGZyb20gJ0Bhbmd1bGFyL2dvb2dsZS1tYXBzJztcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIEhFX01BUF9MT0FERUQsXG4gIElGZWF0dXJlLFxuICBJRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGRlZmF1bHRGZWF0dXJlLFxuICBhZGRQb2x5Z29uVG9GZWF0dXJlLFxuICBwb2x5Z29uc0Zyb21GZWF0dXJlLFxuICBzdHJva2VTdHlsZVxufSBmcm9tICcuLi9tYXBzLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbWFwcy1kcmF3aW5nLWNvbmZpcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwcy1kcmF3aW5nLWNvbmZpcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXBzLWRyYXdpbmctY29uZmlybS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1hcHNEcmF3aW5nQ29uZmlybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBzaGFwZXM6IChnb29nbGUubWFwcy5NYXJrZXIgfCBnb29nbGUubWFwcy5Qb2x5Z29uKVtdID0gW107XG5cbiAgcHJpdmF0ZSBmZWF0dXJlPzogSUZlYXR1cmUgfCBJRmVhdHVyZUNvbGxlY3Rpb24gPSBkZWZhdWx0RmVhdHVyZSgpO1xuICBwcml2YXRlIGNvb3JkaW5hdGVzPzogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbDtcblxuICBAVmlld0NoaWxkKEdvb2dsZU1hcClcbiAgcHJpdmF0ZSBtYXA/OiBHb29nbGVNYXA7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHZhbHVlPzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbW9kZXM/OiBnb29nbGUubWFwcy5kcmF3aW5nLk92ZXJsYXlUeXBlW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjZW50ZXIgPSB7IGxhdDogMCwgbG5nOiAwIH07XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b29tID0gMztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCB8IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgb3B0aW9ucyA9IHNpZ25hbCh7fSBhcyBnb29nbGUubWFwcy5NYXBPcHRpb25zKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkZXN0cm95UmVmOiBEZXN0cm95UmVmLFxuICAgIEBJbmplY3QoSEVfTUFQX0xPQURFRCkgcHJvdGVjdGVkIG1hcExvYWRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cbiAgKSB7XG4gICAgbWFwTG9hZGVkJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZChkZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub3B0aW9ucy5zZXQoe1xuICAgICAgICBmdWxsc2NyZWVuQ29udHJvbDogZmFsc2UsXG4gICAgICAgIG1hcFR5cGVDb250cm9sOiB0cnVlLFxuICAgICAgICBzdHJlZXRWaWV3Q29udHJvbDogZmFsc2UsXG4gICAgICAgIHpvb21Db250cm9sOiB0cnVlLFxuICAgICAgICB6b29tQ29udHJvbE9wdGlvbnM6IHtcbiAgICAgICAgICBwb3NpdGlvbjogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uLlRPUF9SSUdIVFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZmVhdHVyZSA9IHRoaXMudmFsdWUgJiYgIWlzTnVtYmVyKHRoaXMudmFsdWUpID8gSlNPTi5wYXJzZSh0aGlzLnZhbHVlKSA6IHRoaXMuZmVhdHVyZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubGlzdGVuZXJzLm1hcChsaXN0ZW5lciA9PiBnb29nbGUubWFwcy5ldmVudC5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcikpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblBvbHlnb25BZGRlZChwb2x5Z29uOiBnb29nbGUubWFwcy5Qb2x5Z29uKSB7XG4gICAgdGhpcy5zaGFwZXMucHVzaChwb2x5Z29uKTtcbiAgICB0aGlzLmZlYXR1cmUgPSB0aGlzLmZlYXR1cmUgfHwgZGVmYXVsdEZlYXR1cmUoKTtcbiAgICBhZGRQb2x5Z29uVG9GZWF0dXJlKHRoaXMuZmVhdHVyZSwgcG9seWdvbik7XG4gIH1cblxuICBwcml2YXRlIG9uTWFya2VyQWRkZWQobWFya2VyOiBnb29nbGUubWFwcy5NYXJrZXIpIHtcbiAgICB0aGlzLnNoYXBlcy5wdXNoKG1hcmtlcik7XG4gICAgY29uc3QgcG9zaXRpb24gPSBtYXJrZXIuZ2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gcG9zaXRpb24/LnRvSlNPTigpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YSgpIHtcbiAgICB0aGlzLnNoYXBlcyA9IHBvbHlnb25zRnJvbUZlYXR1cmUodGhpcy5mZWF0dXJlKTtcbiAgICB0aGlzLnNoYXBlcy5mb3JFYWNoKHBvbHlnb24gPT4gcG9seWdvbi5zZXRNYXAodGhpcy5tYXA/Lmdvb2dsZU1hcCkpO1xuICAgIGNvbnN0IGRyYXdpbmdNYW5hZ2VyID0gbmV3IGdvb2dsZS5tYXBzLmRyYXdpbmcuRHJhd2luZ01hbmFnZXIoe1xuICAgICAgZHJhd2luZ0NvbnRyb2xPcHRpb25zOiB7XG4gICAgICAgIHBvc2l0aW9uOiBnb29nbGUubWFwcy5Db250cm9sUG9zaXRpb24uVE9QX0NFTlRFUixcbiAgICAgICAgZHJhd2luZ01vZGVzOiB0aGlzLm1vZGVzIHx8IFtnb29nbGUubWFwcy5kcmF3aW5nLk92ZXJsYXlUeXBlLlBPTFlHT05dXG4gICAgICB9LFxuICAgICAgcG9seWdvbk9wdGlvbnM6IHN0cm9rZVN0eWxlXG4gICAgfSk7XG4gICAgZHJhd2luZ01hbmFnZXIuc2V0TWFwKHRoaXMubWFwPy5nb29nbGVNYXApO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goXG4gICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihkcmF3aW5nTWFuYWdlciwgJ3BvbHlnb25jb21wbGV0ZScsIHBvbHlnb24gPT4gdGhpcy5vblBvbHlnb25BZGRlZChwb2x5Z29uKSlcbiAgICApO1xuICAgIHRoaXMubGlzdGVuZXJzLnB1c2goXG4gICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihkcmF3aW5nTWFuYWdlciwgJ21hcmtlcmNvbXBsZXRlJywgbWFya2VyID0+IHRoaXMub25NYXJrZXJBZGRlZChtYXJrZXIpKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFwSW5pdGlhbGl6ZWQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWREYXRhKCkpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpcm0oKSB7XG4gICAgdGhpcy5jbG9zZWQubmV4dCh0aGlzLmNvb3JkaW5hdGVzIHx8IEpTT04uc3RyaW5naWZ5KHRoaXMuZmVhdHVyZSkgfHwgJycpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMuc2hhcGVzLmZvckVhY2goc2hhcGUgPT4gc2hhcGUuc2V0TWFwKG51bGwpKTtcbiAgICB0aGlzLnNoYXBlcyA9IFtdO1xuICAgIHRoaXMuY29vcmRpbmF0ZXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mZWF0dXJlID0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwgaXMtbGFyZ2UgaXMtYWN0aXZlXCI+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1iYWNrZ3JvdW5kXCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1jYXJkXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cIm1vZGFsLWNhcmQtaGVhZFwiPlxuICAgICAgPHAgY2xhc3M9XCJtb2RhbC1jYXJkLXRpdGxlXCI+RHJhdyBvbiBNYXA8L3A+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGVsZXRlXCIgYXJpYS1sYWJlbD1cImNsb3NlXCIgKGNsaWNrKT1cImNsb3NlZC5uZXh0KHZhbHVlKVwiPjwvYnV0dG9uPlxuICAgIDwvaGVhZGVyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtY2FyZC1ib2R5IHAtMFwiPlxuICAgICAgPGdvb2dsZS1tYXBcbiAgICAgICAgKm5nSWY9XCJtYXBMb2FkZWQkIHwgYXN5bmNcIlxuICAgICAgICAobWFwSW5pdGlhbGl6ZWQpPVwibWFwSW5pdGlhbGl6ZWQoKVwiXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBbem9vbV09XCJ6b29tXCJcbiAgICAgICAgW2NlbnRlcl09XCJjZW50ZXJcIlxuICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zKClcIj48L2dvb2dsZS1tYXA+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxmb290ZXIgY2xhc3M9XCJtb2RhbC1jYXJkLWZvb3RcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtcHJpbWFyeVwiIChjbGljayk9XCJjb25maXJtKClcIj5cbiAgICAgICAgPHNwYW4+Q29uZmlybTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbiBpcy1naG9zdFwiIChjbGljayk9XCJjbG9zZWQubmV4dCh2YWx1ZSlcIj5cbiAgICAgICAgPHNwYW4+Q2xvc2U8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtZGFuZ2VyXCIgKGNsaWNrKT1cImNsZWFyKClcIj5cbiAgICAgICAgPGZhLWljb24gY2xhc3M9XCJtci0yXCIgaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxuICAgICAgICA8c3Bhbj5DbGVhcjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZm9vdGVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19