ngx-vflow 1.6.1 → 1.7.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 (43) hide show
  1. package/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +2 -2
  2. package/esm2022/lib/vflow/components/node/node.component.mjs +5 -4
  3. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +11 -10
  4. package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +5 -5
  5. package/esm2022/lib/vflow/directives/node-resize-controller.directive.mjs +4 -1
  6. package/esm2022/lib/vflow/directives/template.directive.mjs +18 -1
  7. package/esm2022/lib/vflow/interfaces/node.interface.mjs +7 -1
  8. package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +1 -1
  9. package/esm2022/lib/vflow/models/handle.model.mjs +2 -2
  10. package/esm2022/lib/vflow/models/node.model.mjs +48 -70
  11. package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +5 -5
  12. package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +105 -44
  13. package/esm2022/lib/vflow/services/draggable.service.mjs +2 -4
  14. package/esm2022/lib/vflow/services/flow-entities.service.mjs +2 -2
  15. package/esm2022/lib/vflow/services/node-changes.service.mjs +6 -6
  16. package/esm2022/lib/vflow/services/overlays.service.mjs +4 -3
  17. package/esm2022/lib/vflow/services/viewport.service.mjs +2 -2
  18. package/esm2022/lib/vflow/testing-utils/directive-mocks/template-mock.directive.mjs +15 -1
  19. package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +2 -2
  20. package/esm2022/lib/vflow/utils/align-number.mjs +4 -0
  21. package/esm2022/lib/vflow/utils/identity-checker/reference-identity-checker.mjs +31 -0
  22. package/esm2022/lib/vflow/utils/is-group-node.mjs +2 -2
  23. package/esm2022/lib/vflow/utils/to-unified-node.mjs +24 -0
  24. package/esm2022/lib/vflow/vflow.mjs +3 -2
  25. package/fesm2022/ngx-vflow.mjs +251 -147
  26. package/fesm2022/ngx-vflow.mjs.map +1 -1
  27. package/lib/vflow/components/node/node.component.d.ts +3 -2
  28. package/lib/vflow/components/vflow/vflow.component.d.ts +4 -3
  29. package/lib/vflow/directives/node-resize-controller.directive.d.ts +3 -0
  30. package/lib/vflow/directives/template.directive.d.ts +7 -1
  31. package/lib/vflow/interfaces/node.interface.d.ts +16 -2
  32. package/lib/vflow/interfaces/template-context.interface.d.ts +8 -0
  33. package/lib/vflow/models/node.model.d.ts +13 -17
  34. package/lib/vflow/public-components/minimap/minimap.component.d.ts +1 -1
  35. package/lib/vflow/public-components/resizable/resizable.component.d.ts +2 -0
  36. package/lib/vflow/services/overlays.service.d.ts +2 -2
  37. package/lib/vflow/testing-utils/directive-mocks/template-mock.directive.d.ts +5 -0
  38. package/lib/vflow/utils/align-number.d.ts +1 -0
  39. package/lib/vflow/utils/{reference-keeper.d.ts → identity-checker/reference-identity-checker.d.ts} +5 -5
  40. package/lib/vflow/utils/to-unified-node.d.ts +2 -0
  41. package/lib/vflow/vflow.d.ts +2 -2
  42. package/package.json +1 -1
  43. package/esm2022/lib/vflow/utils/reference-keeper.mjs +0 -31
@@ -95,14 +95,14 @@ export class MiniMapComponent {
95
95
  model.template.set(this.minimap());
96
96
  this.entitiesService.minimap.set(model);
97
97
  }
