@twinmatrix/spatialverse-sdk-web 0.0.2 → 0.0.3

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 (125) hide show
  1. package/lib/cjs/index.js +9 -9
  2. package/lib/cjs/index.js.map +1 -1
  3. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +213 -294
  4. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  5. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +43 -45
  6. package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  7. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +241 -271
  8. package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  9. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +167 -215
  10. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  11. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js +28 -30
  12. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js.map +1 -1
  13. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +876 -1188
  14. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  15. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +173 -163
  16. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  17. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/interfaces.js +6 -6
  18. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/interfaces.js.map +1 -1
  19. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js +6 -6
  20. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js.map +1 -1
  21. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routeLayers.js +3 -3
  22. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routeLayers.js.map +1 -1
  23. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +546 -620
  24. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  25. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +155 -160
  26. package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  27. package/lib/cjs/meta-atlas-sdk/customStyles.js +2 -2
  28. package/lib/cjs/meta-atlas-sdk/customStyles.js.map +1 -1
  29. package/lib/cjs/meta-atlas-sdk/customerLayer.js +15 -29
  30. package/lib/cjs/meta-atlas-sdk/customerLayer.js.map +1 -1
  31. package/lib/cjs/meta-atlas-sdk/customerLayerVariant.js +5 -5
  32. package/lib/cjs/meta-atlas-sdk/customerLayerVariant.js.map +1 -1
  33. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +832 -1060
  34. package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  35. package/lib/cjs/meta-atlas-sdk/utils/helpers.js +33 -50
  36. package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
  37. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +18 -36
  38. package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
  39. package/lib/cjs/meta-atlas-sdk/utils/mapobjects-store.js +6 -6
  40. package/lib/cjs/meta-atlas-sdk/utils/mapobjects-store.js.map +1 -1
  41. package/lib/cjs/meta-atlas-sdk/utils/routing-store.js +6 -6
  42. package/lib/cjs/meta-atlas-sdk/utils/routing-store.js.map +1 -1
  43. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +428 -556
  44. package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  45. package/lib/cjs/react/MetaAtlasMap.js +127 -0
  46. package/lib/cjs/react/MetaAtlasMap.js.map +1 -0
  47. package/lib/cjs/react/hooks/useDrawing/index.js +17 -18
  48. package/lib/cjs/react/hooks/useDrawing/index.js.map +1 -1
  49. package/lib/cjs/react/hooks/useFocus/index.js +48 -55
  50. package/lib/cjs/react/hooks/useFocus/index.js.map +1 -1
  51. package/lib/cjs/react/hooks/useMapEvents/index.js +40 -50
  52. package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
  53. package/lib/cjs/react/hooks/useMapOverlays/index.js +20 -21
  54. package/lib/cjs/react/hooks/useMapOverlays/index.js.map +1 -1
  55. package/lib/cjs/react/hooks/useMetaAtlas/index.js +77 -95
  56. package/lib/cjs/react/hooks/useMetaAtlas/index.js.map +1 -1
  57. package/lib/cjs/react/hooks/useMetaAtlas.js +78 -96
  58. package/lib/cjs/react/hooks/useMetaAtlas.js.map +1 -1
  59. package/lib/cjs/react/hooks/useRouting/index.js +21 -20
  60. package/lib/cjs/react/hooks/useRouting/index.js.map +1 -1
  61. package/lib/cjs/react/hooks/useSearch/index.js +35 -34
  62. package/lib/cjs/react/hooks/useSearch/index.js.map +1 -1
  63. package/lib/cjs/react/hooks/useStampRally/index.js +30 -29
  64. package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
  65. package/lib/cjs/react/hooks/useStampRally/utils.js +2 -2
  66. package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
  67. package/lib/cjs/react/index.js +31 -31
  68. package/lib/cjs/react/index.js.map +1 -1
  69. package/lib/cjs/react/stores/useMapDataStore.js +53 -64
  70. package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
  71. package/lib/cjs/react/stores/useMetaAtlasStore.js +27 -40
  72. package/lib/cjs/react/stores/useMetaAtlasStore.js.map +1 -1
  73. package/lib/esm/index.js +3 -7
  74. package/lib/esm/index.js.map +1 -1
  75. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -1
  76. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
  77. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +10 -9
  78. package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
  79. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +2 -2
  80. package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
  81. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
  82. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
  83. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js +4 -3
  84. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetchMapObjectsData.js.map +1 -1
  85. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +22 -14
  86. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
  87. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +8 -8
  88. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
  89. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js +3 -3
  90. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.js.map +1 -1
  91. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +18 -11
  92. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
  93. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +4 -3
  94. package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
  95. package/lib/esm/meta-atlas-sdk/customerLayer.js +4 -1
  96. package/lib/esm/meta-atlas-sdk/customerLayer.js.map +1 -1
  97. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +80 -61
  98. package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
  99. package/lib/esm/meta-atlas-sdk/utils/helpers.js +3 -1
  100. package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
  101. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +19 -15
  102. package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
  103. package/lib/esm/react/MetaAtlasMap.js +120 -0
  104. package/lib/esm/react/MetaAtlasMap.js.map +1 -0
  105. package/lib/esm/react/hooks/useDrawing/index.js +2 -2
  106. package/lib/esm/react/hooks/useDrawing/index.js.map +1 -1
  107. package/lib/esm/react/hooks/useFocus/index.js +4 -3
  108. package/lib/esm/react/hooks/useFocus/index.js.map +1 -1
  109. package/lib/esm/react/hooks/useMapEvents/index.js +3 -3
  110. package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
  111. package/lib/esm/react/hooks/useMapOverlays/index.js +2 -2
  112. package/lib/esm/react/hooks/useMapOverlays/index.js.map +1 -1
  113. package/lib/esm/react/hooks/useMetaAtlas/index.js +162 -60
  114. package/lib/esm/react/hooks/useMetaAtlas/index.js.map +1 -1
  115. package/lib/esm/react/hooks/useMetaAtlas.js +162 -60
  116. package/lib/esm/react/hooks/useMetaAtlas.js.map +1 -1
  117. package/lib/esm/react/hooks/useRouting/index.js +2 -2
  118. package/lib/esm/react/hooks/useRouting/index.js.map +1 -1
  119. package/lib/esm/react/hooks/useSearch/index.js +2 -2
  120. package/lib/esm/react/hooks/useSearch/index.js.map +1 -1
  121. package/lib/esm/react/hooks/useStampRally/index.js +8 -7
  122. package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
  123. package/lib/esm/react/index.js +11 -15
  124. package/lib/esm/react/index.js.map +1 -1
  125. package/package.json +9 -6
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["aStar","createGraph","point","multiPoint","turf","cloneDeep","isEmpty","toInteger","LineDirection","RouteDimension","WALK_SPEED","getNetworkFeatures","getEdge","getPortalDataForDimension","isMovingPortalTaxonomy","isPortalTaxonomy","DEFAULT_DIMENSION","filterPortalEdgeDataByList","filterPortalEdgeDataByWhere","getParentDimension","optimized","RoutingCore","wheelChairAccessibleRouteOnly","startNode","endNode","changeZoneCheckEnabled","runIntersection","portalData","edgeData","lines","addVertex","graph","coords","mapObjectId","where","what","zone","updateMapObjectId","vertexName","toString","vertex","getNode","undefined","data","zoneUnionVertex","addNode","addLink","vertex1","vertex2","cost","description","timeInSeconds","isPortal","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point2","distance","units","addEdgeToGraph","edge","node","index","length","line","getCoords","i","Edge","properties","direction","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","console","warn","portalPath","getPortalPath","invertStart","prevVertexMapObjId","set","Set","add","portalDataForSet","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","edges","startFloor","endFloor","push","nextVertex","log","pop","copyOfCurrentVertex","result","routes","findPath","pathFinder","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","geojsonPath","getRouteWithAllPortals","performance","now","concatenatedEdgeFeatures","concat","concatenatedNetworkFeatures","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","portalDataDestinationNode","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","node2","runRouteIteration","directRoute","routeWithAllPortals","finalRoute","route"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/index.ts"],"sourcesContent":["/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport { aStar } from 'ngraph.path';\nimport createGraph, { Graph, Node } from 'ngraph.graph';\nimport {\n point,\n multiPoint,\n} from '@turf/helpers';\nimport { Feature, LineString, MultiPoint } from 'geojson';\n// import turfDistance from '@turf/distance';\nimport * as turf from '@turf/turf';\nimport { cloneDeep, isEmpty, toInteger } from 'lodash';\nimport {\n CalculationResult, Edge, LineDirection, RouteDimension, RouteResult, WALK_SPEED, EdgeLine, Portal, PortalEdgeData, UserPosition\n} from './interfaces';\nimport {\n getNetworkFeatures, getEdge,\n getPortalDataForDimension,\n} from './mapObjectsHelper';\nimport { isMovingPortalTaxonomy, isPortalTaxonomy } from './routing-helpers';\nimport {\n DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, getPortalEdgeData, optimized,\n} from './utils';\n\n/* eslint-disable @typescript-eslint/no-shadow */\n\nconst RoutingCore = (function () {\n let wheelChairAccessibleRouteOnly = true;\n let startNode: Edge | undefined;\n let endNode: Edge | undefined;\n let changeZoneCheckEnabled = true;\n let runIntersection = false;\n\n let portalData: {\n edgeData: PortalEdgeData,\n lines: EdgeLine[],\n } = { edgeData: {}, lines: [] };\n\n function addVertex(\n graph: Graph,\n coords: number[],\n mapObjectId: string,\n where: string,\n what: string,\n zone: string,\n updateMapObjectId = false,\n ) {\n const vertexName = `${(coords).toString()},${where}`;\n let vertex = graph.getNode(vertexName);\n if (vertex === undefined) {\n const data = {\n mapObjectId,\n coords,\n where,\n what,\n zone,\n zoneUnionVertex: false,\n };\n vertex = graph.addNode(vertexName, data);\n } else if (updateMapObjectId) {\n vertex.data.mapObjectId = mapObjectId;\n\n // Mark the vertex as common vertex between zones\n if (vertex.data.zone !== zone) vertex.data.zoneUnionVertex = true;\n vertex.data.zone = zone;\n }\n return vertex;\n }\n\n function addLink(graph: Graph<any, any>, vertex1 : Node<any>, vertex2 : Node<any>, data :{\n wheelChairAccesible: number,\n cost: number,\n isPortal: boolean,\n description: string | null,\n }) {\n const { cost, description } = data;\n const timeInSeconds = data.isPortal ? cost / WALK_SPEED : cost;\n if (!wheelChairAccessibleRouteOnly || (wheelChairAccessibleRouteOnly && data.wheelChairAccesible)) { graph.addLink(vertex1.id, vertex2.id, { weight: timeInSeconds, cost, description }); }\n }\n\n function getDistance(coords1: number[], coords2: number[]) {\n const point1 = point(coords1);\n const point2 = point(coords2);\n const distance = turf.distance(point1, point2, { units: 'meters' });\n return distance;\n }\n\n function addEdgeToGraph(graph: Graph, edge: Edge) {\n const node = edge;\n if (node) {\n const vertex = addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n for (let index = 0; index < node.lines.length; index += 1) {\n const line = node.lines[index];\n // add edges for coord pairs\n const coords = turf.getCoords(line);\n for (let i = 0; i < coords.length - 1; i += 1) {\n const vertex1 = addVertex(\n graph,\n coords[i],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n const vertex2 = addVertex(\n graph,\n coords[i + 1],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(coords[i], coords[i + 1]);\n if (line.properties.direction === LineDirection.Forward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (line.properties.direction === LineDirection.Backward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n return vertex;\n }\n\n return undefined;\n }\n\n function addNetworkToGraph(graph: Graph, networkFeatures: Feature[]) {\n for (let index = 0; index < networkFeatures.length; index += 1) {\n const feature = networkFeatures[index];\n if (feature.geometry.type === 'LineString') {\n // get line\n const lineCoords = turf.getCoords(feature as any);\n if (feature.properties) {\n const where = feature.properties.dimension_where;\n const what = RouteDimension.Network; // feature.properties.dimension_what;\n const { zone } = feature.properties;\n // add edges for coord pairs\n for (let i = 0; i < lineCoords.length - 1; i += 1) {\n const vertex1 = addVertex(graph, lineCoords[i], 'vertex', where, what, zone, true);\n const vertex2 = addVertex(\n graph,\n lineCoords[i + 1],\n 'vertex',\n where,\n what,\n zone,\n true,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(lineCoords[i], lineCoords[i + 1]);\n if (feature.properties.direction === LineDirection.Forward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (feature.properties.direction === LineDirection.Backward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n }\n }\n }\n\n function addVertexByEdge(graph: Graph, edge: Edge) {\n const node = edge;\n if (node === undefined) {\n return undefined;\n }\n return addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n }\n\n function addPortalLinksToGraph(graph: Graph, portalEdgeData: PortalEdgeData) {\n for (const mapObjectId1 in portalEdgeData) {\n const portal = portalEdgeData[mapObjectId1];\n\n for (let index = 0; index < portal.links.length; index += 1) {\n const portalLink = portal.links[index];\n let { cost } = portalLink;\n cost = toInteger(cost);\n // if (cost <= 1) {\n // cost = portalWeight;\n // }\n const { direction, wheelchair, description } = portalLink;\n const portal1 = addVertexByEdge(graph, portal);\n const portal2 = addVertexByEdge(graph, portalLink);\n if (portal1 !== undefined && portal2 !== undefined && portal1.id !== portal2.id) {\n if (direction === LineDirection.Forward || direction === LineDirection.TwoWay) {\n addLink(graph, portal1, portal2, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n if (direction === LineDirection.Backward || direction === LineDirection.TwoWay) {\n addLink(graph, portal2, portal1, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n\n addEdgeToGraph(graph, portalLink);\n }\n }\n\n addEdgeToGraph(graph, portal);\n }\n }\n\n function initLineString(vertex: any) {\n return {\n type: 'Feature',\n geometry: { type: 'LineString', coordinates: [vertex.data.coords] },\n properties: {\n dimension_where: vertex.data.where,\n zone: vertex.data.zone,\n cost: 0,\n },\n } as Feature<LineString | MultiPoint, any>;\n }\n\n function pathToFeatures(source: Edge, destination : Edge, vertices: Node<any>[], graph: Graph) {\n if (vertices.length <= 1) {\n return {} as CalculationResult;\n } // if no path found\n\n const startNode = source;\n const endNode = destination;\n\n const segments: RouteResult[] = [];\n let segmentStartVertexData = vertices[0].data;\n const geojsonPaths = [initLineString(vertices[0])];\n\n for (let i = 1; i < vertices.length; i += 1) {\n const curVertex = vertices[i];\n const prevVertex = vertices[i - 1];\n const line = geojsonPaths[geojsonPaths.length - 1];\n\n // if vertex is map object\n if (curVertex.data.mapObjectId !== 'vertex' || curVertex.data.zoneUnionVertex) {\n let segment;\n if (isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what)) {\n if (prevVertex.data.zone !== curVertex.data.zone) {\n console.warn('A portal is triggering a change in zone');\n }\n\n // check if portal path is available to visualize\n let portalPath;\n if (isMovingPortalTaxonomy(prevVertex.data.what)) {\n const getPortalPath = (portalEdgeData: PortalEdgeData, curVertex: Node<any>, prevVertex: Node<any>, invertStart = false) => {\n const prevVertexMapObjId = prevVertex.data.mapObjectId;\n const set = new Set<string>().add(prevVertexMapObjId);\n const portalDataForSet = filterPortalEdgeDataByList(portalEdgeData, set);\n if (portalDataForSet && portalDataForSet.edgeData[prevVertexMapObjId]) {\n const prevVertexPortalData = portalDataForSet.edgeData[prevVertexMapObjId];\n for (let j = 0; j < prevVertexPortalData.links.length; j += 1) {\n const link = prevVertexPortalData.links[j];\n if (link.id === curVertex.data.mapObjectId) {\n if (link.pathFeatures && link.pathFeatures.length > 0) {\n const line = link.pathFeatures[0];\n const start = invertStart === false ? prevVertex.data.coords : curVertex.data.coords;\n const end = invertStart === false ? curVertex.data.coords : prevVertex.data.coords;\n\n const distanceToStart = turf.distance(start, line.geometry.coordinates[0]);\n const distanceToEnd = turf.distance(end, line.geometry.coordinates[0]);\n const coordsToUse = distanceToStart < distanceToEnd ? line.geometry.coordinates : line.geometry.coordinates.slice().reverse();\n return turf.lineString(coordsToUse);\n }\n }\n }\n }\n\n return null;\n };\n\n portalPath = getPortalPath(portalData.edgeData, curVertex, prevVertex, false);\n if (!portalPath) portalPath = getPortalPath(portalData.edgeData, prevVertex, curVertex, true);\n }\n\n // TODO: read description here\n const link = graph.getLink(prevVertex.id, curVertex.id);\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n const description = link ? link.data.description ? link.data.description : undefined : undefined;\n segment = {\n geojson: multiPoint([\n prevVertex.data.coords,\n curVertex.data.coords,\n ], {\n zone: curVertex.data.zone,\n }),\n edges: [prevVertex.data.mapObjectId, curVertex.data.mapObjectId],\n startFloor: prevVertex.data.where,\n endFloor: curVertex.data.where,\n isPortal: true,\n portalPath,\n cost,\n description,\n } as RouteResult;\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n } else {\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (curVertex.data.zoneUnionVertex\n && (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone)) {\n console.log('ignore zoneUnionVertex in segment');\n } else {\n segment = {\n geojson: line,\n edges: [segmentStartVertexData.mapObjectId, curVertex.data.mapObjectId],\n startFloor: segmentStartVertexData.where,\n endFloor: segmentStartVertexData.where,\n isPortal: false,\n portalPath: undefined,\n cost: line.properties.cost,\n };\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n }\n }\n }\n\n // same line\n if (!(isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what))) {\n const link = graph.getLink(prevVertex.id, curVertex.id); // returns a link from 'hello' to 'world'\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n\n line.geometry.coordinates.push(curVertex.data.coords);\n line.properties.cost += cost;\n } else {\n // new line\n if (line.geometry.coordinates.length < 2) {\n geojsonPaths.pop();\n }\n geojsonPaths.push(initLineString(curVertex));\n }\n\n // new line due to change in zone\n if (curVertex.data.zoneUnionVertex) {\n const prevVertex = (i > 0) ? vertices[i - 1] : undefined;\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone) {\n console.log('ignore zoneUnionVertex');\n } else\n // Use zone value of next vertex (when available) as current vertex is a common vertex and can have either of the zone values\n if (nextVertex) {\n const copyOfCurrentVertex = cloneDeep(curVertex);\n copyOfCurrentVertex.data.zone = nextVertex.data.zone;\n geojsonPaths.push(initLineString(copyOfCurrentVertex));\n } else {\n geojsonPaths.push(initLineString(curVertex));\n }\n }\n }\n\n const result: CalculationResult = {\n startNode,\n endNode,\n routes: segments,\n distance: 0,\n };\n\n return result;\n }\n\n function findPath(vertex1: Node<any>, vertex2: Node<any>, graph: Graph) {\n // setup ngraph pathfinder\n const pathFinder = aStar(graph, {\n oriented: true,\n distance(fromNode, toNode, link) {\n return link.data.weight;\n },\n blocked(fromNode, toNode, link) {\n if (changeZoneCheckEnabled) {\n const isZoneCrossing = fromNode?.data.zone !== toNode?.data.zone;\n if (isZoneCrossing) {\n const parentWhereDimensionOfFromNode = getParentDimension(fromNode.data.where);\n const parentWhereDimensionOfStartNode = getParentDimension((startNode as Edge).where);\n const parentWhereDimensionOfToNode = getParentDimension(toNode.data.where);\n if (parentWhereDimensionOfFromNode !== parentWhereDimensionOfStartNode && parentWhereDimensionOfToNode !== parentWhereDimensionOfStartNode) {\n return true;\n }\n }\n }\n return false;\n },\n });\n\n // get shortest path\n const path = pathFinder.find(vertex1.id, vertex2.id).reverse();\n return path;\n }\n\n function setupGraphAndFindPath(source: Edge, destination: Edge, portalEdgeData: PortalEdgeData, networkData: Feature[]) {\n // create ngraph graph\n const graph = createGraph();\n\n // add node & node lines to graph\n const vertex1 = addEdgeToGraph(graph, source);\n const vertex2 = addEdgeToGraph(graph, destination);\n\n if (vertex1 && vertex2) {\n // Add portal links\n addPortalLinksToGraph(graph, portalEdgeData);\n\n // add networks to graph\n addNetworkToGraph(graph, networkData);\n\n const path = findPath(vertex1, vertex2, graph);\n // reconstruct path into geojson features\n const geojsonPath = pathToFeatures(source, destination, path, graph);\n return geojsonPath;\n }\n\n return {} as CalculationResult;\n }\n\n function getRouteWithAllPortals(source: Edge, destination: Edge) {\n let start = performance.now();\n\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalData.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalData.edgeData, concatenatedNetworkFeatures);\n }\n\n function getRouteWithSpecificPortals(source: Edge, destination: Edge, routeWithAllAvailablePortals: CalculationResult) {\n const portalsToUse = new Set<string>();\n for (let index = 0; routeWithAllAvailablePortals.routes && index < routeWithAllAvailablePortals.routes.length; index += 1) {\n const segment = routeWithAllAvailablePortals.routes[index];\n if (segment.isPortal) {\n portalsToUse.add(segment.edges[0]);\n portalsToUse.add(segment.edges[1]);\n }\n }\n\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n // Load portal data\n const portalDataForList = filterPortalEdgeDataByList(portalData.edgeData, portalsToUse);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataForList.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalDataForList.edgeData, concatenatedNetworkFeatures);\n }\n\n function getDirectRoute(source: Edge, destination: Edge) {\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeaturesSourceNode = getNetworkFeatures(getParentDimension(source.where));\n const networkFeaturesDestinationNode = getNetworkFeatures(getParentDimension(destination.where));\n // Load portal data\n const portalDataSourceNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(source.where));\n const portalDataDestinationNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(destination.where));\n\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataSourceNode.lines, portalDataDestinationNode.lines);\n const concatenatedNetworkFeatures = networkFeaturesSourceNode.concat(networkFeaturesDestinationNode);\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeaturesSourceNode.length);\n\n const portalEdgeData = {\n ...portalDataSourceNode.edgeData,\n ...portalDataDestinationNode.edgeData,\n };\n return setupGraphAndFindPath(source, destination, portalEdgeData, concatenatedNetworkFeatures);\n }\n\n // function to get shortest route\n function getRoute(\n mapObjectId1: string | UserPosition,\n mapObjectId2: string,\n wheelChairAccessibleRouteOnlyParam: boolean\n ) {\n wheelChairAccessibleRouteOnly = wheelChairAccessibleRouteOnlyParam;\n // if same start & end\n if (mapObjectId1 === mapObjectId2) {\n return {} as CalculationResult;\n }\n\n if(typeof(mapObjectId1) !== 'string'\n || typeof(mapObjectId2) !== 'string'\n ) runIntersection = true;\n\n const node1 = getEdge(mapObjectId1);\n const node2 = getEdge(mapObjectId2);\n\n startNode = node1;\n endNode = node2;\n\n let start = performance.now();\n portalData = getPortalDataForDimension(DEFAULT_DIMENSION);\n console.log('time portal load with extrapolation: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n if (startNode && endNode) {\n changeZoneCheckEnabled = true;\n const runRouteIteration = () => {\n const directRoute = getDirectRoute(startNode as Edge, endNode as Edge);\n console.log('Direct route', directRoute);\n if (isEmpty(directRoute)) {\n const routeWithAllPortals = getRouteWithAllPortals(startNode as Edge, endNode as Edge);\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, routeWithAllPortals);\n return finalRoute;\n }\n\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, directRoute);\n return finalRoute;\n };\n\n let route = runRouteIteration();\n if (isEmpty(route)) {\n changeZoneCheckEnabled = false;\n route = runRouteIteration();\n }\n\n console.log('time total: ', (performance.now() - start) / 1000);\n return route;\n }\n\n return {} as CalculationResult;\n }\n\n return { getRoute };\n}());\n\nexport default RoutingCore;\n"],"mappings":"AAAA;AACA;AACA,SAASA,KAAK,QAAQ,aAAa;AACnC,OAAOC,WAAW,MAAuB,cAAc;AACvD,SACEC,KAAK,EACLC,UAAU,QACL,eAAe;AAEtB;AACA,OAAO,KAAKC,IAAI,MAAM,YAAY;AAClC,SAASC,SAAS,EAAEC,OAAO,EAAEC,SAAS,QAAQ,QAAQ;AACtD,SAC2BC,aAAa,EAAEC,cAAc,EAAeC,UAAU,QAC1E,cAAc;AACrB,SACEC,kBAAkB,EAAEC,OAAO,EAC3BC,yBAAyB,QACpB,oBAAoB;AAC3B,SAASC,sBAAsB,EAAEC,gBAAgB,QAAQ,mBAAmB;AAC5E,SACEC,iBAAiB,EAAEC,0BAA0B,EAAEC,2BAA2B,EAAEC,kBAAkB,EAAqBC,SAAS,QACvH,SAAS;;AAEhB;;AAEA,MAAMC,WAAW,GAAI,YAAY;EAC/B,IAAIC,6BAA6B,GAAG,IAAI;EACxC,IAAIC,SAA2B;EAC/B,IAAIC,OAAyB;EAC7B,IAAIC,sBAAsB,GAAG,IAAI;EACjC,IAAIC,eAAe,GAAG,KAAK;EAE3B,IAAIC,UAGH,GAAG;IAAEC,QAAQ,EAAE,CAAC,CAAC;IAAEC,KAAK,EAAE;EAAG,CAAC;EAE/B,SAASC,SAASA,CAChBC,KAAY,EACZC,MAAgB,EAChBC,WAAmB,EACnBC,KAAa,EACbC,IAAY,EACZC,IAAY,EACZC,iBAAiB,GAAG,KAAK,EACzB;IACA,MAAMC,UAAU,GAAG,GAAIN,MAAM,CAAEO,QAAQ,CAAC,CAAC,IAAIL,KAAK,EAAE;IACpD,IAAIM,MAAM,GAAGT,KAAK,CAACU,OAAO,CAACH,UAAU,CAAC;IACtC,IAAIE,MAAM,KAAKE,SAAS,EAAE;MACxB,MAAMC,IAAI,GAAG;QACXV,WAAW;QACXD,MAAM;QACNE,KAAK;QACLC,IAAI;QACJC,IAAI;QACJQ,eAAe,EAAE;MACnB,CAAC;MACDJ,MAAM,GAAGT,KAAK,CAACc,OAAO,CAACP,UAAU,EAAEK,IAAI,CAAC;IAC1C,CAAC,MAAM,IAAIN,iBAAiB,EAAE;MAC5BG,MAAM,CAACG,IAAI,CAACV,WAAW,GAAGA,WAAW;;MAErC;MACA,IAAIO,MAAM,CAACG,IAAI,CAACP,IAAI,KAAKA,IAAI,EAAEI,MAAM,CAACG,IAAI,CAACC,eAAe,GAAG,IAAI;MACjEJ,MAAM,CAACG,IAAI,CAACP,IAAI,GAAGA,IAAI;IACzB;IACA,OAAOI,MAAM;EACf;EAEA,SAASM,OAAOA,CAACf,KAAsB,EAAEgB,OAAmB,EAAEC,OAAmB,EAAEL,IAKlF,EAAE;IACD,MAAM;MAAEM,IAAI;MAAEC;IAAY,CAAC,GAAGP,IAAI;IAClC,MAAMQ,aAAa,GAAGR,IAAI,CAACS,QAAQ,GAAGH,IAAI,GAAGvC,UAAU,GAAGuC,IAAI;IAC9D,IAAI,CAAC3B,6BAA6B,IAAKA,6BAA6B,IAAIqB,IAAI,CAACU,mBAAoB,EAAE;MAAEtB,KAAK,CAACe,OAAO,CAACC,OAAO,CAACO,EAAE,EAAEN,OAAO,CAACM,EAAE,EAAE;QAAEC,MAAM,EAAEJ,aAAa;QAAEF,IAAI;QAAEC;MAAY,CAAC,CAAC;IAAE;EAC5L;EAEA,SAASM,WAAWA,CAACC,OAAiB,EAAEC,OAAiB,EAAE;IACzD,MAAMC,MAAM,GAAGzD,KAAK,CAACuD,OAAO,CAAC;IAC7B,MAAMG,MAAM,GAAG1D,KAAK,CAACwD,OAAO,CAAC;IAC7B,MAAMG,QAAQ,GAAGzD,IAAI,CAACyD,QAAQ,CAACF,MAAM,EAAEC,MAAM,EAAE;MAAEE,KAAK,EAAE;IAAS,CAAC,CAAC;IACnE,OAAOD,QAAQ;EACjB;EAEA,SAASE,cAAcA,CAAChC,KAAY,EAAEiC,IAAU,EAAE;IAChD,MAAMC,IAAI,GAAGD,IAAI;IACjB,IAAIC,IAAI,EAAE;MACR,MAAMzB,MAAM,GAAGV,SAAS,CACtBC,KAAK,EACLkC,IAAI,CAACjC,MAAM,EACXiC,IAAI,CAACX,EAAE,EACPW,IAAI,CAAC/B,KAAK,EACV+B,IAAI,CAAC9B,IAAI,EACT8B,IAAI,CAAC7B,IAAI,EACT,IACF,CAAC;MACD,KAAK,IAAI8B,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGD,IAAI,CAACpC,KAAK,CAACsC,MAAM,EAAED,KAAK,IAAI,CAAC,EAAE;QACzD,MAAME,IAAI,GAAGH,IAAI,CAACpC,KAAK,CAACqC,KAAK,CAAC;QAC9B;QACA,MAAMlC,MAAM,GAAG5B,IAAI,CAACiE,SAAS,CAACD,IAAI,CAAC;QACnC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtC,MAAM,CAACmC,MAAM,GAAG,CAAC,EAAEG,CAAC,IAAI,CAAC,EAAE;UAC7C,MAAMvB,OAAO,GAAGjB,SAAS,CACvBC,KAAK,EACLC,MAAM,CAACsC,CAAC,CAAC,EACT,QAAQ,EACRL,IAAI,CAAC/B,KAAK,EACVzB,cAAc,CAAC8D,IAAI,EACnBH,IAAI,CAACI,UAAU,CAACpC,IAClB,CAAC;UACD,MAAMY,OAAO,GAAGlB,SAAS,CACvBC,KAAK,EACLC,MAAM,CAACsC,CAAC,GAAG,CAAC,CAAC,EACb,QAAQ,EACRL,IAAI,CAAC/B,KAAK,EACVzB,cAAc,CAAC8D,IAAI,EACnBH,IAAI,CAACI,UAAU,CAACpC,IAClB,CAAC;UACD,IAAIW,OAAO,CAACO,EAAE,KAAKN,OAAO,CAACM,EAAE,EAAE;YAC7B,MAAMO,QAAQ,GAAGL,WAAW,CAACxB,MAAM,CAACsC,CAAC,CAAC,EAAEtC,MAAM,CAACsC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAIF,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACkE,OAAO,IAAIN,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACmE,MAAM,EAAE;cAC7G7B,OAAO,CAACf,KAAK,EAAEgB,OAAO,EAAEC,OAAO,EAAE;gBAC/BK,mBAAmB,EAAEe,IAAI,CAACI,UAAU,CAACI,UAAU;gBAC/C3B,IAAI,EAAEY,QAAQ;gBACdT,QAAQ,EAAE,KAAK;gBACfF,WAAW,EAAE;cACf,CAAC,CAAC;YACJ;YACA,IAAIkB,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACqE,QAAQ,IAAIT,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACmE,MAAM,EAAE;cAC9G7B,OAAO,CAACf,KAAK,EAAEiB,OAAO,EAAED,OAAO,EAAE;gBAC/BM,mBAAmB,EAAEe,IAAI,CAACI,UAAU,CAACI,UAAU;gBAC/C3B,IAAI,EAAEY,QAAQ;gBACdT,QAAQ,EAAE,KAAK;gBACfF,WAAW,EAAE;cACf,CAAC,CAAC;YACJ;UACF;QACF;MACF;MACA,OAAOV,MAAM;IACf;IAEA,OAAOE,SAAS;EAClB;EAEA,SAASoC,iBAAiBA,CAAC/C,KAAY,EAAEgD,eAA0B,EAAE;IACnE,KAAK,IAAIb,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGa,eAAe,CAACZ,MAAM,EAAED,KAAK,IAAI,CAAC,EAAE;MAC9D,MAAMc,OAAO,GAAGD,eAAe,CAACb,KAAK,CAAC;MACtC,IAAIc,OAAO,CAACC,QAAQ,CAACC,IAAI,KAAK,YAAY,EAAE;QAC1C;QACA,MAAMC,UAAU,GAAG/E,IAAI,CAACiE,SAAS,CAACW,OAAc,CAAC;QACjD,IAAIA,OAAO,CAACR,UAAU,EAAE;UACtB,MAAMtC,KAAK,GAAG8C,OAAO,CAACR,UAAU,CAACY,eAAe;UAChD,MAAMjD,IAAI,GAAG1B,cAAc,CAAC4E,OAAO,CAAC,CAAC;UACrC,MAAM;YAAEjD;UAAK,CAAC,GAAG4C,OAAO,CAACR,UAAU;UACnC;UACA,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGa,UAAU,CAAChB,MAAM,GAAG,CAAC,EAAEG,CAAC,IAAI,CAAC,EAAE;YACjD,MAAMvB,OAAO,GAAGjB,SAAS,CAACC,KAAK,EAAEoD,UAAU,CAACb,CAAC,CAAC,EAAE,QAAQ,EAAEpC,KAAK,EAAEC,IAAI,EAAEC,IAAI,EAAE,IAAI,CAAC;YAClF,MAAMY,OAAO,GAAGlB,SAAS,CACvBC,KAAK,EACLoD,UAAU,CAACb,CAAC,GAAG,CAAC,CAAC,EACjB,QAAQ,EACRpC,KAAK,EACLC,IAAI,EACJC,IAAI,EACJ,IACF,CAAC;YACD,IAAIW,OAAO,CAACO,EAAE,KAAKN,OAAO,CAACM,EAAE,EAAE;cAC7B,MAAMO,QAAQ,GAAGL,WAAW,CAAC2B,UAAU,CAACb,CAAC,CAAC,EAAEa,UAAU,CAACb,CAAC,GAAG,CAAC,CAAC,CAAC;cAC9D,IAAIU,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACkE,OAAO,IAAIM,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACmE,MAAM,EAAE;gBACnH7B,OAAO,CAACf,KAAK,EAAEgB,OAAO,EAAEC,OAAO,EAAE;kBAC/BK,mBAAmB,EAAE2B,OAAO,CAACR,UAAU,CAACI,UAAU;kBAClD3B,IAAI,EAAEY,QAAQ;kBACdT,QAAQ,EAAE,KAAK;kBACfF,WAAW,EAAE;gBACf,CAAC,CAAC;cACJ;cACA,IAAI8B,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACqE,QAAQ,IAAIG,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKjE,aAAa,CAACmE,MAAM,EAAE;gBACpH7B,OAAO,CAACf,KAAK,EAAEiB,OAAO,EAAED,OAAO,EAAE;kBAC/BM,mBAAmB,EAAE2B,OAAO,CAACR,UAAU,CAACI,UAAU;kBAClD3B,IAAI,EAAEY,QAAQ;kBACdT,QAAQ,EAAE,KAAK;kBACfF,WAAW,EAAE;gBACf,CAAC,CAAC;cACJ;YACF;UACF;QACF;MACF;IACF;EACF;EAEA,SAASoC,eAAeA,CAACvD,KAAY,EAAEiC,IAAU,EAAE;IACjD,MAAMC,IAAI,GAAGD,IAAI;IACjB,IAAIC,IAAI,KAAKvB,SAAS,EAAE;MACtB,OAAOA,SAAS;IAClB;IACA,OAAOZ,SAAS,CACdC,KAAK,EACLkC,IAAI,CAACjC,MAAM,EACXiC,IAAI,CAACX,EAAE,EACPW,IAAI,CAAC/B,KAAK,EACV+B,IAAI,CAAC9B,IAAI,EACT8B,IAAI,CAAC7B,IAAI,EACT,IACF,CAAC;EACH;EAEA,SAASmD,qBAAqBA,CAACxD,KAAY,EAAEyD,cAA8B,EAAE;IAC3E,KAAK,MAAMC,YAAY,IAAID,cAAc,EAAE;MACzC,MAAME,MAAM,GAAGF,cAAc,CAACC,YAAY,CAAC;MAE3C,KAAK,IAAIvB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGwB,MAAM,CAACC,KAAK,CAACxB,MAAM,EAAED,KAAK,IAAI,CAAC,EAAE;QAC3D,MAAM0B,UAAU,GAAGF,MAAM,CAACC,KAAK,CAACzB,KAAK,CAAC;QACtC,IAAI;UAAEjB;QAAK,CAAC,GAAG2C,UAAU;QACzB3C,IAAI,GAAG1C,SAAS,CAAC0C,IAAI,CAAC;QACtB;QACA;QACA;QACA,MAAM;UAAEwB,SAAS;UAAEG,UAAU;UAAE1B;QAAY,CAAC,GAAG0C,UAAU;QACzD,MAAMC,OAAO,GAAGP,eAAe,CAACvD,KAAK,EAAE2D,MAAM,CAAC;QAC9C,MAAMI,OAAO,GAAGR,eAAe,CAACvD,KAAK,EAAE6D,UAAU,CAAC;QAClD,IAAIC,OAAO,KAAKnD,SAAS,IAAIoD,OAAO,KAAKpD,SAAS,IAAImD,OAAO,CAACvC,EAAE,KAAKwC,OAAO,CAACxC,EAAE,EAAE;UAC/E,IAAImB,SAAS,KAAKjE,aAAa,CAACkE,OAAO,IAAID,SAAS,KAAKjE,aAAa,CAACmE,MAAM,EAAE;YAC7E7B,OAAO,CAACf,KAAK,EAAE8D,OAAO,EAAEC,OAAO,EAAE;cAC/BzC,mBAAmB,EAAEuB,UAAU;cAC/B3B,IAAI;cACJC,WAAW;cACXE,QAAQ,EAAE;YACZ,CAAC,CAAC;UACJ;UACA,IAAIqB,SAAS,KAAKjE,aAAa,CAACqE,QAAQ,IAAIJ,SAAS,KAAKjE,aAAa,CAACmE,MAAM,EAAE;YAC9E7B,OAAO,CAACf,KAAK,EAAE+D,OAAO,EAAED,OAAO,EAAE;cAC/BxC,mBAAmB,EAAEuB,UAAU;cAC/B3B,IAAI;cACJC,WAAW;cACXE,QAAQ,EAAE;YACZ,CAAC,CAAC;UACJ;UAEAW,cAAc,CAAChC,KAAK,EAAE6D,UAAU,CAAC;QACnC;MACF;MAEA7B,cAAc,CAAChC,KAAK,EAAE2D,MAAM,CAAC;IAC/B;EACF;EAEA,SAASK,cAAcA,CAACvD,MAAW,EAAE;IACnC,OAAO;MACL0C,IAAI,EAAE,SAAS;MACfD,QAAQ,EAAE;QAAEC,IAAI,EAAE,YAAY;QAAEc,WAAW,EAAE,CAACxD,MAAM,CAACG,IAAI,CAACX,MAAM;MAAE,CAAC;MACnEwC,UAAU,EAAE;QACVY,eAAe,EAAE5C,MAAM,CAACG,IAAI,CAACT,KAAK;QAClCE,IAAI,EAAEI,MAAM,CAACG,IAAI,CAACP,IAAI;QACtBa,IAAI,EAAE;MACR;IACF,CAAC;EACH;EAEA,SAASgD,cAAcA,CAACC,MAAY,EAAEC,WAAkB,EAAEC,QAAqB,EAAErE,KAAY,EAAE;IAC7F,IAAIqE,QAAQ,CAACjC,MAAM,IAAI,CAAC,EAAE;MACxB,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;;IAEF,MAAM5C,SAAS,GAAG2E,MAAM;IACxB,MAAM1E,OAAO,GAAG2E,WAAW;IAE3B,MAAME,QAAuB,GAAG,EAAE;IAClC,IAAIC,sBAAsB,GAAGF,QAAQ,CAAC,CAAC,CAAC,CAACzD,IAAI;IAC7C,MAAM4D,YAAY,GAAG,CAACR,cAAc,CAACK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAElD,KAAK,IAAI9B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8B,QAAQ,CAACjC,MAAM,EAAEG,CAAC,IAAI,CAAC,EAAE;MAC3C,MAAMkC,SAAS,GAAGJ,QAAQ,CAAC9B,CAAC,CAAC;MAC7B,MAAMmC,UAAU,GAAGL,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC;MAClC,MAAMF,IAAI,GAAGmC,YAAY,CAACA,YAAY,CAACpC,MAAM,GAAG,CAAC,CAAC;;MAElD;MACA,IAAIqC,SAAS,CAAC7D,IAAI,CAACV,WAAW,KAAK,QAAQ,IAAIuE,SAAS,CAAC7D,IAAI,CAACC,eAAe,EAAE;QAC7E,IAAI8D,OAAO;QACX,IAAI3F,gBAAgB,CAAC0F,UAAU,CAAC9D,IAAI,CAACR,IAAI,CAAC,IAAIpB,gBAAgB,CAACyF,SAAS,CAAC7D,IAAI,CAACR,IAAI,CAAC,EAAE;UACnF,IAAIsE,UAAU,CAAC9D,IAAI,CAACP,IAAI,KAAKoE,SAAS,CAAC7D,IAAI,CAACP,IAAI,EAAE;YAChDuE,OAAO,CAACC,IAAI,CAAC,yCAAyC,CAAC;UACzD;;UAEA;UACA,IAAIC,UAAU;UACd,IAAI/F,sBAAsB,CAAC2F,UAAU,CAAC9D,IAAI,CAACR,IAAI,CAAC,EAAE;YAChD,MAAM2E,aAAa,GAAGA,CAACtB,cAA8B,EAAEgB,SAAoB,EAAEC,UAAqB,EAAEM,WAAW,GAAG,KAAK,KAAK;cAC1H,MAAMC,kBAAkB,GAAGP,UAAU,CAAC9D,IAAI,CAACV,WAAW;cACtD,MAAMgF,GAAG,GAAG,IAAIC,GAAG,CAAS,CAAC,CAACC,GAAG,CAACH,kBAAkB,CAAC;cACrD,MAAMI,gBAAgB,GAAGnG,0BAA0B,CAACuE,cAAc,EAAEyB,GAAG,CAAC;cACxE,IAAIG,gBAAgB,IAAIA,gBAAgB,CAACxF,QAAQ,CAACoF,kBAAkB,CAAC,EAAE;gBACrE,MAAMK,oBAAoB,GAAGD,gBAAgB,CAACxF,QAAQ,CAACoF,kBAAkB,CAAC;gBAC1E,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,oBAAoB,CAAC1B,KAAK,CAACxB,MAAM,EAAEmD,CAAC,IAAI,CAAC,EAAE;kBAC7D,MAAMC,IAAI,GAAGF,oBAAoB,CAAC1B,KAAK,CAAC2B,CAAC,CAAC;kBAC1C,IAAIC,IAAI,CAACjE,EAAE,KAAKkD,SAAS,CAAC7D,IAAI,CAACV,WAAW,EAAE;oBAC1C,IAAIsF,IAAI,CAACC,YAAY,IAAID,IAAI,CAACC,YAAY,CAACrD,MAAM,GAAG,CAAC,EAAE;sBACrD,MAAMC,IAAI,GAAGmD,IAAI,CAACC,YAAY,CAAC,CAAC,CAAC;sBACjC,MAAMC,KAAK,GAAGV,WAAW,KAAK,KAAK,GAAGN,UAAU,CAAC9D,IAAI,CAACX,MAAM,GAAGwE,SAAS,CAAC7D,IAAI,CAACX,MAAM;sBACpF,MAAM0F,GAAG,GAAGX,WAAW,KAAK,KAAK,GAAGP,SAAS,CAAC7D,IAAI,CAACX,MAAM,GAAGyE,UAAU,CAAC9D,IAAI,CAACX,MAAM;sBAElF,MAAM2F,eAAe,GAAGvH,IAAI,CAACyD,QAAQ,CAAC4D,KAAK,EAAErD,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC,CAAC,CAAC,CAAC;sBAC1E,MAAM4B,aAAa,GAAGxH,IAAI,CAACyD,QAAQ,CAAC6D,GAAG,EAAEtD,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC,CAAC,CAAC,CAAC;sBACtE,MAAM6B,WAAW,GAAGF,eAAe,GAAGC,aAAa,GAAGxD,IAAI,CAACa,QAAQ,CAACe,WAAW,GAAG5B,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC8B,KAAK,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;sBAC7H,OAAO3H,IAAI,CAAC4H,UAAU,CAACH,WAAW,CAAC;oBACrC;kBACF;gBACF;cACF;cAEA,OAAO,IAAI;YACb,CAAC;YAEDhB,UAAU,GAAGC,aAAa,CAACnF,UAAU,CAACC,QAAQ,EAAE4E,SAAS,EAAEC,UAAU,EAAE,KAAK,CAAC;YAC7E,IAAI,CAACI,UAAU,EAAEA,UAAU,GAAGC,aAAa,CAACnF,UAAU,CAACC,QAAQ,EAAE6E,UAAU,EAAED,SAAS,EAAE,IAAI,CAAC;UAC/F;;UAEA;UACA,MAAMe,IAAI,GAAGxF,KAAK,CAACkG,OAAO,CAACxB,UAAU,CAACnD,EAAE,EAAEkD,SAAS,CAAClD,EAAE,CAAC;UACvD,MAAML,IAAI,GAAGsE,IAAI,GAAGA,IAAI,CAAC5E,IAAI,CAACM,IAAI,GAAGsE,IAAI,CAAC5E,IAAI,CAACM,IAAI,GAAGP,SAAS,GAAGA,SAAS;UAC3E,MAAMQ,WAAW,GAAGqE,IAAI,GAAGA,IAAI,CAAC5E,IAAI,CAACO,WAAW,GAAGqE,IAAI,CAAC5E,IAAI,CAACO,WAAW,GAAGR,SAAS,GAAGA,SAAS;UAChGgE,OAAO,GAAG;YACRwB,OAAO,EAAE/H,UAAU,CAAC,CAClBsG,UAAU,CAAC9D,IAAI,CAACX,MAAM,EACtBwE,SAAS,CAAC7D,IAAI,CAACX,MAAM,CACtB,EAAE;cACDI,IAAI,EAAEoE,SAAS,CAAC7D,IAAI,CAACP;YACvB,CAAC,CAAC;YACF+F,KAAK,EAAE,CAAC1B,UAAU,CAAC9D,IAAI,CAACV,WAAW,EAAEuE,SAAS,CAAC7D,IAAI,CAACV,WAAW,CAAC;YAChEmG,UAAU,EAAE3B,UAAU,CAAC9D,IAAI,CAACT,KAAK;YACjCmG,QAAQ,EAAE7B,SAAS,CAAC7D,IAAI,CAACT,KAAK;YAC9BkB,QAAQ,EAAE,IAAI;YACdyD,UAAU;YACV5D,IAAI;YACJC;UACF,CAAgB;UAEhBmD,QAAQ,CAACiC,IAAI,CAAC5B,OAAO,CAAC;UACtBJ,sBAAsB,GAAGE,SAAS,CAAC7D,IAAI;QACzC,CAAC,MAAM;UACL,MAAM4F,UAAU,GAAIjE,CAAC,GAAG,CAAC,GAAG8B,QAAQ,CAACjC,MAAM,GAAIiC,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC,GAAG5B,SAAS;UAC1E,IAAI8D,SAAS,CAAC7D,IAAI,CAACC,eAAe,IAC5B6D,UAAU,IAAI8B,UAAU,IAAI9B,UAAU,EAAE9D,IAAI,CAACP,IAAI,KAAKmG,UAAU,EAAE5F,IAAI,CAACP,IAAK,EAAE;YAClFuE,OAAO,CAAC6B,GAAG,CAAC,mCAAmC,CAAC;UAClD,CAAC,MAAM;YACL9B,OAAO,GAAG;cACRwB,OAAO,EAAE9D,IAAI;cACb+D,KAAK,EAAE,CAAC7B,sBAAsB,CAACrE,WAAW,EAAEuE,SAAS,CAAC7D,IAAI,CAACV,WAAW,CAAC;cACvEmG,UAAU,EAAE9B,sBAAsB,CAACpE,KAAK;cACxCmG,QAAQ,EAAE/B,sBAAsB,CAACpE,KAAK;cACtCkB,QAAQ,EAAE,KAAK;cACfyD,UAAU,EAAEnE,SAAS;cACrBO,IAAI,EAAEmB,IAAI,CAACI,UAAU,CAACvB;YACxB,CAAC;YAEDoD,QAAQ,CAACiC,IAAI,CAAC5B,OAAO,CAAC;YACtBJ,sBAAsB,GAAGE,SAAS,CAAC7D,IAAI;UACzC;QACF;MACF;;MAEA;MACA,IAAI,EAAE5B,gBAAgB,CAAC0F,UAAU,CAAC9D,IAAI,CAACR,IAAI,CAAC,IAAIpB,gBAAgB,CAACyF,SAAS,CAAC7D,IAAI,CAACR,IAAI,CAAC,CAAC,EAAE;QACtF,MAAMoF,IAAI,GAAGxF,KAAK,CAACkG,OAAO,CAACxB,UAAU,CAACnD,EAAE,EAAEkD,SAAS,CAAClD,EAAE,CAAC,CAAC,CAAC;QACzD,MAAML,IAAI,GAAGsE,IAAI,GAAGA,IAAI,CAAC5E,IAAI,CAACM,IAAI,GAAGsE,IAAI,CAAC5E,IAAI,CAACM,IAAI,GAAGP,SAAS,GAAGA,SAAS;QAE3E0B,IAAI,CAACa,QAAQ,CAACe,WAAW,CAACsC,IAAI,CAAC9B,SAAS,CAAC7D,IAAI,CAACX,MAAM,CAAC;QACrDoC,IAAI,CAACI,UAAU,CAACvB,IAAI,IAAIA,IAAI;MAC9B,CAAC,MAAM;QACL;QACA,IAAImB,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC7B,MAAM,GAAG,CAAC,EAAE;UACxCoC,YAAY,CAACkC,GAAG,CAAC,CAAC;QACpB;QACAlC,YAAY,CAAC+B,IAAI,CAACvC,cAAc,CAACS,SAAS,CAAC,CAAC;MAC9C;;MAEA;MACA,IAAIA,SAAS,CAAC7D,IAAI,CAACC,eAAe,EAAE;QAClC,MAAM6D,UAAU,GAAInC,CAAC,GAAG,CAAC,GAAI8B,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC,GAAG5B,SAAS;QACxD,MAAM6F,UAAU,GAAIjE,CAAC,GAAG,CAAC,GAAG8B,QAAQ,CAACjC,MAAM,GAAIiC,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC,GAAG5B,SAAS;QAC1E,IAAI+D,UAAU,IAAI8B,UAAU,IAAI9B,UAAU,EAAE9D,IAAI,CAACP,IAAI,KAAKmG,UAAU,EAAE5F,IAAI,CAACP,IAAI,EAAE;UAC/EuE,OAAO,CAAC6B,GAAG,CAAC,wBAAwB,CAAC;QACvC,CAAC;UACD;UACA,IAAID,UAAU,EAAE;YACd,MAAMG,mBAAmB,GAAGrI,SAAS,CAACmG,SAAS,CAAC;YAChDkC,mBAAmB,CAAC/F,IAAI,CAACP,IAAI,GAAGmG,UAAU,CAAC5F,IAAI,CAACP,IAAI;YACpDmE,YAAY,CAAC+B,IAAI,CAACvC,cAAc,CAAC2C,mBAAmB,CAAC,CAAC;UACxD,CAAC,MAAM;YACLnC,YAAY,CAAC+B,IAAI,CAACvC,cAAc,CAACS,SAAS,CAAC,CAAC;UAC9C;MACF;IACF;IAEA,MAAMmC,MAAyB,GAAG;MAChCpH,SAAS;MACTC,OAAO;MACPoH,MAAM,EAAEvC,QAAQ;MAChBxC,QAAQ,EAAE;IACZ,CAAC;IAED,OAAO8E,MAAM;EACf;EAEA,SAASE,QAAQA,CAAC9F,OAAkB,EAAEC,OAAkB,EAAEjB,KAAY,EAAE;IACtE;IACA,MAAM+G,UAAU,GAAG9I,KAAK,CAAC+B,KAAK,EAAE;MAC9BgH,QAAQ,EAAE,IAAI;MACdlF,QAAQA,CAACmF,QAAQ,EAAEC,MAAM,EAAE1B,IAAI,EAAE;QAC/B,OAAOA,IAAI,CAAC5E,IAAI,CAACY,MAAM;MACzB,CAAC;MACD2F,OAAOA,CAACF,QAAQ,EAAEC,MAAM,EAAE1B,IAAI,EAAE;QAC9B,IAAI9F,sBAAsB,EAAE;UAC1B,MAAM0H,cAAc,GAAGH,QAAQ,EAAErG,IAAI,CAACP,IAAI,KAAK6G,MAAM,EAAEtG,IAAI,CAACP,IAAI;UAChE,IAAI+G,cAAc,EAAE;YAClB,MAAMC,8BAA8B,GAAGjI,kBAAkB,CAAC6H,QAAQ,CAACrG,IAAI,CAACT,KAAK,CAAC;YAC9E,MAAMmH,+BAA+B,GAAGlI,kBAAkB,CAAEI,SAAS,CAAUW,KAAK,CAAC;YACrF,MAAMoH,4BAA4B,GAAGnI,kBAAkB,CAAC8H,MAAM,CAACtG,IAAI,CAACT,KAAK,CAAC;YAC1E,IAAIkH,8BAA8B,KAAKC,+BAA+B,IAAIC,4BAA4B,KAAKD,+BAA+B,EAAE;cAC1I,OAAO,IAAI;YACb;UACF;QACF;QACA,OAAO,KAAK;MACd;IACF,CAAC,CAAC;;IAEF;IACA,MAAME,IAAI,GAAGT,UAAU,CAACU,IAAI,CAACzG,OAAO,CAACO,EAAE,EAAEN,OAAO,CAACM,EAAE,CAAC,CAACyE,OAAO,CAAC,CAAC;IAC9D,OAAOwB,IAAI;EACb;EAEA,SAASE,qBAAqBA,CAACvD,MAAY,EAAEC,WAAiB,EAAEX,cAA8B,EAAEkE,WAAsB,EAAE;IACtH;IACA,MAAM3H,KAAK,GAAG9B,WAAW,CAAC,CAAC;;IAE3B;IACA,MAAM8C,OAAO,GAAGgB,cAAc,CAAChC,KAAK,EAAEmE,MAAM,CAAC;IAC7C,MAAMlD,OAAO,GAAGe,cAAc,CAAChC,KAAK,EAAEoE,WAAW,CAAC;IAElD,IAAIpD,OAAO,IAAIC,OAAO,EAAE;MACtB;MACAuC,qBAAqB,CAACxD,KAAK,EAAEyD,cAAc,CAAC;;MAE5C;MACAV,iBAAiB,CAAC/C,KAAK,EAAE2H,WAAW,CAAC;MAErC,MAAMH,IAAI,GAAGV,QAAQ,CAAC9F,OAAO,EAAEC,OAAO,EAAEjB,KAAK,CAAC;MAC9C;MACA,MAAM4H,WAAW,GAAG1D,cAAc,CAACC,MAAM,EAAEC,WAAW,EAAEoD,IAAI,EAAExH,KAAK,CAAC;MACpE,OAAO4H,WAAW;IACpB;IAEA,OAAO,CAAC,CAAC;EACX;EAEA,SAASC,sBAAsBA,CAAC1D,MAAY,EAAEC,WAAiB,EAAE;IAC/D,IAAIsB,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;;IAE7B;IACA,MAAM/E,eAAe,GAAGpE,kBAAkB,CAACK,iBAAiB,CAAC;IAC7D2F,OAAO,CAAC6B,GAAG,CAAC,aAAa,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAE9DA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,MAAMC,wBAAwB,GAAG7D,MAAM,CAACrE,KAAK,CAACmI,MAAM,CAAC7D,WAAW,CAACtE,KAAK,EAAEF,UAAU,CAACE,KAAK,CAAC;IACzF,MAAMoI,2BAA2B,GAAGlF,eAAe;IAEnD,IAAIrD,eAAe,EAAEN,SAAS,CAAC2I,wBAAwB,EAAEE,2BAA2B,CAAC;IACrFtD,OAAO,CAAC6B,GAAG,CAAC,gBAAgB,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,EAAE1C,eAAe,CAACZ,MAAM,CAAC;IAEzF,OAAOsF,qBAAqB,CAACvD,MAAM,EAAEC,WAAW,EAAExE,UAAU,CAACC,QAAQ,EAAEqI,2BAA2B,CAAC;EACrG;EAEA,SAASC,2BAA2BA,CAAChE,MAAY,EAAEC,WAAiB,EAAEgE,4BAA+C,EAAE;IACrH,MAAMC,YAAY,GAAG,IAAIlD,GAAG,CAAS,CAAC;IACtC,KAAK,IAAIhD,KAAK,GAAG,CAAC,EAAEiG,4BAA4B,CAACvB,MAAM,IAAI1E,KAAK,GAAGiG,4BAA4B,CAACvB,MAAM,CAACzE,MAAM,EAAED,KAAK,IAAI,CAAC,EAAE;MACzH,MAAMwC,OAAO,GAAGyD,4BAA4B,CAACvB,MAAM,CAAC1E,KAAK,CAAC;MAC1D,IAAIwC,OAAO,CAACtD,QAAQ,EAAE;QACpBgH,YAAY,CAACjD,GAAG,CAACT,OAAO,CAACyB,KAAK,CAAC,CAAC,CAAC,CAAC;QAClCiC,YAAY,CAACjD,GAAG,CAACT,OAAO,CAACyB,KAAK,CAAC,CAAC,CAAC,CAAC;MACpC;IACF;IAEA,IAAIV,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IAC7B;IACA;IACA,MAAM/E,eAAe,GAAGpE,kBAAkB,CAACK,iBAAiB,CAAC;IAC7D;IACA,MAAMqJ,iBAAiB,GAAGpJ,0BAA0B,CAACU,UAAU,CAACC,QAAQ,EAAEwI,YAAY,CAAC;IACvFzD,OAAO,CAAC6B,GAAG,CAAC,aAAa,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAE9DA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,MAAMC,wBAAwB,GAAG7D,MAAM,CAACrE,KAAK,CAACmI,MAAM,CAAC7D,WAAW,CAACtE,KAAK,EAAEwI,iBAAiB,CAACxI,KAAK,CAAC;IAChG,MAAMoI,2BAA2B,GAAGlF,eAAe;IAEnD,IAAIrD,eAAe,EAAEN,SAAS,CAAC2I,wBAAwB,EAAEE,2BAA2B,CAAC;IACrFtD,OAAO,CAAC6B,GAAG,CAAC,gBAAgB,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,EAAE1C,eAAe,CAACZ,MAAM,CAAC;IAEzF,OAAOsF,qBAAqB,CAACvD,MAAM,EAAEC,WAAW,EAAEkE,iBAAiB,CAACzI,QAAQ,EAAEqI,2BAA2B,CAAC;EAC5G;EAEA,SAASK,cAAcA,CAACpE,MAAY,EAAEC,WAAiB,EAAE;IACvD,IAAIsB,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IAC7B;IACA;IACA,MAAMS,yBAAyB,GAAG5J,kBAAkB,CAACQ,kBAAkB,CAAC+E,MAAM,CAAChE,KAAK,CAAC,CAAC;IACtF,MAAMsI,8BAA8B,GAAG7J,kBAAkB,CAACQ,kBAAkB,CAACgF,WAAW,CAACjE,KAAK,CAAC,CAAC;IAChG;IACA,MAAMuI,oBAAoB,GAAGvJ,2BAA2B,CAACS,UAAU,CAACC,QAAQ,EAAET,kBAAkB,CAAC+E,MAAM,CAAChE,KAAK,CAAC,CAAC;IAC/G,MAAMwI,yBAAyB,GAAGxJ,2BAA2B,CAACS,UAAU,CAACC,QAAQ,EAAET,kBAAkB,CAACgF,WAAW,CAACjE,KAAK,CAAC,CAAC;IAEzHyE,OAAO,CAAC6B,GAAG,CAAC,aAAa,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAE9DA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,MAAMC,wBAAwB,GAAG7D,MAAM,CAACrE,KAAK,CAACmI,MAAM,CAAC7D,WAAW,CAACtE,KAAK,EAAE4I,oBAAoB,CAAC5I,KAAK,EAAE6I,yBAAyB,CAAC7I,KAAK,CAAC;IACpI,MAAMoI,2BAA2B,GAAGM,yBAAyB,CAACP,MAAM,CAACQ,8BAA8B,CAAC;IAEpG,IAAI9I,eAAe,EAAEN,SAAS,CAAC2I,wBAAwB,EAAEE,2BAA2B,CAAC;IACrFtD,OAAO,CAAC6B,GAAG,CAAC,gBAAgB,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,EAAE8C,yBAAyB,CAACpG,MAAM,CAAC;IAEnG,MAAMqB,cAAc,GAAG;MACrB,GAAGiF,oBAAoB,CAAC7I,QAAQ;MAChC,GAAG8I,yBAAyB,CAAC9I;IAC/B,CAAC;IACD,OAAO6H,qBAAqB,CAACvD,MAAM,EAAEC,WAAW,EAAEX,cAAc,EAAEyE,2BAA2B,CAAC;EAChG;;EAEA;EACA,SAASU,QAAQA,CACflF,YAAmC,EACnCmF,YAAoB,EACpBC,kCAA2C,EAC3C;IACAvJ,6BAA6B,GAAGuJ,kCAAkC;IAClE;IACA,IAAIpF,YAAY,KAAKmF,YAAY,EAAE;MACjC,OAAO,CAAC,CAAC;IACX;IAEA,IAAG,OAAOnF,YAAa,KAAK,QAAQ,IAC9B,OAAOmF,YAAa,KAAK,QAAQ,EACvClJ,eAAe,GAAG,IAAI;IAEtB,MAAMoJ,KAAK,GAAGlK,OAAO,CAAC6E,YAAY,CAAC;IACnC,MAAMsF,KAAK,GAAGnK,OAAO,CAACgK,YAAY,CAAC;IAEnCrJ,SAAS,GAAGuJ,KAAK;IACjBtJ,OAAO,GAAGuJ,KAAK;IAEf,IAAItD,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IAC7BnI,UAAU,GAAGd,yBAAyB,CAACG,iBAAiB,CAAC;IACzD2F,OAAO,CAAC6B,GAAG,CAAC,uCAAuC,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAExFA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,IAAIvI,SAAS,IAAIC,OAAO,EAAE;MACxBC,sBAAsB,GAAG,IAAI;MAC7B,MAAMuJ,iBAAiB,GAAGA,CAAA,KAAM;QAC9B,MAAMC,WAAW,GAAGX,cAAc,CAAC/I,SAAS,EAAUC,OAAe,CAAC;QACtEmF,OAAO,CAAC6B,GAAG,CAAC,cAAc,EAAEyC,WAAW,CAAC;QACxC,IAAI3K,OAAO,CAAC2K,WAAW,CAAC,EAAE;UACxB,MAAMC,mBAAmB,GAAGtB,sBAAsB,CAACrI,SAAS,EAAUC,OAAe,CAAC;UACtF,MAAM2J,UAAU,GAAGjB,2BAA2B,CAAC3I,SAAS,EAAUC,OAAO,EAAU0J,mBAAmB,CAAC;UACvG,OAAOC,UAAU;QACnB;QAEA,MAAMA,UAAU,GAAGjB,2BAA2B,CAAC3I,SAAS,EAAUC,OAAO,EAAUyJ,WAAW,CAAC;QAC/F,OAAOE,UAAU;MACnB,CAAC;MAED,IAAIC,KAAK,GAAGJ,iBAAiB,CAAC,CAAC;MAC/B,IAAI1K,OAAO,CAAC8K,KAAK,CAAC,EAAE;QAClB3J,sBAAsB,GAAG,KAAK;QAC9B2J,KAAK,GAAGJ,iBAAiB,CAAC,CAAC;MAC7B;MAEArE,OAAO,CAAC6B,GAAG,CAAC,cAAc,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;MAC/D,OAAO2D,KAAK;IACd;IAEA,OAAO,CAAC,CAAC;EACX;EAEA,OAAO;IAAET;EAAS,CAAC;AACrB,CAAC,CAAC,CAAE;AAEJ,eAAetJ,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["aStar","createGraph","point","multiPoint","turf","cloneDeep","isEmpty","toInteger","LineDirection","RouteDimension","WALK_SPEED","getNetworkFeatures","getEdge","getPortalDataForDimension","isMovingPortalTaxonomy","isPortalTaxonomy","DEFAULT_DIMENSION","filterPortalEdgeDataByList","filterPortalEdgeDataByWhere","getParentDimension","optimized","RoutingCore","wheelChairAccessibleRouteOnly","startNode","endNode","changeZoneCheckEnabled","runIntersection","portalData","edgeData","lines","addVertex","graph","coords","mapObjectId","where","what","zone","updateMapObjectId","arguments","length","undefined","vertexName","toString","vertex","getNode","data","zoneUnionVertex","addNode","addLink","vertex1","vertex2","cost","description","timeInSeconds","isPortal","wheelChairAccesible","id","weight","getDistance","coords1","coords2","point1","point2","distance","units","addEdgeToGraph","edge","node","index","line","getCoords","i","Edge","properties","direction","Forward","TwoWay","wheelchair","Backward","addNetworkToGraph","networkFeatures","feature","geometry","type","lineCoords","dimension_where","Network","addVertexByEdge","addPortalLinksToGraph","portalEdgeData","mapObjectId1","portal","links","portalLink","portal1","portal2","initLineString","coordinates","pathToFeatures","source","destination","vertices","segments","segmentStartVertexData","geojsonPaths","curVertex","prevVertex","segment","console","warn","portalPath","getPortalPath","invertStart","prevVertexMapObjId","set","Set","add","portalDataForSet","prevVertexPortalData","j","link","pathFeatures","start","end","distanceToStart","distanceToEnd","coordsToUse","slice","reverse","lineString","getLink","geojson","edges","startFloor","endFloor","push","nextVertex","log","pop","copyOfCurrentVertex","result","routes","findPath","pathFinder","oriented","fromNode","toNode","blocked","isZoneCrossing","parentWhereDimensionOfFromNode","parentWhereDimensionOfStartNode","parentWhereDimensionOfToNode","path","find","setupGraphAndFindPath","networkData","geojsonPath","getRouteWithAllPortals","performance","now","concatenatedEdgeFeatures","concat","concatenatedNetworkFeatures","getRouteWithSpecificPortals","routeWithAllAvailablePortals","portalsToUse","portalDataForList","getDirectRoute","networkFeaturesSourceNode","networkFeaturesDestinationNode","portalDataSourceNode","portalDataDestinationNode","getRoute","mapObjectId2","wheelChairAccessibleRouteOnlyParam","node1","node2","runRouteIteration","directRoute","routeWithAllPortals","finalRoute","route"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/index.ts"],"sourcesContent":["/* eslint-disable guard-for-in */\n/* eslint-disable no-restricted-syntax */\nimport { aStar } from 'ngraph.path';\nimport createGraph, { Graph, Node } from 'ngraph.graph';\nimport {\n point,\n multiPoint,\n} from '@turf/helpers';\nimport { Feature, LineString, MultiPoint } from 'geojson';\n// import turfDistance from '@turf/distance';\nimport * as turf from '@turf/turf';\nimport { cloneDeep, isEmpty, toInteger } from 'lodash';\nimport {\n CalculationResult, Edge, LineDirection, RouteDimension, RouteResult, WALK_SPEED, EdgeLine, Portal, PortalEdgeData, UserPosition\n} from './interfaces';\nimport {\n getNetworkFeatures, getEdge,\n getPortalDataForDimension,\n} from './mapObjectsHelper';\nimport { isMovingPortalTaxonomy, isPortalTaxonomy } from './routing-helpers';\nimport {\n DEFAULT_DIMENSION, filterPortalEdgeDataByList, filterPortalEdgeDataByWhere, getParentDimension, getPortalEdgeData, optimized,\n} from './utils';\n\n/* eslint-disable @typescript-eslint/no-shadow */\n\nconst RoutingCore = (function () {\n let wheelChairAccessibleRouteOnly = true;\n let startNode: Edge | undefined;\n let endNode: Edge | undefined;\n let changeZoneCheckEnabled = true;\n let runIntersection = false;\n\n let portalData: {\n edgeData: PortalEdgeData,\n lines: EdgeLine[],\n } = { edgeData: {}, lines: [] };\n\n function addVertex(\n graph: Graph,\n coords: number[],\n mapObjectId: string,\n where: string,\n what: string,\n zone: string,\n updateMapObjectId = false,\n ) {\n const vertexName = `${(coords).toString()},${where}`;\n let vertex = graph.getNode(vertexName);\n if (vertex === undefined) {\n const data = {\n mapObjectId,\n coords,\n where,\n what,\n zone,\n zoneUnionVertex: false,\n };\n vertex = graph.addNode(vertexName, data);\n } else if (updateMapObjectId) {\n vertex.data.mapObjectId = mapObjectId;\n\n // Mark the vertex as common vertex between zones\n if (vertex.data.zone !== zone) vertex.data.zoneUnionVertex = true;\n vertex.data.zone = zone;\n }\n return vertex;\n }\n\n function addLink(graph: Graph<any, any>, vertex1 : Node<any>, vertex2 : Node<any>, data :{\n wheelChairAccesible: number,\n cost: number,\n isPortal: boolean,\n description: string | null,\n }) {\n const { cost, description } = data;\n const timeInSeconds = data.isPortal ? cost / WALK_SPEED : cost;\n if (!wheelChairAccessibleRouteOnly || (wheelChairAccessibleRouteOnly && data.wheelChairAccesible)) { graph.addLink(vertex1.id, vertex2.id, { weight: timeInSeconds, cost, description }); }\n }\n\n function getDistance(coords1: number[], coords2: number[]) {\n const point1 = point(coords1);\n const point2 = point(coords2);\n const distance = turf.distance(point1, point2, { units: 'meters' });\n return distance;\n }\n\n function addEdgeToGraph(graph: Graph, edge: Edge) {\n const node = edge;\n if (node) {\n const vertex = addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n for (let index = 0; index < node.lines.length; index += 1) {\n const line = node.lines[index];\n // add edges for coord pairs\n const coords = turf.getCoords(line);\n for (let i = 0; i < coords.length - 1; i += 1) {\n const vertex1 = addVertex(\n graph,\n coords[i],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n const vertex2 = addVertex(\n graph,\n coords[i + 1],\n 'vertex',\n node.where,\n RouteDimension.Edge,\n line.properties.zone,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(coords[i], coords[i + 1]);\n if (line.properties.direction === LineDirection.Forward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (line.properties.direction === LineDirection.Backward || line.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: line.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n return vertex;\n }\n\n return undefined;\n }\n\n function addNetworkToGraph(graph: Graph, networkFeatures: Feature[]) {\n for (let index = 0; index < networkFeatures.length; index += 1) {\n const feature = networkFeatures[index];\n if (feature.geometry.type === 'LineString') {\n // get line\n const lineCoords = turf.getCoords(feature as any);\n if (feature.properties) {\n const where = feature.properties.dimension_where;\n const what = RouteDimension.Network; // feature.properties.dimension_what;\n const { zone } = feature.properties;\n // add edges for coord pairs\n for (let i = 0; i < lineCoords.length - 1; i += 1) {\n const vertex1 = addVertex(graph, lineCoords[i], 'vertex', where, what, zone, true);\n const vertex2 = addVertex(\n graph,\n lineCoords[i + 1],\n 'vertex',\n where,\n what,\n zone,\n true,\n );\n if (vertex1.id !== vertex2.id) {\n const distance = getDistance(lineCoords[i], lineCoords[i + 1]);\n if (feature.properties.direction === LineDirection.Forward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex1, vertex2, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n if (feature.properties.direction === LineDirection.Backward || feature.properties.direction === LineDirection.TwoWay) {\n addLink(graph, vertex2, vertex1, {\n wheelChairAccesible: feature.properties.wheelchair,\n cost: distance,\n isPortal: false,\n description: null,\n });\n }\n }\n }\n }\n }\n }\n }\n\n function addVertexByEdge(graph: Graph, edge: Edge) {\n const node = edge;\n if (node === undefined) {\n return undefined;\n }\n return addVertex(\n graph,\n node.coords,\n node.id,\n node.where,\n node.what,\n node.zone,\n true,\n );\n }\n\n function addPortalLinksToGraph(graph: Graph, portalEdgeData: PortalEdgeData) {\n for (const mapObjectId1 in portalEdgeData) {\n const portal = portalEdgeData[mapObjectId1];\n\n for (let index = 0; index < portal.links.length; index += 1) {\n const portalLink = portal.links[index];\n let { cost } = portalLink;\n cost = toInteger(cost);\n // if (cost <= 1) {\n // cost = portalWeight;\n // }\n const { direction, wheelchair, description } = portalLink;\n const portal1 = addVertexByEdge(graph, portal);\n const portal2 = addVertexByEdge(graph, portalLink);\n if (portal1 !== undefined && portal2 !== undefined && portal1.id !== portal2.id) {\n if (direction === LineDirection.Forward || direction === LineDirection.TwoWay) {\n addLink(graph, portal1, portal2, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n if (direction === LineDirection.Backward || direction === LineDirection.TwoWay) {\n addLink(graph, portal2, portal1, {\n wheelChairAccesible: wheelchair,\n cost,\n description,\n isPortal: true,\n });\n }\n\n addEdgeToGraph(graph, portalLink);\n }\n }\n\n addEdgeToGraph(graph, portal);\n }\n }\n\n function initLineString(vertex: any) {\n return {\n type: 'Feature',\n geometry: { type: 'LineString', coordinates: [vertex.data.coords] },\n properties: {\n dimension_where: vertex.data.where,\n zone: vertex.data.zone,\n cost: 0,\n },\n } as Feature<LineString | MultiPoint, any>;\n }\n\n function pathToFeatures(source: Edge, destination : Edge, vertices: Node<any>[], graph: Graph) {\n if (vertices.length <= 1) {\n return {} as CalculationResult;\n } // if no path found\n\n const startNode = source;\n const endNode = destination;\n\n const segments: RouteResult[] = [];\n let segmentStartVertexData = vertices[0].data;\n const geojsonPaths = [initLineString(vertices[0])];\n\n for (let i = 1; i < vertices.length; i += 1) {\n const curVertex = vertices[i];\n const prevVertex = vertices[i - 1];\n const line = geojsonPaths[geojsonPaths.length - 1];\n\n // if vertex is map object\n if (curVertex.data.mapObjectId !== 'vertex' || curVertex.data.zoneUnionVertex) {\n let segment;\n if (isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what)) {\n if (prevVertex.data.zone !== curVertex.data.zone) {\n console.warn('A portal is triggering a change in zone');\n }\n\n // check if portal path is available to visualize\n let portalPath;\n if (isMovingPortalTaxonomy(prevVertex.data.what)) {\n const getPortalPath = (portalEdgeData: PortalEdgeData, curVertex: Node<any>, prevVertex: Node<any>, invertStart = false) => {\n const prevVertexMapObjId = prevVertex.data.mapObjectId;\n const set = new Set<string>().add(prevVertexMapObjId);\n const portalDataForSet = filterPortalEdgeDataByList(portalEdgeData, set);\n if (portalDataForSet && portalDataForSet.edgeData[prevVertexMapObjId]) {\n const prevVertexPortalData = portalDataForSet.edgeData[prevVertexMapObjId];\n for (let j = 0; j < prevVertexPortalData.links.length; j += 1) {\n const link = prevVertexPortalData.links[j];\n if (link.id === curVertex.data.mapObjectId) {\n if (link.pathFeatures && link.pathFeatures.length > 0) {\n const line = link.pathFeatures[0];\n const start = invertStart === false ? prevVertex.data.coords : curVertex.data.coords;\n const end = invertStart === false ? curVertex.data.coords : prevVertex.data.coords;\n\n const distanceToStart = turf.distance(start, line.geometry.coordinates[0]);\n const distanceToEnd = turf.distance(end, line.geometry.coordinates[0]);\n const coordsToUse = distanceToStart < distanceToEnd ? line.geometry.coordinates : line.geometry.coordinates.slice().reverse();\n return turf.lineString(coordsToUse);\n }\n }\n }\n }\n\n return null;\n };\n\n portalPath = getPortalPath(portalData.edgeData, curVertex, prevVertex, false);\n if (!portalPath) portalPath = getPortalPath(portalData.edgeData, prevVertex, curVertex, true);\n }\n\n // TODO: read description here\n const link = graph.getLink(prevVertex.id, curVertex.id);\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n const description = link ? link.data.description ? link.data.description : undefined : undefined;\n segment = {\n geojson: multiPoint([\n prevVertex.data.coords,\n curVertex.data.coords,\n ], {\n zone: curVertex.data.zone,\n }),\n edges: [prevVertex.data.mapObjectId, curVertex.data.mapObjectId],\n startFloor: prevVertex.data.where,\n endFloor: curVertex.data.where,\n isPortal: true,\n portalPath,\n cost,\n description,\n } as RouteResult;\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n } else {\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (curVertex.data.zoneUnionVertex\n && (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone)) {\n console.log('ignore zoneUnionVertex in segment');\n } else {\n segment = {\n geojson: line,\n edges: [segmentStartVertexData.mapObjectId, curVertex.data.mapObjectId],\n startFloor: segmentStartVertexData.where,\n endFloor: segmentStartVertexData.where,\n isPortal: false,\n portalPath: undefined,\n cost: line.properties.cost,\n };\n\n segments.push(segment);\n segmentStartVertexData = curVertex.data;\n }\n }\n }\n\n // same line\n if (!(isPortalTaxonomy(prevVertex.data.what) && isPortalTaxonomy(curVertex.data.what))) {\n const link = graph.getLink(prevVertex.id, curVertex.id); // returns a link from 'hello' to 'world'\n const cost = link ? link.data.cost ? link.data.cost : undefined : undefined;\n\n line.geometry.coordinates.push(curVertex.data.coords);\n line.properties.cost += cost;\n } else {\n // new line\n if (line.geometry.coordinates.length < 2) {\n geojsonPaths.pop();\n }\n geojsonPaths.push(initLineString(curVertex));\n }\n\n // new line due to change in zone\n if (curVertex.data.zoneUnionVertex) {\n const prevVertex = (i > 0) ? vertices[i - 1] : undefined;\n const nextVertex = (i + 1 < vertices.length) ? vertices[i + 1] : undefined;\n if (prevVertex && nextVertex && prevVertex?.data.zone === nextVertex?.data.zone) {\n console.log('ignore zoneUnionVertex');\n } else\n // Use zone value of next vertex (when available) as current vertex is a common vertex and can have either of the zone values\n if (nextVertex) {\n const copyOfCurrentVertex = cloneDeep(curVertex);\n copyOfCurrentVertex.data.zone = nextVertex.data.zone;\n geojsonPaths.push(initLineString(copyOfCurrentVertex));\n } else {\n geojsonPaths.push(initLineString(curVertex));\n }\n }\n }\n\n const result: CalculationResult = {\n startNode,\n endNode,\n routes: segments,\n distance: 0,\n };\n\n return result;\n }\n\n function findPath(vertex1: Node<any>, vertex2: Node<any>, graph: Graph) {\n // setup ngraph pathfinder\n const pathFinder = aStar(graph, {\n oriented: true,\n distance(fromNode, toNode, link) {\n return link.data.weight;\n },\n blocked(fromNode, toNode, link) {\n if (changeZoneCheckEnabled) {\n const isZoneCrossing = fromNode?.data.zone !== toNode?.data.zone;\n if (isZoneCrossing) {\n const parentWhereDimensionOfFromNode = getParentDimension(fromNode.data.where);\n const parentWhereDimensionOfStartNode = getParentDimension((startNode as Edge).where);\n const parentWhereDimensionOfToNode = getParentDimension(toNode.data.where);\n if (parentWhereDimensionOfFromNode !== parentWhereDimensionOfStartNode && parentWhereDimensionOfToNode !== parentWhereDimensionOfStartNode) {\n return true;\n }\n }\n }\n return false;\n },\n });\n\n // get shortest path\n const path = pathFinder.find(vertex1.id, vertex2.id).reverse();\n return path;\n }\n\n function setupGraphAndFindPath(source: Edge, destination: Edge, portalEdgeData: PortalEdgeData, networkData: Feature[]) {\n // create ngraph graph\n const graph = createGraph();\n\n // add node & node lines to graph\n const vertex1 = addEdgeToGraph(graph, source);\n const vertex2 = addEdgeToGraph(graph, destination);\n\n if (vertex1 && vertex2) {\n // Add portal links\n addPortalLinksToGraph(graph, portalEdgeData);\n\n // add networks to graph\n addNetworkToGraph(graph, networkData);\n\n const path = findPath(vertex1, vertex2, graph);\n // reconstruct path into geojson features\n const geojsonPath = pathToFeatures(source, destination, path, graph);\n return geojsonPath;\n }\n\n return {} as CalculationResult;\n }\n\n function getRouteWithAllPortals(source: Edge, destination: Edge) {\n let start = performance.now();\n\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalData.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalData.edgeData, concatenatedNetworkFeatures);\n }\n\n function getRouteWithSpecificPortals(source: Edge, destination: Edge, routeWithAllAvailablePortals: CalculationResult) {\n const portalsToUse = new Set<string>();\n for (let index = 0; routeWithAllAvailablePortals.routes && index < routeWithAllAvailablePortals.routes.length; index += 1) {\n const segment = routeWithAllAvailablePortals.routes[index];\n if (segment.isPortal) {\n portalsToUse.add(segment.edges[0]);\n portalsToUse.add(segment.edges[1]);\n }\n }\n\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeatures = getNetworkFeatures(DEFAULT_DIMENSION);\n // Load portal data\n const portalDataForList = filterPortalEdgeDataByList(portalData.edgeData, portalsToUse);\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataForList.lines);\n const concatenatedNetworkFeatures = networkFeatures;\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeatures.length);\n\n return setupGraphAndFindPath(source, destination, portalDataForList.edgeData, concatenatedNetworkFeatures);\n }\n\n function getDirectRoute(source: Edge, destination: Edge) {\n let start = performance.now();\n // Load data\n // Load network data\n const networkFeaturesSourceNode = getNetworkFeatures(getParentDimension(source.where));\n const networkFeaturesDestinationNode = getNetworkFeatures(getParentDimension(destination.where));\n // Load portal data\n const portalDataSourceNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(source.where));\n const portalDataDestinationNode = filterPortalEdgeDataByWhere(portalData.edgeData, getParentDimension(destination.where));\n\n console.log('time load: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n const concatenatedEdgeFeatures = source.lines.concat(destination.lines, portalDataSourceNode.lines, portalDataDestinationNode.lines);\n const concatenatedNetworkFeatures = networkFeaturesSourceNode.concat(networkFeaturesDestinationNode);\n\n if (runIntersection) optimized(concatenatedEdgeFeatures, concatenatedNetworkFeatures);\n console.log('time network: ', (performance.now() - start) / 1000, networkFeaturesSourceNode.length);\n\n const portalEdgeData = {\n ...portalDataSourceNode.edgeData,\n ...portalDataDestinationNode.edgeData,\n };\n return setupGraphAndFindPath(source, destination, portalEdgeData, concatenatedNetworkFeatures);\n }\n\n // function to get shortest route\n function getRoute(\n mapObjectId1: string | UserPosition,\n mapObjectId2: string,\n wheelChairAccessibleRouteOnlyParam: boolean\n ) {\n wheelChairAccessibleRouteOnly = wheelChairAccessibleRouteOnlyParam;\n // if same start & end\n if (mapObjectId1 === mapObjectId2) {\n return {} as CalculationResult;\n }\n\n if(typeof(mapObjectId1) !== 'string'\n || typeof(mapObjectId2) !== 'string'\n ) runIntersection = true;\n\n const node1 = getEdge(mapObjectId1);\n const node2 = getEdge(mapObjectId2);\n\n startNode = node1;\n endNode = node2;\n\n let start = performance.now();\n portalData = getPortalDataForDimension(DEFAULT_DIMENSION);\n console.log('time portal load with extrapolation: ', (performance.now() - start) / 1000);\n\n start = performance.now();\n if (startNode && endNode) {\n changeZoneCheckEnabled = true;\n const runRouteIteration = () => {\n const directRoute = getDirectRoute(startNode as Edge, endNode as Edge);\n console.log('Direct route', directRoute);\n if (isEmpty(directRoute)) {\n const routeWithAllPortals = getRouteWithAllPortals(startNode as Edge, endNode as Edge);\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, routeWithAllPortals);\n return finalRoute;\n }\n\n const finalRoute = getRouteWithSpecificPortals(startNode as Edge, endNode as Edge, directRoute);\n return finalRoute;\n };\n\n let route = runRouteIteration();\n if (isEmpty(route)) {\n changeZoneCheckEnabled = false;\n route = runRouteIteration();\n }\n\n console.log('time total: ', (performance.now() - start) / 1000);\n return route;\n }\n\n return {} as CalculationResult;\n }\n\n return { getRoute };\n}());\n\nexport default RoutingCore;\n"],"mappings":"AAAA;AACA;AACA,SAASA,KAAK,QAAQ,aAAa;AACnC,OAAOC,WAAW,MAAuB,cAAc;AACvD,SACEC,KAAK,EACLC,UAAU,QACL,eAAe;AAEtB;AACA,OAAO,KAAKC,IAAI,MAAM,YAAY;AAClC,SAASC,SAAS,EAAEC,OAAO,EAAEC,SAAS,QAAQ,QAAQ;AAAC,SAE5BC,aAAa,EAAEC,cAAc,EAAeC,UAAU;AAAA,SAG/EC,kBAAkB,EAAEC,OAAO,EAC3BC,yBAAyB;AAAA,SAElBC,sBAAsB,EAAEC,gBAAgB;AAAA,SAE/CC,iBAAiB,EAAEC,0BAA0B,EAAEC,2BAA2B,EAAEC,kBAAkB,EAAqBC,SAAS;AAG9H;AAEA,MAAMC,WAAW,GAAI,YAAY;EAC/B,IAAIC,6BAA6B,GAAG,IAAI;EACxC,IAAIC,SAA2B;EAC/B,IAAIC,OAAyB;EAC7B,IAAIC,sBAAsB,GAAG,IAAI;EACjC,IAAIC,eAAe,GAAG,KAAK;EAE3B,IAAIC,UAGH,GAAG;IAAEC,QAAQ,EAAE,CAAC,CAAC;IAAEC,KAAK,EAAE;EAAG,CAAC;EAE/B,SAASC,SAASA,CAChBC,KAAY,EACZC,MAAgB,EAChBC,WAAmB,EACnBC,KAAa,EACbC,IAAY,EACZC,IAAY,EAEZ;IAAA,IADAC,iBAAiB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEzB,MAAMG,UAAU,GAAG,GAAIT,MAAM,CAAEU,QAAQ,CAAC,CAAC,IAAIR,KAAK,EAAE;IACpD,IAAIS,MAAM,GAAGZ,KAAK,CAACa,OAAO,CAACH,UAAU,CAAC;IACtC,IAAIE,MAAM,KAAKH,SAAS,EAAE;MACxB,MAAMK,IAAI,GAAG;QACXZ,WAAW;QACXD,MAAM;QACNE,KAAK;QACLC,IAAI;QACJC,IAAI;QACJU,eAAe,EAAE;MACnB,CAAC;MACDH,MAAM,GAAGZ,KAAK,CAACgB,OAAO,CAACN,UAAU,EAAEI,IAAI,CAAC;IAC1C,CAAC,MAAM,IAAIR,iBAAiB,EAAE;MAC5BM,MAAM,CAACE,IAAI,CAACZ,WAAW,GAAGA,WAAW;;MAErC;MACA,IAAIU,MAAM,CAACE,IAAI,CAACT,IAAI,KAAKA,IAAI,EAAEO,MAAM,CAACE,IAAI,CAACC,eAAe,GAAG,IAAI;MACjEH,MAAM,CAACE,IAAI,CAACT,IAAI,GAAGA,IAAI;IACzB;IACA,OAAOO,MAAM;EACf;EAEA,SAASK,OAAOA,CAACjB,KAAsB,EAAEkB,OAAmB,EAAEC,OAAmB,EAAEL,IAKlF,EAAE;IACD,MAAM;MAAEM,IAAI;MAAEC;IAAY,CAAC,GAAGP,IAAI;IAClC,MAAMQ,aAAa,GAAGR,IAAI,CAACS,QAAQ,GAAGH,IAAI,GAAGzC,UAAU,GAAGyC,IAAI;IAC9D,IAAI,CAAC7B,6BAA6B,IAAKA,6BAA6B,IAAIuB,IAAI,CAACU,mBAAoB,EAAE;MAAExB,KAAK,CAACiB,OAAO,CAACC,OAAO,CAACO,EAAE,EAAEN,OAAO,CAACM,EAAE,EAAE;QAAEC,MAAM,EAAEJ,aAAa;QAAEF,IAAI;QAAEC;MAAY,CAAC,CAAC;IAAE;EAC5L;EAEA,SAASM,WAAWA,CAACC,OAAiB,EAAEC,OAAiB,EAAE;IACzD,MAAMC,MAAM,GAAG3D,KAAK,CAACyD,OAAO,CAAC;IAC7B,MAAMG,MAAM,GAAG5D,KAAK,CAAC0D,OAAO,CAAC;IAC7B,MAAMG,QAAQ,GAAG3D,IAAI,CAAC2D,QAAQ,CAACF,MAAM,EAAEC,MAAM,EAAE;MAAEE,KAAK,EAAE;IAAS,CAAC,CAAC;IACnE,OAAOD,QAAQ;EACjB;EAEA,SAASE,cAAcA,CAAClC,KAAY,EAAEmC,IAAU,EAAE;IAChD,MAAMC,IAAI,GAAGD,IAAI;IACjB,IAAIC,IAAI,EAAE;MACR,MAAMxB,MAAM,GAAGb,SAAS,CACtBC,KAAK,EACLoC,IAAI,CAACnC,MAAM,EACXmC,IAAI,CAACX,EAAE,EACPW,IAAI,CAACjC,KAAK,EACViC,IAAI,CAAChC,IAAI,EACTgC,IAAI,CAAC/B,IAAI,EACT,IACF,CAAC;MACD,KAAK,IAAIgC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGD,IAAI,CAACtC,KAAK,CAACU,MAAM,EAAE6B,KAAK,IAAI,CAAC,EAAE;QACzD,MAAMC,IAAI,GAAGF,IAAI,CAACtC,KAAK,CAACuC,KAAK,CAAC;QAC9B;QACA,MAAMpC,MAAM,GAAG5B,IAAI,CAACkE,SAAS,CAACD,IAAI,CAAC;QACnC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGvC,MAAM,CAACO,MAAM,GAAG,CAAC,EAAEgC,CAAC,IAAI,CAAC,EAAE;UAC7C,MAAMtB,OAAO,GAAGnB,SAAS,CACvBC,KAAK,EACLC,MAAM,CAACuC,CAAC,CAAC,EACT,QAAQ,EACRJ,IAAI,CAACjC,KAAK,EACVzB,cAAc,CAAC+D,IAAI,EACnBH,IAAI,CAACI,UAAU,CAACrC,IAClB,CAAC;UACD,MAAMc,OAAO,GAAGpB,SAAS,CACvBC,KAAK,EACLC,MAAM,CAACuC,CAAC,GAAG,CAAC,CAAC,EACb,QAAQ,EACRJ,IAAI,CAACjC,KAAK,EACVzB,cAAc,CAAC+D,IAAI,EACnBH,IAAI,CAACI,UAAU,CAACrC,IAClB,CAAC;UACD,IAAIa,OAAO,CAACO,EAAE,KAAKN,OAAO,CAACM,EAAE,EAAE;YAC7B,MAAMO,QAAQ,GAAGL,WAAW,CAAC1B,MAAM,CAACuC,CAAC,CAAC,EAAEvC,MAAM,CAACuC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAIF,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACmE,OAAO,IAAIN,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACoE,MAAM,EAAE;cAC7G5B,OAAO,CAACjB,KAAK,EAAEkB,OAAO,EAAEC,OAAO,EAAE;gBAC/BK,mBAAmB,EAAEc,IAAI,CAACI,UAAU,CAACI,UAAU;gBAC/C1B,IAAI,EAAEY,QAAQ;gBACdT,QAAQ,EAAE,KAAK;gBACfF,WAAW,EAAE;cACf,CAAC,CAAC;YACJ;YACA,IAAIiB,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACsE,QAAQ,IAAIT,IAAI,CAACI,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACoE,MAAM,EAAE;cAC9G5B,OAAO,CAACjB,KAAK,EAAEmB,OAAO,EAAED,OAAO,EAAE;gBAC/BM,mBAAmB,EAAEc,IAAI,CAACI,UAAU,CAACI,UAAU;gBAC/C1B,IAAI,EAAEY,QAAQ;gBACdT,QAAQ,EAAE,KAAK;gBACfF,WAAW,EAAE;cACf,CAAC,CAAC;YACJ;UACF;QACF;MACF;MACA,OAAOT,MAAM;IACf;IAEA,OAAOH,SAAS;EAClB;EAEA,SAASuC,iBAAiBA,CAAChD,KAAY,EAAEiD,eAA0B,EAAE;IACnE,KAAK,IAAIZ,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGY,eAAe,CAACzC,MAAM,EAAE6B,KAAK,IAAI,CAAC,EAAE;MAC9D,MAAMa,OAAO,GAAGD,eAAe,CAACZ,KAAK,CAAC;MACtC,IAAIa,OAAO,CAACC,QAAQ,CAACC,IAAI,KAAK,YAAY,EAAE;QAC1C;QACA,MAAMC,UAAU,GAAGhF,IAAI,CAACkE,SAAS,CAACW,OAAc,CAAC;QACjD,IAAIA,OAAO,CAACR,UAAU,EAAE;UACtB,MAAMvC,KAAK,GAAG+C,OAAO,CAACR,UAAU,CAACY,eAAe;UAChD,MAAMlD,IAAI,GAAG1B,cAAc,CAAC6E,OAAO,CAAC,CAAC;UACrC,MAAM;YAAElD;UAAK,CAAC,GAAG6C,OAAO,CAACR,UAAU;UACnC;UACA,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGa,UAAU,CAAC7C,MAAM,GAAG,CAAC,EAAEgC,CAAC,IAAI,CAAC,EAAE;YACjD,MAAMtB,OAAO,GAAGnB,SAAS,CAACC,KAAK,EAAEqD,UAAU,CAACb,CAAC,CAAC,EAAE,QAAQ,EAAErC,KAAK,EAAEC,IAAI,EAAEC,IAAI,EAAE,IAAI,CAAC;YAClF,MAAMc,OAAO,GAAGpB,SAAS,CACvBC,KAAK,EACLqD,UAAU,CAACb,CAAC,GAAG,CAAC,CAAC,EACjB,QAAQ,EACRrC,KAAK,EACLC,IAAI,EACJC,IAAI,EACJ,IACF,CAAC;YACD,IAAIa,OAAO,CAACO,EAAE,KAAKN,OAAO,CAACM,EAAE,EAAE;cAC7B,MAAMO,QAAQ,GAAGL,WAAW,CAAC0B,UAAU,CAACb,CAAC,CAAC,EAAEa,UAAU,CAACb,CAAC,GAAG,CAAC,CAAC,CAAC;cAC9D,IAAIU,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACmE,OAAO,IAAIM,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACoE,MAAM,EAAE;gBACnH5B,OAAO,CAACjB,KAAK,EAAEkB,OAAO,EAAEC,OAAO,EAAE;kBAC/BK,mBAAmB,EAAE0B,OAAO,CAACR,UAAU,CAACI,UAAU;kBAClD1B,IAAI,EAAEY,QAAQ;kBACdT,QAAQ,EAAE,KAAK;kBACfF,WAAW,EAAE;gBACf,CAAC,CAAC;cACJ;cACA,IAAI6B,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACsE,QAAQ,IAAIG,OAAO,CAACR,UAAU,CAACC,SAAS,KAAKlE,aAAa,CAACoE,MAAM,EAAE;gBACpH5B,OAAO,CAACjB,KAAK,EAAEmB,OAAO,EAAED,OAAO,EAAE;kBAC/BM,mBAAmB,EAAE0B,OAAO,CAACR,UAAU,CAACI,UAAU;kBAClD1B,IAAI,EAAEY,QAAQ;kBACdT,QAAQ,EAAE,KAAK;kBACfF,WAAW,EAAE;gBACf,CAAC,CAAC;cACJ;YACF;UACF;QACF;MACF;IACF;EACF;EAEA,SAASmC,eAAeA,CAACxD,KAAY,EAAEmC,IAAU,EAAE;IACjD,MAAMC,IAAI,GAAGD,IAAI;IACjB,IAAIC,IAAI,KAAK3B,SAAS,EAAE;MACtB,OAAOA,SAAS;IAClB;IACA,OAAOV,SAAS,CACdC,KAAK,EACLoC,IAAI,CAACnC,MAAM,EACXmC,IAAI,CAACX,EAAE,EACPW,IAAI,CAACjC,KAAK,EACViC,IAAI,CAAChC,IAAI,EACTgC,IAAI,CAAC/B,IAAI,EACT,IACF,CAAC;EACH;EAEA,SAASoD,qBAAqBA,CAACzD,KAAY,EAAE0D,cAA8B,EAAE;IAC3E,KAAK,MAAMC,YAAY,IAAID,cAAc,EAAE;MACzC,MAAME,MAAM,GAAGF,cAAc,CAACC,YAAY,CAAC;MAE3C,KAAK,IAAItB,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGuB,MAAM,CAACC,KAAK,CAACrD,MAAM,EAAE6B,KAAK,IAAI,CAAC,EAAE;QAC3D,MAAMyB,UAAU,GAAGF,MAAM,CAACC,KAAK,CAACxB,KAAK,CAAC;QACtC,IAAI;UAAEjB;QAAK,CAAC,GAAG0C,UAAU;QACzB1C,IAAI,GAAG5C,SAAS,CAAC4C,IAAI,CAAC;QACtB;QACA;QACA;QACA,MAAM;UAAEuB,SAAS;UAAEG,UAAU;UAAEzB;QAAY,CAAC,GAAGyC,UAAU;QACzD,MAAMC,OAAO,GAAGP,eAAe,CAACxD,KAAK,EAAE4D,MAAM,CAAC;QAC9C,MAAMI,OAAO,GAAGR,eAAe,CAACxD,KAAK,EAAE8D,UAAU,CAAC;QAClD,IAAIC,OAAO,KAAKtD,SAAS,IAAIuD,OAAO,KAAKvD,SAAS,IAAIsD,OAAO,CAACtC,EAAE,KAAKuC,OAAO,CAACvC,EAAE,EAAE;UAC/E,IAAIkB,SAAS,KAAKlE,aAAa,CAACmE,OAAO,IAAID,SAAS,KAAKlE,aAAa,CAACoE,MAAM,EAAE;YAC7E5B,OAAO,CAACjB,KAAK,EAAE+D,OAAO,EAAEC,OAAO,EAAE;cAC/BxC,mBAAmB,EAAEsB,UAAU;cAC/B1B,IAAI;cACJC,WAAW;cACXE,QAAQ,EAAE;YACZ,CAAC,CAAC;UACJ;UACA,IAAIoB,SAAS,KAAKlE,aAAa,CAACsE,QAAQ,IAAIJ,SAAS,KAAKlE,aAAa,CAACoE,MAAM,EAAE;YAC9E5B,OAAO,CAACjB,KAAK,EAAEgE,OAAO,EAAED,OAAO,EAAE;cAC/BvC,mBAAmB,EAAEsB,UAAU;cAC/B1B,IAAI;cACJC,WAAW;cACXE,QAAQ,EAAE;YACZ,CAAC,CAAC;UACJ;UAEAW,cAAc,CAAClC,KAAK,EAAE8D,UAAU,CAAC;QACnC;MACF;MAEA5B,cAAc,CAAClC,KAAK,EAAE4D,MAAM,CAAC;IAC/B;EACF;EAEA,SAASK,cAAcA,CAACrD,MAAW,EAAE;IACnC,OAAO;MACLwC,IAAI,EAAE,SAAS;MACfD,QAAQ,EAAE;QAAEC,IAAI,EAAE,YAAY;QAAEc,WAAW,EAAE,CAACtD,MAAM,CAACE,IAAI,CAACb,MAAM;MAAE,CAAC;MACnEyC,UAAU,EAAE;QACVY,eAAe,EAAE1C,MAAM,CAACE,IAAI,CAACX,KAAK;QAClCE,IAAI,EAAEO,MAAM,CAACE,IAAI,CAACT,IAAI;QACtBe,IAAI,EAAE;MACR;IACF,CAAC;EACH;EAEA,SAAS+C,cAAcA,CAACC,MAAY,EAAEC,WAAkB,EAAEC,QAAqB,EAAEtE,KAAY,EAAE;IAC7F,IAAIsE,QAAQ,CAAC9D,MAAM,IAAI,CAAC,EAAE;MACxB,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;;IAEF,MAAMhB,SAAS,GAAG4E,MAAM;IACxB,MAAM3E,OAAO,GAAG4E,WAAW;IAE3B,MAAME,QAAuB,GAAG,EAAE;IAClC,IAAIC,sBAAsB,GAAGF,QAAQ,CAAC,CAAC,CAAC,CAACxD,IAAI;IAC7C,MAAM2D,YAAY,GAAG,CAACR,cAAc,CAACK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAElD,KAAK,IAAI9B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8B,QAAQ,CAAC9D,MAAM,EAAEgC,CAAC,IAAI,CAAC,EAAE;MAC3C,MAAMkC,SAAS,GAAGJ,QAAQ,CAAC9B,CAAC,CAAC;MAC7B,MAAMmC,UAAU,GAAGL,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC;MAClC,MAAMF,IAAI,GAAGmC,YAAY,CAACA,YAAY,CAACjE,MAAM,GAAG,CAAC,CAAC;;MAElD;MACA,IAAIkE,SAAS,CAAC5D,IAAI,CAACZ,WAAW,KAAK,QAAQ,IAAIwE,SAAS,CAAC5D,IAAI,CAACC,eAAe,EAAE;QAC7E,IAAI6D,OAAO;QACX,IAAI5F,gBAAgB,CAAC2F,UAAU,CAAC7D,IAAI,CAACV,IAAI,CAAC,IAAIpB,gBAAgB,CAAC0F,SAAS,CAAC5D,IAAI,CAACV,IAAI,CAAC,EAAE;UACnF,IAAIuE,UAAU,CAAC7D,IAAI,CAACT,IAAI,KAAKqE,SAAS,CAAC5D,IAAI,CAACT,IAAI,EAAE;YAChDwE,OAAO,CAACC,IAAI,CAAC,yCAAyC,CAAC;UACzD;;UAEA;UACA,IAAIC,UAAU;UACd,IAAIhG,sBAAsB,CAAC4F,UAAU,CAAC7D,IAAI,CAACV,IAAI,CAAC,EAAE;YAChD,MAAM4E,aAAa,GAAG,SAAAA,CAACtB,cAA8B,EAAEgB,SAAoB,EAAEC,UAAqB,EAA0B;cAAA,IAAxBM,WAAW,GAAA1E,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;cACrH,MAAM2E,kBAAkB,GAAGP,UAAU,CAAC7D,IAAI,CAACZ,WAAW;cACtD,MAAMiF,GAAG,GAAG,IAAIC,GAAG,CAAS,CAAC,CAACC,GAAG,CAACH,kBAAkB,CAAC;cACrD,MAAMI,gBAAgB,GAAGpG,0BAA0B,CAACwE,cAAc,EAAEyB,GAAG,CAAC;cACxE,IAAIG,gBAAgB,IAAIA,gBAAgB,CAACzF,QAAQ,CAACqF,kBAAkB,CAAC,EAAE;gBACrE,MAAMK,oBAAoB,GAAGD,gBAAgB,CAACzF,QAAQ,CAACqF,kBAAkB,CAAC;gBAC1E,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,oBAAoB,CAAC1B,KAAK,CAACrD,MAAM,EAAEgF,CAAC,IAAI,CAAC,EAAE;kBAC7D,MAAMC,IAAI,GAAGF,oBAAoB,CAAC1B,KAAK,CAAC2B,CAAC,CAAC;kBAC1C,IAAIC,IAAI,CAAChE,EAAE,KAAKiD,SAAS,CAAC5D,IAAI,CAACZ,WAAW,EAAE;oBAC1C,IAAIuF,IAAI,CAACC,YAAY,IAAID,IAAI,CAACC,YAAY,CAAClF,MAAM,GAAG,CAAC,EAAE;sBACrD,MAAM8B,IAAI,GAAGmD,IAAI,CAACC,YAAY,CAAC,CAAC,CAAC;sBACjC,MAAMC,KAAK,GAAGV,WAAW,KAAK,KAAK,GAAGN,UAAU,CAAC7D,IAAI,CAACb,MAAM,GAAGyE,SAAS,CAAC5D,IAAI,CAACb,MAAM;sBACpF,MAAM2F,GAAG,GAAGX,WAAW,KAAK,KAAK,GAAGP,SAAS,CAAC5D,IAAI,CAACb,MAAM,GAAG0E,UAAU,CAAC7D,IAAI,CAACb,MAAM;sBAElF,MAAM4F,eAAe,GAAGxH,IAAI,CAAC2D,QAAQ,CAAC2D,KAAK,EAAErD,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC,CAAC,CAAC,CAAC;sBAC1E,MAAM4B,aAAa,GAAGzH,IAAI,CAAC2D,QAAQ,CAAC4D,GAAG,EAAEtD,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC,CAAC,CAAC,CAAC;sBACtE,MAAM6B,WAAW,GAAGF,eAAe,GAAGC,aAAa,GAAGxD,IAAI,CAACa,QAAQ,CAACe,WAAW,GAAG5B,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC8B,KAAK,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;sBAC7H,OAAO5H,IAAI,CAAC6H,UAAU,CAACH,WAAW,CAAC;oBACrC;kBACF;gBACF;cACF;cAEA,OAAO,IAAI;YACb,CAAC;YAEDhB,UAAU,GAAGC,aAAa,CAACpF,UAAU,CAACC,QAAQ,EAAE6E,SAAS,EAAEC,UAAU,EAAE,KAAK,CAAC;YAC7E,IAAI,CAACI,UAAU,EAAEA,UAAU,GAAGC,aAAa,CAACpF,UAAU,CAACC,QAAQ,EAAE8E,UAAU,EAAED,SAAS,EAAE,IAAI,CAAC;UAC/F;;UAEA;UACA,MAAMe,IAAI,GAAGzF,KAAK,CAACmG,OAAO,CAACxB,UAAU,CAAClD,EAAE,EAAEiD,SAAS,CAACjD,EAAE,CAAC;UACvD,MAAML,IAAI,GAAGqE,IAAI,GAAGA,IAAI,CAAC3E,IAAI,CAACM,IAAI,GAAGqE,IAAI,CAAC3E,IAAI,CAACM,IAAI,GAAGX,SAAS,GAAGA,SAAS;UAC3E,MAAMY,WAAW,GAAGoE,IAAI,GAAGA,IAAI,CAAC3E,IAAI,CAACO,WAAW,GAAGoE,IAAI,CAAC3E,IAAI,CAACO,WAAW,GAAGZ,SAAS,GAAGA,SAAS;UAChGmE,OAAO,GAAG;YACRwB,OAAO,EAAEhI,UAAU,CAAC,CAClBuG,UAAU,CAAC7D,IAAI,CAACb,MAAM,EACtByE,SAAS,CAAC5D,IAAI,CAACb,MAAM,CACtB,EAAE;cACDI,IAAI,EAAEqE,SAAS,CAAC5D,IAAI,CAACT;YACvB,CAAC,CAAC;YACFgG,KAAK,EAAE,CAAC1B,UAAU,CAAC7D,IAAI,CAACZ,WAAW,EAAEwE,SAAS,CAAC5D,IAAI,CAACZ,WAAW,CAAC;YAChEoG,UAAU,EAAE3B,UAAU,CAAC7D,IAAI,CAACX,KAAK;YACjCoG,QAAQ,EAAE7B,SAAS,CAAC5D,IAAI,CAACX,KAAK;YAC9BoB,QAAQ,EAAE,IAAI;YACdwD,UAAU;YACV3D,IAAI;YACJC;UACF,CAAgB;UAEhBkD,QAAQ,CAACiC,IAAI,CAAC5B,OAAO,CAAC;UACtBJ,sBAAsB,GAAGE,SAAS,CAAC5D,IAAI;QACzC,CAAC,MAAM;UACL,MAAM2F,UAAU,GAAIjE,CAAC,GAAG,CAAC,GAAG8B,QAAQ,CAAC9D,MAAM,GAAI8D,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC,GAAG/B,SAAS;UAC1E,IAAIiE,SAAS,CAAC5D,IAAI,CAACC,eAAe,IAC5B4D,UAAU,IAAI8B,UAAU,IAAI9B,UAAU,EAAE7D,IAAI,CAACT,IAAI,KAAKoG,UAAU,EAAE3F,IAAI,CAACT,IAAK,EAAE;YAClFwE,OAAO,CAAC6B,GAAG,CAAC,mCAAmC,CAAC;UAClD,CAAC,MAAM;YACL9B,OAAO,GAAG;cACRwB,OAAO,EAAE9D,IAAI;cACb+D,KAAK,EAAE,CAAC7B,sBAAsB,CAACtE,WAAW,EAAEwE,SAAS,CAAC5D,IAAI,CAACZ,WAAW,CAAC;cACvEoG,UAAU,EAAE9B,sBAAsB,CAACrE,KAAK;cACxCoG,QAAQ,EAAE/B,sBAAsB,CAACrE,KAAK;cACtCoB,QAAQ,EAAE,KAAK;cACfwD,UAAU,EAAEtE,SAAS;cACrBW,IAAI,EAAEkB,IAAI,CAACI,UAAU,CAACtB;YACxB,CAAC;YAEDmD,QAAQ,CAACiC,IAAI,CAAC5B,OAAO,CAAC;YACtBJ,sBAAsB,GAAGE,SAAS,CAAC5D,IAAI;UACzC;QACF;MACF;;MAEA;MACA,IAAI,EAAE9B,gBAAgB,CAAC2F,UAAU,CAAC7D,IAAI,CAACV,IAAI,CAAC,IAAIpB,gBAAgB,CAAC0F,SAAS,CAAC5D,IAAI,CAACV,IAAI,CAAC,CAAC,EAAE;QACtF,MAAMqF,IAAI,GAAGzF,KAAK,CAACmG,OAAO,CAACxB,UAAU,CAAClD,EAAE,EAAEiD,SAAS,CAACjD,EAAE,CAAC,CAAC,CAAC;QACzD,MAAML,IAAI,GAAGqE,IAAI,GAAGA,IAAI,CAAC3E,IAAI,CAACM,IAAI,GAAGqE,IAAI,CAAC3E,IAAI,CAACM,IAAI,GAAGX,SAAS,GAAGA,SAAS;QAE3E6B,IAAI,CAACa,QAAQ,CAACe,WAAW,CAACsC,IAAI,CAAC9B,SAAS,CAAC5D,IAAI,CAACb,MAAM,CAAC;QACrDqC,IAAI,CAACI,UAAU,CAACtB,IAAI,IAAIA,IAAI;MAC9B,CAAC,MAAM;QACL;QACA,IAAIkB,IAAI,CAACa,QAAQ,CAACe,WAAW,CAAC1D,MAAM,GAAG,CAAC,EAAE;UACxCiE,YAAY,CAACkC,GAAG,CAAC,CAAC;QACpB;QACAlC,YAAY,CAAC+B,IAAI,CAACvC,cAAc,CAACS,SAAS,CAAC,CAAC;MAC9C;;MAEA;MACA,IAAIA,SAAS,CAAC5D,IAAI,CAACC,eAAe,EAAE;QAClC,MAAM4D,UAAU,GAAInC,CAAC,GAAG,CAAC,GAAI8B,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC,GAAG/B,SAAS;QACxD,MAAMgG,UAAU,GAAIjE,CAAC,GAAG,CAAC,GAAG8B,QAAQ,CAAC9D,MAAM,GAAI8D,QAAQ,CAAC9B,CAAC,GAAG,CAAC,CAAC,GAAG/B,SAAS;QAC1E,IAAIkE,UAAU,IAAI8B,UAAU,IAAI9B,UAAU,EAAE7D,IAAI,CAACT,IAAI,KAAKoG,UAAU,EAAE3F,IAAI,CAACT,IAAI,EAAE;UAC/EwE,OAAO,CAAC6B,GAAG,CAAC,wBAAwB,CAAC;QACvC,CAAC;UACD;UACA,IAAID,UAAU,EAAE;YACd,MAAMG,mBAAmB,GAAGtI,SAAS,CAACoG,SAAS,CAAC;YAChDkC,mBAAmB,CAAC9F,IAAI,CAACT,IAAI,GAAGoG,UAAU,CAAC3F,IAAI,CAACT,IAAI;YACpDoE,YAAY,CAAC+B,IAAI,CAACvC,cAAc,CAAC2C,mBAAmB,CAAC,CAAC;UACxD,CAAC,MAAM;YACLnC,YAAY,CAAC+B,IAAI,CAACvC,cAAc,CAACS,SAAS,CAAC,CAAC;UAC9C;MACF;IACF;IAEA,MAAMmC,MAAyB,GAAG;MAChCrH,SAAS;MACTC,OAAO;MACPqH,MAAM,EAAEvC,QAAQ;MAChBvC,QAAQ,EAAE;IACZ,CAAC;IAED,OAAO6E,MAAM;EACf;EAEA,SAASE,QAAQA,CAAC7F,OAAkB,EAAEC,OAAkB,EAAEnB,KAAY,EAAE;IACtE;IACA,MAAMgH,UAAU,GAAG/I,KAAK,CAAC+B,KAAK,EAAE;MAC9BiH,QAAQ,EAAE,IAAI;MACdjF,QAAQA,CAACkF,QAAQ,EAAEC,MAAM,EAAE1B,IAAI,EAAE;QAC/B,OAAOA,IAAI,CAAC3E,IAAI,CAACY,MAAM;MACzB,CAAC;MACD0F,OAAOA,CAACF,QAAQ,EAAEC,MAAM,EAAE1B,IAAI,EAAE;QAC9B,IAAI/F,sBAAsB,EAAE;UAC1B,MAAM2H,cAAc,GAAGH,QAAQ,EAAEpG,IAAI,CAACT,IAAI,KAAK8G,MAAM,EAAErG,IAAI,CAACT,IAAI;UAChE,IAAIgH,cAAc,EAAE;YAClB,MAAMC,8BAA8B,GAAGlI,kBAAkB,CAAC8H,QAAQ,CAACpG,IAAI,CAACX,KAAK,CAAC;YAC9E,MAAMoH,+BAA+B,GAAGnI,kBAAkB,CAAEI,SAAS,CAAUW,KAAK,CAAC;YACrF,MAAMqH,4BAA4B,GAAGpI,kBAAkB,CAAC+H,MAAM,CAACrG,IAAI,CAACX,KAAK,CAAC;YAC1E,IAAImH,8BAA8B,KAAKC,+BAA+B,IAAIC,4BAA4B,KAAKD,+BAA+B,EAAE;cAC1I,OAAO,IAAI;YACb;UACF;QACF;QACA,OAAO,KAAK;MACd;IACF,CAAC,CAAC;;IAEF;IACA,MAAME,IAAI,GAAGT,UAAU,CAACU,IAAI,CAACxG,OAAO,CAACO,EAAE,EAAEN,OAAO,CAACM,EAAE,CAAC,CAACwE,OAAO,CAAC,CAAC;IAC9D,OAAOwB,IAAI;EACb;EAEA,SAASE,qBAAqBA,CAACvD,MAAY,EAAEC,WAAiB,EAAEX,cAA8B,EAAEkE,WAAsB,EAAE;IACtH;IACA,MAAM5H,KAAK,GAAG9B,WAAW,CAAC,CAAC;;IAE3B;IACA,MAAMgD,OAAO,GAAGgB,cAAc,CAAClC,KAAK,EAAEoE,MAAM,CAAC;IAC7C,MAAMjD,OAAO,GAAGe,cAAc,CAAClC,KAAK,EAAEqE,WAAW,CAAC;IAElD,IAAInD,OAAO,IAAIC,OAAO,EAAE;MACtB;MACAsC,qBAAqB,CAACzD,KAAK,EAAE0D,cAAc,CAAC;;MAE5C;MACAV,iBAAiB,CAAChD,KAAK,EAAE4H,WAAW,CAAC;MAErC,MAAMH,IAAI,GAAGV,QAAQ,CAAC7F,OAAO,EAAEC,OAAO,EAAEnB,KAAK,CAAC;MAC9C;MACA,MAAM6H,WAAW,GAAG1D,cAAc,CAACC,MAAM,EAAEC,WAAW,EAAEoD,IAAI,EAAEzH,KAAK,CAAC;MACpE,OAAO6H,WAAW;IACpB;IAEA,OAAO,CAAC,CAAC;EACX;EAEA,SAASC,sBAAsBA,CAAC1D,MAAY,EAAEC,WAAiB,EAAE;IAC/D,IAAIsB,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;;IAE7B;IACA,MAAM/E,eAAe,GAAGrE,kBAAkB,CAACK,iBAAiB,CAAC;IAC7D4F,OAAO,CAAC6B,GAAG,CAAC,aAAa,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAE9DA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,MAAMC,wBAAwB,GAAG7D,MAAM,CAACtE,KAAK,CAACoI,MAAM,CAAC7D,WAAW,CAACvE,KAAK,EAAEF,UAAU,CAACE,KAAK,CAAC;IACzF,MAAMqI,2BAA2B,GAAGlF,eAAe;IAEnD,IAAItD,eAAe,EAAEN,SAAS,CAAC4I,wBAAwB,EAAEE,2BAA2B,CAAC;IACrFtD,OAAO,CAAC6B,GAAG,CAAC,gBAAgB,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,EAAE1C,eAAe,CAACzC,MAAM,CAAC;IAEzF,OAAOmH,qBAAqB,CAACvD,MAAM,EAAEC,WAAW,EAAEzE,UAAU,CAACC,QAAQ,EAAEsI,2BAA2B,CAAC;EACrG;EAEA,SAASC,2BAA2BA,CAAChE,MAAY,EAAEC,WAAiB,EAAEgE,4BAA+C,EAAE;IACrH,MAAMC,YAAY,GAAG,IAAIlD,GAAG,CAAS,CAAC;IACtC,KAAK,IAAI/C,KAAK,GAAG,CAAC,EAAEgG,4BAA4B,CAACvB,MAAM,IAAIzE,KAAK,GAAGgG,4BAA4B,CAACvB,MAAM,CAACtG,MAAM,EAAE6B,KAAK,IAAI,CAAC,EAAE;MACzH,MAAMuC,OAAO,GAAGyD,4BAA4B,CAACvB,MAAM,CAACzE,KAAK,CAAC;MAC1D,IAAIuC,OAAO,CAACrD,QAAQ,EAAE;QACpB+G,YAAY,CAACjD,GAAG,CAACT,OAAO,CAACyB,KAAK,CAAC,CAAC,CAAC,CAAC;QAClCiC,YAAY,CAACjD,GAAG,CAACT,OAAO,CAACyB,KAAK,CAAC,CAAC,CAAC,CAAC;MACpC;IACF;IAEA,IAAIV,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IAC7B;IACA;IACA,MAAM/E,eAAe,GAAGrE,kBAAkB,CAACK,iBAAiB,CAAC;IAC7D;IACA,MAAMsJ,iBAAiB,GAAGrJ,0BAA0B,CAACU,UAAU,CAACC,QAAQ,EAAEyI,YAAY,CAAC;IACvFzD,OAAO,CAAC6B,GAAG,CAAC,aAAa,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAE9DA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,MAAMC,wBAAwB,GAAG7D,MAAM,CAACtE,KAAK,CAACoI,MAAM,CAAC7D,WAAW,CAACvE,KAAK,EAAEyI,iBAAiB,CAACzI,KAAK,CAAC;IAChG,MAAMqI,2BAA2B,GAAGlF,eAAe;IAEnD,IAAItD,eAAe,EAAEN,SAAS,CAAC4I,wBAAwB,EAAEE,2BAA2B,CAAC;IACrFtD,OAAO,CAAC6B,GAAG,CAAC,gBAAgB,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,EAAE1C,eAAe,CAACzC,MAAM,CAAC;IAEzF,OAAOmH,qBAAqB,CAACvD,MAAM,EAAEC,WAAW,EAAEkE,iBAAiB,CAAC1I,QAAQ,EAAEsI,2BAA2B,CAAC;EAC5G;EAEA,SAASK,cAAcA,CAACpE,MAAY,EAAEC,WAAiB,EAAE;IACvD,IAAIsB,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IAC7B;IACA;IACA,MAAMS,yBAAyB,GAAG7J,kBAAkB,CAACQ,kBAAkB,CAACgF,MAAM,CAACjE,KAAK,CAAC,CAAC;IACtF,MAAMuI,8BAA8B,GAAG9J,kBAAkB,CAACQ,kBAAkB,CAACiF,WAAW,CAAClE,KAAK,CAAC,CAAC;IAChG;IACA,MAAMwI,oBAAoB,GAAGxJ,2BAA2B,CAACS,UAAU,CAACC,QAAQ,EAAET,kBAAkB,CAACgF,MAAM,CAACjE,KAAK,CAAC,CAAC;IAC/G,MAAMyI,yBAAyB,GAAGzJ,2BAA2B,CAACS,UAAU,CAACC,QAAQ,EAAET,kBAAkB,CAACiF,WAAW,CAAClE,KAAK,CAAC,CAAC;IAEzH0E,OAAO,CAAC6B,GAAG,CAAC,aAAa,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAE9DA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,MAAMC,wBAAwB,GAAG7D,MAAM,CAACtE,KAAK,CAACoI,MAAM,CAAC7D,WAAW,CAACvE,KAAK,EAAE6I,oBAAoB,CAAC7I,KAAK,EAAE8I,yBAAyB,CAAC9I,KAAK,CAAC;IACpI,MAAMqI,2BAA2B,GAAGM,yBAAyB,CAACP,MAAM,CAACQ,8BAA8B,CAAC;IAEpG,IAAI/I,eAAe,EAAEN,SAAS,CAAC4I,wBAAwB,EAAEE,2BAA2B,CAAC;IACrFtD,OAAO,CAAC6B,GAAG,CAAC,gBAAgB,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,EAAE8C,yBAAyB,CAACjI,MAAM,CAAC;IAEnG,MAAMkD,cAAc,GAAG;MACrB,GAAGiF,oBAAoB,CAAC9I,QAAQ;MAChC,GAAG+I,yBAAyB,CAAC/I;IAC/B,CAAC;IACD,OAAO8H,qBAAqB,CAACvD,MAAM,EAAEC,WAAW,EAAEX,cAAc,EAAEyE,2BAA2B,CAAC;EAChG;;EAEA;EACA,SAASU,QAAQA,CACflF,YAAmC,EACnCmF,YAAoB,EACpBC,kCAA2C,EAC3C;IACAxJ,6BAA6B,GAAGwJ,kCAAkC;IAClE;IACA,IAAIpF,YAAY,KAAKmF,YAAY,EAAE;MACjC,OAAO,CAAC,CAAC;IACX;IAEA,IAAG,OAAOnF,YAAa,KAAK,QAAQ,IAC9B,OAAOmF,YAAa,KAAK,QAAQ,EACvCnJ,eAAe,GAAG,IAAI;IAEtB,MAAMqJ,KAAK,GAAGnK,OAAO,CAAC8E,YAAY,CAAC;IACnC,MAAMsF,KAAK,GAAGpK,OAAO,CAACiK,YAAY,CAAC;IAEnCtJ,SAAS,GAAGwJ,KAAK;IACjBvJ,OAAO,GAAGwJ,KAAK;IAEf,IAAItD,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IAC7BpI,UAAU,GAAGd,yBAAyB,CAACG,iBAAiB,CAAC;IACzD4F,OAAO,CAAC6B,GAAG,CAAC,uCAAuC,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;IAExFA,KAAK,GAAGoC,WAAW,CAACC,GAAG,CAAC,CAAC;IACzB,IAAIxI,SAAS,IAAIC,OAAO,EAAE;MACxBC,sBAAsB,GAAG,IAAI;MAC7B,MAAMwJ,iBAAiB,GAAGA,CAAA,KAAM;QAC9B,MAAMC,WAAW,GAAGX,cAAc,CAAChJ,SAAS,EAAUC,OAAe,CAAC;QACtEoF,OAAO,CAAC6B,GAAG,CAAC,cAAc,EAAEyC,WAAW,CAAC;QACxC,IAAI5K,OAAO,CAAC4K,WAAW,CAAC,EAAE;UACxB,MAAMC,mBAAmB,GAAGtB,sBAAsB,CAACtI,SAAS,EAAUC,OAAe,CAAC;UACtF,MAAM4J,UAAU,GAAGjB,2BAA2B,CAAC5I,SAAS,EAAUC,OAAO,EAAU2J,mBAAmB,CAAC;UACvG,OAAOC,UAAU;QACnB;QAEA,MAAMA,UAAU,GAAGjB,2BAA2B,CAAC5I,SAAS,EAAUC,OAAO,EAAU0J,WAAW,CAAC;QAC/F,OAAOE,UAAU;MACnB,CAAC;MAED,IAAIC,KAAK,GAAGJ,iBAAiB,CAAC,CAAC;MAC/B,IAAI3K,OAAO,CAAC+K,KAAK,CAAC,EAAE;QAClB5J,sBAAsB,GAAG,KAAK;QAC9B4J,KAAK,GAAGJ,iBAAiB,CAAC,CAAC;MAC7B;MAEArE,OAAO,CAAC6B,GAAG,CAAC,cAAc,EAAE,CAACqB,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGrC,KAAK,IAAI,IAAI,CAAC;MAC/D,OAAO2D,KAAK;IACd;IAEA,OAAO,CAAC,CAAC;EACX;EAEA,OAAO;IAAET;EAAS,CAAC;AACrB,CAAC,CAAC,CAAE;AAEJ,eAAevJ,WAAW","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable camelcase */
2
-
3
- import { getEdgeData, getPortalDataForIds, getImmigrationDataForTaxonomy1, getPortalLinks, getRouteNetworkData } from '../fetchMapObjectsData';
4
- export function getNetworkFeatures(whereDimension, includeChildren = true) {
2
+ import { getEdgeData, getPortalDataForIds, getImmigrationDataForTaxonomy1, getPortalLinks, getRouteNetworkData } from "../fetchMapObjectsData.js";
3
+ export function getNetworkFeatures(whereDimension) {
4
+ let includeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
5
5
  return getRouteNetworkData(whereDimension, includeChildren);
6
6
  }
7
7
  export function getEdge(mapObjectId) {
@@ -1 +1 @@
1
- {"version":3,"file":"mapObjectsHelper.js","names":["getEdgeData","getPortalDataForIds","getImmigrationDataForTaxonomy1","getPortalLinks","getRouteNetworkData","getNetworkFeatures","whereDimension","includeChildren","getEdge","mapObjectId","edge","getPortalDataForDimension","portalData","getPortalDataForMapObjects","mapObjectIds","Array","from","getImmigrationPolygonFeaturesForWhereTaxonomy","taxonomy1Path"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport {\n Edge,\n UserPosition,\n} from './interfaces';\nimport {\n getEdgeData, getPortalDataForIds, getImmigrationDataForTaxonomy1, getPortalLinks, getRouteNetworkData,\n} from '../fetchMapObjectsData';\n\nexport function getNetworkFeatures(whereDimension: string, includeChildren = true) {\n return getRouteNetworkData(whereDimension, includeChildren);\n}\n\nexport function getEdge(mapObjectId: string | UserPosition) : Edge | undefined {\n const edge = getEdgeData(mapObjectId);\n return edge;\n}\n\nexport function getPortalDataForDimension(whereDimension: string) {\n const portalData = getPortalLinks(whereDimension);\n return portalData;\n}\n\nexport function getPortalDataForMapObjects(mapObjectIds: Set<string>) {\n const portalData = getPortalDataForIds(Array.from(mapObjectIds));\n return portalData;\n}\n\nexport function getImmigrationPolygonFeaturesForWhereTaxonomy(whereDimension: string) {\n const taxonomy1Path = whereDimension;\n return getImmigrationDataForTaxonomy1(taxonomy1Path);\n}\n"],"mappings":"AAAA;;AAKA,SACEA,WAAW,EAAEC,mBAAmB,EAAEC,8BAA8B,EAAEC,cAAc,EAAEC,mBAAmB,QAChG,wBAAwB;AAE/B,OAAO,SAASC,kBAAkBA,CAACC,cAAsB,EAAEC,eAAe,GAAG,IAAI,EAAE;EACjF,OAAOH,mBAAmB,CAACE,cAAc,EAAEC,eAAe,CAAC;AAC7D;AAEA,OAAO,SAASC,OAAOA,CAACC,WAAkC,EAAqB;EAC7E,MAAMC,IAAI,GAAGV,WAAW,CAACS,WAAW,CAAC;EACrC,OAAOC,IAAI;AACb;AAEA,OAAO,SAASC,yBAAyBA,CAACL,cAAsB,EAAE;EAChE,MAAMM,UAAU,GAAGT,cAAc,CAACG,cAAc,CAAC;EACjD,OAAOM,UAAU;AACnB;AAEA,OAAO,SAASC,0BAA0BA,CAACC,YAAyB,EAAE;EACpE,MAAMF,UAAU,GAAGX,mBAAmB,CAACc,KAAK,CAACC,IAAI,CAACF,YAAY,CAAC,CAAC;EAChE,OAAOF,UAAU;AACnB;AAEA,OAAO,SAASK,6CAA6CA,CAACX,cAAsB,EAAE;EACpF,MAAMY,aAAa,GAAGZ,cAAc;EACpC,OAAOJ,8BAA8B,CAACgB,aAAa,CAAC;AACtD","ignoreList":[]}
1
+ {"version":3,"file":"mapObjectsHelper.js","names":["getEdgeData","getPortalDataForIds","getImmigrationDataForTaxonomy1","getPortalLinks","getRouteNetworkData","getNetworkFeatures","whereDimension","includeChildren","arguments","length","undefined","getEdge","mapObjectId","edge","getPortalDataForDimension","portalData","getPortalDataForMapObjects","mapObjectIds","Array","from","getImmigrationPolygonFeaturesForWhereTaxonomy","taxonomy1Path"],"sources":["../../../../../src/meta-atlas-sdk/MetaAtlasCore/routing-core/mapObjectsHelper.ts"],"sourcesContent":["/* eslint-disable camelcase */\nimport {\n Edge,\n UserPosition,\n} from './interfaces';\nimport {\n getEdgeData, getPortalDataForIds, getImmigrationDataForTaxonomy1, getPortalLinks, getRouteNetworkData,\n} from '../fetchMapObjectsData';\n\nexport function getNetworkFeatures(whereDimension: string, includeChildren = true) {\n return getRouteNetworkData(whereDimension, includeChildren);\n}\n\nexport function getEdge(mapObjectId: string | UserPosition) : Edge | undefined {\n const edge = getEdgeData(mapObjectId);\n return edge;\n}\n\nexport function getPortalDataForDimension(whereDimension: string) {\n const portalData = getPortalLinks(whereDimension);\n return portalData;\n}\n\nexport function getPortalDataForMapObjects(mapObjectIds: Set<string>) {\n const portalData = getPortalDataForIds(Array.from(mapObjectIds));\n return portalData;\n}\n\nexport function getImmigrationPolygonFeaturesForWhereTaxonomy(whereDimension: string) {\n const taxonomy1Path = whereDimension;\n return getImmigrationDataForTaxonomy1(taxonomy1Path);\n}\n"],"mappings":"AAAA;AAAA,SAMEA,WAAW,EAAEC,mBAAmB,EAAEC,8BAA8B,EAAEC,cAAc,EAAEC,mBAAmB;AAGvG,OAAO,SAASC,kBAAkBA,CAACC,cAAsB,EAA0B;EAAA,IAAxBC,eAAe,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAC/E,OAAOJ,mBAAmB,CAACE,cAAc,EAAEC,eAAe,CAAC;AAC7D;AAEA,OAAO,SAASI,OAAOA,CAACC,WAAkC,EAAqB;EAC7E,MAAMC,IAAI,GAAGb,WAAW,CAACY,WAAW,CAAC;EACrC,OAAOC,IAAI;AACb;AAEA,OAAO,SAASC,yBAAyBA,CAACR,cAAsB,EAAE;EAChE,MAAMS,UAAU,GAAGZ,cAAc,CAACG,cAAc,CAAC;EACjD,OAAOS,UAAU;AACnB;AAEA,OAAO,SAASC,0BAA0BA,CAACC,YAAyB,EAAE;EACpE,MAAMF,UAAU,GAAGd,mBAAmB,CAACiB,KAAK,CAACC,IAAI,CAACF,YAAY,CAAC,CAAC;EAChE,OAAOF,UAAU;AACnB;AAEA,OAAO,SAASK,6CAA6CA,CAACd,cAAsB,EAAE;EACpF,MAAMe,aAAa,GAAGf,cAAc;EACpC,OAAOJ,8BAA8B,CAACmB,aAAa,CAAC;AACtD","ignoreList":[]}
@@ -2,9 +2,9 @@ import { point, lineString } from '@turf/helpers';
2
2
  import length from '@turf/length';
3
3
  import { booleanDisjoint, booleanPointInPolygon, getCoord, getCoords, lineIntersect, lineSlice } from '@turf/turf';
4
4
  import { cloneDeep } from 'lodash';
5
- import { DISTANCE_UNIT, WALK_SPEED, Zone } from './interfaces';
6
- import RoutingCore from '.';
7
- import { getImmigrationPolygonFeaturesForWhereTaxonomy, getEdge } from './mapObjectsHelper';
5
+ import { DISTANCE_UNIT, WALK_SPEED, Zone } from "./interfaces.js";
6
+ import RoutingCore from "./index.js";
7
+ import { getImmigrationPolygonFeaturesForWhereTaxonomy, getEdge } from "./mapObjectsHelper.js";
8
8
  export let ManeuverType = /*#__PURE__*/function (ManeuverType) {
9
9
  ManeuverType["RouteOverview"] = "Route Overview";
10
10
  ManeuverType["SectionOverview"] = "Section Overview";
@@ -66,7 +66,8 @@ function updateFeatureHighlightState(features, isHighlighted) {
66
66
  }
67
67
  return features;
68
68
  }
69
- export function highlightRouteSegment(pathFeatures, segmentToHighlight, highlightNodeOnly = false) {
69
+ export function highlightRouteSegment(pathFeatures, segmentToHighlight) {
70
+ let highlightNodeOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
70
71
  for (let index = 0; index < pathFeatures.length; index += 1) {
71
72
  const segment = pathFeatures[index];
72
73
  if (segment.properties.segmentNumber === segmentToHighlight) {
@@ -83,7 +84,8 @@ export function highlightRouteSegment(pathFeatures, segmentToHighlight, highligh
83
84
  }
84
85
  return pathFeatures;
85
86
  }
86
- function getRouteNode(coordinates, segmentNumber, isHighlighted, patchNumber, whereDimension = '') {
87
+ function getRouteNode(coordinates, segmentNumber, isHighlighted, patchNumber) {
88
+ let whereDimension = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
87
89
  if (coordinates.length === 0) {
88
90
  return [];
89
91
  }
@@ -98,7 +100,8 @@ function getRouteNode(coordinates, segmentNumber, isHighlighted, patchNumber, wh
98
100
  updateFeatureHighlightState(features, isHighlighted);
99
101
  return features;
100
102
  }
101
- function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zone, whereDimension = '') {
103
+ function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zone) {
104
+ let whereDimension = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';
102
105
  if (coordinates.length === 0) {
103
106
  return [];
104
107
  }
@@ -127,7 +130,8 @@ function getRouteLine(coordinates, segmentNumber, isHighlighted, patchNumber, zo
127
130
  updateFeatureHighlightState(features, isHighlighted);
128
131
  return features;
129
132
  }
130
- export function getLineStringFeaturesOfRouteSegment(routeSegment, whereDimension = '') {
133
+ export function getLineStringFeaturesOfRouteSegment(routeSegment) {
134
+ let whereDimension = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
131
135
  const lineFeatures = [];
132
136
  for (let index = 0; index < routeSegment.features.length; index += 1) {
133
137
  const feature = routeSegment.features[index];
@@ -143,7 +147,8 @@ export function getLineStringFeaturesOfRouteSegment(routeSegment, whereDimension
143
147
  }
144
148
  return lineFeatures;
145
149
  }
146
- export function generateOverviewSegment(route, indexOffset = 0) {
150
+ export function generateOverviewSegment(route) {
151
+ let indexOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
147
152
  const overviewSegment = cloneDeep(route.segments[1]);
148
153
  const initialWhereDimension = route.segments.length > 1 ? route.segments[1].startEdge.whereDimension : '';
149
154
  overviewSegment.coordinates = [];
@@ -179,8 +184,9 @@ export function generateOverviewSegment(route, indexOffset = 0) {
179
184
  overviewSegment.distance = route.walkingDistance + route.transportDistance;
180
185
  return overviewSegment;
181
186
  }
182
- export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly, shouldAddOverviewSegment = true, indexOffset = 0 // offset for patch and segment numbers calculation
183
- ) {
187
+ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly) {
188
+ let shouldAddOverviewSegment = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
189
+ let indexOffset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
184
190
  const path = RoutingCore.getRoute(startMapObjectId, endMapObjectId, wheelChairAccessibleRouteOnly);
185
191
  const pathSegments = path.routes;
186
192
 
@@ -655,7 +661,8 @@ export async function createRoute(startMapObjectId, endMapObjectId, wheelChairAc
655
661
  }
656
662
  return route;
657
663
  }
658
- export function getPatch(route, patchNumber = 0) {
664
+ export function getPatch(route) {
665
+ let patchNumber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
659
666
  let routefeatures = [];
660
667
  for (let index = 0; index < route.segments.length; index += 1) {
661
668
  const routeSegment = route.segments[index];