ngx-vflow 1.14.0 → 1.16.0

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.
Files changed (44) hide show
  1. package/esm2022/lib/vflow/components/alignment-helper/alignment-helper.component.mjs +103 -0
  2. package/esm2022/lib/vflow/components/node/node.component.mjs +5 -4
  3. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +8 -5
  4. package/esm2022/lib/vflow/interfaces/alignment-helper-settings.interface.mjs +2 -0
  5. package/esm2022/lib/vflow/interfaces/flow-entity.interface.mjs +1 -1
  6. package/esm2022/lib/vflow/interfaces/node.interface.mjs +13 -5
  7. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +2 -1
  8. package/esm2022/lib/vflow/interfaces/rect.mjs +10 -2
  9. package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +1 -1
  10. package/esm2022/lib/vflow/models/edge.model.mjs +4 -9
  11. package/esm2022/lib/vflow/models/node.model.mjs +51 -7
  12. package/esm2022/lib/vflow/services/draggable.service.mjs +7 -1
  13. package/esm2022/lib/vflow/services/edge-rendering.service.mjs +1 -1
  14. package/esm2022/lib/vflow/services/flow-rendering.service.mjs +9 -1
  15. package/esm2022/lib/vflow/services/flow-status.service.mjs +13 -1
  16. package/esm2022/lib/vflow/utils/is-callable.mjs +10 -0
  17. package/esm2022/lib/vflow/utils/is-vflow-component.mjs +9 -0
  18. package/esm2022/public-api.mjs +3 -1
  19. package/esm2022/testing/component-mocks/vflow-mock.component.mjs +4 -3
  20. package/esm2022/testing/provide-custom-node-mocks.mjs +3 -2
  21. package/fesm2022/ngx-vflow-testing.mjs +5 -3
  22. package/fesm2022/ngx-vflow-testing.mjs.map +1 -1
  23. package/fesm2022/ngx-vflow.mjs +387 -201
  24. package/fesm2022/ngx-vflow.mjs.map +1 -1
  25. package/lib/vflow/components/alignment-helper/alignment-helper.component.d.ts +21 -0
  26. package/lib/vflow/components/vflow/vflow.component.d.ts +3 -1
  27. package/lib/vflow/interfaces/alignment-helper-settings.interface.d.ts +4 -0
  28. package/lib/vflow/interfaces/flow-entity.interface.d.ts +2 -1
  29. package/lib/vflow/interfaces/node.interface.d.ts +2 -2
  30. package/lib/vflow/interfaces/optimization.interface.d.ts +4 -0
  31. package/lib/vflow/interfaces/rect.d.ts +7 -0
  32. package/lib/vflow/interfaces/template-context.interface.d.ts +4 -0
  33. package/lib/vflow/models/edge.model.d.ts +2 -0
  34. package/lib/vflow/models/node.model.d.ts +4 -0
  35. package/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.d.ts +1 -0
  36. package/lib/vflow/services/draggable.service.d.ts +1 -0
  37. package/lib/vflow/services/edge-rendering.service.d.ts +1 -1
  38. package/lib/vflow/services/flow-rendering.service.d.ts +4 -0
  39. package/lib/vflow/services/flow-status.service.d.ts +17 -1
  40. package/lib/vflow/utils/is-callable.d.ts +1 -0
  41. package/lib/vflow/utils/is-vflow-component.d.ts +4 -0
  42. package/package.json +1 -1
  43. package/public-api.d.ts +2 -0
  44. package/testing/component-mocks/vflow-mock.component.d.ts +3 -2
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, Injector, Input, inject, runInInjectionContext, contentChild, viewChild, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Injector, Input, inject, runInInjectionContext, contentChild, viewChild, input, } from '@angular/core';
2
2
  import { MapContextDirective } from '../../directives/map-context.directive';
3
3
  import { DraggableService } from '../../services/draggable.service';
4
4
  import { ViewportService } from '../../services/viewport.service';
@@ -38,6 +38,7 @@ import { PreviewFlowComponent } from '../preview-flow/preview-flow.component';
38
38
  import { PreviewFlowRenderStrategyService, ViewportPreviewFlowRenderStrategyService, } from '../../services/preview-flow-render-strategy.service';
39
39
  import { toLazySignal } from '../../utils/signals/to-lazy-signal';
40
40
  import { FlowRenderingService } from '../../services/flow-rendering.service';
41
+ import { AlignmentHelperComponent } from '../alignment-helper/alignment-helper.component';
41
42
  import * as i0 from "@angular/core";
42
43
  import * as i1 from "../../directives/changes-controller.directive";