98
- trackNodes(idx, { node }) {
99
- return node;
98
+ trackNodes(idx, { rawNode }) {
99
+ return rawNode;
100
100
  }
101
101
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MiniMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
102
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MiniMapComponent, isStandalone: true, selector: "mini-map", inputs: { maskColor: { classPropertyName: "maskColor", publicName: "maskColor", isSignal: true, isRequired: false, transformFunction: null }, strokeColor: { classPropertyName: "strokeColor", publicName: "strokeColor", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, scaleOnHover: { classPropertyName: "scaleOnHover", publicName: "scaleOnHover", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "minimap", first: true, predicate: ["minimap"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #minimap>\n <svg:rect\n fill=\"none\"\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\" />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\">\n <svg:rect [attr.width]=\"minimapWidth()\" [attr.height]=\"minimapHeight()\" [attr.fill]=\"maskColor()\" />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\" />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\">\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\">\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (model.node.type === 'default-group' || model.node.type === 'template-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\" />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"], dependencies: [{ kind: "component", type: DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MiniMapComponent, isStandalone: true, selector: "mini-map", inputs: { maskColor: { classPropertyName: "maskColor", publicName: "maskColor", isSignal: true, isRequired: false, transformFunction: null }, strokeColor: { classPropertyName: "strokeColor", publicName: "strokeColor", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, scaleOnHover: { classPropertyName: "scaleOnHover", publicName: "scaleOnHover", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "minimap", first: true, predicate: ["minimap"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #minimap>\n <svg:rect\n fill=\"none\"\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\" />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\">\n <svg:rect [attr.width]=\"minimapWidth()\" [attr.height]=\"minimapHeight()\" [attr.fill]=\"maskColor()\" />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\" />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (model.rawNode.type === 'default' || model.rawNode.type === 'html-template' || model.isComponentType) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\">\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\">\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (model.rawNode.type === 'default-group' || model.rawNode.type === 'template-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\" />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"], dependencies: [{ kind: "component", type: DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
103
103
  }
104
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MiniMapComponent, decorators: [{
105
105
  type: Component,
106
- args: [{ standalone: true, selector: 'mini-map', imports: [DefaultNodeComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #minimap>\n <svg:rect\n fill=\"none\"\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\" />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\">\n <svg:rect [attr.width]=\"minimapWidth()\" [attr.height]=\"minimapHeight()\" [attr.fill]=\"maskColor()\" />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\" />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\">\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\">\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (model.node.type === 'default-group' || model.node.type === 'template-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\" />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"] }]
106
+ args: [{ standalone: true, selector: 'mini-map', imports: [DefaultNodeComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #minimap>\n <svg:rect\n fill=\"none\"\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\" />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\">\n <svg:rect [attr.width]=\"minimapWidth()\" [attr.height]=\"minimapHeight()\" [attr.fill]=\"maskColor()\" />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\" />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (model.rawNode.type === 'default' || model.rawNode.type === 'html-template' || model.isComponentType) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\">\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\">\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (model.rawNode.type === 'default-group' || model.rawNode.type === 'template-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\" />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"] }]
107
107
  }] });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvbWluaW1hcC9taW5pbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9taW5pbWFwL21pbmltYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsR0FDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7O0FBWTVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFSN0I7UUFTWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlDLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEM7O1dBRUc7UUFDSSxjQUFTLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFckQ7O1dBRUc7UUFDSSxnQkFBVyxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWpEOztXQUVHO1FBQ0ksYUFBUSxHQUFHLEtBQUssQ0FBa0IsY0FBYyxDQUFDLENBQUM7UUFFekQ7O1dBRUc7UUFDSSxpQkFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixZQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBdUIsU0FBUyxDQUFDLENBQUM7UUFFckQsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFFbkIsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwQyxDQUFDO1lBRUQsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztRQUVPLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFakQsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUM5QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDO1lBQzVCLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVPLFlBQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssVUFBVTtvQkFDYixPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDMUQsS0FBSyxXQUFXO29CQUNkLE9BQU87d0JBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYTt3QkFDMUYsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhO3FCQUN0QixDQUFDO2dCQUNKLEtBQUssYUFBYTtvQkFDaEIsT0FBTzt3QkFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWE7d0JBQ3JCLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWE7cUJBQzdGLENBQUM7Z0JBQ0osS0FBSyxjQUFjO29CQUNqQixPQUFPO3dCQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWE7d0JBQzFGLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWE7cUJBQzdGLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTyxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNsRyxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVwRyxzQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6RCxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUU5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEQsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUV6QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDcEQsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUV6QixLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRTdCLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRU8sbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFM0MsT0FBTyxvQkFBb0IsQ0FDekIsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsRUFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQzdDLENBQUMsUUFBUSxFQUNULEdBQUcsRUFDSCxDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRU8scUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFcEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFL0MsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7S0FZSjtJQVZRLFFBQVE7UUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxFQUFFLElBQUksRUFBYTtRQUNuRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBMUhVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLGd1QkMvQjdCLGd6RUEyREEsa0tEL0JZLG9CQUFvQjs7NEZBR25CLGdCQUFnQjtrQkFSNUIsU0FBUztpQ0FDSSxJQUFJLFlBQ04sVUFBVSxXQUdYLENBQUMsb0JBQW9CLENBQUMsbUJBQ2QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uSW5pdCxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgaW5wdXQsXG4gIHZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBNaW5pbWFwTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWluaW1hcC5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFZpZXdwb3J0Rm9yQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmlld3BvcnQnO1xuaW1wb3J0IHsgZ2V0Tm9kZXNCb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscy9ub2Rlcyc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IERlZmF1bHROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kZWZhdWx0LW5vZGUvZGVmYXVsdC1ub2RlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIE1pbmlNYXBQb3NpdGlvbiA9ICd0b3AtbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfCAnYm90dG9tLXJpZ2h0JztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnbWluaS1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWluaW1hcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW2AuL21pbmltYXAuY29tcG9uZW50LnNjc3NgXSxcbiAgaW1wb3J0czogW0RlZmF1bHROb2RlQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1pbmlNYXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcm90ZWN0ZWQgZW50aXRpZXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dFbnRpdGllc1NlcnZpY2UpO1xuICBwcm90ZWN0ZWQgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb3V0c2lkZSB0aGUgdmlld3BvcnQgKGludmlzaWJsZSBhcmVhKVxuICAgKi9cbiAgcHVibGljIG1hc2tDb2xvciA9IGlucHV0KGByZ2JhKDIxNSwgMjE1LCAyMTUsIDAuNilgKTtcblxuICAvKipcbiAgICogVGhlIG1pbmltYXAgc3Ryb2tlIGNvbG9yXG4gICAqL1xuICBwdWJsaWMgc3Ryb2tlQ29sb3IgPSBpbnB1dChgcmdiKDIwMCwgMjAwLCAyMDApYCk7XG5cbiAgLyoqXG4gICAqIFRoZSBjb3JuZXIgb2YgdGhlIGZsb3cgd2hlcmUgdG8gcmVuZGVyIGEgbWluaS1tYXBcbiAgICovXG4gIHB1YmxpYyBwb3NpdGlvbiA9IGlucHV0PE1pbmlNYXBQb3NpdGlvbj4oJ2JvdHRvbS1yaWdodCcpO1xuXG4gIC8qKlxuICAgKiBNYWtlIGEgbWluaW1hcCBiaWdnZXIgb24gaG92ZXJcbiAgICovXG4gIHB1YmxpYyBzY2FsZU9uSG92ZXIgPSBpbnB1dChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBtaW5pbWFwID0gdmlld0NoaWxkLnJlcXVpcmVkPFRlbXBsYXRlUmVmPHVua25vd24+PignbWluaW1hcCcpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWluaW1hcE9mZnNldCA9IDEwO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWluaW1hcFNjYWxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLnNjYWxlT25Ib3ZlcigpKSB7XG4gICAgICByZXR1cm4gdGhpcy5ob3ZlcmVkKCkgPyAwLjQgOiAwLjI7XG4gICAgfVxuXG4gICAgcmV0dXJuIDAuMjtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHZpZXdwb3J0Q29sb3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmcgPSB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuYmFja2dyb3VuZCgpO1xuXG4gICAgaWYgKGJnLnR5cGUgPT09ICdkb3RzJyB8fCBiZy50eXBlID09PSAnc29saWQnKSB7XG4gICAgICByZXR1cm4gYmcuY29sb3IgPz8gJyNmZmYnO1xuICAgIH1cblxuICAgIHJldHVybiAnI2ZmZic7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBob3ZlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgbWluaW1hcFBvaW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5wb3NpdGlvbigpKSB7XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7IHg6IHRoaXMubWluaW1hcE9mZnNldCwgeTogdGhpcy5taW5pbWFwT2Zmc2V0IH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dXaWR0aCgpIC0gdGhpcy5taW5pbWFwV2lkdGgoKSAtIHRoaXMubWluaW1hcE9mZnNldCxcbiAgICAgICAgICB5OiB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICAgIHk6IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dIZWlnaHQoKSAtIHRoaXMubWluaW1hcEhlaWdodCgpIC0gdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAtIHRoaXMubWluaW1hcFdpZHRoKCkgLSB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpIC0gdGhpcy5taW5pbWFwSGVpZ2h0KCkgLSB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBwcm90ZWN0ZWQgbWluaW1hcFdpZHRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd1dpZHRoKCkgKiB0aGlzLm1pbmltYXBTY2FsZSgpKTtcbiAgcHJvdGVjdGVkIG1pbmltYXBIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93SGVpZ2h0KCkgKiB0aGlzLm1pbmltYXBTY2FsZSgpKTtcblxuICBwcm90ZWN0ZWQgdmlld3BvcnRUcmFuc2Zvcm0gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCk7XG4gICAgbGV0IHNjYWxlID0gMSAvIHZpZXdwb3J0Lnpvb207XG5cbiAgICBsZXQgeCA9IC0odmlld3BvcnQueCAqIHRoaXMubWluaW1hcFNjYWxlKCkpICogc2NhbGU7XG4gICAgeCAvPSB0aGlzLm1pbmltYXBTY2FsZSgpO1xuXG4gICAgbGV0IHkgPSAtKHZpZXdwb3J0LnkgKiB0aGlzLm1pbmltYXBTY2FsZSgpKSAqIHNjYWxlO1xuICAgIHkgLz0gdGhpcy5taW5pbWFwU2NhbGUoKTtcblxuICAgIHNjYWxlIC89IHRoaXMubWluaW1hcFNjYWxlKCk7XG5cbiAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCAke3l9KSBzY2FsZSgke3NjYWxlfSlgO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgYm91bmRzVmlld3BvcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmVudGl0aWVzU2VydmljZS5ub2RlcygpO1xuXG4gICAgcmV0dXJuIGdldFZpZXdwb3J0Rm9yQm91bmRzKFxuICAgICAgZ2V0Tm9kZXNCb3VuZHMobm9kZXMpLFxuICAgICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd1dpZHRoKCksXG4gICAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93SGVpZ2h0KCksXG4gICAgICAtSW5maW5pdHksXG4gICAgICAxLjUsXG4gICAgICAwLFxuICAgICk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBtaW5pbWFwVHJhbnNmb3JtID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZwb3J0ID0gdGhpcy5ib3VuZHNWaWV3cG9ydCgpO1xuXG4gICAgY29uc3QgeCA9IHZwb3J0LnggKiB0aGlzLm1pbmltYXBTY2FsZSgpO1xuICAgIGNvbnN0IHkgPSB2cG9ydC55ICogdGhpcy5taW5pbWFwU2NhbGUoKTtcbiAgICBjb25zdCBzY2FsZSA9IHZwb3J0Lnpvb20gKiB0aGlzLm1pbmltYXBTY2FsZSgpO1xuXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4fSAke3l9KSBzY2FsZSgke3NjYWxlfSlgO1xuICB9KTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTWluaW1hcE1vZGVsKCk7XG4gICAgbW9kZWwudGVtcGxhdGUuc2V0KHRoaXMubWluaW1hcCgpKTtcblxuICAgIHRoaXMuZW50aXRpZXNTZXJ2aWNlLm1pbmltYXAuc2V0KG1vZGVsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja05vZGVzKGlkeDogbnVtYmVyLCB7IG5vZGUgfTogTm9kZU1vZGVsKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbWluaW1hcD5cbiAgPHN2ZzpyZWN0XG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIFthdHRyLnhdPVwibWluaW1hcFBvaW50KCkueFwiXG4gICAgW2F0dHIueV09XCJtaW5pbWFwUG9pbnQoKS55XCJcbiAgICBbYXR0ci53aWR0aF09XCJtaW5pbWFwV2lkdGgoKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgW2F0dHIuc3Ryb2tlXT1cInN0cm9rZUNvbG9yKClcIiAvPlxuXG4gIDxzdmc6c3ZnXG4gICAgW2F0dHIueF09XCJtaW5pbWFwUG9pbnQoKS54XCJcbiAgICBbYXR0ci55XT1cIm1pbmltYXBQb2ludCgpLnlcIlxuICAgIFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibWluaW1hcEhlaWdodCgpXCJcbiAgICAobW91c2VvdmVyKT1cImhvdmVyZWQuc2V0KHRydWUpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkLnNldChmYWxzZSlcIj5cbiAgICA8c3ZnOnJlY3QgW2F0dHIud2lkdGhdPVwibWluaW1hcFdpZHRoKClcIiBbYXR0ci5oZWlnaHRdPVwibWluaW1hcEhlaWdodCgpXCIgW2F0dHIuZmlsbF09XCJtYXNrQ29sb3IoKVwiIC8+XG5cbiAgICA8c3ZnOmcgW2F0dHIudHJhbnNmb3JtXT1cIm1pbmltYXBUcmFuc2Zvcm0oKVwiPlxuICAgICAgPHN2ZzpyZWN0XG4gICAgICAgIFthdHRyLmZpbGxdPVwidmlld3BvcnRDb2xvcigpXCJcbiAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cInZpZXdwb3J0VHJhbnNmb3JtKClcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJtaW5pbWFwV2lkdGgoKVwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJtaW5pbWFwSGVpZ2h0KClcIiAvPlxuXG4gICAgICBAZm9yIChtb2RlbCBvZiBlbnRpdGllc1NlcnZpY2Uubm9kZXMoKTsgdHJhY2sgdHJhY2tOb2RlcygkaW5kZXgsIG1vZGVsKSkge1xuICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgIEBpZiAobW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCcgfHwgbW9kZWwubm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgfHwgbW9kZWwuaXNDb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICAgICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIlxuICAgICAgICAgICAgICBbYXR0ci53aWR0aF09XCJtb2RlbC5zaXplKCkud2lkdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiPlxuICAgICAgICAgICAgICA8ZGVmYXVsdC1ub2RlXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm1vZGVsLnNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJtb2RlbC5zaXplKCkud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJtb2RlbC5zaXplKCkud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtvdXRlckhUTUxdPVwibW9kZWwudGV4dCgpXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGVmYXVsdC1ub2RlPlxuICAgICAgICAgICAgPC9zdmc6Zm9yZWlnbk9iamVjdD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChtb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJyB8fCBtb2RlbC5ub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCcpIHtcbiAgICAgICAgICAgIDxzdmc6cmVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImRlZmF1bHQtZ3JvdXAtbm9kZVwiXG4gICAgICAgICAgICAgIHJ4PVwiNVwiXG4gICAgICAgICAgICAgIHJ5PVwiNVwiXG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRlZmF1bHQtZ3JvdXAtbm9kZV9zZWxlY3RlZF09XCJtb2RlbC5zZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAgICAgICAgICAgICBbc3R5bGUuc3Ryb2tlXT1cIm1vZGVsLmNvbG9yKClcIlxuICAgICAgICAgICAgICBbc3R5bGUuZmlsbF09XCJtb2RlbC5jb2xvcigpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIDwvc3ZnOmc+XG4gIDwvc3ZnOnN2Zz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvbWluaW1hcC9taW5pbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9taW5pbWFwL21pbmltYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFFUixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsR0FDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7O0FBWTVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFSN0I7UUFTWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlDLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLGFB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QUMsY0FBYyxFQUFFLENBQUM7WUFFcEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFL0MsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7S0FZSjtJQVZRLFFBQVE7UUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBYTtRQUN0RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOytHQTFIVSxnQkFBZ0I7bUdBQWhCLGdCQUFnQixndUJDL0I3Qiw0ekVBMkRBLGtLRC9CWSxvQkFBb0I7OzRGQUduQixnQkFBZ0I7a0JBUjVCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFVBQVUsV0FHWCxDQUFDLG9CQUFvQixDQUFDLG1CQUNkLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LWVudGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWluaW1hcE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL21pbmltYXAubW9kZWwnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBnZXRWaWV3cG9ydEZvckJvdW5kcyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZpZXdwb3J0JztcbmltcG9ydCB7IGdldE5vZGVzQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9kZXMnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEZWZhdWx0Tm9kZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGVmYXVsdC1ub2RlL2RlZmF1bHQtbm9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBNaW5pTWFwUG9zaXRpb24gPSAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ21pbmktbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21pbmltYXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtgLi9taW5pbWFwLmNvbXBvbmVudC5zY3NzYF0sXG4gIGltcG9ydHM6IFtEZWZhdWx0Tm9kZUNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNaW5pTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJvdGVjdGVkIGVudGl0aWVzU2VydmljZSA9IGluamVjdChGbG93RW50aXRpZXNTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG4gIHByb3RlY3RlZCB2aWV3cG9ydFNlcnZpY2UgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAvKipcbiAgICogVGhlIGNvbG9yIG91dHNpZGUgdGhlIHZpZXdwb3J0IChpbnZpc2libGUgYXJlYSlcbiAgICovXG4gIHB1YmxpYyBtYXNrQ29sb3IgPSBpbnB1dChgcmdiYSgyMTUsIDIxNSwgMjE1LCAwLjYpYCk7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbWFwIHN0cm9rZSBjb2xvclxuICAgKi9cbiAgcHVibGljIHN0cm9rZUNvbG9yID0gaW5wdXQoYHJnYigyMDAsIDIwMCwgMjAwKWApO1xuXG4gIC8qKlxuICAgKiBUaGUgY29ybmVyIG9mIHRoZSBmbG93IHdoZXJlIHRvIHJlbmRlciBhIG1pbmktbWFwXG4gICAqL1xuICBwdWJsaWMgcG9zaXRpb24gPSBpbnB1dDxNaW5pTWFwUG9zaXRpb24+KCdib3R0b20tcmlnaHQnKTtcblxuICAvKipcbiAgICogTWFrZSBhIG1pbmltYXAgYmlnZ2VyIG9uIGhvdmVyXG4gICAqL1xuICBwdWJsaWMgc2NhbGVPbkhvdmVyID0gaW5wdXQoZmFsc2UpO1xuXG4gIHByaXZhdGUgbWluaW1hcCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oJ21pbmltYXAnKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltYXBPZmZzZXQgPSAxMDtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltYXBTY2FsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5zY2FsZU9uSG92ZXIoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaG92ZXJlZCgpID8gMC40IDogMC4yO1xuICAgIH1cblxuICAgIHJldHVybiAwLjI7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCB2aWV3cG9ydENvbG9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJnID0gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmQoKTtcblxuICAgIGlmIChiZy50eXBlID09PSAnZG90cycgfHwgYmcudHlwZSA9PT0gJ3NvbGlkJykge1xuICAgICAgcmV0dXJuIGJnLmNvbG9yID8/ICcjZmZmJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyNmZmYnO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaG92ZXJlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIG1pbmltYXBQb2ludCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb24oKSkge1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyB4OiB0aGlzLm1pbmltYXBPZmZzZXQsIHk6IHRoaXMubWluaW1hcE9mZnNldCB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAtIHRoaXMubWluaW1hcFdpZHRoKCkgLSB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHRoaXMubWluaW1hcE9mZnNldCxcbiAgICAgICAgICB5OiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93SGVpZ2h0KCkgLSB0aGlzLm1pbmltYXBIZWlnaHQoKSAtIHRoaXMubWluaW1hcE9mZnNldCxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeDogdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd1dpZHRoKCkgLSB0aGlzLm1pbmltYXBXaWR0aCgpIC0gdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICAgIHk6IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dIZWlnaHQoKSAtIHRoaXMubWluaW1hcEhlaWdodCgpIC0gdGhpcy5taW5pbWFwT2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG1pbmltYXBXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dXaWR0aCgpICogdGhpcy5taW5pbWFwU2NhbGUoKSk7XG4gIHByb3RlY3RlZCBtaW5pbWFwSGVpZ2h0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpICogdGhpcy5taW5pbWFwU2NhbGUoKSk7XG5cbiAgcHJvdGVjdGVkIHZpZXdwb3J0VHJhbnNmb3JtID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpO1xuICAgIGxldCBzY2FsZSA9IDEgLyB2aWV3cG9ydC56b29tO1xuXG4gICAgbGV0IHggPSAtKHZpZXdwb3J0LnggKiB0aGlzLm1pbmltYXBTY2FsZSgpKSAqIHNjYWxlO1xuICAgIHggLz0gdGhpcy5taW5pbWFwU2NhbGUoKTtcblxuICAgIGxldCB5ID0gLSh2aWV3cG9ydC55ICogdGhpcy5taW5pbWFwU2NhbGUoKSkgKiBzY2FsZTtcbiAgICB5IC89IHRoaXMubWluaW1hcFNjYWxlKCk7XG5cbiAgICBzY2FsZSAvPSB0aGlzLm1pbmltYXBTY2FsZSgpO1xuXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSkgc2NhbGUoJHtzY2FsZX0pYDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGJvdW5kc1ZpZXdwb3J0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5lbnRpdGllc1NlcnZpY2Uubm9kZXMoKTtcblxuICAgIHJldHVybiBnZXRWaWV3cG9ydEZvckJvdW5kcyhcbiAgICAgIGdldE5vZGVzQm91bmRzKG5vZGVzKSxcbiAgICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dXaWR0aCgpLFxuICAgICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpLFxuICAgICAgLUluZmluaXR5LFxuICAgICAgMS41LFxuICAgICAgMCxcbiAgICApO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgbWluaW1hcFRyYW5zZm9ybSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2cG9ydCA9IHRoaXMuYm91bmRzVmlld3BvcnQoKTtcblxuICAgIGNvbnN0IHggPSB2cG9ydC54ICogdGhpcy5taW5pbWFwU2NhbGUoKTtcbiAgICBjb25zdCB5ID0gdnBvcnQueSAqIHRoaXMubWluaW1hcFNjYWxlKCk7XG4gICAgY29uc3Qgc2NhbGUgPSB2cG9ydC56b29tICogdGhpcy5taW5pbWFwU2NhbGUoKTtcblxuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eH0gJHt5fSkgc2NhbGUoJHtzY2FsZX0pYDtcbiAgfSk7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1pbmltYXBNb2RlbCgpO1xuICAgIG1vZGVsLnRlbXBsYXRlLnNldCh0aGlzLm1pbmltYXAoKSk7XG5cbiAgICB0aGlzLmVudGl0aWVzU2VydmljZS5taW5pbWFwLnNldChtb2RlbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyByYXdOb2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiByYXdOb2RlO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI21pbmltYXA+XG4gIDxzdmc6cmVjdFxuICAgIGZpbGw9XCJub25lXCJcbiAgICBbYXR0ci54XT1cIm1pbmltYXBQb2ludCgpLnhcIlxuICAgIFthdHRyLnldPVwibWluaW1hcFBvaW50KCkueVwiXG4gICAgW2F0dHIud2lkdGhdPVwibWluaW1hcFdpZHRoKClcIlxuICAgIFthdHRyLmhlaWdodF09XCJtaW5pbWFwSGVpZ2h0KClcIlxuICAgIFthdHRyLnN0cm9rZV09XCJzdHJva2VDb2xvcigpXCIgLz5cblxuICA8c3ZnOnN2Z1xuICAgIFthdHRyLnhdPVwibWluaW1hcFBvaW50KCkueFwiXG4gICAgW2F0dHIueV09XCJtaW5pbWFwUG9pbnQoKS55XCJcbiAgICBbYXR0ci53aWR0aF09XCJtaW5pbWFwV2lkdGgoKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgKG1vdXNlb3Zlcik9XCJob3ZlcmVkLnNldCh0cnVlKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZC5zZXQoZmFsc2UpXCI+XG4gICAgPHN2ZzpyZWN0IFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCIgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiIFthdHRyLmZpbGxdPVwibWFza0NvbG9yKClcIiAvPlxuXG4gICAgPHN2ZzpnIFthdHRyLnRyYW5zZm9ybV09XCJtaW5pbWFwVHJhbnNmb3JtKClcIj5cbiAgICAgIDxzdmc6cmVjdFxuICAgICAgICBbYXR0ci5maWxsXT1cInZpZXdwb3J0Q29sb3IoKVwiXG4gICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJ2aWV3cG9ydFRyYW5zZm9ybSgpXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwibWluaW1hcFdpZHRoKClcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwibWluaW1hcEhlaWdodCgpXCIgLz5cblxuICAgICAgQGZvciAobW9kZWwgb2YgZW50aXRpZXNTZXJ2aWNlLm5vZGVzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICBAaWYgKG1vZGVsLnJhd05vZGUudHlwZSA9PT0gJ2RlZmF1bHQnIHx8IG1vZGVsLnJhd05vZGUudHlwZSA9PT0gJ2h0bWwtdGVtcGxhdGUnIHx8IG1vZGVsLmlzQ29tcG9uZW50VHlwZSkge1xuICAgICAgICAgICAgPHN2Zzpmb3JlaWduT2JqZWN0XG4gICAgICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCJcbiAgICAgICAgICAgICAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIj5cbiAgICAgICAgICAgICAgPGRlZmF1bHQtbm9kZVxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJtb2RlbC5zZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm1vZGVsLnNpemUoKS5oZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJtb2RlbC5zaXplKCkuaGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbb3V0ZXJIVE1MXT1cIm1vZGVsLnRleHQoKVwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L2RlZmF1bHQtbm9kZT5cbiAgICAgICAgICAgIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobW9kZWwucmF3Tm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCcgfHwgbW9kZWwucmF3Tm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnKSB7XG4gICAgICAgICAgICA8c3ZnOnJlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJkZWZhdWx0LWdyb3VwLW5vZGVcIlxuICAgICAgICAgICAgICByeD1cIjVcIlxuICAgICAgICAgICAgICByeT1cIjVcIlxuICAgICAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibW9kZWwuc2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFthdHRyLndpZHRoXT1cIm1vZGVsLnNpemUoKS53aWR0aFwiXG4gICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJtb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgICAgICAgICAgICAgW3N0eWxlLnN0cm9rZV09XCJtb2RlbC5jb2xvcigpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmZpbGxdPVwibW9kZWwuY29sb3IoKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L3N2ZzpnPlxuICA8L3N2Zzpzdmc+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -10,6 +10,8 @@ import { getNodesBounds } from '../../utils/nodes';
10
10
  import { NodeAccessorService } from '../../services/node-accessor.service';
11
11
  import { SpacePointContextDirective } from '../../directives/space-point-context.directive';
12
12
  import { PointerDirective } from '../../directives/pointer.directive';
13
+ import { FlowSettingsService } from '../../services/flow-settings.service';
14
+ import { align } from '../../utils/align-number';
13
15
  import * as i0 from "@angular/core";
14
16
  export class ResizableComponent {
15
17
  get model() {
@@ -20,6 +22,7 @@ export class ResizableComponent {
20
22
  this.rootPointer = inject(RootPointerDirective);
21
23
  this.viewportService = inject(ViewportService);
22
24
  this.spacePointContext = inject(SpacePointContextDirective);
25
+ this.settingsService = inject(FlowSettingsService);
23
26
  this.hostRef = inject(ElementRef);
24
27
  this.resizable = input();
25
28
  this.resizerColor = input('#2e414c');
@@ -64,7 +67,7 @@ export class ResizableComponent {
64
67
  if (!this.resizeSide)
65
68
  return;
66
69
  const offset = calcOffset(event.movementX, event.movementY, this.zoom());
67
- const resized = applyResize(this.resizeSide, this.model, offset, this.getDistanceToEdge(event));
70
+ const resized = this.applyResize(this.resizeSide, this.model, offset, this.getDistanceToEdge(event));
68
71
  const { x, y, width, height } = constrainRect(resized, this.model, this.resizeSide, this.minWidth, this.minHeight);
69
72
  this.model.setPoint({ x, y });
70
73
  this.model.width.set(width);
@@ -84,6 +87,104 @@ export class ResizableComponent {
84
87
  bottom: flowPoint.y - (y + this.model.height()),
85
88
  };
86
89
  }
90
+ applyResize(side, model, offset, distanceToEdge) {
91
+ const { x, y } = model.point();
92
+ const width = model.width();
93
+ const height = model.height();
94
+ const [snapX, snapY] = this.settingsService.snapGrid();
95
+ switch (side) {
96
+ case 'left': {
97
+ const movementX = offset.x + distanceToEdge.left;
98
+ const newX = align(x + movementX, snapX);
99
+ const deltaX = newX - x;
100
+ return {
101
+ x: newX,
102
+ y,
103
+ width: width - deltaX,
104
+ height,
105
+ };
106
+ }
107
+ case 'right': {
108
+ const movementX = offset.x + distanceToEdge.right;
109
+ const newWidth = align(width + movementX, snapX);
110
+ return {
111
+ x,
112
+ y,
113
+ width: newWidth,
114
+ height,
115
+ };
116
+ }
117
+ case 'top': {
118
+ const movementY = offset.y + distanceToEdge.top;
119
+ const newY = align(y + movementY, snapY);
120
+ const deltaY = newY - y;
121
+ return {
122
+ x,
123
+ y: newY,
124
+ width,
125
+ height: height - deltaY,
126
+ };
127
+ }
128
+ case 'bottom': {
129
+ const movementY = offset.y + distanceToEdge.bottom;
130
+ const newHeight = align(height + movementY, snapY);
131
+ return {
132
+ x,
133
+ y,
134
+ width,
135
+ height: newHeight,
136
+ };
137
+ }
138
+ case 'top-left': {
139
+ const movementX = offset.x + distanceToEdge.left;
140
+ const movementY = offset.y + distanceToEdge.top;
141
+ const newX = align(x + movementX, snapX);
142
+ const newY = align(y + movementY, snapY);
143
+ const deltaX = newX - x;
144
+ const deltaY = newY - y;
145
+ return {
146
+ x: newX,
147
+ y: newY,
148
+ width: width - deltaX,
149
+ height: height - deltaY,
150
+ };
151
+ }
152
+ case 'top-right': {
153
+ const movementX = offset.x + distanceToEdge.right;
154
+ const movementY = offset.y + distanceToEdge.top;
155
+ const newY = align(y + movementY, snapY);
156
+ const deltaY = newY - y;
157
+ return {
158
+ x,
159
+ y: newY,
160
+ width: align(width + movementX, snapX),
161
+ height: height - deltaY,
162
+ };
163
+ }
164
+ case 'bottom-left': {
165
+ const movementX = offset.x + distanceToEdge.left;
166
+ const movementY = offset.y + distanceToEdge.bottom;
167
+ const newX = align(x + movementX, snapX);
168
+ const deltaX = newX - x;
169
+ return {
170
+ x: newX,
171
+ y,
172
+ width: width - deltaX,
173
+ height: align(height + movementY, snapY),
174
+ };
175
+ }
176
+ case 'bottom-right': {
177
+ const movementX = offset.x + distanceToEdge.right;
178
+ const movementY = offset.y + distanceToEdge.bottom;
179
+ return {
180
+ x,
181
+ y,
182
+ width: align(width + movementX, snapX),
183
+ height: align(height + movementY, snapY),
184
+ };
185
+ }
186
+ }
187
+ }
87
188
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ResizableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
88
189
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "17.3.12", type: ResizableComponent, isStandalone: true, selector: "[resizable]", inputs: { resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, resizerColor: { classPropertyName: "resizerColor", publicName: "resizerColor", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "resizer", first: true, predicate: ["resizer"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #resizer>\n <svg:g>\n <!-- top line -->\n <svg:line\n class=\"top\"\n stroke-width=\"2\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"-gap()\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"-gap()\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('top', $event)\" />\n <!-- Left line -->\n <svg:line\n class=\"left\"\n stroke-width=\"2\"\n [attr.x1]=\"-gap()\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"-gap()\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('left', $event)\" />\n <!-- Bottom line -->\n <svg:line\n class=\"bottom\"\n stroke-width=\"2\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"model.size().height + gap()\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"model.size().height + gap()\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom', $event)\" />\n <!-- Right line -->\n <svg:line\n class=\"right\"\n stroke-width=\"2\"\n [attr.x1]=\"model.size().width + gap()\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"model.size().width + gap()\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('right', $event)\" />\n\n <!-- Top Left -->\n <svg:rect\n class=\"top-left\"\n [attr.x]=\"-(handleSize / 2) - gap()\"\n [attr.y]=\"-(handleSize / 2) - gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('top-left', $event)\" />\n\n <!-- Top right -->\n <svg:rect\n class=\"top-right\"\n [attr.x]=\"model.size().width - handleSize / 2 + gap()\"\n [attr.y]=\"-(handleSize / 2) - gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('top-right', $event)\" />\n\n <!-- Bottom left -->\n <svg:rect\n class=\"bottom-left\"\n [attr.x]=\"-(handleSize / 2) - gap()\"\n [attr.y]=\"model.size().height - handleSize / 2 + gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom-left', $event)\" />\n\n <!-- Bottom right -->\n <svg:rect\n class=\"bottom-right\"\n [attr.x]=\"model.size().width - handleSize / 2 + gap()\"\n [attr.y]=\"model.size().height - handleSize / 2 + gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom-right', $event)\" />\n </svg:g>\n</ng-template>\n\n<ng-content />\n", styles: [".top{cursor:n-resize}.left{cursor:w-resize}.right{cursor:e-resize}.bottom{cursor:s-resize}.top-left{cursor:nw-resize}.top-right{cursor:ne-resize}.bottom-left{cursor:sw-resize}.bottom-right{cursor:se-resize}\n"], dependencies: [{ kind: "directive", type: PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
89
190
  }
@@ -96,50 +197,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
96
197
  }], ctorParameters: () => [], propDecorators: { ngAfterViewInit: [] } });
97
198
  function calcOffset(movementX, movementY, zoom) {
98
199
  return {
99
- offsetX: round(movementX / zoom),
100
- offsetY: round(movementY / zoom),
200
+ x: round(movementX / zoom),
201
+ y: round(movementY / zoom),
101
202
  };
102
203
  }
103
- function applyResize(side, model, offset, distanceToEdge) {
104
- const { offsetX, offsetY } = offset;
105
- const { x, y } = model.point();
106
- const width = model.width();
107
- const height = model.height();
108
- // Handle each case of resizing (top, bottom, left, right, corners)
109
- switch (side) {
110
- case 'left':
111
- return { x: x + offsetX + distanceToEdge.left, y, width: width - offsetX - distanceToEdge.left, height };
112
- case 'right':
113
- return { x, y, width: width + offsetX + distanceToEdge.right, height };
114
- case 'top':
115
- return { x, y: y + offsetY + distanceToEdge.top, width, height: height - offsetY - distanceToEdge.top };
116
- case 'bottom':
117
- return { x, y, width, height: height + offsetY + distanceToEdge.bottom };
118
- case 'top-left':
119
- return {
120
- x: x + offsetX + distanceToEdge.left,
121
- y: y + offsetY + distanceToEdge.top,
122
- width: width - offsetX - distanceToEdge.left,
123
- height: height - offsetY - distanceToEdge.top,
124
- };
125
- case 'top-right':
126
- return {
127
- x,
128
- y: y + offsetY + distanceToEdge.top,
129
- width: width + offsetX + distanceToEdge.right,
130
- height: height - offsetY - distanceToEdge.top,
131
- };
132
- case 'bottom-left':
133
- return {
134
- x: x + offsetX + distanceToEdge.left,
135
- y,
136
- width: width - offsetX - distanceToEdge.left,
137
- height: height + offsetY + distanceToEdge.bottom,
138
- };
139
- case 'bottom-right':
140
- return { x, y, width: width + offsetX + distanceToEdge.right, height: height + offsetY + distanceToEdge.bottom };
141
- }
142
- }
143
204
  function constrainRect(rect, model, side, minWidth, minHeight) {
144
205
  let { x, y, width, height } = rect;
145
206
  // 1. Prevent negative dimensions
@@ -196,4 +257,4 @@ function constrainRect(rect, model, side, minWidth, minHeight) {
196
257
  height,
197
258
  };
198
259
  }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUdOLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBbUJ0RSxNQUFNLE9BQU8s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QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBpbnB1dCxcbiAgdmlld0NoaWxkLFxuICBlZmZlY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RQb2ludGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb290LXBvaW50ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvcm91bmQnO1xuaW1wb3J0IHsgTWljcm90YXNrIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9taWNyb3Rhc2suZGVjb3JhdG9yJztcbmltcG9ydCB7IGdldE5vZGVzQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9kZXMnO1xuaW1wb3J0IHsgTm9kZUFjY2Vzc29yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWNjZXNzb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBSZWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZWN0JztcbmltcG9ydCB7IFBvaW50ZXJFdmVudCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcm9vdC1wb2ludGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9pbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9pbnRlci5kaXJlY3RpdmUnO1xuXG50eXBlIFNpZGUgPSAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ3RvcC1sZWZ0JyB8ICdib3R0b20tcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JztcblxuaW50ZXJmYWNlIERpc3RhbmNlVG9FZGdlIHtcbiAgbGVmdDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tyZXNpemFibGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc2l6YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jlc2l6YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbUG9pbnRlckRpcmVjdGl2ZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBwcml2YXRlIG5vZGVBY2Nlc3NvciA9IGluamVjdChOb2RlQWNjZXNzb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb290UG9pbnRlciA9IGluamVjdChSb290UG9pbnRlckRpcmVjdGl2ZSk7XG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgc3BhY2VQb2ludENvbnRleHQgPSBpbmplY3QoU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUpO1xuICBwcml2YXRlIGhvc3RSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgcHVibGljIHJlc2l6YWJsZSA9IGlucHV0PGJvb2xlYW4gfCAnJz4oKTtcblxuICBwdWJsaWMgcmVzaXplckNvbG9yID0gaW5wdXQoJyMyZTQxNGMnKTtcblxuICBwdWJsaWMgZ2FwID0gaW5wdXQoMS41KTtcblxuICBwcml2YXRlIHJlc2l6ZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8dW5rbm93bj4+KCdyZXNpemVyJyk7XG5cbiAgcHJvdGVjdGVkIGdldCBtb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlQWNjZXNzb3IubW9kZWwoKSE7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGluZUdhcCA9IDM7XG4gIHByb3RlY3RlZCBoYW5kbGVTaXplID0gNjtcblxuICBwcml2YXRlIHJlc2l6ZVNpZGU6IFNpZGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHpvb20gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbSA/PyAwKTtcblxuICBwcml2YXRlIG1pbldpZHRoID0gMDtcbiAgcHJpdmF0ZSBtaW5IZWlnaHQgPSAwO1xuXG4gIC8vIFRPRE86IGFsbG93IHJlc3ppZSBiZXNpZGUgdGhlIGZsb3dcbiAgcHJvdGVjdGVkIHJlc2l6ZU9uR2xvYmFsTW91c2VNb3ZlID0gdGhpcy5yb290UG9pbnRlci5wb2ludGVyTW92ZW1lbnQkXG4gICAgLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5yZXNpemVTaWRlICE9PSBudWxsKSxcbiAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50Lm1vdmVtZW50WCAhPT0gMCB8fCBldmVudC5tb3ZlbWVudFkgIT09IDApLFxuICAgICAgdGFwKChldmVudCkgPT4gdGhpcy5yZXNpemUoZXZlbnQpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG5cbiAgcHJvdGVjdGVkIGVuZFJlc2l6ZU9uR2xvYmFsTW91c2VVcCA9IHRoaXMucm9vdFBvaW50ZXIuZG9jdW1lbnRQb2ludGVyRW5kJFxuICAgIC5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMuZW5kUmVzaXplKCkpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc2l6YWJsZSA9IHRoaXMucmVzaXphYmxlKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXNpemFibGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgIHRoaXMubW9kZWwucmVzaXphYmxlLnNldChyZXNpemFibGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9kZWwucmVzaXphYmxlLnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubW9kZWwucmVzaXplclRlbXBsYXRlLnNldCh0aGlzLnJlc2l6ZXIoKSk7XG4gIH1cblxuICBATWljcm90YXNrXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5taW5XaWR0aCA9ICtnZXRDb21wdXRlZFN0eWxlKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KS5taW5XaWR0aC5yZXBsYWNlKCdweCcsICcnKSB8fCAwO1xuICAgIHRoaXMubWluSGVpZ2h0ID0gK2dldENvbXB1dGVkU3R5bGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpLm1pbkhlaWdodC5yZXBsYWNlKCdweCcsICcnKSB8fCAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0UmVzaXplKHNpZGU6IFNpZGUsIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVzaXplU2lkZSA9IHNpZGU7XG4gICAgdGhpcy5tb2RlbC5yZXNpemluZy5zZXQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzaXplKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucmVzaXplU2lkZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gY2FsY09mZnNldChldmVudC5tb3ZlbWVudFgsIGV2ZW50Lm1vdmVtZW50WSwgdGhpcy56b29tKCkpO1xuXG4gICAgY29uc3QgcmVzaXplZCA9IGFwcGx5UmVzaXplKHRoaXMucmVzaXplU2lkZSwgdGhpcy5tb2RlbCwgb2Zmc2V0LCB0aGlzLmdldERpc3RhbmNlVG9FZGdlKGV2ZW50KSk7XG5cbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGNvbnN0cmFpblJlY3QocmVzaXplZCwgdGhpcy5tb2RlbCwgdGhpcy5yZXNpemVTaWRlLCB0aGlzLm1pbldpZHRoLCB0aGlzLm1pbkhlaWdodCk7XG5cbiAgICB0aGlzLm1vZGVsLnNldFBvaW50KHsgeCwgeSB9KTtcbiAgICB0aGlzLm1vZGVsLndpZHRoLnNldCh3aWR0aCk7XG4gICAgdGhpcy5tb2RlbC5oZWlnaHQuc2V0KGhlaWdodCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW5kUmVzaXplKCkge1xuICAgIHRoaXMucmVzaXplU2lkZSA9IG51bGw7XG4gICAgdGhpcy5tb2RlbC5yZXNpemluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaXN0YW5jZVRvRWRnZShldmVudDogUG9pbnRlckV2ZW50KTogRGlzdGFuY2VUb0VkZ2Uge1xuICAgIGNvbnN0IGZsb3dQb2ludCA9IHRoaXMuc3BhY2VQb2ludENvbnRleHQuZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHsgeDogZXZlbnQueCwgeTogZXZlbnQueSB9KTtcbiAgICBjb25zdCB7IHgsIHkgfSA9IHRoaXMubW9kZWwuZ2xvYmFsUG9pbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBmbG93UG9pbnQueCAtIHgsXG4gICAgICByaWdodDogZmxvd1BvaW50LnggLSAoeCArIHRoaXMubW9kZWwud2lkdGgoKSksXG4gICAgICB0b3A6IGZsb3dQb2ludC55IC0geSxcbiAgICAgIGJvdHRvbTogZmxvd1BvaW50LnkgLSAoeSArIHRoaXMubW9kZWwuaGVpZ2h0KCkpLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsY09mZnNldChtb3ZlbWVudFg6IG51bWJlciwgbW92ZW1lbnRZOiBudW1iZXIsIHpvb206IG51bWJlcikge1xuICByZXR1cm4ge1xuICAgIG9mZnNldFg6IHJvdW5kKG1vdmVtZW50WCAvIHpvb20pLFxuICAgIG9mZnNldFk6IHJvdW5kKG1vdmVtZW50WSAvIHpvb20pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseVJlc2l6ZShcbiAgc2lkZTogU2lkZSxcbiAgbW9kZWw6IE5vZGVNb2RlbCxcbiAgb2Zmc2V0OiB7IG9mZnNldFg6IG51bWJlcjsgb2Zmc2V0WTogbnVtYmVyIH0sXG4gIGRpc3RhbmNlVG9FZGdlOiBEaXN0YW5jZVRvRWRnZSxcbik6IFJlY3Qge1xuICBjb25zdCB7IG9mZnNldFgsIG9mZnNldFkgfSA9IG9mZnNldDtcbiAgY29uc3QgeyB4LCB5IH0gPSBtb2RlbC5wb2ludCgpO1xuICBjb25zdCB3aWR0aCA9IG1vZGVsLndpZHRoKCk7XG4gIGNvbnN0IGhlaWdodCA9IG1vZGVsLmhlaWdodCgpO1xuXG4gIC8vIEhhbmRsZSBlYWNoIGNhc2Ugb2YgcmVzaXppbmcgKHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgY29ybmVycylcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4geyB4OiB4ICsgb2Zmc2V0WCArIGRpc3RhbmNlVG9FZGdlLmxlZnQsIHksIHdpZHRoOiB3aWR0aCAtIG9mZnNldFggLSBkaXN0YW5jZVRvRWRnZS5sZWZ0LCBoZWlnaHQgfTtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4geyB4LCB5LCB3aWR0aDogd2lkdGggKyBvZmZzZXRYICsgZGlzdGFuY2VUb0VkZ2UucmlnaHQsIGhlaWdodCB9O1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4geyB4LCB5OiB5ICsgb2Zmc2V0WSArIGRpc3RhbmNlVG9FZGdlLnRvcCwgd2lkdGgsIGhlaWdodDogaGVpZ2h0IC0gb2Zmc2V0WSAtIGRpc3RhbmNlVG9FZGdlLnRvcCB9O1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICByZXR1cm4geyB4LCB5LCB3aWR0aCwgaGVpZ2h0OiBoZWlnaHQgKyBvZmZzZXRZICsgZGlzdGFuY2VUb0VkZ2UuYm90dG9tIH07XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIG9mZnNldFggKyBkaXN0YW5jZVRvRWRnZS5sZWZ0LFxuICAgICAgICB5OiB5ICsgb2Zmc2V0WSArIGRpc3RhbmNlVG9FZGdlLnRvcCxcbiAgICAgICAgd2lkdGg6IHdpZHRoIC0gb2Zmc2V0WCAtIGRpc3RhbmNlVG9FZGdlLmxlZnQsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0IC0gb2Zmc2V0WSAtIGRpc3RhbmNlVG9FZGdlLnRvcCxcbiAgICAgIH07XG4gICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHk6IHkgKyBvZmZzZXRZICsgZGlzdGFuY2VUb0VkZ2UudG9wLFxuICAgICAgICB3aWR0aDogd2lkdGggKyBvZmZzZXRYICsgZGlzdGFuY2VUb0VkZ2UucmlnaHQsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0IC0gb2Zmc2V0WSAtIGRpc3RhbmNlVG9FZGdlLnRvcCxcbiAgICAgIH07XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIG9mZnNldFggKyBkaXN0YW5jZVRvRWRnZS5sZWZ0LFxuICAgICAgICB5LFxuICAgICAgICB3aWR0aDogd2lkdGggLSBvZmZzZXRYIC0gZGlzdGFuY2VUb0VkZ2UubGVmdCxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyBvZmZzZXRZICsgZGlzdGFuY2VUb0VkZ2UuYm90dG9tLFxuICAgICAgfTtcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgcmV0dXJuIHsgeCwgeSwgd2lkdGg6IHdpZHRoICsgb2Zmc2V0WCArIGRpc3RhbmNlVG9FZGdlLnJpZ2h0LCBoZWlnaHQ6IGhlaWdodCArIG9mZnNldFkgKyBkaXN0YW5jZVRvRWRnZS5ib3R0b20gfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJhaW5SZWN0KHJlY3Q6IFJlY3QsIG1vZGVsOiBOb2RlTW9kZWwsIHNpZGU6IFNpZGUsIG1pbldpZHRoOiBudW1iZXIsIG1pbkhlaWdodDogbnVtYmVyKSB7XG4gIGxldCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IHJlY3Q7XG5cbiAgLy8gMS4gUHJldmVudCBuZWdhdGl2ZSBkaW1lbnNpb25zXG4gIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIDApO1xuICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIDApO1xuXG4gIC8vIDIuIEFwcGx5IG1pbmltdW0gc2l6ZSBjb25zdHJhaW50c1xuICB3aWR0aCA9IE1hdGgubWF4KG1pbldpZHRoLCB3aWR0aCk7XG4gIGhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgaGVpZ2h0KTtcblxuICAvLyBBcHBseSBsZWZ0L3RvcCBjb25zdHJhaW50cyBiYXNlZCBvbiBtaW5pbXVtIHNpemVcbiAgeCA9IE1hdGgubWluKHgsIG1vZGVsLnBvaW50KCkueCArIG1vZGVsLndpZHRoKCkgLSBtaW5XaWR0aCk7XG4gIHkgPSBNYXRoLm1pbih5LCBtb2RlbC5wb2ludCgpLnkgKyBtb2RlbC5oZWlnaHQoKSAtIG1pbkhlaWdodCk7XG5cbiAgY29uc3QgcGFyZW50ID0gbW9kZWwucGFyZW50KCk7XG4gIC8vIDMuIEFwcGx5IG1heGltdW0gc2l6ZSBjb25zdHJhaW50cyBiYXNlZCBvbiBwYXJlbnQgc2l6ZSAoaWYgZXhpc3RzKVxuICBpZiAocGFyZW50KSB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQud2lkdGgoKTtcbiAgICBjb25zdCBwYXJlbnRIZWlnaHQgPSBwYXJlbnQuaGVpZ2h0KCk7XG4gICAgY29uc3QgbW9kZWxYID0gbW9kZWwucG9pbnQoKS54O1xuICAgIGNvbnN0IG1vZGVsWSA9IG1vZGVsLnBvaW50KCkueTtcblxuICAgIHggPSBNYXRoLm1heCh4LCAwKTtcbiAgICB5ID0gTWF0aC5tYXgoeSwgMCk7XG5cbiAgICAvLyBTdG9wIHJlc2l6aW5nIHdoZW4gaGl0dGluZyBsZWZ0IG9yIHRvcCBib3VuZGFyeVxuICAgIGlmIChzaWRlLmluY2x1ZGVzKCdsZWZ0JykgJiYgeCA9PT0gMCkge1xuICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgbW9kZWxYICsgbW9kZWwud2lkdGgoKSk7XG4gICAgfVxuICAgIGlmIChzaWRlLmluY2x1ZGVzKCd0b3AnKSAmJiB5ID09PSAwKSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1pbihoZWlnaHQsIG1vZGVsWSArIG1vZGVsLmhlaWdodCgpKTtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyByaWdodC9ib3R0b20gcmVzaXppbmcgd2l0aG91dCBiZWluZyBibG9ja2VkXG4gICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgcGFyZW50V2lkdGggLSB4KTtcbiAgICBoZWlnaHQgPSBNYXRoLm1pbihoZWlnaHQsIHBhcmVudEhlaWdodCAtIHkpO1xuICB9XG5cbiAgY29uc3QgYm91bmRzID0gZ2V0Tm9kZXNCb3VuZHMobW9kZWwuY2hpbGRyZW4oKSk7XG4gIC8vIDQuIEFwcGx5IGNoaWxkIG5vZGUgY29uc3RyYWludHMgKGlmIGNoaWxkcmVuIGV4aXN0KVxuICBpZiAoYm91bmRzKSB7XG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ2xlZnQnKSkge1xuICAgICAgeCA9IE1hdGgubWluKHgsIG1vZGVsLnBvaW50KCkueCArIG1vZGVsLndpZHRoKCkgLSAoYm91bmRzLnggKyBib3VuZHMud2lkdGgpKTtcbiAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGJvdW5kcy54ICsgYm91bmRzLndpZHRoKTtcbiAgICB9XG5cbiAgICBpZiAoc2lkZS5pbmNsdWRlcygncmlnaHQnKSkge1xuICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgYm91bmRzLnggKyBib3VuZHMud2lkdGgpO1xuICAgIH1cblxuICAgIGlmIChzaWRlLmluY2x1ZGVzKCdib3R0b20nKSkge1xuICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGlmIChzaWRlLmluY2x1ZGVzKCd0b3AnKSkge1xuICAgICAgeSA9IE1hdGgubWluKHksIG1vZGVsLnBvaW50KCkueSArIG1vZGVsLmhlaWdodCgpIC0gKGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCkpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgfTtcbn1cbiIsIjxuZy10ZW1wbGF0ZSAjcmVzaXplcj5cbiAgPHN2ZzpnPlxuICAgIDwhLS0gdG9wIGxpbmUgLS0+XG4gICAgPHN2ZzpsaW5lXG4gICAgICBjbGFzcz1cInRvcFwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgIFthdHRyLngxXT1cImxpbmVHYXBcIlxuICAgICAgW2F0dHIueTFdPVwiLWdhcCgpXCJcbiAgICAgIFthdHRyLngyXT1cIm1vZGVsLnNpemUoKS53aWR0aCAtIGxpbmVHYXBcIlxuICAgICAgW2F0dHIueTJdPVwiLWdhcCgpXCJcbiAgICAgIFthdHRyLnN0cm9rZV09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCd0b3AnLCAkZXZlbnQpXCIgLz5cbiAgICA8IS0tIExlZnQgbGluZSAtLT5cbiAgICA8c3ZnOmxpbmVcbiAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgIFthdHRyLngxXT1cIi1nYXAoKVwiXG4gICAgICBbYXR0ci55MV09XCJsaW5lR2FwXCJcbiAgICAgIFthdHRyLngyXT1cIi1nYXAoKVwiXG4gICAgICBbYXR0ci55Ml09XCJtb2RlbC5zaXplKCkuaGVpZ2h0IC0gbGluZUdhcFwiXG4gICAgICBbYXR0ci5zdHJva2VdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgnbGVmdCcsICRldmVudClcIiAvPlxuICAgIDwhLS0gQm90dG9tIGxpbmUgLS0+XG4gICAgPHN2ZzpsaW5lXG4gICAgICBjbGFzcz1cImJvdHRvbVwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgIFthdHRyLngxXT1cImxpbmVHYXBcIlxuICAgICAgW2F0dHIueTFdPVwibW9kZWwuc2l6ZSgpLmhlaWdodCArIGdhcCgpXCJcbiAgICAgIFthdHRyLngyXT1cIm1vZGVsLnNpemUoKS53aWR0aCAtIGxpbmVHYXBcIlxuICAgICAgW2F0dHIueTJdPVwibW9kZWwuc2l6ZSgpLmhlaWdodCArIGdhcCgpXCJcbiAgICAgIFthdHRyLnN0cm9rZV09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCdib3R0b20nLCAkZXZlbnQpXCIgLz5cbiAgICA8IS0tIFJpZ2h0IGxpbmUgLS0+XG4gICAgPHN2ZzpsaW5lXG4gICAgICBjbGFzcz1cInJpZ2h0XCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIueDFdPVwibW9kZWwuc2l6ZSgpLndpZHRoICsgZ2FwKClcIlxuICAgICAgW2F0dHIueTFdPVwibGluZUdhcFwiXG4gICAgICBbYXR0ci54Ml09XCJtb2RlbC5zaXplKCkud2lkdGggKyBnYXAoKVwiXG4gICAgICBbYXR0ci55Ml09XCJtb2RlbC5zaXplKCkuaGVpZ2h0IC0gbGluZUdhcFwiXG4gICAgICBbYXR0ci5zdHJva2VdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgncmlnaHQnLCAkZXZlbnQpXCIgLz5cblxuICAgIDwhLS0gVG9wIExlZnQgLS0+XG4gICAgPHN2ZzpyZWN0XG4gICAgICBjbGFzcz1cInRvcC1sZWZ0XCJcbiAgICAgIFthdHRyLnhdPVwiLShoYW5kbGVTaXplIC8gMikgLSBnYXAoKVwiXG4gICAgICBbYXR0ci55XT1cIi0oaGFuZGxlU2l6ZSAvIDIpIC0gZ2FwKClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5maWxsXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ3RvcC1sZWZ0JywgJGV2ZW50KVwiIC8+XG5cbiAgICA8IS0tIFRvcCByaWdodCAtLT5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIGNsYXNzPVwidG9wLXJpZ2h0XCJcbiAgICAgIFthdHRyLnhdPVwibW9kZWwuc2l6ZSgpLndpZHRoIC0gaGFuZGxlU2l6ZSAvIDIgKyBnYXAoKVwiXG4gICAgICBbYXR0ci55XT1cIi0oaGFuZGxlU2l6ZSAvIDIpIC0gZ2FwKClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5maWxsXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ3RvcC1yaWdodCcsICRldmVudClcIiAvPlxuXG4gICAgPCEtLSBCb3R0b20gbGVmdCAtLT5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIGNsYXNzPVwiYm90dG9tLWxlZnRcIlxuICAgICAgW2F0dHIueF09XCItKGhhbmRsZVNpemUgLyAyKSAtIGdhcCgpXCJcbiAgICAgIFthdHRyLnldPVwibW9kZWwuc2l6ZSgpLmhlaWdodCAtIGhhbmRsZVNpemUgLyAyICsgZ2FwKClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5maWxsXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ2JvdHRvbS1sZWZ0JywgJGV2ZW50KVwiIC8+XG5cbiAgICA8IS0tIEJvdHRvbSByaWdodCAtLT5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIGNsYXNzPVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIFthdHRyLnhdPVwibW9kZWwuc2l6ZSgpLndpZHRoIC0gaGFuZGxlU2l6ZSAvIDIgKyBnYXAoKVwiXG4gICAgICBbYXR0ci55XT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgLSBoYW5kbGVTaXplIC8gMiArIGdhcCgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cImhhbmRsZVNpemVcIlxuICAgICAgW2F0dHIuZmlsbF09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCdib3R0b20tcmlnaHQnLCAkZXZlbnQpXCIgLz5cbiAgPC9zdmc6Zz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250ZW50IC8+XG4iXX0=
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9yZXNpemFibGUvcmVzaXphYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUdOLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQW1CakQsTUFBTSxPQUFPLGtCQUFrQjtJQWdCN0IsSUFBYyxLQUFLO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUcsQ0FBQztJQUNwQyxDQUFDO0lBNkJEO1FBOUNRLGlCQUFZLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMzQyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN2RCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlDLFlBQU8sR0FBRyxNQUFNLENBQXNCLFVBQVUsQ0FBQyxDQUFDO1FBRW5ELGNBQVMsR0FBRyxLQUFLLEVBQWdCLENBQUM7UUFFbEMsaUJBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEMsUUFBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoQixZQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBdUIsU0FBUyxDQUFDLENBQUM7UUFNNUQsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFFakIsZUFBVSxHQUFnQixJQUFJLENBQUM7UUFFL0IsU0FBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXpFLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLHFDQUFxQztRQUMzQiw0QkFBdUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjthQUNsRSxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFDakUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2xDLGtCQUFrQixFQUFFLENBQ3JCO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFFTCw2QkFBd0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQjthQUN0RSxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUMzQixrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsRUFBRSxDQUFDO1FBR2IsTUFBTSxDQUNKLEdBQUcsRUFBRTtZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUVuQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBR00sZUFBZTtRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFUyxXQUFXLENBQUMsSUFBVSxFQUFFLEtBQVk7UUFDNUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsTUFBTSxDQUFDLEtBQW1CO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFN0IsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV6RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFckcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRW5ILElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQW1CO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFMUMsT0FBTztZQUNMLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDckIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDaEQsQ0FBQztJQUNKLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBVSxFQUFFLEtBQWdCLEVBQUUsTUFBYSxFQUFFLGNBQThCO1FBQzdGLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZELFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUNqRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFFeEIsT0FBTztvQkFDTCxDQUFDLEVBQUUsSUFBSTtvQkFDUCxDQUFDO29CQUNELEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTTtvQkFDckIsTUFBTTtpQkFDUCxDQUFDO1lBQ0osQ0FBQztZQUNELEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDYixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUVqRCxPQUFPO29CQUNMLENBQUM7b0JBQ0QsQ0FBQztvQkFDRCxLQUFLLEVBQUUsUUFBUTtvQkFDZixNQUFNO2lCQUNQLENBQUM7WUFDSixDQUFDO1lBQ0QsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNYLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBRXhCLE9BQU87b0JBQ0wsQ0FBQztvQkFDRCxDQUFDLEVBQUUsSUFBSTtvQkFDUCxLQUFLO29CQUNMLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTTtpQkFDeEIsQ0FBQztZQUNKLENBQUM7WUFDRCxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUNuRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFbkQsT0FBTztvQkFDTCxDQUFDO29CQUNELENBQUM7b0JBQ0QsS0FBSztvQkFDTCxNQUFNLEVBQUUsU0FBUztpQkFDbEIsQ0FBQztZQUNKLENBQUM7WUFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDakQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUNoRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBRXhCLE9BQU87b0JBQ0wsQ0FBQyxFQUFFLElBQUk7b0JBQ1AsQ0FBQyxFQUFFLElBQUk7b0JBQ1AsS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFNO29CQUNyQixNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU07aUJBQ3hCLENBQUM7WUFDSixDQUFDO1lBQ0QsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBRXhCLE9BQU87b0JBQ0wsQ0FBQztvQkFDRCxDQUFDLEVBQUUsSUFBSTtvQkFDUCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDO29CQUN0QyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU07aUJBQ3hCLENBQUM7WUFDSixDQUFDO1lBQ0QsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDbkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBRXhCLE9BQU87b0JBQ0wsQ0FBQyxFQUFFLElBQUk7b0JBQ1AsQ0FBQztvQkFDRCxLQUFLLEVBQUUsS0FBSyxHQUFHLE1BQU07b0JBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUM7aUJBQ3pDLENBQUM7WUFDSixDQUFDO1lBQ0QsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFFbkQsT0FBTztvQkFDTCxDQUFDO29CQUNELENBQUM7b0JBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQztvQkFDdEMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQztpQkFDekMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0F2TlUsa0JBQWtCO21HQUFsQixrQkFBa0IsMGtCQy9DL0IsMnlGQXNGQSwwUUQxQ1ksZ0JBQWdCOztBQXNFbkI7SUFETixTQUFTO3lEQUlUOzRGQXRFVSxrQkFBa0I7a0JBUjlCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGFBQWEsV0FHZCxDQUFDLGdCQUFnQixDQUFDLG1CQUNWLHVCQUF1QixDQUFDLE1BQU07d0RBcUV4QyxlQUFlO0FBdUp4QixTQUFTLFVBQVUsQ0FBQyxTQUFpQixFQUFFLFNBQWlCLEVBQUUsSUFBWTtJQUNwRSxPQUFPO1FBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztLQUMzQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQVUsRUFBRSxLQUFnQixFQUFFLElBQVUsRUFBRSxRQUFnQixFQUFFLFNBQWlCO0lBQ2xHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFbkMsaUNBQWlDO0lBQ2pDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFN0Isb0NBQW9DO0lBQ3BDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFckMsbURBQW1EO0lBQ25ELENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFFOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlCLHFFQUFxRTtJQUNyRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25CLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuQixrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNoRCxzREFBc0Q7SUFDdEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0UsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsQ0FBQztRQUNELENBQUM7UUFDRCxLQUFLO1FBQ0wsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBpbnB1dCxcbiAgdmlld0NoaWxkLFxuICBlZmZlY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RQb2ludGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb290LXBvaW50ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSAnLi4vLi4vdXRpbHMvcm91bmQnO1xuaW1wb3J0IHsgTWljcm90YXNrIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9taWNyb3Rhc2suZGVjb3JhdG9yJztcbmltcG9ydCB7IGdldE5vZGVzQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9kZXMnO1xuaW1wb3J0IHsgTm9kZUFjY2Vzc29yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtYWNjZXNzb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBSZWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZWN0JztcbmltcG9ydCB7IFBvaW50ZXJFdmVudCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcm9vdC1wb2ludGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9pbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9pbnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFsaWduIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWxpZ24tbnVtYmVyJztcblxudHlwZSBTaWRlID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICd0b3AtbGVmdCcgfCAnYm90dG9tLXJpZ2h0JyB8ICdib3R0b20tbGVmdCc7XG5cbmludGVyZmFjZSBEaXN0YW5jZVRvRWRnZSB7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbcmVzaXphYmxlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNpemFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNpemFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1BvaW50ZXJEaXJlY3RpdmVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgcHJpdmF0ZSBub2RlQWNjZXNzb3IgPSBpbmplY3QoTm9kZUFjY2Vzc29yU2VydmljZSk7XG4gIHByaXZhdGUgcm9vdFBvaW50ZXIgPSBpbmplY3QoUm9vdFBvaW50ZXJEaXJlY3RpdmUpO1xuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIHNwYWNlUG9pbnRDb250ZXh0ID0gaW5qZWN0KFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKTtcbiAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG4gIHByaXZhdGUgaG9zdFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcblxuICBwdWJsaWMgcmVzaXphYmxlID0gaW5wdXQ8Ym9vbGVhbiB8ICcnPigpO1xuXG4gIHB1YmxpYyByZXNpemVyQ29sb3IgPSBpbnB1dCgnIzJlNDE0YycpO1xuXG4gIHB1YmxpYyBnYXAgPSBpbnB1dCgxLjUpO1xuXG4gIHByaXZhdGUgcmVzaXplciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx1bmtub3duPj4oJ3Jlc2l6ZXInKTtcblxuICBwcm90ZWN0ZWQgZ2V0IG1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVBY2Nlc3Nvci5tb2RlbCgpITtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaW5lR2FwID0gMztcbiAgcHJvdGVjdGVkIGhhbmRsZVNpemUgPSA2O1xuXG4gIHByaXZhdGUgcmVzaXplU2lkZTogU2lkZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgem9vbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS56b29tID8/IDApO1xuXG4gIHByaXZhdGUgbWluV2lkdGggPSAwO1xuICBwcml2YXRlIG1pbkhlaWdodCA9IDA7XG5cbiAgLy8gVE9ETzogYWxsb3cgcmVzemllIGJlc2lkZSB0aGUgZmxvd1xuICBwcm90ZWN0ZWQgcmVzaXplT25HbG9iYWxNb3VzZU1vdmUgPSB0aGlzLnJvb3RQb2ludGVyLnBvaW50ZXJNb3ZlbWVudCRcbiAgICAucGlwZShcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnJlc2l6ZVNpZGUgIT09IG51bGwpLFxuICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQubW92ZW1lbnRYICE9PSAwIHx8IGV2ZW50Lm1vdmVtZW50WSAhPT0gMCksXG4gICAgICB0YXAoKGV2ZW50KSA9PiB0aGlzLnJlc2l6ZShldmVudCkpLFxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKTtcblxuICBwcm90ZWN0ZWQgZW5kUmVzaXplT25HbG9iYWxNb3VzZVVwID0gdGhpcy5yb290UG9pbnRlci5kb2N1bWVudFBvaW50ZXJFbmQkXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5lbmRSZXNpemUoKSksXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzaXphYmxlID0gdGhpcy5yZXNpemFibGUoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlc2l6YWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5yZXNpemFibGUuc2V0KHJlc2l6YWJsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RlbC5yZXNpemFibGUuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbC5yZXNpemVyVGVtcGxhdGUuc2V0KHRoaXMucmVzaXplcigpKTtcbiAgfVxuXG4gIEBNaWNyb3Rhc2tcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm1pbldpZHRoID0gK2dldENvbXB1dGVkU3R5bGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpLm1pbldpZHRoLnJlcGxhY2UoJ3B4JywgJycpIHx8IDA7XG4gICAgdGhpcy5taW5IZWlnaHQgPSArZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudCkubWluSGVpZ2h0LnJlcGxhY2UoJ3B4JywgJycpIHx8IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRSZXNpemUoc2lkZTogU2lkZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZXNpemVTaWRlID0gc2lkZTtcbiAgICB0aGlzLm1vZGVsLnJlc2l6aW5nLnNldCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNpemUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICghdGhpcy5yZXNpemVTaWRlKSByZXR1cm47XG5cbiAgICBjb25zdCBvZmZzZXQgPSBjYWxjT2Zmc2V0KGV2ZW50Lm1vdmVtZW50WCwgZXZlbnQubW92ZW1lbnRZLCB0aGlzLnpvb20oKSk7XG5cbiAgICBjb25zdCByZXNpemVkID0gdGhpcy5hcHBseVJlc2l6ZSh0aGlzLnJlc2l6ZVNpZGUsIHRoaXMubW9kZWwsIG9mZnNldCwgdGhpcy5nZXREaXN0YW5jZVRvRWRnZShldmVudCkpO1xuXG4gICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBjb25zdHJhaW5SZWN0KHJlc2l6ZWQsIHRoaXMubW9kZWwsIHRoaXMucmVzaXplU2lkZSwgdGhpcy5taW5XaWR0aCwgdGhpcy5taW5IZWlnaHQpO1xuXG4gICAgdGhpcy5tb2RlbC5zZXRQb2ludCh7IHgsIHkgfSk7XG4gICAgdGhpcy5tb2RlbC53aWR0aC5zZXQod2lkdGgpO1xuICAgIHRoaXMubW9kZWwuaGVpZ2h0LnNldChoZWlnaHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZFJlc2l6ZSgpIHtcbiAgICB0aGlzLnJlc2l6ZVNpZGUgPSBudWxsO1xuICAgIHRoaXMubW9kZWwucmVzaXppbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlzdGFuY2VUb0VkZ2UoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IERpc3RhbmNlVG9FZGdlIHtcbiAgICBjb25zdCBmbG93UG9pbnQgPSB0aGlzLnNwYWNlUG9pbnRDb250ZXh0LmRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludCh7IHg6IGV2ZW50LngsIHk6IGV2ZW50LnkgfSk7XG4gICAgY29uc3QgeyB4LCB5IH0gPSB0aGlzLm1vZGVsLmdsb2JhbFBvaW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogZmxvd1BvaW50LnggLSB4LFxuICAgICAgcmlnaHQ6IGZsb3dQb2ludC54IC0gKHggKyB0aGlzLm1vZGVsLndpZHRoKCkpLFxuICAgICAgdG9wOiBmbG93UG9pbnQueSAtIHksXG4gICAgICBib3R0b206IGZsb3dQb2ludC55IC0gKHkgKyB0aGlzLm1vZGVsLmhlaWdodCgpKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVJlc2l6ZShzaWRlOiBTaWRlLCBtb2RlbDogTm9kZU1vZGVsLCBvZmZzZXQ6IFBvaW50LCBkaXN0YW5jZVRvRWRnZTogRGlzdGFuY2VUb0VkZ2UpOiBSZWN0IHtcbiAgICBjb25zdCB7IHgsIHkgfSA9IG1vZGVsLnBvaW50KCk7XG4gICAgY29uc3Qgd2lkdGggPSBtb2RlbC53aWR0aCgpO1xuICAgIGNvbnN0IGhlaWdodCA9IG1vZGVsLmhlaWdodCgpO1xuICAgIGNvbnN0IFtzbmFwWCwgc25hcFldID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc25hcEdyaWQoKTtcblxuICAgIHN3aXRjaCAoc2lkZSkge1xuICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gb2Zmc2V0LnggKyBkaXN0YW5jZVRvRWRnZS5sZWZ0O1xuICAgICAgICBjb25zdCBuZXdYID0gYWxpZ24oeCArIG1vdmVtZW50WCwgc25hcFgpO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBuZXdYIC0geDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IG5ld1gsXG4gICAgICAgICAgeSxcbiAgICAgICAgICB3aWR0aDogd2lkdGggLSBkZWx0YVgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WCA9IG9mZnNldC54ICsgZGlzdGFuY2VUb0VkZ2UucmlnaHQ7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gYWxpZ24od2lkdGggKyBtb3ZlbWVudFgsIHNuYXBYKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICB3aWR0aDogbmV3V2lkdGgsXG4gICAgICAgICAgaGVpZ2h0LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAndG9wJzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLnRvcDtcbiAgICAgICAgY29uc3QgbmV3WSA9IGFsaWduKHkgKyBtb3ZlbWVudFksIHNuYXBZKTtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gbmV3WSAtIHk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHk6IG5ld1ksXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBkZWx0YVksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICdib3R0b20nOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IG9mZnNldC55ICsgZGlzdGFuY2VUb0VkZ2UuYm90dG9tO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBhbGlnbihoZWlnaHQgKyBtb3ZlbWVudFksIHNuYXBZKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IG5ld0hlaWdodCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RvcC1sZWZ0Jzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFggPSBvZmZzZXQueCArIGRpc3RhbmNlVG9FZGdlLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IG9mZnNldC55ICsgZGlzdGFuY2VUb0VkZ2UudG9wO1xuICAgICAgICBjb25zdCBuZXdYID0gYWxpZ24oeCArIG1vdmVtZW50WCwgc25hcFgpO1xuICAgICAgICBjb25zdCBuZXdZID0gYWxpZ24oeSArIG1vdmVtZW50WSwgc25hcFkpO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBuZXdYIC0geDtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gbmV3WSAtIHk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBuZXdYLFxuICAgICAgICAgIHk6IG5ld1ksXG4gICAgICAgICAgd2lkdGg6IHdpZHRoIC0gZGVsdGFYLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC0gZGVsdGFZLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2FzZSAndG9wLXJpZ2h0Jzoge1xuICAgICAgICBjb25zdCBtb3ZlbWVudFggPSBvZmZzZXQueCArIGRpc3RhbmNlVG9FZGdlLnJpZ2h0O1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLnRvcDtcbiAgICAgICAgY29uc3QgbmV3WSA9IGFsaWduKHkgKyBtb3ZlbWVudFksIHNuYXBZKTtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gbmV3WSAtIHk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHk6IG5ld1ksXG4gICAgICAgICAgd2lkdGg6IGFsaWduKHdpZHRoICsgbW92ZW1lbnRYLCBzbmFwWCksXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBkZWx0YVksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6IHtcbiAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gb2Zmc2V0LnggKyBkaXN0YW5jZVRvRWRnZS5sZWZ0O1xuICAgICAgICBjb25zdCBtb3ZlbWVudFkgPSBvZmZzZXQueSArIGRpc3RhbmNlVG9FZGdlLmJvdHRvbTtcbiAgICAgICAgY29uc3QgbmV3WCA9IGFsaWduKHggKyBtb3ZlbWVudFgsIHNuYXBYKTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gbmV3WCAtIHg7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiBuZXdYLFxuICAgICAgICAgIHksXG4gICAgICAgICAgd2lkdGg6IHdpZHRoIC0gZGVsdGFYLFxuICAgICAgICAgIGhlaWdodDogYWxpZ24oaGVpZ2h0ICsgbW92ZW1lbnRZLCBzbmFwWSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOiB7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WCA9IG9mZnNldC54ICsgZGlzdGFuY2VUb0VkZ2UucmlnaHQ7XG4gICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IG9mZnNldC55ICsgZGlzdGFuY2VUb0VkZ2UuYm90dG9tO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5LFxuICAgICAgICAgIHdpZHRoOiBhbGlnbih3aWR0aCArIG1vdmVtZW50WCwgc25hcFgpLFxuICAgICAgICAgIGhlaWdodDogYWxpZ24oaGVpZ2h0ICsgbW92ZW1lbnRZLCBzbmFwWSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGNPZmZzZXQobW92ZW1lbnRYOiBudW1iZXIsIG1vdmVtZW50WTogbnVtYmVyLCB6b29tOiBudW1iZXIpOiBQb2ludCB7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQobW92ZW1lbnRYIC8gem9vbSksXG4gICAgeTogcm91bmQobW92ZW1lbnRZIC8gem9vbSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnN0cmFpblJlY3QocmVjdDogUmVjdCwgbW9kZWw6IE5vZGVNb2RlbCwgc2lkZTogU2lkZSwgbWluV2lkdGg6IG51bWJlciwgbWluSGVpZ2h0OiBudW1iZXIpIHtcbiAgbGV0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gcmVjdDtcblxuICAvLyAxLiBQcmV2ZW50IG5lZ2F0aXZlIGRpbWVuc2lvbnNcbiAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgMCk7XG4gIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgMCk7XG5cbiAgLy8gMi4gQXBwbHkgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzXG4gIHdpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIHdpZHRoKTtcbiAgaGVpZ2h0ID0gTWF0aC5tYXgobWluSGVpZ2h0LCBoZWlnaHQpO1xuXG4gIC8vIEFwcGx5IGxlZnQvdG9wIGNvbnN0cmFpbnRzIGJhc2VkIG9uIG1pbmltdW0gc2l6ZVxuICB4ID0gTWF0aC5taW4oeCwgbW9kZWwucG9pbnQoKS54ICsgbW9kZWwud2lkdGgoKSAtIG1pbldpZHRoKTtcbiAgeSA9IE1hdGgubWluKHksIG1vZGVsLnBvaW50KCkueSArIG1vZGVsLmhlaWdodCgpIC0gbWluSGVpZ2h0KTtcblxuICBjb25zdCBwYXJlbnQgPSBtb2RlbC5wYXJlbnQoKTtcbiAgLy8gMy4gQXBwbHkgbWF4aW11bSBzaXplIGNvbnN0cmFpbnRzIGJhc2VkIG9uIHBhcmVudCBzaXplIChpZiBleGlzdHMpXG4gIGlmIChwYXJlbnQpIHtcbiAgICBjb25zdCBwYXJlbnRXaWR0aCA9IHBhcmVudC53aWR0aCgpO1xuICAgIGNvbnN0IHBhcmVudEhlaWdodCA9IHBhcmVudC5oZWlnaHQoKTtcbiAgICBjb25zdCBtb2RlbFggPSBtb2RlbC5wb2ludCgpLng7XG4gICAgY29uc3QgbW9kZWxZID0gbW9kZWwucG9pbnQoKS55O1xuXG4gICAgeCA9IE1hdGgubWF4KHgsIDApO1xuICAgIHkgPSBNYXRoLm1heCh5LCAwKTtcblxuICAgIC8vIFN0b3AgcmVzaXppbmcgd2hlbiBoaXR0aW5nIGxlZnQgb3IgdG9wIGJvdW5kYXJ5XG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ2xlZnQnKSAmJiB4ID09PSAwKSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBtb2RlbFggKyBtb2RlbC53aWR0aCgpKTtcbiAgICB9XG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ3RvcCcpICYmIHkgPT09IDApIHtcbiAgICAgIGhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgbW9kZWxZICsgbW9kZWwuaGVpZ2h0KCkpO1xuICAgIH1cblxuICAgIC8vIEFsbG93IHJpZ2h0L2JvdHRvbSByZXNpemluZyB3aXRob3V0IGJlaW5nIGJsb2NrZWRcbiAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBwYXJlbnRXaWR0aCAtIHgpO1xuICAgIGhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgcGFyZW50SGVpZ2h0IC0geSk7XG4gIH1cblxuICBjb25zdCBib3VuZHMgPSBnZXROb2Rlc0JvdW5kcyhtb2RlbC5jaGlsZHJlbigpKTtcbiAgLy8gNC4gQXBwbHkgY2hpbGQgbm9kZSBjb25zdHJhaW50cyAoaWYgY2hpbGRyZW4gZXhpc3QpXG4gIGlmIChib3VuZHMpIHtcbiAgICBpZiAoc2lkZS5pbmNsdWRlcygnbGVmdCcpKSB7XG4gICAgICB4ID0gTWF0aC5taW4oeCwgbW9kZWwucG9pbnQoKS54ICsgbW9kZWwud2lkdGgoKSAtIChib3VuZHMueCArIGJvdW5kcy53aWR0aCkpO1xuICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgYm91bmRzLnggKyBib3VuZHMud2lkdGgpO1xuICAgIH1cblxuICAgIGlmIChzaWRlLmluY2x1ZGVzKCdyaWdodCcpKSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBib3VuZHMueCArIGJvdW5kcy53aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ2JvdHRvbScpKSB7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHNpZGUuaW5jbHVkZXMoJ3RvcCcpKSB7XG4gICAgICB5ID0gTWF0aC5taW4oeSwgbW9kZWwucG9pbnQoKS55ICsgbW9kZWwuaGVpZ2h0KCkgLSAoYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0KSk7XG4gICAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICB9O1xufVxuIiwiPG5nLXRlbXBsYXRlICNyZXNpemVyPlxuICA8c3ZnOmc+XG4gICAgPCEtLSB0b3AgbGluZSAtLT5cbiAgICA8c3ZnOmxpbmVcbiAgICAgIGNsYXNzPVwidG9wXCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIueDFdPVwibGluZUdhcFwiXG4gICAgICBbYXR0ci55MV09XCItZ2FwKClcIlxuICAgICAgW2F0dHIueDJdPVwibW9kZWwuc2l6ZSgpLndpZHRoIC0gbGluZUdhcFwiXG4gICAgICBbYXR0ci55Ml09XCItZ2FwKClcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ3RvcCcsICRldmVudClcIiAvPlxuICAgIDwhLS0gTGVmdCBsaW5lIC0tPlxuICAgIDxzdmc6bGluZVxuICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIueDFdPVwiLWdhcCgpXCJcbiAgICAgIFthdHRyLnkxXT1cImxpbmVHYXBcIlxuICAgICAgW2F0dHIueDJdPVwiLWdhcCgpXCJcbiAgICAgIFthdHRyLnkyXT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgLSBsaW5lR2FwXCJcbiAgICAgIFthdHRyLnN0cm9rZV09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCdsZWZ0JywgJGV2ZW50KVwiIC8+XG4gICAgPCEtLSBCb3R0b20gbGluZSAtLT5cbiAgICA8c3ZnOmxpbmVcbiAgICAgIGNsYXNzPVwiYm90dG9tXCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgW2F0dHIueDFdPVwibGluZUdhcFwiXG4gICAgICBbYXR0ci55MV09XCJtb2RlbC5zaXplKCkuaGVpZ2h0ICsgZ2FwKClcIlxuICAgICAgW2F0dHIueDJdPVwibW9kZWwuc2l6ZSgpLndpZHRoIC0gbGluZUdhcFwiXG4gICAgICBbYXR0ci55Ml09XCJtb2RlbC5zaXplKCkuaGVpZ2h0ICsgZ2FwKClcIlxuICAgICAgW2F0dHIuc3Ryb2tlXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ2JvdHRvbScsICRldmVudClcIiAvPlxuICAgIDwhLS0gUmlnaHQgbGluZSAtLT5cbiAgICA8c3ZnOmxpbmVcbiAgICAgIGNsYXNzPVwicmlnaHRcIlxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICBbYXR0ci54MV09XCJtb2RlbC5zaXplKCkud2lkdGggKyBnYXAoKVwiXG4gICAgICBbYXR0ci55MV09XCJsaW5lR2FwXCJcbiAgICAgIFthdHRyLngyXT1cIm1vZGVsLnNpemUoKS53aWR0aCArIGdhcCgpXCJcbiAgICAgIFthdHRyLnkyXT1cIm1vZGVsLnNpemUoKS5oZWlnaHQgLSBsaW5lR2FwXCJcbiAgICAgIFthdHRyLnN0cm9rZV09XCJyZXNpemVyQ29sb3IoKVwiXG4gICAgICAocG9pbnRlclN0YXJ0KT1cInN0YXJ0UmVzaXplKCdyaWdodCcsICRldmVudClcIiAvPlxuXG4gICAgPCEtLSBUb3AgTGVmdCAtLT5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIGNsYXNzPVwidG9wLWxlZnRcIlxuICAgICAgW2F0dHIueF09XCItKGhhbmRsZVNpemUgLyAyKSAtIGdhcCgpXCJcbiAgICAgIFthdHRyLnldPVwiLShoYW5kbGVTaXplIC8gMikgLSBnYXAoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgndG9wLWxlZnQnLCAkZXZlbnQpXCIgLz5cblxuICAgIDwhLS0gVG9wIHJpZ2h0IC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgY2xhc3M9XCJ0b3AtcmlnaHRcIlxuICAgICAgW2F0dHIueF09XCJtb2RlbC5zaXplKCkud2lkdGggLSBoYW5kbGVTaXplIC8gMiArIGdhcCgpXCJcbiAgICAgIFthdHRyLnldPVwiLShoYW5kbGVTaXplIC8gMikgLSBnYXAoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgndG9wLXJpZ2h0JywgJGV2ZW50KVwiIC8+XG5cbiAgICA8IS0tIEJvdHRvbSBsZWZ0IC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgY2xhc3M9XCJib3R0b20tbGVmdFwiXG4gICAgICBbYXR0ci54XT1cIi0oaGFuZGxlU2l6ZSAvIDIpIC0gZ2FwKClcIlxuICAgICAgW2F0dHIueV09XCJtb2RlbC5zaXplKCkuaGVpZ2h0IC0gaGFuZGxlU2l6ZSAvIDIgKyBnYXAoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJoYW5kbGVTaXplXCJcbiAgICAgIFthdHRyLmZpbGxdPVwicmVzaXplckNvbG9yKClcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydFJlc2l6ZSgnYm90dG9tLWxlZnQnLCAkZXZlbnQpXCIgLz5cblxuICAgIDwhLS0gQm90dG9tIHJpZ2h0IC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgY2xhc3M9XCJib3R0b20tcmlnaHRcIlxuICAgICAgW2F0dHIueF09XCJtb2RlbC5zaXplKCkud2lkdGggLSBoYW5kbGVTaXplIC8gMiArIGdhcCgpXCJcbiAgICAgIFthdHRyLnldPVwibW9kZWwuc2l6ZSgpLmhlaWdodCAtIGhhbmRsZVNpemUgLyAyICsgZ2FwKClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwiaGFuZGxlU2l6ZVwiXG4gICAgICBbYXR0ci5maWxsXT1cInJlc2l6ZXJDb2xvcigpXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRSZXNpemUoJ2JvdHRvbS1yaWdodCcsICRldmVudClcIiAvPlxuICA8L3N2ZzpnPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRlbnQgLz5cbiJdfQ==
@@ -4,6 +4,7 @@ import { drag } from 'd3-drag';
4
4
  import { round } from '../utils/round';
5
5
  import { FlowEntitiesService } from './flow-entities.service';
6
6
  import { FlowSettingsService } from './flow-settings.service';
7
+ import { align } from '../utils/align-number';
7
8
  import * as i0 from "@angular/core";
8
9
  export class DraggableService {
9
10
  constructor() {
@@ -114,7 +115,4 @@ export class DraggableService {
114
115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DraggableService, decorators: [{
115
116
  type: Injectable
116
117
  }] });
117
- function align(num, constant) {
118
- return Math.ceil(num / constant) * constant;
119
- }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQWUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFLOUQsTUFBTSxPQUFPLGdCQUFnQjtJQUQ3QjtRQUVVLG9CQUFlLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDOUMsb0JBQWUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQXNIdkQ7SUFwSEM7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsT0FBZ0IsRUFBRSxLQUFnQjtRQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxPQUFPLENBQUMsT0FBZ0I7UUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsT0FBZ0I7UUFDN0IsTUFBTSxDQUFD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Q0FBQztZQUUvQixLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLEtBQVk7UUFDOUIsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXZELElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7K0dBdkhVLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVOztBQTJIWCxTQUFTLEtBQUssQ0FBQyxHQUFXLEVBQUUsUUFBZ0I7SUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IEQzRHJhZ0V2ZW50LCBkcmFnIH0gZnJvbSAnZDMtZHJhZyc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gJy4uL3V0aWxzL3JvdW5kJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5cbnR5cGUgRHJhZ0V2ZW50ID0gRDNEcmFnRXZlbnQ8RWxlbWVudCwgdW5rbm93biwgdW5rbm93bj47XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEcmFnZ2FibGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSk7XG4gIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZHJhZ2dhYmxlIGJlaGF2aW9yIGZvciBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudCB0YXJnZXQgZWxlbWVudCBmb3IgdG9nZ2xpbmcgZHJhZ2dhYmxlXG4gICAqIEBwYXJhbSBtb2RlbCBtb2RlbCB3aXRoIGRhdGEgZm9yIHRoaXMgZWxlbWVudFxuICAgKi9cbiAgcHVibGljIGVuYWJsZShlbGVtZW50OiBFbGVtZW50LCBtb2RlbDogTm9kZU1vZGVsKSB7XG4gICAgc2VsZWN0KGVsZW1lbnQpLmNhbGwodGhpcy5nZXREcmFnQmVoYXZpb3IobW9kZWwpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGRyYWdnYWJsZSBiZWhhdmlvciBmb3IgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgdGFyZ2V0IGVsZW1lbnQgZm9yIHRvZ2dsaW5nIGRyYWdnYWJsZVxuICAgKiBAcGFyYW0gbW9kZWwgbW9kZWwgd2l0aCBkYXRhIGZvciB0aGlzIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBkaXNhYmxlKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBzZWxlY3QoZWxlbWVudCkuY2FsbChkcmFnKCkub24oJ2RyYWcnLCBudWxsKSk7XG4gIH1cblxuICAvKipcbiAgICogVE9ETzogbm90IHNodXJlIGlmIHRoaXMgd29yaywgbmVlZCB0byBjaGVja1xuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koZWxlbWVudDogRWxlbWVudCkge1xuICAgIHNlbGVjdChlbGVtZW50KS5vbignLmRyYWcnLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb2RlIGRyYWcgYmVoYXZpb3IuIFVwZGF0ZWQgbm9kZSdzIGNvb3JkaW5hdGUgYWNjb3JkaW5nIHRvIGRyYWdnaW5nXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXREcmFnQmVoYXZpb3IobW9kZWw6IE5vZGVNb2RlbCkge1xuICAgIGxldCBkcmFnTm9kZXM6IE5vZGVNb2RlbFtdID0gW107XG4gICAgbGV0IGluaXRpYWxQb3NpdGlvbnM6IFBvaW50W10gPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlckNvbmRpdGlvbiA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkcmFnIGhhbmRsZSwgd2Ugc2hvdWxkIGNoZWNrIGlmIHdlIGFyZSBkcmFnZ2luZyBpdFxuICAgICAgaWYgKG1vZGVsLmRyYWdIYW5kbGVzQ291bnQoKSkge1xuICAgICAgICByZXR1cm4gISEoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoJy52Zmxvdy1kcmFnLWhhbmRsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRyYWcoKVxuICAgICAgLmZpbHRlcihmaWx0ZXJDb25kaXRpb24pXG4gICAgICAub24oJ3N0YXJ0JywgKGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgZHJhZ05vZGVzID0gdGhpcy5nZXREcmFnTm9kZXMobW9kZWwpO1xuXG4gICAgICAgIGluaXRpYWxQb3NpdGlvbnMgPSBkcmFnTm9kZXMubWFwKChub2RlKSA9PiAoe1xuICAgICAgICAgIHg6IG5vZGUucG9pbnQoKS54IC0gZXZlbnQueCxcbiAgICAgICAgICB5OiBub2RlLnBvaW50KCkueSAtIGV2ZW50LnksXG4gICAgICAgIH0pKTtcbiAgICAgIH0pXG5cbiAgICAgIC5vbignZHJhZycsIChldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgIGRyYWdOb2Rlcy5mb3JFYWNoKChtb2RlbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwb2ludCA9IHtcbiAgICAgICAgICAgIHg6IHJvdW5kKGV2ZW50LnggKyBpbml0aWFsUG9zaXRpb25zW2luZGV4XS54KSxcbiAgICAgICAgICAgIHk6IHJvdW5kKGV2ZW50LnkgKyBpbml0aWFsUG9zaXRpb25zW2luZGV4XS55KSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5tb3ZlTm9kZShtb2RlbCwgcG9pbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREcmFnTm9kZXMobW9kZWw6IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBtb2RlbC5zZWxlY3RlZCgpXG4gICAgICA/IHRoaXMuZW50aXRpZXNTZXJ2aWNlXG4gICAgICAgICAgLm5vZGVzKClcbiAgICAgICAgICAvLyBzZWxlY3RlZCBkcmFnZ2FibGUgbm9kZXMgKHdpdGggY3VycmVudCBub2RlKVxuICAgICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc2VsZWN0ZWQoKSAmJiBub2RlLmRyYWdnYWJsZSgpKVxuICAgICAgOiAvLyB3ZSBvbmx5IGNhbiBtb3ZlIGN1cnJlbnQgbm9kZSBpZiBpdCdzIG5vdCBzZWxlY3RlZFxuICAgICAgICBbbW9kZWxdO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0b2RvIG1ha2UgaXQgdW5pdCB0ZXN0YWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBtb3ZlTm9kZShtb2RlbDogTm9kZU1vZGVsLCBwb2ludDogUG9pbnQpIHtcbiAgICBwb2ludCA9IHRoaXMuYWxpZ25Ub0dyaWQocG9pbnQpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gbW9kZWwucGFyZW50KCk7XG4gICAgLy8ga2VlcCBub2RlIGluIGJvdW5kcyBvZiBwYXJlbnRcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwb2ludC54ID0gTWF0aC5taW4ocGFyZW50LndpZHRoKCkgLSBtb2RlbC53aWR0aCgpLCBwb2ludC54KTtcbiAgICAgIHBvaW50LnggPSBNYXRoLm1heCgwLCBwb2ludC54KTtcblxuICAgICAgcG9pbnQueSA9IE1hdGgubWluKHBhcmVudC5oZWlnaHQoKSAtIG1vZGVsLmhlaWdodCgpLCBwb2ludC55KTtcbiAgICAgIHBvaW50LnkgPSBNYXRoLm1heCgwLCBwb2ludC55KTtcbiAgICB9XG5cbiAgICBtb2RlbC5zZXRQb2ludChwb2ludCk7XG4gIH1cblxuICAvKipcbiAgICogQHRvZG8gbWFrZSBpdCB1bml0IHRlc3RhYmxlXG4gICAqL1xuICBwcml2YXRlIGFsaWduVG9HcmlkKHBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IFtzbmFwWCwgc25hcFldID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc25hcEdyaWQoKTtcblxuICAgIGlmIChzbmFwWCA+IDEpIHtcbiAgICAgIHBvaW50LnggPSBhbGlnbihwb2ludC54LCBzbmFwWCk7XG4gICAgfVxuXG4gICAgaWYgKHNuYXBZID4gMSkge1xuICAgICAgcG9pbnQueSA9IGFsaWduKHBvaW50LnksIHNuYXBZKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWxpZ24obnVtOiBudW1iZXIsIGNvbnN0YW50OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5jZWlsKG51bSAvIGNvbnN0YW50KSAqIGNvbnN0YW50O1xufVxuIl19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQWUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBSzlDLE1BQU0sT0FBTyxnQkFBZ0I7SUFEN0I7UUFFVSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FzSHZEO0lBcEhDOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE9BQWdCLEVBQUUsS0FBZ0I7UUFDOUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTyxDQUFDLE9BQWdCO1FBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7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QUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0IsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxLQUFZO1FBQzlCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV2RCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2QsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQXZIVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IEQzRHJhZ0V2ZW50LCBkcmFnIH0gZnJvbSAnZDMtZHJhZyc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gJy4uL3V0aWxzL3JvdW5kJztcbmltcG9ydCB7IEZsb3dFbnRpdGllc1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL2Zsb3ctc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBhbGlnbiB9IGZyb20gJy4uL3V0aWxzL2FsaWduLW51bWJlcic7XG5cbnR5cGUgRHJhZ0V2ZW50ID0gRDNEcmFnRXZlbnQ8RWxlbWVudCwgdW5rbm93biwgdW5rbm93bj47XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEcmFnZ2FibGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSk7XG4gIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZHJhZ2dhYmxlIGJlaGF2aW9yIGZvciBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudCB0YXJnZXQgZWxlbWVudCBmb3IgdG9nZ2xpbmcgZHJhZ2dhYmxlXG4gICAqIEBwYXJhbSBtb2RlbCBtb2RlbCB3aXRoIGRhdGEgZm9yIHRoaXMgZWxlbWVudFxuICAgKi9cbiAgcHVibGljIGVuYWJsZShlbGVtZW50OiBFbGVtZW50LCBtb2RlbDogTm9kZU1vZGVsKSB7XG4gICAgc2VsZWN0KGVsZW1lbnQpLmNhbGwodGhpcy5nZXREcmFnQmVoYXZpb3IobW9kZWwpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGRyYWdnYWJsZSBiZWhhdmlvciBmb3IgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgdGFyZ2V0IGVsZW1lbnQgZm9yIHRvZ2dsaW5nIGRyYWdnYWJsZVxuICAgKiBAcGFyYW0gbW9kZWwgbW9kZWwgd2l0aCBkYXRhIGZvciB0aGlzIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBkaXNhYmxlKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICBzZWxlY3QoZWxlbWVudCkuY2FsbChkcmFnKCkub24oJ2RyYWcnLCBudWxsKSk7XG4gIH1cblxuICAvKipcbiAgICogVE9ETzogbm90IHNodXJlIGlmIHRoaXMgd29yaywgbmVlZCB0byBjaGVja1xuICAgKlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKi9cbiAgcHVibGljIGRlc3Ryb3koZWxlbWVudDogRWxlbWVudCkge1xuICAgIHNlbGVjdChlbGVtZW50KS5vbignLmRyYWcnLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb2RlIGRyYWcgYmVoYXZpb3IuIFVwZGF0ZWQgbm9kZSdzIGNvb3JkaW5hdGUgYWNjb3JkaW5nIHRvIGRyYWdnaW5nXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXREcmFnQmVoYXZpb3IobW9kZWw6IE5vZGVNb2RlbCkge1xuICAgIGxldCBkcmFnTm9kZXM6IE5vZGVNb2RlbFtdID0gW107XG4gICAgbGV0IGluaXRpYWxQb3NpdGlvbnM6IFBvaW50W10gPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlckNvbmRpdGlvbiA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkcmFnIGhhbmRsZSwgd2Ugc2hvdWxkIGNoZWNrIGlmIHdlIGFyZSBkcmFnZ2luZyBpdFxuICAgICAgaWYgKG1vZGVsLmRyYWdIYW5kbGVzQ291bnQoKSkge1xuICAgICAgICByZXR1cm4gISEoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLmNsb3Nlc3QoJy52Zmxvdy1kcmFnLWhhbmRsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRyYWcoKVxuICAgICAgLmZpbHRlcihmaWx0ZXJDb25kaXRpb24pXG4gICAgICAub24oJ3N0YXJ0JywgKGV2ZW50OiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgZHJhZ05vZGVzID0gdGhpcy5nZXREcmFnTm9kZXMobW9kZWwpO1xuXG4gICAgICAgIGluaXRpYWxQb3NpdGlvbnMgPSBkcmFnTm9kZXMubWFwKChub2RlKSA9PiAoe1xuICAgICAgICAgIHg6IG5vZGUucG9pbnQoKS54IC0gZXZlbnQueCxcbiAgICAgICAgICB5OiBub2RlLnBvaW50KCkueSAtIGV2ZW50LnksXG4gICAgICAgIH0pKTtcbiAgICAgIH0pXG5cbiAgICAgIC5vbignZHJhZycsIChldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgIGRyYWdOb2Rlcy5mb3JFYWNoKChtb2RlbCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwb2ludCA9IHtcbiAgICAgICAgICAgIHg6IHJvdW5kKGV2ZW50LnggKyBpbml0aWFsUG9zaXRpb25zW2luZGV4XS54KSxcbiAgICAgICAgICAgIHk6IHJvdW5kKGV2ZW50LnkgKyBpbml0aWFsUG9zaXRpb25zW2luZGV4XS55KSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5tb3ZlTm9kZShtb2RlbCwgcG9pbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREcmFnTm9kZXMobW9kZWw6IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBtb2RlbC5zZWxlY3RlZCgpXG4gICAgICA/IHRoaXMuZW50aXRpZXNTZXJ2aWNlXG4gICAgICAgICAgLm5vZGVzKClcbiAgICAgICAgICAvLyBzZWxlY3RlZCBkcmFnZ2FibGUgbm9kZXMgKHdpdGggY3VycmVudCBub2RlKVxuICAgICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc2VsZWN0ZWQoKSAmJiBub2RlLmRyYWdnYWJsZSgpKVxuICAgICAgOiAvLyB3ZSBvbmx5IGNhbiBtb3ZlIGN1cnJlbnQgbm9kZSBpZiBpdCdzIG5vdCBzZWxlY3RlZFxuICAgICAgICBbbW9kZWxdO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0b2RvIG1ha2UgaXQgdW5pdCB0ZXN0YWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBtb3ZlTm9kZShtb2RlbDogTm9kZU1vZGVsLCBwb2ludDogUG9pbnQpIHtcbiAgICBwb2ludCA9IHRoaXMuYWxpZ25Ub0dyaWQocG9pbnQpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gbW9kZWwucGFyZW50KCk7XG4gICAgLy8ga2VlcCBub2RlIGluIGJvdW5kcyBvZiBwYXJlbnRcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwb2ludC54ID0gTWF0aC5taW4ocGFyZW50LndpZHRoKCkgLSBtb2RlbC53aWR0aCgpLCBwb2ludC54KTtcbiAgICAgIHBvaW50LnggPSBNYXRoLm1heCgwLCBwb2ludC54KTtcblxuICAgICAgcG9pbnQueSA9IE1hdGgubWluKHBhcmVudC5oZWlnaHQoKSAtIG1vZGVsLmhlaWdodCgpLCBwb2ludC55KTtcbiAgICAgIHBvaW50LnkgPSBNYXRoLm1heCgwLCBwb2ludC55KTtcbiAgICB9XG5cbiAgICBtb2RlbC5zZXRQb2ludChwb2ludCk7XG4gIH1cblxuICAvKipcbiAgICogQHRvZG8gbWFrZSBpdCB1bml0IHRlc3RhYmxlXG4gICAqL1xuICBwcml2YXRlIGFsaWduVG9HcmlkKHBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IFtzbmFwWCwgc25hcFldID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc25hcEdyaWQoKTtcblxuICAgIGlmIChzbmFwWCA+IDEpIHtcbiAgICAgIHBvaW50LnggPSBhbGlnbihwb2ludC54LCBzbmFwWCk7XG4gICAgfVxuXG4gICAgaWYgKHNuYXBZID4gMSkge1xuICAgICAgcG9pbnQueSA9IGFsaWduKHBvaW50LnksIHNuYXBZKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG4gIH1cbn1cbiJdfQ==
@@ -40,7 +40,7 @@ export class FlowEntitiesService {
40
40
  this.minimap = signal(null);
41
41
  }
42
42
  getNode(id) {
43
- return this.nodes().find(({ node }) => node.id === id);
43
+ return this.nodes().find(({ rawNode }) => rawNode.id === id);
44
44
  }
45
45
  getDetachedEdges() {
46
46
  return this.edges().filter((e) => e.detached());
@@ -51,4 +51,4 @@ export class FlowEntitiesService {
51
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FlowEntitiesService, decorators: [{
52
52
  type: Injectable
53
53
  }] });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1lbnRpdGllcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt6QyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRWtCLFVBQUssR0FBRyxNQUFNLENBQWMsRUFBRSxFQUFFO1lBQzlDLCtEQUErRDtZQUMvRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzRCxDQUFDLENBQUM7UUFFYSxVQUFLLEdBQUcsTUFBTSxDQUFjLEVBQUUsRUFBRTtZQUM5QywrREFBK0Q7WUFDL0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBRWEsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTNCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7UUFFYSxlQUFVLEdBQUcsTUFBTSxDQUFrQixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlELFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1lBRTdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDNUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7Z0JBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDMUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDM0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUksYUFBUSxHQUF5QixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEYsWUFBTyxHQUF3QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FTcEU7SUFQUSxPQUFPLENBQUksRUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBNkIsQ0FBQztJQUNyRixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0FyRFUsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBTaWduYWwsIFdyaXRhYmxlU2lnbmFsLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWRnZS5tb2RlbCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY29ubmVjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBNYXJrZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL21hcmtlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaGFzaENvZGUgfSBmcm9tICcuLi91dGlscy9oYXNoJztcbmltcG9ydCB7IEZsb3dFbnRpdHkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zsb3ctZW50aXR5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBNaW5pbWFwTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbWluaW1hcC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGbG93RW50aXRpZXNTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzID0gc2lnbmFsPE5vZGVNb2RlbFtdPihbXSwge1xuICAgIC8vIGVtcHR5IGFycmF5cyBjb25zaWRlcmVkIGVxdWFsLCBvdGhlciBhcnJheXMgbWF5IG5vdCBiZSBlcXVhbFxuICAgIGVxdWFsOiAoYSwgYikgPT4gKCFhLmxlbmd0aCAmJiAhYi5sZW5ndGggPyB0cnVlIDogYSA9PT0gYiksXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBlZGdlcyA9IHNpZ25hbDxFZGdlTW9kZWxbXT4oW10sIHtcbiAgICAvLyBlbXB0eSBhcnJheXMgY29uc2lkZXJlZCBlcXVhbCwgb3RoZXIgYXJyYXlzIG1heSBub3QgYmUgZXF1YWxcbiAgICBlcXVhbDogKGEsIGIpID0+ICghYS5sZW5ndGggJiYgIWIubGVuZ3RoID8gdHJ1ZSA6IGEgPT09IGIpLFxuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRFZGdlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMubm9kZXMoKTtcblxuICAgIHJldHVybiB0aGlzLmVkZ2VzKCkuZmlsdGVyKChlKSA9PiBub2Rlcy5pbmNsdWRlcyhlLnNvdXJjZSgpISkgJiYgbm9kZXMuaW5jbHVkZXMoZS50YXJnZXQoKSEpKTtcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb24gPSBzaWduYWw8Q29ubmVjdGlvbk1vZGVsPihuZXcgQ29ubmVjdGlvbk1vZGVsKHt9KSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG1hcmtlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFya2Vyc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBNYXJrZXI+KCk7XG5cbiAgICB0aGlzLnZhbGlkRWRnZXMoKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICBpZiAoZS5lZGdlLm1hcmtlcnM/LnN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShKU09OLnN0cmluZ2lmeShlLmVkZ2UubWFya2Vycy5zdGFydCkpO1xuICAgICAgICBtYXJrZXJzTWFwLnNldChoYXNoLCBlLmVkZ2UubWFya2Vycy5zdGFydCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlLmVkZ2UubWFya2Vycz8uZW5kKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShKU09OLnN0cmluZ2lmeShlLmVkZ2UubWFya2Vycy5lbmQpKTtcbiAgICAgICAgbWFya2Vyc01hcC5zZXQoaGFzaCwgZS5lZGdlLm1hcmtlcnMuZW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbm5lY3Rpb25NYXJrZXIgPSB0aGlzLmNvbm5lY3Rpb24oKS5zZXR0aW5ncy5tYXJrZXI7XG4gICAgaWYgKGNvbm5lY3Rpb25NYXJrZXIpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShKU09OLnN0cmluZ2lmeShjb25uZWN0aW9uTWFya2VyKSk7XG4gICAgICBtYXJrZXJzTWFwLnNldChoYXNoLCBjb25uZWN0aW9uTWFya2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2Vyc01hcDtcbiAgfSk7XG5cbiAgcHVibGljIGVudGl0aWVzOiBTaWduYWw8Rmxvd0VudGl0eVtdPiA9IGNvbXB1dGVkKCgpID0+IFsuLi50aGlzLm5vZGVzKCksIC4uLnRoaXMuZWRnZXMoKV0pO1xuXG4gIHB1YmxpYyBtaW5pbWFwOiBXcml0YWJsZVNpZ25hbDxNaW5pbWFwTW9kZWwgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICBwdWJsaWMgZ2V0Tm9kZTxUPihpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXMoKS5maW5kKCh7IG5vZGUgfSkgPT4gbm9kZS5pZCA9PT0gaWQpIGFzIE5vZGVNb2RlbDxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZXRhY2hlZEVkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzKCkuZmlsdGVyKChlKSA9PiBlLmRldGFjaGVkKCkpO1xuICB9XG59XG4iXX0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1lbnRpdGllcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt6QyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRWtCLFVBQUssR0FBRyxNQUFNLENBQWMsRUFBRSxFQUFFO1lBQzlDLCtEQUErRDtZQUMvRCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzRCxDQUFDLENBQUM7UUFFYSxVQUFLLEdBQUcsTUFBTSxDQUFjLEVBQUUsRUFBRTtZQUM5QywrREFBK0Q7WUFDL0QsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0QsQ0FBQyxDQUFDO1FBRWEsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTNCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7UUFFYSxlQUFVLEdBQUcsTUFBTSxDQUFrQixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlELFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1lBRTdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDNUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7Z0JBRUQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDMUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDM0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUksYUFBUSxHQUF5QixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEYsWUFBTyxHQUF3QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FTcEU7SUFQUSxPQUFPLENBQUksRUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBNkIsQ0FBQztJQUMzRixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0FyRFUsbUJBQW1CO21IQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBTaWduYWwsIFdyaXRhYmxlU2lnbmFsLCBjb21wdXRlZCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWRnZS5tb2RlbCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY29ubmVjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBNYXJrZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL21hcmtlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaGFzaENvZGUgfSBmcm9tICcuLi91dGlscy9oYXNoJztcbmltcG9ydCB7IEZsb3dFbnRpdHkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zsb3ctZW50aXR5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBNaW5pbWFwTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbWluaW1hcC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGbG93RW50aXRpZXNTZXJ2aWNlIHtcbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzID0gc2lnbmFsPE5vZGVNb2RlbFtdPihbXSwge1xuICAgIC8vIGVtcHR5IGFycmF5cyBjb25zaWRlcmVkIGVxdWFsLCBvdGhlciBhcnJheXMgbWF5IG5vdCBiZSBlcXVhbFxuICAgIGVxdWFsOiAoYSwgYikgPT4gKCFhLmxlbmd0aCAmJiAhYi5sZW5ndGggPyB0cnVlIDogYSA9PT0gYiksXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBlZGdlcyA9IHNpZ25hbDxFZGdlTW9kZWxbXT4oW10sIHtcbiAgICAvLyBlbXB0eSBhcnJheXMgY29uc2lkZXJlZCBlcXVhbCwgb3RoZXIgYXJyYXlzIG1heSBub3QgYmUgZXF1YWxcbiAgICBlcXVhbDogKGEsIGIpID0+ICghYS5sZW5ndGggJiYgIWIubGVuZ3RoID8gdHJ1ZSA6IGEgPT09IGIpLFxuICB9KTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWRFZGdlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMubm9kZXMoKTtcblxuICAgIHJldHVybiB0aGlzLmVkZ2VzKCkuZmlsdGVyKChlKSA9PiBub2Rlcy5pbmNsdWRlcyhlLnNvdXJjZSgpISkgJiYgbm9kZXMuaW5jbHVkZXMoZS50YXJnZXQoKSEpKTtcbiAgfSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb24gPSBzaWduYWw8Q29ubmVjdGlvbk1vZGVsPihuZXcgQ29ubmVjdGlvbk1vZGVsKHt9KSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IG1hcmtlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFya2Vyc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBNYXJrZXI+KCk7XG5cbiAgICB0aGlzLnZhbGlkRWRnZXMoKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICBpZiAoZS5lZGdlLm1hcmtlcnM/LnN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShKU09OLnN0cmluZ2lmeShlLmVkZ2UubWFya2Vycy5zdGFydCkpO1xuICAgICAgICBtYXJrZXJzTWFwLnNldChoYXNoLCBlLmVkZ2UubWFya2Vycy5zdGFydCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlLmVkZ2UubWFya2Vycz8uZW5kKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShKU09OLnN0cmluZ2lmeShlLmVkZ2UubWFya2Vycy5lbmQpKTtcbiAgICAgICAgbWFya2Vyc01hcC5zZXQoaGFzaCwgZS5lZGdlLm1hcmtlcnMuZW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbm5lY3Rpb25NYXJrZXIgPSB0aGlzLmNvbm5lY3Rpb24oKS5zZXR0aW5ncy5tYXJrZXI7XG4gICAgaWYgKGNvbm5lY3Rpb25NYXJrZXIpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZShKU09OLnN0cmluZ2lmeShjb25uZWN0aW9uTWFya2VyKSk7XG4gICAgICBtYXJrZXJzTWFwLnNldChoYXNoLCBjb25uZWN0aW9uTWFya2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2Vyc01hcDtcbiAgfSk7XG5cbiAgcHVibGljIGVudGl0aWVzOiBTaWduYWw8Rmxvd0VudGl0eVtdPiA9IGNvbXB1dGVkKCgpID0+IFsuLi50aGlzLm5vZGVzKCksIC4uLnRoaXMuZWRnZXMoKV0pO1xuXG4gIHB1YmxpYyBtaW5pbWFwOiBXcml0YWJsZVNpZ25hbDxNaW5pbWFwTW9kZWwgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICBwdWJsaWMgZ2V0Tm9kZTxUPihpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXMoKS5maW5kKCh7IHJhd05vZGUgfSkgPT4gcmF3Tm9kZS5pZCA9PT0gaWQpIGFzIE5vZGVNb2RlbDxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZXRhY2hlZEVkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzKCkuZmlsdGVyKChlKSA9PiBlLmRldGFjaGVkKCkpO1xuICB9XG59XG4iXX0=