43
44
  const changesControllerHostDirective = {
@@ -88,6 +89,7 @@ export class VflowComponent {
88
89
  this.keyboardService = inject(KeyboardService);
89
90
  this.injector = inject(Injector);
90
91
  this.flowRenderingService = inject(FlowRenderingService);
92
+ this.alignmentHelper = input(false);
91
93
  this.nodeModels = this.nodeRenderingService.nodes;
92
94
  this.groups = this.nodeRenderingService.groups;
93
95
  this.nonGroups = this.nodeRenderingService.nonGroups;
@@ -349,7 +351,7 @@ export class VflowComponent {
349
351
  return edge;
350
352
  }
351
353
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
352
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowComponent, isStandalone: true, selector: "vflow", inputs: { view: "view", minZoom: "minZoom", maxZoom: "maxZoom", background: "background", optimization: "optimization", entitiesSelectable: "entitiesSelectable", keyboardShortcuts: "keyboardShortcuts", connection: ["connection", "connection", (settings) => new ConnectionModel(settings)], snapGrid: "snapGrid", elevateNodesOnSelect: "elevateNodesOnSelect", elevateEdgesOnSelect: "elevateEdgesOnSelect", nodes: "nodes", edges: "edges" }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
354
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowComponent, isStandalone: true, selector: "vflow", inputs: { view: { classPropertyName: "view", publicName: "view", isSignal: false, isRequired: false, transformFunction: null }, minZoom: { classPropertyName: "minZoom", publicName: "minZoom", isSignal: false, isRequired: false, transformFunction: null }, maxZoom: { classPropertyName: "maxZoom", publicName: "maxZoom", isSignal: false, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: false, isRequired: false, transformFunction: null }, optimization: { classPropertyName: "optimization", publicName: "optimization", isSignal: false, isRequired: false, transformFunction: null }, entitiesSelectable: { classPropertyName: "entitiesSelectable", publicName: "entitiesSelectable", isSignal: false, isRequired: false, transformFunction: null }, keyboardShortcuts: { classPropertyName: "keyboardShortcuts", publicName: "keyboardShortcuts", isSignal: false, isRequired: false, transformFunction: null }, connection: { classPropertyName: "connection", publicName: "connection", isSignal: false, isRequired: false, transformFunction: (settings) => new ConnectionModel(settings) }, snapGrid: { classPropertyName: "snapGrid", publicName: "snapGrid", isSignal: false, isRequired: false, transformFunction: null }, elevateNodesOnSelect: { classPropertyName: "elevateNodesOnSelect", publicName: "elevateNodesOnSelect", isSignal: false, isRequired: false, transformFunction: null }, elevateEdgesOnSelect: { classPropertyName: "elevateEdgesOnSelect", publicName: "elevateEdgesOnSelect", isSignal: false, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: false, isRequired: true, transformFunction: null }, alignmentHelper: { classPropertyName: "alignmentHelper", publicName: "alignmentHelper", isSignal: true, isRequired: false, transformFunction: null }, edges: { classPropertyName: "edges", publicName: "edges", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
353
355
  DraggableService,
354
356
  ViewportService,
355
357
  FlowStatusService,
@@ -365,7 +367,7 @@ export class VflowComponent {
365
367
  OverlaysService,
366
368
  { provide: PreviewFlowRenderStrategyService, useClass: ViewportPreviewFlowRenderStrategyService },
367
369
  FlowRenderingService,
368
- ], queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "nodeSvgTemplateDirective", first: true, predicate: NodeSvgTemplateDirective, descendants: true, isSignal: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true, isSignal: true }, { propertyName: "spacePointContext", first: true, predicate: SpacePointContextDirective, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onNodesChange.position", "onNodesChange.position", "onNodesChange.position.single", "onNodesChange.position.single", "onNodesChange.position.many", "onNodesChange.position.many", "onNodesChange.size", "onNodesChange.size", "onNodesChange.size.single", "onNodesChange.size.single", "onNodesChange.size.many", "onNodesChange.size.many", "onNodesChange.add", "onNodesChange.add", "onNodesChange.add.single", "onNodesChange.add.single", "onNodesChange.add.many", "onNodesChange.add.many", "onNodesChange.remove", "onNodesChange.remove", "onNodesChange.remove.single", "onNodesChange.remove.single", "onNodesChange.remove.many", "onNodesChange.remove.many", "onNodesChange.select", "onNodesChange.select", "onNodesChange.select.single", "onNodesChange.select.single", "onNodesChange.select.many", "onNodesChange.select.many", "onEdgesChange", "onEdgesChange", "onEdgesChange.detached", "onEdgesChange.detached", "onEdgesChange.detached.single", "onEdgesChange.detached.single", "onEdgesChange.detached.many", "onEdgesChange.detached.many", "onEdgesChange.add", "onEdgesChange.add", "onEdgesChange.add.single", "onEdgesChange.add.single", "onEdgesChange.add.many", "onEdgesChange.add.many", "onEdgesChange.remove", "onEdgesChange.remove", "onEdgesChange.remove.single", "onEdgesChange.remove.single", "onEdgesChange.remove.many", "onEdgesChange.remove.many", "onEdgesChange.select", "onEdgesChange.select", "onEdgesChange.select.single", "onEdgesChange.select.single", "onEdgesChange.select.many", "onEdgesChange.select.many"] }], ngImport: i0, template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"], dependencies: [{ kind: "directive", type: RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: RootPointerDirective, selector: "svg[rootPointer]" }, { kind: "directive", type: FlowSizeControllerDirective, selector: "svg[flowSizeController]" }, { kind: "component", type: DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "component", type: BackgroundComponent, selector: "g[background]" }, { kind: "directive", type: MapContextDirective, selector: "g[mapContext]" }, { kind: "directive", type: SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "component", type: ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: NodeComponent, selector: "g[node]", inputs: ["model", "nodeTemplate", "nodeSvgTemplate", "groupNodeTemplate"] }, { kind: "component", type: EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PreviewFlowComponent, selector: "canvas[previewFlow]", inputs: ["width", "height"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
370
+ ], queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "nodeSvgTemplateDirective", first: true, predicate: NodeSvgTemplateDirective, descendants: true, isSignal: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true, isSignal: true }, { propertyName: "spacePointContext", first: true, predicate: SpacePointContextDirective, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onNodesChange.position", "onNodesChange.position", "onNodesChange.position.single", "onNodesChange.position.single", "onNodesChange.position.many", "onNodesChange.position.many", "onNodesChange.size", "onNodesChange.size", "onNodesChange.size.single", "onNodesChange.size.single", "onNodesChange.size.many", "onNodesChange.size.many", "onNodesChange.add", "onNodesChange.add", "onNodesChange.add.single", "onNodesChange.add.single", "onNodesChange.add.many", "onNodesChange.add.many", "onNodesChange.remove", "onNodesChange.remove", "onNodesChange.remove.single", "onNodesChange.remove.single", "onNodesChange.remove.many", "onNodesChange.remove.many", "onNodesChange.select", "onNodesChange.select", "onNodesChange.select.single", "onNodesChange.select.single", "onNodesChange.select.many", "onNodesChange.select.many", "onEdgesChange", "onEdgesChange", "onEdgesChange.detached", "onEdgesChange.detached", "onEdgesChange.detached.single", "onEdgesChange.detached.single", "onEdgesChange.detached.many", "onEdgesChange.detached.many", "onEdgesChange.add", "onEdgesChange.add", "onEdgesChange.add.single", "onEdgesChange.add.single", "onEdgesChange.add.many", "onEdgesChange.add.many", "onEdgesChange.remove", "onEdgesChange.remove", "onEdgesChange.remove.single", "onEdgesChange.remove.single", "onEdgesChange.remove.many", "onEdgesChange.remove.many", "onEdgesChange.select", "onEdgesChange.select", "onEdgesChange.select.single", "onEdgesChange.select.single", "onEdgesChange.select.many", "onEdgesChange.select.many"] }], ngImport: i0, template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n @if (alignmentHelper(); as alignmentHelper) {\n @if (alignmentHelper === true) {\n <svg:g alignmentHelper />\n } @else {\n <svg:g alignmentHelper [tolerance]=\"alignmentHelper.tolerance\" [lineColor]=\"alignmentHelper.lineColor\" />\n }\n }\n\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"], dependencies: [{ kind: "directive", type: RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: RootPointerDirective, selector: "svg[rootPointer]" }, { kind: "directive", type: FlowSizeControllerDirective, selector: "svg[flowSizeController]" }, { kind: "component", type: DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "component", type: BackgroundComponent, selector: "g[background]" }, { kind: "directive", type: MapContextDirective, selector: "g[mapContext]" }, { kind: "directive", type: SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "component", type: ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: NodeComponent, selector: "g[node]", inputs: ["model", "nodeTemplate", "nodeSvgTemplate", "groupNodeTemplate"] }, { kind: "component", type: EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PreviewFlowComponent, selector: "canvas[previewFlow]", inputs: ["width", "height"] }, { kind: "component", type: AlignmentHelperComponent, selector: "g[alignmentHelper]", inputs: ["tolerance", "lineColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
369
371
  }
370
372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, decorators: [{
371
373
  type: Component,
@@ -399,7 +401,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
399
401
  EdgeComponent,
400
402
  NgTemplateOutlet,
401
403
  PreviewFlowComponent,
402
- ], template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"] }]
404
+ AlignmentHelperComponent,
405
+ ], template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n @if (alignmentHelper(); as alignmentHelper) {\n @if (alignmentHelper === true) {\n <svg:g alignmentHelper />\n } @else {\n <svg:g alignmentHelper [tolerance]=\"alignmentHelper.tolerance\" [lineColor]=\"alignmentHelper.lineColor\" />\n }\n }\n\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"] }]
403
406
  }], propDecorators: { view: [{
404
407
  type: Input
405
408
  }], minZoom: [{
@@ -431,4 +434,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
431
434
  }], edges: [{
432
435
  type: Input
433
436
  }] } });
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdoRixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6Qix3QkFBd0IsR0FDekIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFF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RTtnQkF1QmQsS0FBSztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgY29udGVudENoaWxkLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY05vZGUsIE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL25vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hcENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21hcC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIG91dHB1dEZyb21PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRnZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWRnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRWRnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlLFxuICBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUsXG4gIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUsXG4gIE5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYWRkTm9kZXNUb0VkZ2VzIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWRkLW5vZGVzLXRvLWVkZ2VzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNwYWNlUG9pbnQsIFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmlld3BvcnRTdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29ubmVjdGlvbi1zZXR0aW5ncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlSWRlbnRpdHlDaGVja2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaWRlbnRpdHktY2hlY2tlci9yZWZlcmVuY2UtaWRlbnRpdHktY2hlY2tlcic7XG5pbXBvcnQgeyBOb2Rlc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvbm9kZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWRnZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBOb2RlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcG9uZW50LWV2ZW50LWJ1cy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhY2tncm91bmQgfSBmcm9tICcuLi8uLi90eXBlcy9iYWNrZ3JvdW5kLnR5cGUnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpdFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9maXQtdmlldy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPcHRpbWl6YXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL29wdGltaXphdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dHMgfSBmcm9tICcuLi8uLi90eXBlcy9rZXlib2FyZC1hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBLZXlib2FyZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9rZXlib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IHRyYW5zZm9ybUJhY2tncm91bmQgfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2Zvcm0tYmFja2dyb3VuZCc7XG5pbXBvcnQgeyBPdmVybGF5c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdmVybGF5cy5zZXJ2aWNlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2VkZ2UvZWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uL25vZGUvbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nvbm5lY3Rpb24vY29ubmVjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFja2dyb3VuZENvbXBvbmVudCB9IGZyb20gJy4uL2JhY2tncm91bmQvYmFja2dyb3VuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmc0NvbXBvbmVudCB9IGZyb20gJy4uL2RlZnMvZGVmcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmxvd1NpemVDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mbG93LXNpemUtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm9vdFBvaW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm9vdFN2Z0NvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvb3Qtc3ZnLWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3JlZmVyZW5jZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFNwYWNlUG9pbnRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LXNwYWNlLXBvaW50cyc7XG5pbXBvcnQgeyBnZXRJbnRlc2VjdGluZ05vZGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9kZXMnO1xuaW1wb3J0IHsgSW50ZXJzZWN0aW5nTm9kZXNPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcnNlY3Rpbmctbm9kZXMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJldmlld0Zsb3dDb21wb25lbnQgfSBmcm9tICcuLi9wcmV2aWV3LWZsb3cvcHJldmlldy1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSxcbiAgVmlld3BvcnRQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJldmlldy1mbG93LXJlbmRlci1zdHJhdGVneS5zZXJ2aWNlJztcbmltcG9ydCB7IHRvTGF6eVNpZ25hbCB9IGZyb20gJy4uLy4uL3V0aWxzL3NpZ25hbHMvdG8tbGF6eS1zaWduYWwnO1xuaW1wb3J0IHsgRmxvd1JlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXJlbmRlcmluZy5zZXJ2aWNlJztcblxuY29uc3QgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbXG4gICAgJ29uTm9kZXNDaGFuZ2UnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZCcsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdCcsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZCcsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZSxcbiAgICBOb2RlUmVuZGVyaW5nU2VydmljZSxcbiAgICBFZGdlUmVuZGVyaW5nU2VydmljZSxcbiAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIEZsb3dTZXR0aW5nc1NlcnZpY2UsXG4gICAgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlLFxuICAgIEtleWJvYXJkU2VydmljZSxcbiAgICBPdmVybGF5c1NlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSwgdXNlQ2xhc3M6IFZpZXdwb3J0UHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UgfSxcbiAgICBGbG93UmVuZGVyaW5nU2VydmljZSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbXG4gICAgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSxcbiAgICBSb290U3ZnQ29udGV4dERpcmVjdGl2ZSxcbiAgICBSb290UG9pbnRlckRpcmVjdGl2ZSxcbiAgICBGbG93U2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gICAgRGVmc0NvbXBvbmVudCxcbiAgICBCYWNrZ3JvdW5kQ29tcG9uZW50LFxuICAgIE1hcENvbnRleHREaXJlY3RpdmUsXG4gICAgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUsXG4gICAgQ29ubmVjdGlvbkNvbXBvbmVudCxcbiAgICBOb2RlQ29tcG9uZW50LFxuICAgIEVkZ2VDb21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBQcmV2aWV3Rmxvd0NvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmZsb3dDb21wb25lbnQge1xuICAvLyAjcmVnaW9uIERJXG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgZmxvd0VudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub2Rlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoTm9kZXNDaGFuZ2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlZGdlc0NoYW5nZVNlcnZpY2UgPSBpbmplY3QoRWRnZUNoYW5nZXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSk7XG4gIHByaXZhdGUgZWRnZVJlbmRlcmluZ1NlcnZpY2UgPSBpbmplY3QoRWRnZVJlbmRlcmluZ1NlcnZpY2UpO1xuICBwcml2YXRlIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG4gIHByaXZhdGUgY29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlID0gaW5qZWN0KENvbXBvbmVudEV2ZW50QnVzU2VydmljZSk7XG4gIHByaXZhdGUga2V5Ym9hcmRTZXJ2aWNlID0gaW5qZWN0KEtleWJvYXJkU2VydmljZSk7XG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIGZsb3dSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KEZsb3dSZW5kZXJpbmdTZXJ2aWNlKTtcblxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTRVRUSU5HU1xuXG4gIC8qKlxuICAgKiBTaXplIGZvciBmbG93IHZpZXdcbiAgICpcbiAgICogYWNjZXB0c1xuICAgKiAtIGFic29sdXRlIHNpemUgaW4gZm9ybWF0IFt3aWR0aCwgaGVpZ2h0XSBvclxuICAgKiAtICdhdXRvJyB0byBjb21wdXRlIHNpemUgYmFzZWQgb24gcGFyZW50IGVsZW1lbnQgc2l6ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2aWV3KHZpZXc6IFtudW1iZXIsIG51bWJlcl0gfCAnYXV0bycpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uudmlldy5zZXQodmlldyk7XG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1pblpvb20odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5taW5ab29tLnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWF4aW11bSB6b29tIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1heFpvb20odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5tYXhab29tLnNldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQmFja2dyb3VuZCBmb3IgZmxvd1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBiYWNrZ3JvdW5kKHZhbHVlOiBCYWNrZ3JvdW5kIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmQuc2V0KHRyYW5zZm9ybUJhY2tncm91bmQodmFsdWUpKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgb3B0aW1pemF0aW9uKG5ld09wdGltaXphdGlvbjogT3B0aW1pemF0aW9uKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm9wdGltaXphdGlvbi51cGRhdGUoKG9wdGltaXphdGlvbikgPT4gKHtcbiAgICAgIC4uLm9wdGltaXphdGlvbixcbiAgICAgIC4uLm5ld09wdGltaXphdGlvbixcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogR2xvYmFsIHJ1bGUgaWYgeW91IGNhbiBvciBjYW4ndCBzZWxlY3QgZW50aXRpZXNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZW50aXRpZXNTZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBrZXlib2FyZFNob3J0Y3V0cyh2YWx1ZTogS2V5Ym9hcmRTaG9ydGN1dHMpIHtcbiAgICB0aGlzLmtleWJvYXJkU2VydmljZS5zZXRTaG9ydGN1dHModmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIGZvciBjb25uZWN0aW9uIChpdCByZW5kZXJzIHdoZW4gdXNlciB0cmllcyB0byBjcmVhdGUgZWRnZSBiZXR3ZWVuIG5vZGVzKVxuICAgKlxuICAgKiBZb3UgbmVlZCB0byBwYXNzIGBDb25uZWN0aW9uU2V0dGluZ3NgIGluIHRoaXMgaW5wdXQuXG4gICAqL1xuICBASW5wdXQoe1xuICAgIHRyYW5zZm9ybTogKHNldHRpbmdzOiBDb25uZWN0aW9uU2V0dGluZ3MpID0+IG5ldyBDb25uZWN0aW9uTW9kZWwoc2V0dGluZ3MpLFxuICB9KVxuICBwdWJsaWMgc2V0IGNvbm5lY3Rpb24oY29ubmVjdGlvbjogQ29ubmVjdGlvbk1vZGVsKSB7XG4gICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24uc2V0KGNvbm5lY3Rpb24pO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25uZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuY29ubmVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNuYXAgZ3JpZCBmb3Igbm9kZSBtb3ZlbWVudC4gUGFzc2VzIGFzIFt4LCB5XVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzbmFwR3JpZCh2YWx1ZTogW251bWJlciwgbnVtYmVyXSkge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5zbmFwR3JpZC5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJhaXppbmcgei1pbmRleCBmb3Igc2VsZWN0ZWQgbm9kZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbGV2YXRlTm9kZXNPblNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbGV2YXRlTm9kZXNPblNlbGVjdC5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJhaXppbmcgei1pbmRleCBmb3Igc2VsZWN0ZWQgZWRnZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbGV2YXRlRWRnZXNPblNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbGV2YXRlRWRnZXNPblNlbGVjdC5zZXQodmFsdWUpO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE1BSU5fSU5QVVRTXG4gIC8qKlxuICAgKiBOb2RlcyB0byByZW5kZXJcbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHB1YmxpYyBzZXQgbm9kZXMobmV3Tm9kZXM6IE5vZGVbXSB8IER5bmFtaWNOb2RlW10pIHtcbiAgICBjb25zdCBtb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT5cbiAgICAgIFJlZmVyZW5jZUlkZW50aXR5Q2hlY2tlci5ub2RlcyhuZXdOb2RlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCkpLFxuICAgICk7XG5cbiAgICAvLyBUT0RPOiBjb25zaWRlciBjYWxsaW5nIG9ubHkgZm8gbmV3IG5vZGVzXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXMobW9kZWxzLCB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMoKSk7XG5cbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMuc2V0KG1vZGVscyk7XG5cbiAgICBtb2RlbHMuZm9yRWFjaCgobW9kZWwpID0+IHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UucHVsbE5vZGUobW9kZWwpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub2RlTW9kZWxzID0gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ub2RlcztcbiAgcHJvdGVjdGVkIGdyb3VwcyA9IHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UuZ3JvdXBzO1xuICBwcm90ZWN0ZWQgbm9uR3JvdXBzID0gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ub25Hcm91cHM7XG5cbiAgLyoqXG4gICAqIEVkZ2VzIHRvIHJlbmRlclxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlZGdlcyhuZXdFZGdlczogRWRnZVtdKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+XG4gICAgICBSZWZlcmVuY2VJZGVudGl0eUNoZWNrZXIuZWRnZXMobmV3RWRnZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcygpKSxcbiAgICApO1xuXG4gICAgLy8gcXVpY2sgYW5kIGRpcnR5IGJpbmRpbmcgbm9kZXMgdG8gZWRnZXNcbiAgICBhZGROb2Rlc1RvRWRnZXModGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzKCksIG5ld01vZGVscyk7XG5cbiAgICB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZWRnZXMuc2V0KG5ld01vZGVscyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZWRnZU1vZGVscyA9IHRoaXMuZWRnZVJlbmRlcmluZ1NlcnZpY2UuZWRnZXM7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE9VVFBVVFNcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgYWNjdW11bGF0ZXMgYWxsIGN1c3RvbSBub2RlIGV2ZW50c1xuICAgKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25Db21wb25lbnROb2RlRXZlbnQgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZTxhbnk+KHRoaXMuY29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlLmV2ZW50JCk7IC8vIFRPRE86IHJlc2VhcmNoIGhvdyB0byByZW1vdmUgYW55XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFRFTVBMQVRFU1xuICBwcm90ZWN0ZWQgbm9kZVRlbXBsYXRlRGlyZWN0aXZlID0gY29udGVudENoaWxkKE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBub2RlU3ZnVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoTm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKTtcblxuICBwcm90ZWN0ZWQgZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBlZGdlVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoRWRnZVRlbXBsYXRlRGlyZWN0aXZlKTtcblxuICBwcm90ZWN0ZWQgZWRnZUxhYmVsSHRtbERpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBjb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRElSRUNUSVZFU1xuICBwcm90ZWN0ZWQgbWFwQ29udGV4dCA9IHZpZXdDaGlsZChNYXBDb250ZXh0RGlyZWN0aXZlKTtcblxuICBwcm90ZWN0ZWQgc3BhY2VQb2ludENvbnRleHQgPSB2aWV3Q2hpbGQucmVxdWlyZWQoU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBTSUdOQUxfQVBJXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0LmFzUmVhZG9ubHkoKTtcblxuICAvKipcbiAgICogU2lnbmFsIGZvciByZWFkaW5nIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlID0gdG9MYXp5U2lnbmFsKHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBOb2RlQ2hhbmdlW10sXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTaWduYWwgdG8gcmVhZGluZyBlZGdlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlZGdlc0NoYW5nZSA9IHRvTGF6eVNpZ25hbCh0aGlzLmVkZ2VzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJCwge1xuICAgIGluaXRpYWxWYWx1ZTogW10gYXMgRWRnZUNoYW5nZVtdLFxuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdGlhbGl6ZWQgPSB0aGlzLmZsb3dSZW5kZXJpbmdTZXJ2aWNlLmZsb3dJbml0aWFsaXplZC5hc1JlYWRvbmx5KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFJYX0FQSVxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIHZpZXdwb3J0IGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZpZXdwb3J0Q2hhbmdlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KS5waXBlKHNraXAoMSkpOyAvLyBza2lwIGRlZmF1bHQgdmFsdWUgdGhhdCBzZXQgYnkgc2lnbmFsXG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgd2l0aCBub2RlcyBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBub2Rlc0NoYW5nZSQgPSB0aGlzLm5vZGVzQ2hhbmdlU2VydmljZS5jaGFuZ2VzJDtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlJCA9IHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbml0aWFsaXplZCQgPSB0b09ic2VydmFibGUodGhpcy5mbG93UmVuZGVyaW5nU2VydmljZS5mbG93SW5pdGlhbGl6ZWQpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgcHJvdGVjdGVkIG1hcmtlcnMgPSB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UubWFya2VycztcbiAgcHJvdGVjdGVkIG1pbmltYXAgPSB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UubWluaW1hcDtcblxuICBwcm90ZWN0ZWQgZmxvd09wdGltaXphdGlvbiA9IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5vcHRpbWl6YXRpb247XG4gIHByb3RlY3RlZCBmbG93V2lkdGggPSB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGg7XG4gIHByb3RlY3RlZCBmbG93SGVpZ2h0ID0gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodDtcblxuICAvLyAjcmVnaW9uIE1FVEhPRFNfQVBJXG4gIC8qKlxuICAgKiBDaGFuZ2Ugdmlld3BvcnQgdG8gc3BlY2lmaWVkIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB2aWV3cG9ydCB2aWV3cG9ydCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHZpZXdwb3J0VG8odmlld3BvcnQ6IFZpZXdwb3J0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7XG4gICAgICBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgc3RhdGU6IHZpZXdwb3J0LFxuICAgICAgZHVyYXRpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHpvb21cbiAgICpcbiAgICogQHBhcmFtIHpvb20gem9vbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHpvb21Ubyh6b29tOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdwb3J0U2VydmljZS53cml0YWJsZVZpZXdwb3J0LnNldCh7XG4gICAgICBjaGFuZ2VUeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgc3RhdGU6IHsgem9vbSB9LFxuICAgICAgZHVyYXRpb246IDAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0byBzcGVjaWZpZWQgY29vcmRpbmF0ZVxuICAgKlxuICAgKiBAcGFyYW0gcG9pbnQgcG9pbnQgd2hlcmUgdG8gbW92ZVxuICAgKi9cbiAgcHVibGljIHBhblRvKHBvaW50OiBQb2ludCk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHtcbiAgICAgIGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICBzdGF0ZTogcG9pbnQsXG4gICAgICBkdXJhdGlvbjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmaXRWaWV3KG9wdGlvbnM/OiBGaXRWaWV3T3B0aW9ucykge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLmZpdFZpZXcob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgYnkgaWRcbiAgICpcbiAgICogQHBhcmFtIGlkIG5vZGUgaWRcbiAgICovXG4gIHB1YmxpYyBnZXROb2RlPFQgPSB1bmtub3duPihpZDogc3RyaW5nKTogTm9kZTxUPiB8IER5bmFtaWNOb2RlPFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldE5vZGU8VD4oaWQpPy5yYXdOb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgbWV0aG9kIHRvIGdldCBkZXRhY2hlZCBlZGdlc1xuICAgKi9cbiAgcHVibGljIGdldERldGFjaGVkRWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmdldERldGFjaGVkRWRnZXMoKS5tYXAoKGUpID0+IGUuZWRnZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBwb2ludCByZWNlaXZlZCBmcm9tIGRvY3VtZW50IHRvIHBvaW50IG9uIHRoZSBmbG93XG4gICAqL1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCk6IFBvaW50O1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCwgb3B0aW9ucz86IHsgc3BhY2VzOiBmYWxzZSB9KTogUG9pbnQ7XG4gIC8qKlxuICAgKiBDb252ZXJ0IHBvaW50IHJlY2VpdmVkIGZyb20gZG9jdW1lbnQgdG8gYSBzdGFjayBvZiBzcGFjZSBwb2ludHMgb24gdGhlIGZsb3dcbiAgICogU3BhY2UgcG9pbnQgaGFzIGEgc3BhY2VOb2RlSWQsIGNvb3JkaW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGlzIG5vZGVcbiAgICovXG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50LCBvcHRpb25zPzogeyBzcGFjZXM6IHRydWUgfSk6IFNwYWNlUG9pbnRbXTtcbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQsIG9wdGlvbnM/OiB7IHNwYWNlczogYm9vbGVhbiB9KTogdW5rbm93biB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRQb2ludCA9IHRoaXMuc3BhY2VQb2ludENvbnRleHQoKS5kb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQpO1xuXG4gICAgaWYgKG9wdGlvbnM/LnNwYWNlcykge1xuICAgICAgcmV0dXJuIGdldFNwYWNlUG9pbnRzKHRyYW5zZm9ybWVkUG9pbnQsIHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UuZ3JvdXBzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFBvaW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgbm9kZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5vZGVcbiAgICpcbiAgICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZXNcbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZSB0byBjaGVjayBpbnRlcnNlY3Rpb25zIGZvclxuICAgKiBAcGFyYW0gb3B0aW9ucy5wYXJ0aWFsbHkgLSBJZiB0cnVlLCByZXR1cm5zIG5vZGVzIHRoYXQgcGFydGlhbGx5IGludGVyc2VjdC4gSWYgZmFsc2UsIG9ubHkgcmV0dXJucyBmdWxseSBpbnRlcnNlY3Rpbmcgbm9kZXNcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygbm9kZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5vZGVcbiAgICovXG4gIHB1YmxpYyBnZXRJbnRlc2VjdGluZ05vZGVzPFQ+KFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEludGVyc2VjdGluZ05vZGVzT3B0aW9ucyA9IHsgcGFydGlhbGx5OiB0cnVlIH0sXG4gICk6IE5vZGU8VD5bXSB8IER5bmFtaWNOb2RlPFQ+W10ge1xuICAgIHJldHVybiBnZXRJbnRlc2VjdGluZ05vZGVzKG5vZGVJZCwgdGhpcy5ub2RlTW9kZWxzKCksIG9wdGlvbnMpLm1hcCgobikgPT4gbi5yYXdOb2RlKSBhc1xuICAgICAgfCBOb2RlPFQ+W11cbiAgICAgIHwgRHluYW1pY05vZGU8VD5bXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG5vZGUncyBwb3NpdGlvbiB0byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiBhbm90aGVyIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZSB3aG9zZSBwb3NpdGlvbiBzaG91bGQgYmUgY29udmVydGVkXG4gICAqIEBwYXJhbSBzcGFjZU5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZSB0aGF0IGRlZmluZXMgdGhlIHRhcmdldCBjb29yZGluYXRlIHNwYWNlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiBudWxsLCByZXR1cm5zIHRoZSBwb3NpdGlvbiBpbiBnbG9iYWwgY29vcmRpbmF0ZXNcbiAgICogQHJldHVybnMge1BvaW50fSBUaGUgY29udmVydGVkIHBvc2l0aW9uLiBSZXR1cm5zIHt4OiBJbmZpbml0eSwgeTogSW5maW5pdHl9IGlmIGVpdGhlciBub2RlIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgcHVibGljIHRvTm9kZVNwYWNlKG5vZGVJZDogc3RyaW5nLCBzcGFjZU5vZGVJZDogc3RyaW5nIHwgbnVsbCk6IFBvaW50IHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ub2RlTW9kZWxzKCkuZmluZCgobikgPT4gbi5yYXdOb2RlLmlkID09PSBub2RlSWQpO1xuXG4gICAgaWYgKCFub2RlKSByZXR1cm4geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHkgfTtcblxuICAgIGlmIChzcGFjZU5vZGVJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vZGUuZ2xvYmFsUG9pbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb29yZGluYXRlU3BhY2VOb2RlID0gdGhpcy5ub2RlTW9kZWxzKCkuZmluZCgobikgPT4gbi5yYXdOb2RlLmlkID09PSBzcGFjZU5vZGVJZCk7XG5cbiAgICBpZiAoIWNvb3JkaW5hdGVTcGFjZU5vZGUpIHJldHVybiB7IHg6IEluZmluaXR5LCB5OiBJbmZpbml0eSB9O1xuXG4gICAgcmV0dXJuIGdldFNwYWNlUG9pbnRzKG5vZGUuZ2xvYmFsUG9pbnQoKSwgW2Nvb3JkaW5hdGVTcGFjZU5vZGVdKVswXTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgcHJvdGVjdGVkIHRyYWNrTm9kZXMoaWR4OiBudW1iZXIsIHsgcmF3Tm9kZTogbm9kZSB9OiBOb2RlTW9kZWwpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0VkZ2VzKGlkeDogbnVtYmVyLCB7IGVkZ2UgfTogRWRnZU1vZGVsKSB7XG4gICAgcmV0dXJuIGVkZ2U7XG4gIH1cbn1cbiIsIjxzdmc6c3ZnICNmbG93IHJvb3RTdmdSZWYgcm9vdFN2Z0NvbnRleHQgcm9vdFBvaW50ZXIgZmxvd1NpemVDb250cm9sbGVyIGNsYXNzPVwicm9vdC1zdmdcIj5cbiAgPGRlZnMgZmxvd0RlZnMgW21hcmtlcnNdPVwibWFya2VycygpXCIgLz5cblxuICA8ZyBiYWNrZ3JvdW5kIC8+XG5cbiAgPHN2ZzpnIG1hcENvbnRleHQgc3BhY2VQb2ludENvbnRleHQ+XG4gICAgPCEtLSBDb25uZWN0aW9uIC0tPlxuICAgIDxzdmc6ZyBjb25uZWN0aW9uIFttb2RlbF09XCJjb25uZWN0aW9uXCIgW3RlbXBsYXRlXT1cImNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG5cbiAgICBAaWYgKGZsb3dPcHRpbWl6YXRpb24oKS5kZXRhY2hlZEdyb3Vwc0xheWVyKSB7XG4gICAgICA8IS0tIEdyb3VwcyAtLT5cbiAgICAgIEBmb3IgKG1vZGVsIG9mIGdyb3VwcygpOyB0cmFjayB0cmFja05vZGVzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIG5vZGVcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtncm91cE5vZGVUZW1wbGF0ZV09XCJncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLSBFZGdlcyAgLS0+XG4gICAgICBAZm9yIChtb2RlbCBvZiBlZGdlTW9kZWxzKCk7IHRyYWNrIHRyYWNrRWRnZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgZWRnZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG4gICAgICB9XG4gICAgICA8IS0tIE5vZGVzIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2Ygbm9uR3JvdXBzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiIC8+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICghZmxvd09wdGltaXphdGlvbigpLmRldGFjaGVkR3JvdXBzTGF5ZXIpIHtcbiAgICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2YgZWRnZU1vZGVscygpOyB0cmFjayB0cmFja0VkZ2VzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIGVkZ2VcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtlZGdlVGVtcGxhdGVdPVwiZWRnZVRlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuICAgICAgfVxuXG4gICAgICBAZm9yIChtb2RlbCBvZiBub2RlTW9kZWxzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBNaW5pbWFwIC0tPlxuICBAaWYgKG1pbmltYXAoKTsgYXMgbWluaW1hcCkge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibWluaW1hcC50ZW1wbGF0ZSgpXCIgLz5cbiAgfVxuPC9zdmc6c3ZnPlxuXG5AaWYgKGZsb3dPcHRpbWl6YXRpb24oKS52aXJ0dWFsaXphdGlvbikge1xuICA8Y2FudmFzIHByZXZpZXdGbG93IGNsYXNzPVwicHJldmlldy1mbG93XCIgW3dpZHRoXT1cImZsb3dXaWR0aCgpXCIgW2hlaWdodF09XCJmbG93SGVpZ2h0KClcIj48L2NhbnZhcz5cbn1cbiJdfQ==
437
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLFlBQVksRUFDWixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHaEYsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw4QkFBOEIsRUFDOUIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsd0JBQXdCLEdBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFM0UsT0FBTyxFQUFF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QzNFO2dCQWFVLFFBQVE7c0JBRGxCLEtBQUs7Z0JBU0ssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQVNLLG9CQUFvQjtzQkFEOUIsS0FBSztnQkFXSyxLQUFLO3NCQURmLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQXlCZCxLQUFLO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBjb250ZW50Q2hpbGQsXG4gIHZpZXdDaGlsZCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY05vZGUsIE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL25vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hcENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21hcC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIG91dHB1dEZyb21PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRnZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWRnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRWRnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlLFxuICBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUsXG4gIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUsXG4gIE5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYWRkTm9kZXNUb0VkZ2VzIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWRkLW5vZGVzLXRvLWVkZ2VzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNwYWNlUG9pbnQsIFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmlld3BvcnRTdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29ubmVjdGlvbi1zZXR0aW5ncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlSWRlbnRpdHlDaGVja2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaWRlbnRpdHktY2hlY2tlci9yZWZlcmVuY2UtaWRlbnRpdHktY2hlY2tlcic7XG5pbXBvcnQgeyBOb2Rlc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvbm9kZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWRnZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBOb2RlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcG9uZW50LWV2ZW50LWJ1cy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhY2tncm91bmQgfSBmcm9tICcuLi8uLi90eXBlcy9iYWNrZ3JvdW5kLnR5cGUnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpdFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9maXQtdmlldy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPcHRpbWl6YXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL29wdGltaXphdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dHMgfSBmcm9tICcuLi8uLi90eXBlcy9rZXlib2FyZC1hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBLZXlib2FyZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9rZXlib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IHRyYW5zZm9ybUJhY2tncm91bmQgfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2Zvcm0tYmFja2dyb3VuZCc7XG5pbXBvcnQgeyBPdmVybGF5c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdmVybGF5cy5zZXJ2aWNlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2VkZ2UvZWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uL25vZGUvbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nvbm5lY3Rpb24vY29ubmVjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFja2dyb3VuZENvbXBvbmVudCB9IGZyb20gJy4uL2JhY2tncm91bmQvYmFja2dyb3VuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmc0NvbXBvbmVudCB9IGZyb20gJy4uL2RlZnMvZGVmcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmxvd1NpemVDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mbG93LXNpemUtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm9vdFBvaW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm9vdFN2Z0NvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvb3Qtc3ZnLWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3JlZmVyZW5jZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFNwYWNlUG9pbnRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LXNwYWNlLXBvaW50cyc7XG5pbXBvcnQgeyBnZXRJbnRlc2VjdGluZ05vZGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9kZXMnO1xuaW1wb3J0IHsgSW50ZXJzZWN0aW5nTm9kZXNPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcnNlY3Rpbmctbm9kZXMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJldmlld0Zsb3dDb21wb25lbnQgfSBmcm9tICcuLi9wcmV2aWV3LWZsb3cvcHJldmlldy1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSxcbiAgVmlld3BvcnRQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJldmlldy1mbG93LXJlbmRlci1zdHJhdGVneS5zZXJ2aWNlJztcbmltcG9ydCB7IHRvTGF6eVNpZ25hbCB9IGZyb20gJy4uLy4uL3V0aWxzL3NpZ25hbHMvdG8tbGF6eS1zaWduYWwnO1xuaW1wb3J0IHsgRmxvd1JlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsaWdubWVudEhlbHBlckNvbXBvbmVudCB9IGZyb20gJy4uL2FsaWdubWVudC1oZWxwZXIvYWxpZ25tZW50LWhlbHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxpZ25tZW50SGVscGVyU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FsaWdubWVudC1oZWxwZXItc2V0dGluZ3MuaW50ZXJmYWNlJztcblxuY29uc3QgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbXG4gICAgJ29uTm9kZXNDaGFuZ2UnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZCcsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdCcsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZCcsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZSxcbiAgICBOb2RlUmVuZGVyaW5nU2VydmljZSxcbiAgICBFZGdlUmVuZGVyaW5nU2VydmljZSxcbiAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIEZsb3dTZXR0aW5nc1NlcnZpY2UsXG4gICAgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlLFxuICAgIEtleWJvYXJkU2VydmljZSxcbiAgICBPdmVybGF5c1NlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSwgdXNlQ2xhc3M6IFZpZXdwb3J0UHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UgfSxcbiAgICBGbG93UmVuZGVyaW5nU2VydmljZSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbXG4gICAgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSxcbiAgICBSb290U3ZnQ29udGV4dERpcmVjdGl2ZSxcbiAgICBSb290UG9pbnRlckRpcmVjdGl2ZSxcbiAgICBGbG93U2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gICAgRGVmc0NvbXBvbmVudCxcbiAgICBCYWNrZ3JvdW5kQ29tcG9uZW50LFxuICAgIE1hcENvbnRleHREaXJlY3RpdmUsXG4gICAgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUsXG4gICAgQ29ubmVjdGlvbkNvbXBvbmVudCxcbiAgICBOb2RlQ29tcG9uZW50LFxuICAgIEVkZ2VDb21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBQcmV2aWV3Rmxvd0NvbXBvbmVudCxcbiAgICBBbGlnbm1lbnRIZWxwZXJDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZmbG93Q29tcG9uZW50IHtcbiAgLy8gI3JlZ2lvbiBESVxuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSk7XG4gIHByaXZhdGUgbm9kZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KE5vZGVzQ2hhbmdlU2VydmljZSk7XG4gIHByaXZhdGUgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSk7XG4gIHByaXZhdGUgbm9kZVJlbmRlcmluZ1NlcnZpY2UgPSBpbmplY3QoTm9kZVJlbmRlcmluZ1NlcnZpY2UpO1xuICBwcml2YXRlIGVkZ2VSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KEVkZ2VSZW5kZXJpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICBwcml2YXRlIGNvbXBvbmVudEV2ZW50QnVzU2VydmljZSA9IGluamVjdChDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UpO1xuICBwcml2YXRlIGtleWJvYXJkU2VydmljZSA9IGluamVjdChLZXlib2FyZFNlcnZpY2UpO1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBmbG93UmVuZGVyaW5nU2VydmljZSA9IGluamVjdChGbG93UmVuZGVyaW5nU2VydmljZSk7XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0VUVElOR1NcblxuICAvKipcbiAgICogU2l6ZSBmb3IgZmxvdyB2aWV3XG4gICAqXG4gICAqIGFjY2VwdHNcbiAgICogLSBhYnNvbHV0ZSBzaXplIGluIGZvcm1hdCBbd2lkdGgsIGhlaWdodF0gb3JcbiAgICogLSAnYXV0bycgdG8gY29tcHV0ZSBzaXplIGJhc2VkIG9uIHBhcmVudCBlbGVtZW50IHNpemVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmlldyh2aWV3OiBbbnVtYmVyLCBudW1iZXJdIHwgJ2F1dG8nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnZpZXcuc2V0KHZpZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5ab29tKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWluWm9vbS5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhab29tKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWF4Wm9vbS5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhY2tncm91bmQgZm9yIGZsb3dcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYmFja2dyb3VuZCh2YWx1ZTogQmFja2dyb3VuZCB8IHN0cmluZykge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5iYWNrZ3JvdW5kLnNldCh0cmFuc2Zvcm1CYWNrZ3JvdW5kKHZhbHVlKSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG9wdGltaXphdGlvbihuZXdPcHRpbWl6YXRpb246IE9wdGltaXphdGlvbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5vcHRpbWl6YXRpb24udXBkYXRlKChvcHRpbWl6YXRpb24pID0+ICh7XG4gICAgICAuLi5vcHRpbWl6YXRpb24sXG4gICAgICAuLi5uZXdPcHRpbWl6YXRpb24sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBydWxlIGlmIHlvdSBjYW4gb3IgY2FuJ3Qgc2VsZWN0IGVudGl0aWVzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0aWVzU2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQga2V5Ym9hcmRTaG9ydGN1dHModmFsdWU6IEtleWJvYXJkU2hvcnRjdXRzKSB7XG4gICAgdGhpcy5rZXlib2FyZFNlcnZpY2Uuc2V0U2hvcnRjdXRzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHtcbiAgICB0cmFuc2Zvcm06IChzZXR0aW5nczogQ29ubmVjdGlvblNldHRpbmdzKSA9PiBuZXcgQ29ubmVjdGlvbk1vZGVsKHNldHRpbmdzKSxcbiAgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkge1xuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uLnNldChjb25uZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwIGdyaWQgZm9yIG5vZGUgbW92ZW1lbnQuIFBhc3NlcyBhcyBbeCwgeV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc25hcEdyaWQodmFsdWU6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uuc25hcEdyaWQuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWl6aW5nIHotaW5kZXggZm9yIHNlbGVjdGVkIG5vZGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxldmF0ZU5vZGVzT25TZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZWxldmF0ZU5vZGVzT25TZWxlY3Quc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWl6aW5nIHotaW5kZXggZm9yIHNlbGVjdGVkIGVkZ2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxldmF0ZUVkZ2VzT25TZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZWxldmF0ZUVkZ2VzT25TZWxlY3Quc2V0KHZhbHVlKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10gfCBEeW5hbWljTm9kZVtdKSB7XG4gICAgY29uc3QgbW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+XG4gICAgICBSZWZlcmVuY2VJZGVudGl0eUNoZWNrZXIubm9kZXMobmV3Tm9kZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2RlcygpKSxcbiAgICApO1xuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgY2FsbGluZyBvbmx5IGZvIG5ldyBub2Rlc1xuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKG1vZGVscywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpO1xuXG4gICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzLnNldChtb2RlbHMpO1xuXG4gICAgbW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLnB1bGxOb2RlKG1vZGVsKSk7XG4gIH1cblxuICBwdWJsaWMgYWxpZ25tZW50SGVscGVyID0gaW5wdXQ8QWxpZ25tZW50SGVscGVyU2V0dGluZ3MgfCBib29sZWFuPihmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVNb2RlbHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vZGVzO1xuICBwcm90ZWN0ZWQgZ3JvdXBzID0gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ncm91cHM7XG4gIHByb3RlY3RlZCBub25Hcm91cHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vbkdyb3VwcztcblxuICAvKipcbiAgICogRWRnZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVkZ2VzKG5ld0VkZ2VzOiBFZGdlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT5cbiAgICAgIFJlZmVyZW5jZUlkZW50aXR5Q2hlY2tlci5lZGdlcyhuZXdFZGdlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpLFxuICAgICk7XG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMoKSwgbmV3TW9kZWxzKTtcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGdlTW9kZWxzID0gdGhpcy5lZGdlUmVuZGVyaW5nU2VydmljZS5lZGdlcztcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUU1xuICAvKipcbiAgICogRXZlbnQgdGhhdCBhY2N1bXVsYXRlcyBhbGwgY3VzdG9tIG5vZGUgZXZlbnRzXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbkNvbXBvbmVudE5vZGVFdmVudCA9IG91dHB1dEZyb21PYnNlcnZhYmxlPGFueT4odGhpcy5jb21wb25lbnRFdmVudEJ1c1NlcnZpY2UuZXZlbnQkKTsgLy8gVE9ETzogcmVzZWFyY2ggaG93IHRvIHJlbW92ZSBhbnlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gVEVNUExBVEVTXG4gIHByb3RlY3RlZCBub2RlVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChOb2RlU3ZnVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChFZGdlVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBlZGdlTGFiZWxIdG1sRGlyZWN0aXZlID0gY29udGVudENoaWxkKEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBESVJFQ1RJVkVTXG4gIHByb3RlY3RlZCBtYXBDb250ZXh0ID0gdmlld0NoaWxkKE1hcENvbnRleHREaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBzcGFjZVBvaW50Q29udGV4dCA9IHZpZXdDaGlsZC5yZXF1aXJlZChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNJR05BTF9BUElcbiAgLyoqXG4gICAqIFNpZ25hbCBmb3IgcmVhZGluZyB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQuYXNSZWFkb25seSgpO1xuXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UgPSB0b0xhenlTaWduYWwodGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHtcbiAgICBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFNpZ25hbCB0byByZWFkaW5nIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlID0gdG9MYXp5U2lnbmFsKHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10sXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbml0aWFsaXplZCA9IHRoaXMuZmxvd1JlbmRlcmluZ1NlcnZpY2UuZmxvd0luaXRpYWxpemVkLmFzUmVhZG9ubHkoKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpLnBpcGUoc2tpcCgxKSk7IC8vIHNraXAgZGVmYXVsdCB2YWx1ZSB0aGF0IHNldCBieSBzaWduYWxcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlJCA9IHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggZWRnZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXNDaGFuZ2UkID0gdGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGluaXRpYWxpemVkJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmZsb3dSZW5kZXJpbmdTZXJ2aWNlLmZsb3dJbml0aWFsaXplZCk7XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzO1xuICBwcm90ZWN0ZWQgbWluaW1hcCA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5taW5pbWFwO1xuXG4gIHByb3RlY3RlZCBmbG93T3B0aW1pemF0aW9uID0gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm9wdGltaXphdGlvbjtcbiAgcHJvdGVjdGVkIGZsb3dXaWR0aCA9IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dXaWR0aDtcbiAgcHJvdGVjdGVkIGZsb3dIZWlnaHQgPSB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93SGVpZ2h0O1xuXG4gIC8vICNyZWdpb24gTUVUSE9EU19BUElcbiAgLyoqXG4gICAqIENoYW5nZSB2aWV3cG9ydCB0byBzcGVjaWZpZWQgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHZpZXdwb3J0IHZpZXdwb3J0IHN0YXRlXG4gICAqL1xuICBwdWJsaWMgdmlld3BvcnRUbyh2aWV3cG9ydDogVmlld3BvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHtcbiAgICAgIGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICBzdGF0ZTogdmlld3BvcnQsXG4gICAgICBkdXJhdGlvbjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHtcbiAgICAgIGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICBzdGF0ZTogeyB6b29tIH0sXG4gICAgICBkdXJhdGlvbjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHNwZWNpZmllZCBjb29yZGluYXRlXG4gICAqXG4gICAqIEBwYXJhbSBwb2ludCBwb2ludCB3aGVyZSB0byBtb3ZlXG4gICAqL1xuICBwdWJsaWMgcGFuVG8ocG9pbnQ6IFBvaW50KTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoe1xuICAgICAgY2hhbmdlVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgIHN0YXRlOiBwb2ludCxcbiAgICAgIGR1cmF0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGZpdFZpZXcob3B0aW9ucz86IEZpdFZpZXdPcHRpb25zKSB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2UuZml0VmlldyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbm9kZSBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0gaWQgbm9kZSBpZFxuICAgKi9cbiAgcHVibGljIGdldE5vZGU8VCA9IHVua25vd24+KGlkOiBzdHJpbmcpOiBOb2RlPFQ+IHwgRHluYW1pY05vZGU8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0Tm9kZTxUPihpZCk/LnJhd05vZGU7XG4gIH1cblxuICAvKipcbiAgICogU3luYyBtZXRob2QgdG8gZ2V0IGRldGFjaGVkIGVkZ2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGV0YWNoZWRFZGdlcygpOiBFZGdlW10ge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0RGV0YWNoZWRFZGdlcygpLm1hcCgoZSkgPT4gZS5lZGdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHBvaW50IHJlY2VpdmVkIGZyb20gZG9jdW1lbnQgdG8gcG9pbnQgb24gdGhlIGZsb3dcbiAgICovXG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50KTogUG9pbnQ7XG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50LCBvcHRpb25zPzogeyBzcGFjZXM6IGZhbHNlIH0pOiBQb2ludDtcbiAgLyoqXG4gICAqIENvbnZlcnQgcG9pbnQgcmVjZWl2ZWQgZnJvbSBkb2N1bWVudCB0byBhIHN0YWNrIG9mIHNwYWNlIHBvaW50cyBvbiB0aGUgZmxvd1xuICAgKiBTcGFjZSBwb2ludCBoYXMgYSBzcGFjZU5vZGVJZCwgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgbm9kZVxuICAgKi9cbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQsIG9wdGlvbnM/OiB7IHNwYWNlczogdHJ1ZSB9KTogU3BhY2VQb2ludFtdO1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCwgb3B0aW9ucz86IHsgc3BhY2VzOiBib29sZWFuIH0pOiB1bmtub3duIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFBvaW50ID0gdGhpcy5zcGFjZVBvaW50Q29udGV4dCgpLmRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludCk7XG5cbiAgICBpZiAob3B0aW9ucz8uc3BhY2VzKSB7XG4gICAgICByZXR1cm4gZ2V0U3BhY2VQb2ludHModHJhbnNmb3JtZWRQb2ludCwgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ncm91cHMoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkUG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBub2RlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgKlxuICAgKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2Rlc1xuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHRvIGNoZWNrIGludGVyc2VjdGlvbnMgZm9yXG4gICAqIEBwYXJhbSBvcHRpb25zLnBhcnRpYWxseSAtIElmIHRydWUsIHJldHVybnMgbm9kZXMgdGhhdCBwYXJ0aWFsbHkgaW50ZXJzZWN0LiBJZiBmYWxzZSwgb25seSByZXR1cm5zIGZ1bGx5IGludGVyc2VjdGluZyBub2Rlc1xuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBub2RlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgKi9cbiAgcHVibGljIGdldEludGVzZWN0aW5nTm9kZXM8VD4oXG4gICAgbm9kZUlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSW50ZXJzZWN0aW5nTm9kZXNPcHRpb25zID0geyBwYXJ0aWFsbHk6IHRydWUgfSxcbiAgKTogTm9kZTxUPltdIHwgRHluYW1pY05vZGU8VD5bXSB7XG4gICAgcmV0dXJuIGdldEludGVzZWN0aW5nTm9kZXMobm9kZUlkLCB0aGlzLm5vZGVNb2RlbHMoKSwgb3B0aW9ucykubWFwKChuKSA9PiBuLnJhd05vZGUpIGFzXG4gICAgICB8IE5vZGU8VD5bXVxuICAgICAgfCBEeW5hbWljTm9kZTxUPltdO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgbm9kZSdzIHBvc2l0aW9uIHRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIGFub3RoZXIgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgICogQHBhcmFtIHNwYWNlTm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHRoYXQgZGVmaW5lcyB0aGUgdGFyZ2V0IGNvb3JkaW5hdGUgc3BhY2UuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIG51bGwsIHJldHVybnMgdGhlIHBvc2l0aW9uIGluIGdsb2JhbCBjb29yZGluYXRlc1xuICAgKiBAcmV0dXJucyB7UG9pbnR9IFRoZSBjb252ZXJ0ZWQgcG9zaXRpb24uIFJldHVybnMge3g6IEluZmluaXR5LCB5OiBJbmZpbml0eX0gaWYgZWl0aGVyIG5vZGUgaXMgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgdG9Ob2RlU3BhY2Uobm9kZUlkOiBzdHJpbmcsIHNwYWNlTm9kZUlkOiBzdHJpbmcgfCBudWxsKTogUG9pbnQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVNb2RlbHMoKS5maW5kKChuKSA9PiBuLnJhd05vZGUuaWQgPT09IG5vZGVJZCk7XG5cbiAgICBpZiAoIW5vZGUpIHJldHVybiB7IHg6IEluZmluaXR5LCB5OiBJbmZpbml0eSB9O1xuXG4gICAgaWYgKHNwYWNlTm9kZUlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbm9kZS5nbG9iYWxQb2ludCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvb3JkaW5hdGVTcGFjZU5vZGUgPSB0aGlzLm5vZGVNb2RlbHMoKS5maW5kKChuKSA9PiBuLnJhd05vZGUuaWQgPT09IHNwYWNlTm9kZUlkKTtcblxuICAgIGlmICghY29vcmRpbmF0ZVNwYWNlTm9kZSkgcmV0dXJuIHsgeDogSW5maW5pdHksIHk6IEluZmluaXR5IH07XG5cbiAgICByZXR1cm4gZ2V0U3BhY2VQb2ludHMobm9kZS5nbG9iYWxQb2ludCgpLCBbY29vcmRpbmF0ZVNwYWNlTm9kZV0pWzBdO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyByYXdOb2RlOiBub2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrRWRnZXMoaWR4OiBudW1iZXIsIHsgZWRnZSB9OiBFZGdlTW9kZWwpIHtcbiAgICByZXR1cm4gZWRnZTtcbiAgfVxufVxuIiwiPHN2ZzpzdmcgI2Zsb3cgcm9vdFN2Z1JlZiByb290U3ZnQ29udGV4dCByb290UG9pbnRlciBmbG93U2l6ZUNvbnRyb2xsZXIgY2xhc3M9XCJyb290LXN2Z1wiPlxuICA8ZGVmcyBmbG93RGVmcyBbbWFya2Vyc109XCJtYXJrZXJzKClcIiAvPlxuXG4gIDxnIGJhY2tncm91bmQgLz5cblxuICA8c3ZnOmcgbWFwQ29udGV4dCBzcGFjZVBvaW50Q29udGV4dD5cbiAgICBAaWYgKGFsaWdubWVudEhlbHBlcigpOyBhcyBhbGlnbm1lbnRIZWxwZXIpIHtcbiAgICAgIEBpZiAoYWxpZ25tZW50SGVscGVyID09PSB0cnVlKSB7XG4gICAgICAgIDxzdmc6ZyBhbGlnbm1lbnRIZWxwZXIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3ZnOmcgYWxpZ25tZW50SGVscGVyIFt0b2xlcmFuY2VdPVwiYWxpZ25tZW50SGVscGVyLnRvbGVyYW5jZVwiIFtsaW5lQ29sb3JdPVwiYWxpZ25tZW50SGVscGVyLmxpbmVDb2xvclwiIC8+XG4gICAgICB9XG4gICAgfVxuXG4gICAgPCEtLSBDb25uZWN0aW9uIC0tPlxuICAgIDxzdmc6ZyBjb25uZWN0aW9uIFttb2RlbF09XCJjb25uZWN0aW9uXCIgW3RlbXBsYXRlXT1cImNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG5cbiAgICBAaWYgKGZsb3dPcHRpbWl6YXRpb24oKS5kZXRhY2hlZEdyb3Vwc0xheWVyKSB7XG4gICAgICA8IS0tIEdyb3VwcyAtLT5cbiAgICAgIEBmb3IgKG1vZGVsIG9mIGdyb3VwcygpOyB0cmFjayB0cmFja05vZGVzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIG5vZGVcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtncm91cE5vZGVUZW1wbGF0ZV09XCJncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLSBFZGdlcyAgLS0+XG4gICAgICBAZm9yIChtb2RlbCBvZiBlZGdlTW9kZWxzKCk7IHRyYWNrIHRyYWNrRWRnZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgZWRnZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG4gICAgICB9XG4gICAgICA8IS0tIE5vZGVzIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2Ygbm9uR3JvdXBzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiIC8+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICghZmxvd09wdGltaXphdGlvbigpLmRldGFjaGVkR3JvdXBzTGF5ZXIpIHtcbiAgICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2YgZWRnZU1vZGVscygpOyB0cmFjayB0cmFja0VkZ2VzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIGVkZ2VcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtlZGdlVGVtcGxhdGVdPVwiZWRnZVRlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuICAgICAgfVxuXG4gICAgICBAZm9yIChtb2RlbCBvZiBub2RlTW9kZWxzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBNaW5pbWFwIC0tPlxuICBAaWYgKG1pbmltYXAoKTsgYXMgbWluaW1hcCkge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibWluaW1hcC50ZW1wbGF0ZSgpXCIgLz5cbiAgfVxuPC9zdmc6c3ZnPlxuXG5AaWYgKGZsb3dPcHRpbWl6YXRpb24oKS52aXJ0dWFsaXphdGlvbikge1xuICA8Y2FudmFzIHByZXZpZXdGbG93IGNsYXNzPVwicHJldmlldy1mbG93XCIgW3dpZHRoXT1cImZsb3dXaWR0aCgpXCIgW2hlaWdodF09XCJmbG93SGVpZ2h0KClcIj48L2NhbnZhcz5cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ25tZW50LWhlbHBlci1zZXR0aW5ncy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9hbGlnbm1lbnQtaGVscGVyLXNldHRpbmdzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBbGlnbm1lbnRIZWxwZXJTZXR0aW5ncyB7XG4gIHRvbGVyYW5jZTogbnVtYmVyO1xuICBsaW5lQ29sb3I6IHN0cmluZztcbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1lbnRpdHkuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2ludGVyZmFjZXMvZmxvdy1lbnRpdHkuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dFbnRpdHkge1xuICBzZWxlY3RlZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj47XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1lbnRpdHkuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2ludGVyZmFjZXMvZmxvdy1lbnRpdHkuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0VudGl0eSB7XG4gIHNlbGVjdGVkOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgc2hvdWxkTG9hZDogU2lnbmFsPGJvb2xlYW4+O1xufVxuIl19
@@ -1,5 +1,5 @@
1
- import { CustomNodeComponent } from '../public-components/custom-node/custom-node.component';
2
- import { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component';
1
+ import { isCallable } from '../utils/is-callable';
2
+ import { isCustomDynamicNodeComponent, isCustomNodeComponent } from '../utils/is-vflow-component';
3
3
  export function isStaticNode(node) {
4
4
  return typeof node.point !== 'function';
5
5
  }
@@ -7,10 +7,18 @@ export function isDynamicNode(node) {
7
7
  return typeof node.point === 'function';
8
8
  }
9
9
  export function isComponentStaticNode(node) {
10
- return Object.prototype.isPrototypeOf.call(CustomNodeComponent, node.type);
10
+ if (isCustomNodeComponent(node.type)) {
11
+ return true;
12
+ }
13
+ // Check if the type is a function with dynamic import
14
+ return isCallable(node.type) && !isCallable(node.point);
11
15
  }
12
16
  export function isComponentDynamicNode(node) {
13
- return Object.prototype.isPrototypeOf.call(CustomDynamicNodeComponent, node.type);
17
+ if (isCustomDynamicNodeComponent(node.type)) {
18
+ return true;
19
+ }
20
+ // Check if the type is a function with dynamic import
21
+ return isCallable(node.type) && isCallable(node.point);
14
22
  }
15
23
  export function isTemplateStaticNode(node) {
16
24
  return node.type === 'html-template';
@@ -42,4 +50,4 @@ export function isTemplateStaticGroupNode(node) {
42
50
  export function isTemplateDynamicGroupNode(node) {
43
51
  return node.type === 'template-group';
44
52
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQXlIcEgsTUFBTSxVQUFVLFlBQVksQ0FBSSxJQUE4QjtJQUM1RCxPQUFPLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUksSUFBOEI7SUFDN0QsT0FBTyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUksSUFBYTtJQUNwRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBSSxJQUFvQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBSSxJQUFhO0lBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBSSxJQUFvQjtJQUMzRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUksSUFBYTtJQUN0RCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUksSUFBb0I7SUFDOUQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVU7SUFDNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQWlCO0lBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxJQUFVO0lBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFpQjtJQUN6RCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUksSUFBYTtJQUN4RCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBSSxJQUFvQjtJQUNoRSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4vcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEN1c3RvbU5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tbm9kZS9jdXN0b20tbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tRHluYW1pY05vZGVDb21wb25lbnQgfSBmcm9tICcuLi9wdWJsaWMtY29tcG9uZW50cy9jdXN0b20tZHluYW1pYy1ub2RlL2N1c3RvbS1keW5hbWljLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVQcmV2aWV3IH0gZnJvbSAnLi9ub2RlLXByZXZpZXcuaW50ZXJmYWNlJztcblxuZXhwb3J0IHR5cGUgTm9kZTxUID0gYW55PiA9XG4gIHwgRGVmYXVsdE5vZGVcbiAgfCBIdG1sVGVtcGxhdGVOb2RlPFQ+XG4gIHwgU3ZnVGVtcGxhdGVOb2RlPFQ+XG4gIHwgQ29tcG9uZW50Tm9kZTxUPlxuICB8IERlZmF1bHRHcm91cE5vZGVcbiAgfCBUZW1wbGF0ZUdyb3VwTm9kZTxUPjtcblxuZXhwb3J0IHR5cGUgRHluYW1pY05vZGU8VCA9IGFueT4gPVxuICB8IERlZmF1bHREeW5hbWljTm9kZVxuICB8IEh0bWxUZW1wbGF0ZUR5bmFtaWNOb2RlPFQ+XG4gIHwgU3ZnVGVtcGxhdGVEeW5hbWljTm9kZTxUPlxuICB8IENvbXBvbmVudER5bmFtaWNOb2RlPFQ+XG4gIHwgRGVmYXVsdER5bmFtaWNHcm91cE5vZGVcbiAgfCBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBvaW50OiBQb2ludDtcbiAgZHJhZ2dhYmxlPzogYm9vbGVhbjtcbiAgcGFyZW50SWQ/OiBzdHJpbmcgfCBudWxsO1xuICBwcmV2aWV3PzogTm9kZVByZXZpZXc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkRHluYW1pY05vZGUge1xuICBpZDogc3RyaW5nO1xuICBwb2ludDogV3JpdGFibGVTaWduYWw8UG9pbnQ+O1xuICBkcmFnZ2FibGU/OiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgcGFyZW50SWQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgcHJldmlldz86IFdyaXRhYmxlU2lnbmFsPE5vZGVQcmV2aWV3Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Tm9kZSBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdER5bmFtaWNOb2RlIGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIHRleHQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuICB3aWR0aD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGhlaWdodD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbFRlbXBsYXRlTm9kZTxUID0gYW55PiBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnaHRtbC10ZW1wbGF0ZSc7XG4gIGRhdGE/OiBUO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1RlbXBsYXRlTm9kZTxUID0gYW55PiBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnc3ZnLXRlbXBsYXRlJztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGRhdGE/OiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxUZW1wbGF0ZUR5bmFtaWNOb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnaHRtbC10ZW1wbGF0ZSc7XG4gIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxUPjtcbiAgd2lkdGg/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBoZWlnaHQ/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1RlbXBsYXRlRHluYW1pY05vZGU8VCA9IGFueT4gZXh0ZW5kcyBTaGFyZWREeW5hbWljTm9kZSB7XG4gIHR5cGU6ICdzdmctdGVtcGxhdGUnO1xuICB3aWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbiAgaGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBkYXRhPzogV3JpdGFibGVTaWduYWw8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdEdyb3VwTm9kZSBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnZGVmYXVsdC1ncm91cCc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbiAgcmVzaXphYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RHluYW1pY0dyb3VwTm9kZSBleHRlbmRzIFNoYXJlZER5bmFtaWNOb2RlIHtcbiAgdHlwZTogJ2RlZmF1bHQtZ3JvdXAnO1xuICB3aWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbiAgaGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBjb2xvcj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4gIHJlc2l6YWJsZT86IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlR3JvdXBOb2RlPFQ+IGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6ICd0ZW1wbGF0ZS1ncm91cCc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkYXRhPzogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD4gZXh0ZW5kcyBTaGFyZWREeW5hbWljTm9kZSB7XG4gIHR5cGU6ICd0ZW1wbGF0ZS1ncm91cCc7XG4gIHdpZHRoOiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBoZWlnaHQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnROb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6IFR5cGU8Q3VzdG9tTm9kZUNvbXBvbmVudDxUPj47XG4gIGRhdGE/OiBUO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudER5bmFtaWNOb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiBUeXBlPEN1c3RvbUR5bmFtaWNOb2RlQ29tcG9uZW50PFQ+PjtcbiAgZGF0YT86IFdyaXRhYmxlU2lnbmFsPFQ+O1xuICB3aWR0aD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGhlaWdodD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YXRpY05vZGU8VD4obm9kZTogTm9kZTxUPiB8IER5bmFtaWNOb2RlPFQ+KTogbm9kZSBpcyBOb2RlPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiBub2RlLnBvaW50ICE9PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEeW5hbWljTm9kZTxUPihub2RlOiBOb2RlPFQ+IHwgRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIER5bmFtaWNOb2RlPFQ+IHtcbiAgcmV0dXJuIHR5cGVvZiBub2RlLnBvaW50ID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnRTdGF0aWNOb2RlPFQ+KG5vZGU6IE5vZGU8VD4pOiBub2RlIGlzIENvbXBvbmVudE5vZGU8VD4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mLmNhbGwoQ3VzdG9tTm9kZUNvbXBvbmVudCwgbm9kZS50eXBlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50RHluYW1pY05vZGU8VD4obm9kZTogRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIENvbXBvbmVudER5bmFtaWNOb2RlPFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZi5jYWxsKEN1c3RvbUR5bmFtaWNOb2RlQ29tcG9uZW50LCBub2RlLnR5cGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZVN0YXRpY05vZGU8VD4obm9kZTogTm9kZTxUPik6IG5vZGUgaXMgSHRtbFRlbXBsYXRlTm9kZTxUPiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVEeW5hbWljTm9kZTxUPihub2RlOiBEeW5hbWljTm9kZTxUPik6IG5vZGUgaXMgSHRtbFRlbXBsYXRlRHluYW1pY05vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N2Z1RlbXBsYXRlU3RhdGljTm9kZTxUPihub2RlOiBOb2RlPFQ+KTogbm9kZSBpcyBTdmdUZW1wbGF0ZU5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnc3ZnLXRlbXBsYXRlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3ZnVGVtcGxhdGVEeW5hbWljTm9kZTxUPihub2RlOiBEeW5hbWljTm9kZTxUPik6IG5vZGUgaXMgU3ZnVGVtcGxhdGVEeW5hbWljTm9kZTxUPiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdodG1sLXRlbXBsYXRlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdFN0YXRpY05vZGUobm9kZTogTm9kZSk6IG5vZGUgaXMgRGVmYXVsdE5vZGUge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnZGVmYXVsdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmF1bHREeW5hbWljTm9kZShub2RlOiBEeW5hbWljTm9kZSk6IG5vZGUgaXMgRGVmYXVsdER5bmFtaWNOb2RlIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RlZmF1bHQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZhdWx0U3RhdGljR3JvdXBOb2RlKG5vZGU6IE5vZGUpOiBub2RlIGlzIERlZmF1bHRHcm91cE5vZGUge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmF1bHREeW5hbWljR3JvdXBOb2RlKG5vZGU6IER5bmFtaWNOb2RlKTogbm9kZSBpcyBEZWZhdWx0RHluYW1pY0dyb3VwTm9kZSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVTdGF0aWNHcm91cE5vZGU8VD4obm9kZTogTm9kZTxUPik6IG5vZGUgaXMgVGVtcGxhdGVHcm91cE5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD4obm9kZTogRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIFRlbXBsYXRlRHluYW1pY0dyb3VwTm9kZTxUPiB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCc7XG59XG4iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy9ub2RlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUF3SGxHLE1BQU0sVUFBVSxZQUFZLENBQUksSUFBOEI7SUFDNUQsT0FBTyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFJLElBQThCO0lBQzdELE9BQU8sT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQztBQUMxQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFJLElBQWE7SUFDcEQsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFJLElBQW9CO0lBQzVELElBQUksNEJBQTRCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUksSUFBYTtJQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUksSUFBb0I7SUFDM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFJLElBQWE7SUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFJLElBQW9CO0lBQzlELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFVO0lBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUFpQjtJQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsSUFBVTtJQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBaUI7SUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFJLElBQWE7SUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUksSUFBb0I7SUFDaEUsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDdXN0b21Ob2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vcHVibGljLWNvbXBvbmVudHMvY3VzdG9tLW5vZGUvY3VzdG9tLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbUR5bmFtaWNOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vcHVibGljLWNvbXBvbmVudHMvY3VzdG9tLWR5bmFtaWMtbm9kZS9jdXN0b20tZHluYW1pYy1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlUHJldmlldyB9IGZyb20gJy4vbm9kZS1wcmV2aWV3LmludGVyZmFjZSc7XG5pbXBvcnQgeyBpc0NhbGxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvaXMtY2FsbGFibGUnO1xuaW1wb3J0IHsgaXNDdXN0b21EeW5hbWljTm9kZUNvbXBvbmVudCwgaXNDdXN0b21Ob2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvaXMtdmZsb3ctY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgTm9kZTxUID0gYW55PiA9XG4gIHwgRGVmYXVsdE5vZGVcbiAgfCBIdG1sVGVtcGxhdGVOb2RlPFQ+XG4gIHwgU3ZnVGVtcGxhdGVOb2RlPFQ+XG4gIHwgQ29tcG9uZW50Tm9kZTxUPlxuICB8IERlZmF1bHRHcm91cE5vZGVcbiAgfCBUZW1wbGF0ZUdyb3VwTm9kZTxUPjtcblxuZXhwb3J0IHR5cGUgRHluYW1pY05vZGU8VCA9IGFueT4gPVxuICB8IERlZmF1bHREeW5hbWljTm9kZVxuICB8IEh0bWxUZW1wbGF0ZUR5bmFtaWNOb2RlPFQ+XG4gIHwgU3ZnVGVtcGxhdGVEeW5hbWljTm9kZTxUPlxuICB8IENvbXBvbmVudER5bmFtaWNOb2RlPFQ+XG4gIHwgRGVmYXVsdER5bmFtaWNHcm91cE5vZGVcbiAgfCBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBvaW50OiBQb2ludDtcbiAgZHJhZ2dhYmxlPzogYm9vbGVhbjtcbiAgcGFyZW50SWQ/OiBzdHJpbmcgfCBudWxsO1xuICBwcmV2aWV3PzogTm9kZVByZXZpZXc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkRHluYW1pY05vZGUge1xuICBpZDogc3RyaW5nO1xuICBwb2ludDogV3JpdGFibGVTaWduYWw8UG9pbnQ+O1xuICBkcmFnZ2FibGU/OiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgcGFyZW50SWQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgcHJldmlldz86IFdyaXRhYmxlU2lnbmFsPE5vZGVQcmV2aWV3Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Tm9kZSBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdER5bmFtaWNOb2RlIGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnZGVmYXVsdCc7XG4gIHRleHQ/OiBXcml0YWJsZVNpZ25hbDxzdHJpbmc+O1xuICB3aWR0aD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGhlaWdodD86IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbFRlbXBsYXRlTm9kZTxUID0gYW55PiBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnaHRtbC10ZW1wbGF0ZSc7XG4gIGRhdGE/OiBUO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1RlbXBsYXRlTm9kZTxUID0gYW55PiBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnc3ZnLXRlbXBsYXRlJztcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGRhdGE/OiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxUZW1wbGF0ZUR5bmFtaWNOb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiAnaHRtbC10ZW1wbGF0ZSc7XG4gIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxUPjtcbiAgd2lkdGg/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBoZWlnaHQ/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z1RlbXBsYXRlRHluYW1pY05vZGU8VCA9IGFueT4gZXh0ZW5kcyBTaGFyZWREeW5hbWljTm9kZSB7XG4gIHR5cGU6ICdzdmctdGVtcGxhdGUnO1xuICB3aWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbiAgaGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBkYXRhPzogV3JpdGFibGVTaWduYWw8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdEdyb3VwTm9kZSBleHRlbmRzIFNoYXJlZE5vZGUge1xuICB0eXBlOiAnZGVmYXVsdC1ncm91cCc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbiAgcmVzaXphYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RHluYW1pY0dyb3VwTm9kZSBleHRlbmRzIFNoYXJlZER5bmFtaWNOb2RlIHtcbiAgdHlwZTogJ2RlZmF1bHQtZ3JvdXAnO1xuICB3aWR0aDogV3JpdGFibGVTaWduYWw8bnVtYmVyPjtcbiAgaGVpZ2h0OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBjb2xvcj86IFdyaXRhYmxlU2lnbmFsPHN0cmluZz47XG4gIHJlc2l6YWJsZT86IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlR3JvdXBOb2RlPFQ+IGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6ICd0ZW1wbGF0ZS1ncm91cCc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICBkYXRhPzogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD4gZXh0ZW5kcyBTaGFyZWREeW5hbWljTm9kZSB7XG4gIHR5cGU6ICd0ZW1wbGF0ZS1ncm91cCc7XG4gIHdpZHRoOiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBoZWlnaHQ6IFdyaXRhYmxlU2lnbmFsPG51bWJlcj47XG4gIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnROb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkTm9kZSB7XG4gIHR5cGU6IFR5cGU8Q3VzdG9tTm9kZUNvbXBvbmVudDxUPj4gfCAoKCkgPT4gUHJvbWlzZTxUeXBlPEN1c3RvbU5vZGVDb21wb25lbnQ8VD4+Pik7XG4gIGRhdGE/OiBUO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudER5bmFtaWNOb2RlPFQgPSBhbnk+IGV4dGVuZHMgU2hhcmVkRHluYW1pY05vZGUge1xuICB0eXBlOiBUeXBlPEN1c3RvbUR5bmFtaWNOb2RlQ29tcG9uZW50PFQ+PiB8ICgoKSA9PiBQcm9taXNlPFR5cGU8Q3VzdG9tRHluYW1pY05vZGVDb21wb25lbnQ8VD4+Pik7XG4gIGRhdGE/OiBXcml0YWJsZVNpZ25hbDxUPjtcbiAgd2lkdGg/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xuICBoZWlnaHQ/OiBXcml0YWJsZVNpZ25hbDxudW1iZXI+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdGF0aWNOb2RlPFQ+KG5vZGU6IE5vZGU8VD4gfCBEeW5hbWljTm9kZTxUPik6IG5vZGUgaXMgTm9kZTxUPiB7XG4gIHJldHVybiB0eXBlb2Ygbm9kZS5wb2ludCAhPT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRHluYW1pY05vZGU8VD4obm9kZTogTm9kZTxUPiB8IER5bmFtaWNOb2RlPFQ+KTogbm9kZSBpcyBEeW5hbWljTm9kZTxUPiB7XG4gIHJldHVybiB0eXBlb2Ygbm9kZS5wb2ludCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50U3RhdGljTm9kZTxUPihub2RlOiBOb2RlPFQ+KTogbm9kZSBpcyBDb21wb25lbnROb2RlPFQ+IHtcbiAgaWYgKGlzQ3VzdG9tTm9kZUNvbXBvbmVudChub2RlLnR5cGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgdHlwZSBpcyBhIGZ1bmN0aW9uIHdpdGggZHluYW1pYyBpbXBvcnRcbiAgcmV0dXJuIGlzQ2FsbGFibGUobm9kZS50eXBlKSAmJiAhaXNDYWxsYWJsZShub2RlLnBvaW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50RHluYW1pY05vZGU8VD4obm9kZTogRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIENvbXBvbmVudER5bmFtaWNOb2RlPFQ+IHtcbiAgaWYgKGlzQ3VzdG9tRHluYW1pY05vZGVDb21wb25lbnQobm9kZS50eXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHR5cGUgaXMgYSBmdW5jdGlvbiB3aXRoIGR5bmFtaWMgaW1wb3J0XG4gIHJldHVybiBpc0NhbGxhYmxlKG5vZGUudHlwZSkgJiYgaXNDYWxsYWJsZShub2RlLnBvaW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVTdGF0aWNOb2RlPFQ+KG5vZGU6IE5vZGU8VD4pOiBub2RlIGlzIEh0bWxUZW1wbGF0ZU5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBsYXRlRHluYW1pY05vZGU8VD4obm9kZTogRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIEh0bWxUZW1wbGF0ZUR5bmFtaWNOb2RlPFQ+IHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdmdUZW1wbGF0ZVN0YXRpY05vZGU8VD4obm9kZTogTm9kZTxUPik6IG5vZGUgaXMgU3ZnVGVtcGxhdGVOb2RlPFQ+IHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ3N2Zy10ZW1wbGF0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N2Z1RlbXBsYXRlRHluYW1pY05vZGU8VD4obm9kZTogRHluYW1pY05vZGU8VD4pOiBub2RlIGlzIFN2Z1RlbXBsYXRlRHluYW1pY05vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmF1bHRTdGF0aWNOb2RlKG5vZGU6IE5vZGUpOiBub2RlIGlzIERlZmF1bHROb2RlIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RlZmF1bHQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZhdWx0RHluYW1pY05vZGUobm9kZTogRHluYW1pY05vZGUpOiBub2RlIGlzIERlZmF1bHREeW5hbWljTm9kZSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdkZWZhdWx0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdFN0YXRpY0dyb3VwTm9kZShub2RlOiBOb2RlKTogbm9kZSBpcyBEZWZhdWx0R3JvdXBOb2RlIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2RlZmF1bHQtZ3JvdXAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZhdWx0RHluYW1pY0dyb3VwTm9kZShub2RlOiBEeW5hbWljTm9kZSk6IG5vZGUgaXMgRGVmYXVsdER5bmFtaWNHcm91cE5vZGUge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBsYXRlU3RhdGljR3JvdXBOb2RlPFQ+KG5vZGU6IE5vZGU8VD4pOiBub2RlIGlzIFRlbXBsYXRlR3JvdXBOb2RlPFQ+IHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ3RlbXBsYXRlLWdyb3VwJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcGxhdGVEeW5hbWljR3JvdXBOb2RlPFQ+KG5vZGU6IER5bmFtaWNOb2RlPFQ+KTogbm9kZSBpcyBUZW1wbGF0ZUR5bmFtaWNHcm91cE5vZGU8VD4ge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnO1xufVxuIl19
@@ -2,5 +2,6 @@ export const DEFAULT_OPTIMIZATION = {
2
2
  detachedGroupsLayer: false,
3
3
  virtualization: false,
4
4
  virtualizationZoomThreshold: 0.5,
5
+ lazyLoadTrigger: 'immediate',
5
6
  };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemF0aW9uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL29wdGltaXphdGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQTJCO0lBQzFELG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsY0FBYyxFQUFFLEtBQUs7SUFDckIsMkJBQTJCLEVBQUUsR0FBRztDQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERFRkFVTFRfT1BUSU1JWkFUSU9OOiBSZXF1aXJlZDxPcHRpbWl6YXRpb24+ID0ge1xuICBkZXRhY2hlZEdyb3Vwc0xheWVyOiBmYWxzZSxcbiAgdmlydHVhbGl6YXRpb246IGZhbHNlLFxuICB2aXJ0dWFsaXphdGlvblpvb21UaHJlc2hvbGQ6IDAuNSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW1pemF0aW9uIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBsYXllciB3aXRoIGdyb3VwcyB3aWxsIGJlIHBsYWNlZCBiZWhpbmQgdGhlIGVkZ2VzIGxheWVyLlxuICAgKiBUaGlzIGFwcHJvYWNoIGZpeGVzIHRoZSBpc3N1ZSB3aGVuIHlvdSBjYW4ndCBzZWxlY3QgYW4gZWRnZSBpbnNpZGUgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZXRhY2hlZEdyb3Vwc0xheWVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZW5hYmxlcyB2aWV3cG9ydCB2aXJ0dWFsaXphdGlvbiB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IG9ubHkgcmVuZGVyaW5nXG4gICAqIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGFyZSBjdXJyZW50bHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIFRoaXMgb3B0aW1pemF0aW9uXG4gICAqIGZpbHRlcnMgb3V0IGVudGl0aWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZpc2libGUgYXJlYSwgcmVkdWNpbmcgdGhlIG51bWJlciBvZlxuICAgKiBET00gZWxlbWVudHMgYW5kIGltcHJvdmluZyByZW5kZXJpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIGZsb3dzLlxuICAgKlxuICAgKiBJdCB1c2VzIGNhbnZhcyBhcyBhIHZpcnR1YWxpemF0aW9uIGxheWVyIGR1cmluZyB2aWV3cG9ydCBjaGFuZ2UuXG4gICAqIFdoZW4gdGhlIHZpZXdwb3J0IGNoYW5nZSBlbmRzLCB0aGUgbGlicmFyeSBoeWRyYXRlcyB0aGUgY2FudmFzIHdpdGggdGhlIGFjdHVhbCBub2RlcyBhbmQgZWRnZXMuXG4gICAqL1xuICB2aXJ0dWFsaXphdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB6b29tIHRocmVzaG9sZCBiZWxvdyB3aGljaCB0aGUgb25seSB2aXJ0dWFsaXphdGlvbiBsYXllciBpcyBkcmF3bi5cbiAgICogVGhpcyBzaG91bGQgaGVscCB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2hlbiB6b29taW5nIG91dCB0b28gbXVjaC5cbiAgICovXG4gIHZpcnR1YWxpemF0aW9uWm9vbVRocmVzaG9sZD86IG51bWJlcjtcbn1cbiJdfQ==
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemF0aW9uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL29wdGltaXphdGlvbi5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQTJCO0lBQzFELG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsY0FBYyxFQUFFLEtBQUs7SUFDckIsMkJBQTJCLEVBQUUsR0FBRztJQUNoQyxlQUFlLEVBQUUsV0FBVztDQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERFRkFVTFRfT1BUSU1JWkFUSU9OOiBSZXF1aXJlZDxPcHRpbWl6YXRpb24+ID0ge1xuICBkZXRhY2hlZEdyb3Vwc0xheWVyOiBmYWxzZSxcbiAgdmlydHVhbGl6YXRpb246IGZhbHNlLFxuICB2aXJ0dWFsaXphdGlvblpvb21UaHJlc2hvbGQ6IDAuNSxcbiAgbGF6eUxvYWRUcmlnZ2VyOiAnaW1tZWRpYXRlJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW1pemF0aW9uIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBsYXllciB3aXRoIGdyb3VwcyB3aWxsIGJlIHBsYWNlZCBiZWhpbmQgdGhlIGVkZ2VzIGxheWVyLlxuICAgKiBUaGlzIGFwcHJvYWNoIGZpeGVzIHRoZSBpc3N1ZSB3aGVuIHlvdSBjYW4ndCBzZWxlY3QgYW4gZWRnZSBpbnNpZGUgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkZXRhY2hlZEdyb3Vwc0xheWVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgZW5hYmxlcyB2aWV3cG9ydCB2aXJ0dWFsaXphdGlvbiB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IG9ubHkgcmVuZGVyaW5nXG4gICAqIG5vZGVzIGFuZCBlZGdlcyB0aGF0IGFyZSBjdXJyZW50bHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIFRoaXMgb3B0aW1pemF0aW9uXG4gICAqIGZpbHRlcnMgb3V0IGVudGl0aWVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZpc2libGUgYXJlYSwgcmVkdWNpbmcgdGhlIG51bWJlciBvZlxuICAgKiBET00gZWxlbWVudHMgYW5kIGltcHJvdmluZyByZW5kZXJpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIGZsb3dzLlxuICAgKlxuICAgKiBJdCB1c2VzIGNhbnZhcyBhcyBhIHZpcnR1YWxpemF0aW9uIGxheWVyIGR1cmluZyB2aWV3cG9ydCBjaGFuZ2UuXG4gICAqIFdoZW4gdGhlIHZpZXdwb3J0IGNoYW5nZSBlbmRzLCB0aGUgbGlicmFyeSBoeWRyYXRlcyB0aGUgY2FudmFzIHdpdGggdGhlIGFjdHVhbCBub2RlcyBhbmQgZWRnZXMuXG4gICAqL1xuICB2aXJ0dWFsaXphdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB6b29tIHRocmVzaG9sZCBiZWxvdyB3aGljaCB0aGUgb25seSB2aXJ0dWFsaXphdGlvbiBsYXllciBpcyBkcmF3bi5cbiAgICogVGhpcyBzaG91bGQgaGVscCB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2hlbiB6b29taW5nIG91dCB0b28gbXVjaC5cbiAgICovXG4gIHZpcnR1YWxpemF0aW9uWm9vbVRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRyaWdnZXIgZm9yIGxhenkgbG9hZGluZyBvZiBlbnRpdGllcy5cbiAgICovXG4gIGxhenlMb2FkVHJpZ2dlcj86ICdpbW1lZGlhdGUnIHwgJ3ZpZXdwb3J0Jztcbn1cbiJdfQ==
@@ -1,2 +1,10 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL3JlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUmVjdCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cbiJdfQ==
1
+ export function rectToRectWithSides(rect) {
2
+ return {
3
+ ...rect,
4
+ left: rect.x,
5
+ right: rect.x + rect.width,
6
+ top: rect.y,
7
+ bottom: rect.y + rect.height,
8
+ };
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9pbnRlcmZhY2VzL3JlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQVU7SUFDNUMsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLO1FBQzFCLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNO0tBQzdCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBSZWN0IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3RXaXRoU2lkZXMgZXh0ZW5kcyBSZWN0IHtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0VG9SZWN0V2l0aFNpZGVzKHJlY3Q6IFJlY3QpOiBSZWN0V2l0aFNpZGVzIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZWN0LFxuICAgIGxlZnQ6IHJlY3QueCxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0LFxuICB9O1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29udGV4dC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb250ZXh0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEh0bWxUZW1wbGF0ZUVkZ2VMYWJlbCB9IGZyb20gJy4vZWRnZS1sYWJlbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBIYW5kbGVTdGF0ZSB9IGZyb20gJy4uL21vZGVscy9oYW5kbGUubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VDb250ZXh0IHtcbiAgJGltcGxpY2l0OiB7XG4gICAgZWRnZTogRWRnZTxhbnk+O1xuICAgIHBhdGg6IFNpZ25hbDxzdHJpbmc+O1xuICAgIG1hcmtlclN0YXJ0OiBTaWduYWw8c3RyaW5nPjtcbiAgICBtYXJrZXJFbmQ6IFNpZ25hbDxzdHJpbmc+O1xuICAgIHNlbGVjdGVkOiBTaWduYWw8Ym9vbGVhbj47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUNvbnRleHQge1xuICAkaW1wbGljaXQ6IHtcbiAgICAvLyBUT0RPOiB0eXBlIHByb3Blcmx5IHdoZW4gc2VwYXJhdGUgdGVtcGxhdGUgZGlyZWN0aXZlcyB0byBzdGF0aWMgYW5kIGR5bmFtaWMgbm9kZXNcbiAgICBub2RlOiBhbnk7XG4gICAgc2VsZWN0ZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdmdOb2RlQ29udGV4dCB7XG4gICRpbXBsaWNpdDoge1xuICAgIG5vZGU6IGFueTtcbiAgICBzZWxlY3RlZDogU2lnbmFsPGJvb2xlYW4+O1xuICAgIHdpZHRoOiBTaWduYWw8bnVtYmVyPjtcbiAgICBoZWlnaHQ6IFNpZ25hbDxudW1iZXI+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTm9kZUNvbnRleHQge1xuICAkaW1wbGljaXQ6IHtcbiAgICBub2RlOiBhbnk7XG4gICAgc2VsZWN0ZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgICB3aWR0aDogU2lnbmFsPG51bWJlcj47XG4gICAgaGVpZ2h0OiBTaWduYWw8bnVtYmVyPjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uQ29udGV4dCB7XG4gICRpbXBsaWNpdDoge1xuICAgIHBhdGg6IFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgICBtYXJrZXI6IFNpZ25hbDxzdHJpbmc+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxFZGdlTGFiZWxDb250ZXh0IHtcbiAgJGltcGxpY2l0OiB7XG4gICAgZWRnZTogRWRnZTxhbnk+O1xuICAgIGxhYmVsOiBIdG1sVGVtcGxhdGVFZGdlTGFiZWw8YW55PjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVDb250ZXh0IHtcbiAgJGltcGxpY2l0OiB7XG4gICAgcG9pbnQ6IFNpZ25hbDxQb2ludD47XG4gICAgc3RhdGU6IFNpZ25hbDxIYW5kbGVTdGF0ZT47XG4gICAgbm9kZTogYW55O1xuICB9O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29udGV4dC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb250ZXh0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEVkZ2UgfSBmcm9tICcuL2VkZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEh0bWxUZW1wbGF0ZUVkZ2VMYWJlbCB9IGZyb20gJy4vZWRnZS1sYWJlbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBIYW5kbGVTdGF0ZSB9IGZyb20gJy4uL21vZGVscy9oYW5kbGUubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VDb250ZXh0IHtcbiAgJGltcGxpY2l0OiB7XG4gICAgZWRnZTogRWRnZTxhbnk+O1xuICAgIHBhdGg6IFNpZ25hbDxzdHJpbmc+O1xuICAgIG1hcmtlclN0YXJ0OiBTaWduYWw8c3RyaW5nPjtcbiAgICBtYXJrZXJFbmQ6IFNpZ25hbDxzdHJpbmc+O1xuICAgIHNlbGVjdGVkOiBTaWduYWw8Ym9vbGVhbj47XG4gICAgc2hvdWxkTG9hZDogU2lnbmFsPGJvb2xlYW4+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVDb250ZXh0IHtcbiAgJGltcGxpY2l0OiB7XG4gICAgLy8gVE9ETzogdHlwZSBwcm9wZXJseSB3aGVuIHNlcGFyYXRlIHRlbXBsYXRlIGRpcmVjdGl2ZXMgdG8gc3RhdGljIGFuZCBkeW5hbWljIG5vZGVzXG4gICAgbm9kZTogYW55O1xuICAgIHNlbGVjdGVkOiBTaWduYWw8Ym9vbGVhbj47XG4gICAgc2hvdWxkTG9hZDogU2lnbmFsPGJvb2xlYW4+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN2Z05vZGVDb250ZXh0IHtcbiAgJGltcGxpY2l0OiB7XG4gICAgbm9kZTogYW55O1xuICAgIHNlbGVjdGVkOiBTaWduYWw8Ym9vbGVhbj47XG4gICAgd2lkdGg6IFNpZ25hbDxudW1iZXI+O1xuICAgIGhlaWdodDogU2lnbmFsPG51bWJlcj47XG4gICAgc2hvdWxkTG9hZDogU2lnbmFsPGJvb2xlYW4+O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTm9kZUNvbnRleHQge1xuICAkaW1wbGljaXQ6IHtcbiAgICBub2RlOiBhbnk7XG4gICAgc2VsZWN0ZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgICB3aWR0aDogU2lnbmFsPG51bWJlcj47XG4gICAgaGVpZ2h0OiBTaWduYWw8bnVtYmVyPjtcbiAgICBzaG91bGRMb2FkOiBTaWduYWw8Ym9vbGVhbj47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvbkNvbnRleHQge1xuICAkaW1wbGljaXQ6IHtcbiAgICBwYXRoOiBTaWduYWw8c3RyaW5nIHwgbnVsbD47XG4gICAgbWFya2VyOiBTaWduYWw8c3RyaW5nPjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdG1sRWRnZUxhYmVsQ29udGV4dCB7XG4gICRpbXBsaWNpdDoge1xuICAgIGVkZ2U6IEVkZ2U8YW55PjtcbiAgICBsYWJlbDogSHRtbFRlbXBsYXRlRWRnZUxhYmVsPGFueT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlQ29udGV4dCB7XG4gICRpbXBsaWNpdDoge1xuICAgIHBvaW50OiBTaWduYWw8UG9pbnQ+O1xuICAgIHN0YXRlOiBTaWduYWw8SGFuZGxlU3RhdGU+O1xuICAgIG5vZGU6IGFueTtcbiAgfTtcbn1cbiJdfQ==
@@ -15,6 +15,7 @@ export class EdgeModel {
15
15
  this.target = signal(undefined);
16
16
  this.selected = signal(false);
17
17
  this.selected$ = toObservable(this.selected);
18
+ this.shouldLoad = computed(() => (this.source()?.shouldLoad() ?? false) && (this.target()?.shouldLoad() ?? false));
18
19
  this.renderOrder = signal(0);
19
20
  this.detached = computed(() => {
20
21
  const source = this.source();
@@ -44,14 +45,7 @@ export class EdgeModel {
44
45
  const target = this.targetHandle();
45
46
  // TODO: don't like this
46
47
  if (!source || !target) {
47
- return {
48
- path: '',
49
- labelPoints: {
50
- start: { x: 0, y: 0 },
51
- center: { x: 0, y: 0 },
52
- end: { x: 0, y: 0 },
53
- },
54
- };
48
+ return { path: '' };
55
49
  }
56
50
  const params = this.getPathFactoryParams(source, target);
57
51
  switch (this.curve) {
@@ -183,6 +177,7 @@ export class EdgeModel {
183
177
  markerStart: this.markerStartUrl,
184
178
  markerEnd: this.markerEndUrl,
185
179
  selected: this.selected.asReadonly(),
180
+ shouldLoad: this.shouldLoad,
186
181
  },
187
182
  };
188
183
  this.edgeLabels = {};
@@ -210,4 +205,4 @@ export class EdgeModel {
210
205
  };
211
206
  }
212
207
  }
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9tb2RlbHMvZWRnZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXRFLE1BQU0sT0FBTyxTQUFTO0lBeU5wQixZQUFtQixJQUFVO1FBQVYsU0FBSSxHQUFKLElBQUksQ0FBTTtRQXhOWix3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUU1RCxXQUFNLEdBQUcsTUFBTSxDQUF3QixTQUFTLENBQUMsQ0FBQztRQUNsRCxXQUFNLEdBQUcsTUFBTSxDQUF3QixTQUFTLENBQUMsQ0FBQztRQU1sRCxhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FB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QUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUc7WUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUFtQixFQUFFLE1BQW1CO1FBQ25FLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFdBQVcsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQ25DLFdBQVcsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQ25DLGNBQWMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVE7WUFDekMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUN6QyxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtZQUM3QyxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtTQUM5QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGdlTGFiZWxQb3NpdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWRnZS1sYWJlbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRWRnZSwgQ3VydmUsIEVkZ2VUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lZGdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlTGFiZWxNb2RlbCB9IGZyb20gJy4vZWRnZS1sYWJlbC5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgc3RyYWlnaHRQYXRoIH0gZnJvbSAnLi4vbWF0aC9lZGdlLXBhdGgvc3RyYWlnaC1wYXRoJztcbmltcG9ydCB7IGJlemllclBhdGggfSBmcm9tICcuLi9tYXRoL2VkZ2UtcGF0aC9iZXppZXItcGF0aCc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGbG93RW50aXR5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbG93LWVudGl0eS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgc21vb3RoU3RlcFBhdGggfSBmcm9tICcuLi9tYXRoL2VkZ2UtcGF0aC9zbW9vdGgtc3RlcC1wYXRoJztcbmltcG9ydCB7IGhhc2hDb2RlIH0gZnJvbSAnLi4vdXRpbHMvaGFzaCc7XG5pbXBvcnQgeyBDb250ZXh0YWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29udGV4dGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VDb250ZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90ZW1wbGF0ZS1jb250ZXh0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBIYW5kbGVNb2RlbCB9IGZyb20gJy4vaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IEN1cnZlRmFjdG9yeVBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY3VydmUtZmFjdG9yeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBleHRlbmRlZENvbXB1dGVkIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFscy9leHRlbmRlZC1jb21wdXRlZCc7XG5cbmV4cG9ydCBjbGFzcyBFZGdlTW9kZWwgaW1wbGVtZW50cyBGbG93RW50aXR5LCBDb250ZXh0YWJsZTxFZGdlQ29udGV4dD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSk7XG5cbiAgcHVibGljIHNvdXJjZSA9IHNpZ25hbDxOb2RlTW9kZWwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyB0YXJnZXQgPSBzaWduYWw8Tm9kZU1vZGVsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgY3VydmU6IEN1cnZlO1xuICBwdWJsaWMgdHlwZTogRWRnZVR5cGU7XG4gIHB1YmxpYyByZWNvbm5lY3RhYmxlOiBib29sZWFuIHwgJ3NvdXJjZScgfCAndGFyZ2V0JztcbiAgcHVibGljIGZsb2F0aW5nOiBib29sZWFuO1xuXG4gIHB1YmxpYyBzZWxlY3RlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHB1YmxpYyBzZWxlY3RlZCQgPSB0b09ic2VydmFibGUodGhpcy5zZWxlY3RlZCk7XG5cbiAgcHVibGljIHJlbmRlck9yZGVyID0gc2lnbmFsKDApO1xuXG4gIHB1YmxpYyBkZXRhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0KCk7XG5cbiAgICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgZXhpc3RzU291cmNlSGFuZGxlID0gZmFsc2U7XG4gICAgbGV0IGV4aXN0c1RhcmdldEhhbmRsZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZWRnZS5zb3VyY2VIYW5kbGUpIHtcbiAgICAgIGV4aXN0c1NvdXJjZUhhbmRsZSA9ICEhc291cmNlLmhhbmRsZXMoKS5maW5kKChoYW5kbGUpID0+IGhhbmRsZS5yYXdIYW5kbGUuaWQgPT09IHRoaXMuZWRnZS5zb3VyY2VIYW5kbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdHNTb3VyY2VIYW5kbGUgPSAhIXNvdXJjZS5oYW5kbGVzKCkuZmluZCgoaGFuZGxlKSA9PiBoYW5kbGUucmF3SGFuZGxlLnR5cGUgPT09ICdzb3VyY2UnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGdlLnRhcmdldEhhbmRsZSkge1xuICAgICAgZXhpc3RzVGFyZ2V0SGFuZGxlID0gISF0YXJnZXQuaGFuZGxlcygpLmZpbmQoKGhhbmRsZSkgPT4gaGFuZGxlLnJhd0hhbmRsZS5pZCA9PT0gdGhpcy5lZGdlLnRhcmdldEhhbmRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0c1RhcmdldEhhbmRsZSA9ICEhdGFyZ2V0LmhhbmRsZXMoKS5maW5kKChoYW5kbGUpID0+IGhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3RhcmdldCcpO1xuICAgIH1cblxuICAgIHJldHVybiAhZXhpc3RzU291cmNlSGFuZGxlIHx8ICFleGlzdHNUYXJnZXRIYW5kbGU7XG4gIH0pO1xuXG4gIHB1YmxpYyBkZXRhY2hlZCQgPSB0b09ic2VydmFibGUodGhpcy5kZXRhY2hlZCk7XG5cbiAgcHVibGljIHBhdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2VIYW5kbGUoKTtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldEhhbmRsZSgpO1xuXG4gICAgLy8gVE9ETzogZG9uJ3QgbGlrZSB0aGlzXG4gICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogJycsXG4gICAgICAgIGxhYmVsUG9pbnRzOiB7XG4gICAgICAgICAgc3RhcnQ6IHsgeDogMCwgeTogMCB9LFxuICAgICAgICAgIGNlbnRlcjogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgICAgZW5kOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRQYXRoRmFjdG9yeVBhcmFtcyhzb3VyY2UsIHRhcmdldCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuY3VydmUpIHtcbiAgICAgIGNhc2UgJ3N0cmFpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0UGF0aChwYXJhbXMpO1xuICAgICAgY2FzZSAnYmV6aWVyJzpcbiAgICAgICAgcmV0dXJuIGJlemllclBhdGgocGFyYW1zKTtcbiAgICAgIGNhc2UgJ3Ntb290aC1zdGVwJzpcbiAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcyk7XG4gICAgICBjYXNlICdzdGVwJzpcbiAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcywgMCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5jdXJ2ZShwYXJhbXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcHVibGljIHNvdXJjZUhhbmRsZSA9IGV4dGVuZGVkQ29tcHV0ZWQ8SGFuZGxlTW9kZWwgfCBudWxsPigocHJldmlvdXNIYW5kbGUpID0+IHtcbiAgICBsZXQgaGFuZGxlOiBIYW5kbGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuZmxvYXRpbmcpIHtcbiAgICAgIGhhbmRsZSA9IHRoaXMuY2xvc2VzdEhhbmRsZXMoKS5zb3VyY2VIYW5kbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmVkZ2Uuc291cmNlSGFuZGxlKSB7XG4gICAgICAgIGhhbmRsZSA9XG4gICAgICAgICAgdGhpcy5zb3VyY2UoKVxuICAgICAgICAgICAgPy5oYW5kbGVzKClcbiAgICAgICAgICAgIC5maW5kKChoYW5kbGUpID0+IGhhbmRsZS5yYXdIYW5kbGUuaWQgPT09IHRoaXMuZWRnZS5zb3VyY2VIYW5kbGUpID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGUgPVxuICAgICAgICAgIHRoaXMuc291cmNlKClcbiAgICAgICAgICAgID8uaGFuZGxlcygpXG4gICAgICAgICAgICAuZmluZCgoaGFuZGxlKSA9PiBoYW5kbGUucmF3SGFuZGxlLnR5cGUgPT09ICdzb3VyY2UnKSA/PyBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgdmlydHVhbCBzY3JvbGxpbmcsIGlmIHRoZSBub2RlIGlzIHNjcm9sbGVkIG91dCBvZiB2aWV3IHRoZSBoYW5kbGUgbWF5IGRpc2FwcGVhclxuICAgIC8vIHdoaWNoIGNvdWxkIGxlYWQgdG8gdGhlIGVkZ2Ugbm90IGJlaW5nIHJlbmRlcmVkXG4gICAgLy8gc28gd2UgcmV0dXJuIHRoZSBwcmV2aW91cyBoYW5kbGUgaWYgdGhlIGN1cnJlbnQgb25lIGlzIG51bGxcbiAgICAvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGJyZWFrcyBhbnl0aGluZ1xuICAgIGlmIChoYW5kbGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBwcmV2aW91c0hhbmRsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9KTtcblxuICBwdWJsaWMgdGFyZ2V0SGFuZGxlID0gZXh0ZW5kZWRDb21wdXRlZDxIYW5kbGVNb2RlbCB8IG51bGw+KChwcmV2aW91c0hhbmRsZSkgPT4ge1xuICAgIGxldCBoYW5kbGU6IEhhbmRsZU1vZGVsIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5mbG9hdGluZykge1xuICAgICAgaGFuZGxlID0gdGhpcy5jbG9zZXN0SGFuZGxlcygpLnRhcmdldEhhbmRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZWRnZS50YXJnZXRIYW5kbGUpIHtcbiAgICAgICAgaGFuZGxlID1cbiAgICAgICAgICB0aGlzLnRhcmdldCgpXG4gICAgICAgICAgICA/LmhhbmRsZXMoKVxuICAgICAgICAgICAgLmZpbmQoKGhhbmRsZSkgPT4gaGFuZGxlLnJhd0hhbmRsZS5pZCA9PT0gdGhpcy5lZGdlLnRhcmdldEhhbmRsZSkgPz8gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZSA9XG4gICAgICAgICAgdGhpcy50YXJnZXQoKVxuICAgICAgICAgICAgPy5oYW5kbGVzKClcbiAgICAgICAgICAgIC5maW5kKChoYW5kbGUpID0+IGhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3RhcmdldCcpID8/IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiB2aXJ0dWFsIHNjcm9sbGluZywgaWYgdGhlIG5vZGUgaXMgc2Nyb2xsZWQgb3V0IG9mIHZpZXcgdGhlIGhhbmRsZSBtYXkgZGlzYXBwZWFyXG4gICAgLy8gd2hpY2ggY291bGQgbGVhZCB0byB0aGUgZWRnZSBub3QgYmVpbmcgcmVuZGVyZWRcbiAgICAvLyBzbyB3ZSByZXR1cm4gdGhlIHByZXZpb3VzIGhhbmRsZSBpZiB0aGUgY3VycmVudCBvbmUgaXMgbnVsbFxuICAgIC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgYnJlYWtzIGFueXRoaW5nXG4gICAgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzSGFuZGxlO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGU7XG4gIH0pO1xuXG4gIHB1YmxpYyBjbG9zZXN0SGFuZGxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0KCk7XG5cbiAgICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgICByZXR1cm4geyBzb3VyY2VIYW5kbGU6IG51bGwsIHRhcmdldEhhbmRsZTogbnVsbCB9O1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgc291cmNlIGhhbmRsZXMgZnJvbSBzb3VyY2Ugbm9kZVxuICAgIGNvbnN0IHNvdXJjZUhhbmRsZXMgPVxuICAgICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKS5tb2RlID09PSAnc3RyaWN0J1xuICAgICAgICA/IHNvdXJjZS5oYW5kbGVzKCkuZmlsdGVyKChoKSA9PiBoLnJhd0hhbmRsZS50eXBlID09PSAnc291cmNlJylcbiAgICAgICAgOiBzb3VyY2UuaGFuZGxlcygpO1xuICAgIC8vIEdldCBhbGwgdGFyZ2V0IGhhbmRsZXMgZnJvbSB0YXJnZXQgbm9kZVxuICAgIGNvbnN0IHRhcmdldEhhbmRsZXMgPVxuICAgICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKS5tb2RlID09PSAnc3RyaWN0J1xuICAgICAgICA/IHRhcmdldC5oYW5kbGVzKCkuZmlsdGVyKChoKSA9PiBoLnJhd0hhbmRsZS50eXBlID09PSAndGFyZ2V0JylcbiAgICAgICAgOiB0YXJnZXQuaGFuZGxlcygpO1xuXG4gICAgaWYgKHNvdXJjZUhhbmRsZXMubGVuZ3RoID09PSAwIHx8IHRhcmdldEhhbmRsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4geyBzb3VyY2VIYW5kbGU6IG51bGwsIHRhcmdldEhhbmRsZTogbnVsbCB9O1xuICAgIH1cblxuICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGxldCBjbG9zZXN0U291cmNlSGFuZGxlOiBIYW5kbGVNb2RlbCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjbG9zZXN0VGFyZ2V0SGFuZGxlOiBIYW5kbGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgYWxsIGNvbWJpbmF0aW9ucyBvZiBzb3VyY2UgYW5kIHRhcmdldCBoYW5kbGVzXG4gICAgZm9yIChjb25zdCBzb3VyY2VIYW5kbGUgb2Ygc291cmNlSGFuZGxlcykge1xuICAgICAgZm9yIChjb25zdCB0YXJnZXRIYW5kbGUgb2YgdGFyZ2V0SGFuZGxlcykge1xuICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0SGFuZGxlLnBvaW50QWJzb2x1dGUoKTtcblxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChcbiAgICAgICAgICBNYXRoLnBvdyhzb3VyY2VQb2ludC54IC0gdGFyZ2V0UG9pbnQueCwgMikgKyBNYXRoLnBvdyhzb3VyY2VQb2ludC55IC0gdGFyZ2V0UG9pbnQueSwgMiksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgIGNsb3Nlc3RTb3VyY2VIYW5kbGUgPSBzb3VyY2VIYW5kbGU7XG4gICAgICAgICAgY2xvc2VzdFRhcmdldEhhbmRsZSA9IHRhcmdldEhhbmRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2VIYW5kbGU6IGNsb3Nlc3RTb3VyY2VIYW5kbGUsXG4gICAgICB0YXJnZXRIYW5kbGU6IGNsb3Nlc3RUYXJnZXRIYW5kbGUsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRPRE86IG5vdCByZWFjdGl2ZVxuICAgKi9cbiAgcHVibGljIG1hcmtlclN0YXJ0VXJsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMuZWRnZS5tYXJrZXJzPy5zdGFydDtcblxuICAgIHJldHVybiBtYXJrZXIgPyBgdXJsKCMke2hhc2hDb2RlKEpTT04uc3RyaW5naWZ5KG1hcmtlcikpfSlgIDogJyc7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUT0RPOiBub3QgcmVhY3RpdmVcbiAgICovXG4gIHB1YmxpYyBtYXJrZXJFbmRVcmwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5lZGdlLm1hcmtlcnM/LmVuZDtcblxuICAgIHJldHVybiBtYXJrZXIgPyBgdXJsKCMke2hhc2hDb2RlKEpTT04uc3RyaW5naWZ5KG1hcmtlcikpfSlgIDogJyc7XG4gIH0pO1xuXG4gIHB1YmxpYyBjb250ZXh0ID0ge1xuICAgICRpbXBsaWNpdDoge1xuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgZWRnZSBjb3VsZCBjaGFuZ2VcbiAgICAgIGVkZ2U6IHRoaXMuZWRnZSxcbiAgICAgIHBhdGg6IGNvbXB1dGVkKCgpID0+IHRoaXMucGF0aCgpLnBhdGgpLFxuICAgICAgbWFya2VyU3RhcnQ6IHRoaXMubWFya2VyU3RhcnRVcmwsXG4gICAgICBtYXJrZXJFbmQ6IHRoaXMubWFya2VyRW5kVXJsLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQuYXNSZWFkb25seSgpLFxuICAgIH0sXG4gIH07XG5cbiAgcHVibGljIGVkZ2VMYWJlbHM6IHsgW3Bvc2l0aW9uIGluIEVkZ2VMYWJlbFBvc2l0aW9uXT86IEVkZ2VMYWJlbE1vZGVsIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWRnZTogRWRnZSkge1xuICAgIHRoaXMudHlwZSA9IGVkZ2UudHlwZSA/PyAnZGVmYXVsdCc7XG4gICAgdGhpcy5jdXJ2ZSA9IGVkZ2UuY3VydmUgPz8gJ2Jlemllcic7XG4gICAgdGhpcy5yZWNvbm5lY3RhYmxlID0gZWRnZS5yZWNvbm5lY3RhYmxlID8/IGZhbHNlO1xuICAgIHRoaXMuZmxvYXRpbmcgPSBlZGdlLmZsb2F0aW5nID8/IGZhbHNlO1xuXG4gICAgaWYgKGVkZ2UuZWRnZUxhYmVscz8uc3RhcnQpIHRoaXMuZWRnZUxhYmVscy5zdGFydCA9IG5ldyBFZGdlTGFiZWxNb2RlbChlZGdlLmVkZ2VMYWJlbHMuc3RhcnQpO1xuICAgIGlmIChlZGdlLmVkZ2VMYWJlbHM/LmNlbnRlcikgdGhpcy5lZGdlTGFiZWxzLmNlbnRlciA9IG5ldyBFZGdlTGFiZWxNb2RlbChlZGdlLmVkZ2VMYWJlbHMuY2VudGVyKTtcbiAgICBpZiAoZWRnZS5lZGdlTGFiZWxzPy5lbmQpIHRoaXMuZWRnZUxhYmVscy5lbmQgPSBuZXcgRWRnZUxhYmVsTW9kZWwoZWRnZS5lZGdlTGFiZWxzLmVuZCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhdGhGYWN0b3J5UGFyYW1zKHNvdXJjZTogSGFuZGxlTW9kZWwsIHRhcmdldDogSGFuZGxlTW9kZWwpOiBDdXJ2ZUZhY3RvcnlQYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiAnZWRnZScsXG4gICAgICBlZGdlOiB0aGlzLmVkZ2UsXG4gICAgICBzb3VyY2VQb2ludDogc291cmNlLnBvaW50QWJzb2x1dGUoKSxcbiAgICAgIHRhcmdldFBvaW50OiB0YXJnZXQucG9pbnRBYnNvbHV0ZSgpLFxuICAgICAgc291cmNlUG9zaXRpb246IHNvdXJjZS5yYXdIYW5kbGUucG9zaXRpb24sXG4gICAgICB0YXJnZXRQb3NpdGlvbjogdGFyZ2V0LnJhd0hhbmRsZS5wb3NpdGlvbixcbiAgICAgIGFsbEVkZ2VzOiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UucmF3RWRnZXMoKSxcbiAgICAgIGFsbE5vZGVzOiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UucmF3Tm9kZXMoKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9tb2RlbHMvZWRnZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXRFLE1BQU0sT0FBTyxTQUFTO0lBcU5wQixZQUFtQixJQUFVO1FBQVYsU0FBSSxHQUFKLElBQUksQ0FBTTtRQXBOWix3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUU1RCxXQUFNLEdBQUcsTUFBTSxDQUF3QixTQUFTLENBQUMsQ0FBQztRQUNsRCxXQUFNLEdBQUcsTUFBTSxDQUF3QixTQUFTLENBQUMsQ0FBQztRQU1sRCxhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLGNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FB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QUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pHLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRU8sb0JBQW9CLENBQUMsTUFBbUIsRUFBRSxNQUFtQjtRQUNuRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixXQUFXLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUNuQyxXQUFXLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUNuQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQ3pDLGNBQWMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVE7WUFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7WUFDN0MsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7U0FDOUMsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWRnZUxhYmVsUG9zaXRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VkZ2UtbGFiZWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2UsIEN1cnZlLCBFZGdlVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWRnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRWRnZUxhYmVsTW9kZWwgfSBmcm9tICcuL2VkZ2UtbGFiZWwubW9kZWwnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi9ub2RlLm1vZGVsJztcbmltcG9ydCB7IHN0cmFpZ2h0UGF0aCB9IGZyb20gJy4uL21hdGgvZWRnZS1wYXRoL3N0cmFpZ2gtcGF0aCc7XG5pbXBvcnQgeyBiZXppZXJQYXRoIH0gZnJvbSAnLi4vbWF0aC9lZGdlLXBhdGgvYmV6aWVyLXBhdGgnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRmxvd0VudGl0eSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxvdy1lbnRpdHkuaW50ZXJmYWNlJztcbmltcG9ydCB7IHNtb290aFN0ZXBQYXRoIH0gZnJvbSAnLi4vbWF0aC9lZGdlLXBhdGgvc21vb3RoLXN0ZXAtcGF0aCc7XG5pbXBvcnQgeyBoYXNoQ29kZSB9IGZyb20gJy4uL3V0aWxzL2hhc2gnO1xuaW1wb3J0IHsgQ29udGV4dGFibGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbnRleHRhYmxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFZGdlQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGVtcGxhdGUtY29udGV4dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuL2hhbmRsZS5tb2RlbCc7XG5pbXBvcnQgeyBDdXJ2ZUZhY3RvcnlQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2N1cnZlLWZhY3RvcnkuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mbG93LWVudGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0ZW5kZWRDb21wdXRlZCB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbHMvZXh0ZW5kZWQtY29tcHV0ZWQnO1xuXG5leHBvcnQgY2xhc3MgRWRnZU1vZGVsIGltcGxlbWVudHMgRmxvd0VudGl0eSwgQ29udGV4dGFibGU8RWRnZUNvbnRleHQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBmbG93RW50aXRpZXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dFbnRpdGllc1NlcnZpY2UpO1xuXG4gIHB1YmxpYyBzb3VyY2UgPSBzaWduYWw8Tm9kZU1vZGVsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgdGFyZ2V0ID0gc2lnbmFsPE5vZGVNb2RlbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHVibGljIGN1cnZlOiBDdXJ2ZTtcbiAgcHVibGljIHR5cGU6IEVkZ2VUeXBlO1xuICBwdWJsaWMgcmVjb25uZWN0YWJsZTogYm9vbGVhbiB8ICdzb3VyY2UnIHwgJ3RhcmdldCc7XG4gIHB1YmxpYyBmbG9hdGluZzogYm9vbGVhbjtcblxuICBwdWJsaWMgc2VsZWN0ZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwdWJsaWMgc2VsZWN0ZWQkID0gdG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWQpO1xuXG4gIHB1YmxpYyBzaG91bGRMb2FkID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuc291cmNlKCk/LnNob3VsZExvYWQoKSA/PyBmYWxzZSkgJiYgKHRoaXMudGFyZ2V0KCk/LnNob3VsZExvYWQoKSA/PyBmYWxzZSkpO1xuXG4gIHB1YmxpYyByZW5kZXJPcmRlciA9IHNpZ25hbCgwKTtcblxuICBwdWJsaWMgZGV0YWNoZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldCgpO1xuXG4gICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGV4aXN0c1NvdXJjZUhhbmRsZSA9IGZhbHNlO1xuICAgIGxldCBleGlzdHNUYXJnZXRIYW5kbGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmVkZ2Uuc291cmNlSGFuZGxlKSB7XG4gICAgICBleGlzdHNTb3VyY2VIYW5kbGUgPSAhIXNvdXJjZS5oYW5kbGVzKCkuZmluZCgoaGFuZGxlKSA9PiBoYW5kbGUucmF3SGFuZGxlLmlkID09PSB0aGlzLmVkZ2Uuc291cmNlSGFuZGxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RzU291cmNlSGFuZGxlID0gISFzb3VyY2UuaGFuZGxlcygpLmZpbmQoKGhhbmRsZSkgPT4gaGFuZGxlLnJhd0hhbmRsZS50eXBlID09PSAnc291cmNlJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRnZS50YXJnZXRIYW5kbGUpIHtcbiAgICAgIGV4aXN0c1RhcmdldEhhbmRsZSA9ICEhdGFyZ2V0LmhhbmRsZXMoKS5maW5kKChoYW5kbGUpID0+IGhhbmRsZS5yYXdIYW5kbGUuaWQgPT09IHRoaXMuZWRnZS50YXJnZXRIYW5kbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdHNUYXJnZXRIYW5kbGUgPSAhIXRhcmdldC5oYW5kbGVzKCkuZmluZCgoaGFuZGxlKSA9PiBoYW5kbGUucmF3SGFuZGxlLnR5cGUgPT09ICd0YXJnZXQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWV4aXN0c1NvdXJjZUhhbmRsZSB8fCAhZXhpc3RzVGFyZ2V0SGFuZGxlO1xuICB9KTtcblxuICBwdWJsaWMgZGV0YWNoZWQkID0gdG9PYnNlcnZhYmxlKHRoaXMuZGV0YWNoZWQpO1xuXG4gIHB1YmxpYyBwYXRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlSGFuZGxlKCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXRIYW5kbGUoKTtcblxuICAgIC8vIFRPRE86IGRvbid0IGxpa2UgdGhpc1xuICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcbiAgICAgIHJldHVybiB7IHBhdGg6ICcnIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRQYXRoRmFjdG9yeVBhcmFtcyhzb3VyY2UsIHRhcmdldCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuY3VydmUpIHtcbiAgICAgIGNhc2UgJ3N0cmFpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0UGF0aChwYXJhbXMpO1xuICAgICAgY2FzZSAnYmV6aWVyJzpcbiAgICAgICAgcmV0dXJuIGJlemllclBhdGgocGFyYW1zKTtcbiAgICAgIGNhc2UgJ3Ntb290aC1zdGVwJzpcbiAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcyk7XG4gICAgICBjYXNlICdzdGVwJzpcbiAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcywgMCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5jdXJ2ZShwYXJhbXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgcHVibGljIHNvdXJjZUhhbmRsZSA9IGV4dGVuZGVkQ29tcHV0ZWQ8SGFuZGxlTW9kZWwgfCBudWxsPigocHJldmlvdXNIYW5kbGUpID0+IHtcbiAgICBsZXQgaGFuZGxlOiBIYW5kbGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuZmxvYXRpbmcpIHtcbiAgICAgIGhhbmRsZSA9IHRoaXMuY2xvc2VzdEhhbmRsZXMoKS5zb3VyY2VIYW5kbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmVkZ2Uuc291cmNlSGFuZGxlKSB7XG4gICAgICAgIGhhbmRsZSA9XG4gICAgICAgICAgdGhpcy5zb3VyY2UoKVxuICAgICAgICAgICAgPy5oYW5kbGVzKClcbiAgICAgICAgICAgIC5maW5kKChoYW5kbGUpID0+IGhhbmRsZS5yYXdIYW5kbGUuaWQgPT09IHRoaXMuZWRnZS5zb3VyY2VIYW5kbGUpID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGUgPVxuICAgICAgICAgIHRoaXMuc291cmNlKClcbiAgICAgICAgICAgID8uaGFuZGxlcygpXG4gICAgICAgICAgICAuZmluZCgoaGFuZGxlKSA9PiBoYW5kbGUucmF3SGFuZGxlLnR5cGUgPT09ICdzb3VyY2UnKSA/PyBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgdmlydHVhbCBzY3JvbGxpbmcsIGlmIHRoZSBub2RlIGlzIHNjcm9sbGVkIG91dCBvZiB2aWV3IHRoZSBoYW5kbGUgbWF5IGRpc2FwcGVhclxuICAgIC8vIHdoaWNoIGNvdWxkIGxlYWQgdG8gdGhlIGVkZ2Ugbm90IGJlaW5nIHJlbmRlcmVkXG4gICAgLy8gc28gd2UgcmV0dXJuIHRoZSBwcmV2aW91cyBoYW5kbGUgaWYgdGhlIGN1cnJlbnQgb25lIGlzIG51bGxcbiAgICAvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGJyZWFrcyBhbnl0aGluZ1xuICAgIGlmIChoYW5kbGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBwcmV2aW91c0hhbmRsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlO1xuICB9KTtcblxuICBwdWJsaWMgdGFyZ2V0SGFuZGxlID0gZXh0ZW5kZWRDb21wdXRlZDxIYW5kbGVNb2RlbCB8IG51bGw+KChwcmV2aW91c0hhbmRsZSkgPT4ge1xuICAgIGxldCBoYW5kbGU6IEhhbmRsZU1vZGVsIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5mbG9hdGluZykge1xuICAgICAgaGFuZGxlID0gdGhpcy5jbG9zZXN0SGFuZGxlcygpLnRhcmdldEhhbmRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZWRnZS50YXJnZXRIYW5kbGUpIHtcbiAgICAgICAgaGFuZGxlID1cbiAgICAgICAgICB0aGlzLnRhcmdldCgpXG4gICAgICAgICAgICA/LmhhbmRsZXMoKVxuICAgICAgICAgICAgLmZpbmQoKGhhbmRsZSkgPT4gaGFuZGxlLnJhd0hhbmRsZS5pZCA9PT0gdGhpcy5lZGdlLnRhcmdldEhhbmRsZSkgPz8gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZSA9XG4gICAgICAgICAgdGhpcy50YXJnZXQoKVxuICAgICAgICAgICAgPy5oYW5kbGVzKClcbiAgICAgICAgICAgIC5maW5kKChoYW5kbGUpID0+IGhhbmRsZS5yYXdIYW5kbGUudHlwZSA9PT0gJ3RhcmdldCcpID8/IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBvZiB2aXJ0dWFsIHNjcm9sbGluZywgaWYgdGhlIG5vZGUgaXMgc2Nyb2xsZWQgb3V0IG9mIHZpZXcgdGhlIGhhbmRsZSBtYXkgZGlzYXBwZWFyXG4gICAgLy8gd2hpY2ggY291bGQgbGVhZCB0byB0aGUgZWRnZSBub3QgYmVpbmcgcmVuZGVyZWRcbiAgICAvLyBzbyB3ZSByZXR1cm4gdGhlIHByZXZpb3VzIGhhbmRsZSBpZiB0aGUgY3VycmVudCBvbmUgaXMgbnVsbFxuICAgIC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgYnJlYWtzIGFueXRoaW5nXG4gICAgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHByZXZpb3VzSGFuZGxlO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGU7XG4gIH0pO1xuXG4gIHB1YmxpYyBjbG9zZXN0SGFuZGxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0KCk7XG5cbiAgICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgICByZXR1cm4geyBzb3VyY2VIYW5kbGU6IG51bGwsIHRhcmdldEhhbmRsZTogbnVsbCB9O1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgc291cmNlIGhhbmRsZXMgZnJvbSBzb3VyY2Ugbm9kZVxuICAgIGNvbnN0IHNvdXJjZUhhbmRsZXMgPVxuICAgICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKS5tb2RlID09PSAnc3RyaWN0J1xuICAgICAgICA/IHNvdXJjZS5oYW5kbGVzKCkuZmlsdGVyKChoKSA9PiBoLnJhd0hhbmRsZS50eXBlID09PSAnc291cmNlJylcbiAgICAgICAgOiBzb3VyY2UuaGFuZGxlcygpO1xuICAgIC8vIEdldCBhbGwgdGFyZ2V0IGhhbmRsZXMgZnJvbSB0YXJnZXQgbm9kZVxuICAgIGNvbnN0IHRhcmdldEhhbmRsZXMgPVxuICAgICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKS5tb2RlID09PSAnc3RyaWN0J1xuICAgICAgICA/IHRhcmdldC5oYW5kbGVzKCkuZmlsdGVyKChoKSA9PiBoLnJhd0hhbmRsZS50eXBlID09PSAndGFyZ2V0JylcbiAgICAgICAgOiB0YXJnZXQuaGFuZGxlcygpO1xuXG4gICAgaWYgKHNvdXJjZUhhbmRsZXMubGVuZ3RoID09PSAwIHx8IHRhcmdldEhhbmRsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4geyBzb3VyY2VIYW5kbGU6IG51bGwsIHRhcmdldEhhbmRsZTogbnVsbCB9O1xuICAgIH1cblxuICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGxldCBjbG9zZXN0U291cmNlSGFuZGxlOiBIYW5kbGVNb2RlbCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjbG9zZXN0VGFyZ2V0SGFuZGxlOiBIYW5kbGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gQ2hlY2sgYWxsIGNvbWJpbmF0aW9ucyBvZiBzb3VyY2UgYW5kIHRhcmdldCBoYW5kbGVzXG4gICAgZm9yIChjb25zdCBzb3VyY2VIYW5kbGUgb2Ygc291cmNlSGFuZGxlcykge1xuICAgICAgZm9yIChjb25zdCB0YXJnZXRIYW5kbGUgb2YgdGFyZ2V0SGFuZGxlcykge1xuICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZUhhbmRsZS5wb2ludEFic29sdXRlKCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0SGFuZGxlLnBvaW50QWJzb2x1dGUoKTtcblxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChcbiAgICAgICAgICBNYXRoLnBvdyhzb3VyY2VQb2ludC54IC0gdGFyZ2V0UG9pbnQueCwgMikgKyBNYXRoLnBvdyhzb3VyY2VQb2ludC55IC0gdGFyZ2V0UG9pbnQueSwgMiksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgIGNsb3Nlc3RTb3VyY2VIYW5kbGUgPSBzb3VyY2VIYW5kbGU7XG4gICAgICAgICAgY2xvc2VzdFRhcmdldEhhbmRsZSA9IHRhcmdldEhhbmRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2VIYW5kbGU6IGNsb3Nlc3RTb3VyY2VIYW5kbGUsXG4gICAgICB0YXJnZXRIYW5kbGU6IGNsb3Nlc3RUYXJnZXRIYW5kbGUsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRPRE86IG5vdCByZWFjdGl2ZVxuICAgKi9cbiAgcHVibGljIG1hcmtlclN0YXJ0VXJsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMuZWRnZS5tYXJrZXJzPy5zdGFydDtcblxuICAgIHJldHVybiBtYXJrZXIgPyBgdXJsKCMke2hhc2hDb2RlKEpTT04uc3RyaW5naWZ5KG1hcmtlcikpfSlgIDogJyc7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUT0RPOiBub3QgcmVhY3RpdmVcbiAgICovXG4gIHB1YmxpYyBtYXJrZXJFbmRVcmwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5lZGdlLm1hcmtlcnM/LmVuZDtcblxuICAgIHJldHVybiBtYXJrZXIgPyBgdXJsKCMke2hhc2hDb2RlKEpTT04uc3RyaW5naWZ5KG1hcmtlcikpfSlgIDogJyc7XG4gIH0pO1xuXG4gIHB1YmxpYyBjb250ZXh0ID0ge1xuICAgICRpbXBsaWNpdDoge1xuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgZWRnZSBjb3VsZCBjaGFuZ2VcbiAgICAgIGVkZ2U6IHRoaXMuZWRnZSxcbiAgICAgIHBhdGg6IGNvbXB1dGVkKCgpID0+IHRoaXMucGF0aCgpLnBhdGgpLFxuICAgICAgbWFya2VyU3RhcnQ6IHRoaXMubWFya2VyU3RhcnRVcmwsXG4gICAgICBtYXJrZXJFbmQ6IHRoaXMubWFya2VyRW5kVXJsLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQuYXNSZWFkb25seSgpLFxuICAgICAgc2hvdWxkTG9hZDogdGhpcy5zaG91bGRMb2FkLFxuICAgIH0sXG4gIH07XG5cbiAgcHVibGljIGVkZ2VMYWJlbHM6IHsgW3Bvc2l0aW9uIGluIEVkZ2VMYWJlbFBvc2l0aW9uXT86IEVkZ2VMYWJlbE1vZGVsIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWRnZTogRWRnZSkge1xuICAgIHRoaXMudHlwZSA9IGVkZ2UudHlwZSA/PyAnZGVmYXVsdCc7XG4gICAgdGhpcy5jdXJ2ZSA9IGVkZ2UuY3VydmUgPz8gJ2Jlemllcic7XG4gICAgdGhpcy5yZWNvbm5lY3RhYmxlID0gZWRnZS5yZWNvbm5lY3RhYmxlID8/IGZhbHNlO1xuICAgIHRoaXMuZmxvYXRpbmcgPSBlZGdlLmZsb2F0aW5nID8/IGZhbHNlO1xuXG4gICAgaWYgKGVkZ2UuZWRnZUxhYmVscz8uc3RhcnQpIHRoaXMuZWRnZUxhYmVscy5zdGFydCA9IG5ldyBFZGdlTGFiZWxNb2RlbChlZGdlLmVkZ2VMYWJlbHMuc3RhcnQpO1xuICAgIGlmIChlZGdlLmVkZ2VMYWJlbHM/LmNlbnRlcikgdGhpcy5lZGdlTGFiZWxzLmNlbnRlciA9IG5ldyBFZGdlTGFiZWxNb2RlbChlZGdlLmVkZ2VMYWJlbHMuY2VudGVyKTtcbiAgICBpZiAoZWRnZS5lZGdlTGFiZWxzPy5lbmQpIHRoaXMuZWRnZUxhYmVscy5lbmQgPSBuZXcgRWRnZUxhYmVsTW9kZWwoZWRnZS5lZGdlTGFiZWxzLmVuZCk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhdGhGYWN0b3J5UGFyYW1zKHNvdXJjZTogSGFuZGxlTW9kZWwsIHRhcmdldDogSGFuZGxlTW9kZWwpOiBDdXJ2ZUZhY3RvcnlQYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiAnZWRnZScsXG4gICAgICBlZGdlOiB0aGlzLmVkZ2UsXG4gICAgICBzb3VyY2VQb2ludDogc291cmNlLnBvaW50QWJzb2x1dGUoKSxcbiAgICAgIHRhcmdldFBvaW50OiB0YXJnZXQucG9pbnRBYnNvbHV0ZSgpLFxuICAgICAgc291cmNlUG9zaXRpb246IHNvdXJjZS5yYXdIYW5kbGUucG9zaXRpb24sXG4gICAgICB0YXJnZXRQb3NpdGlvbjogdGFyZ2V0LnJhd0hhbmRsZS5wb3NpdGlvbixcbiAgICAgIGFsbEVkZ2VzOiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UucmF3RWRnZXMoKSxcbiAgICAgIGFsbE5vZGVzOiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UucmF3Tm9kZXMoKSxcbiAgICB9O1xuICB9XG59XG4iXX0=