leaflet-city-mapper 0.0.9 → 0.1.1

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 (1246) hide show
  1. package/README.md +6 -46
  2. package/dist/README.md +18 -0
  3. package/dist/leaflet-city-mapper-src.js +279 -110
  4. package/dist/leaflet-city-mapper-src.js.map +4 -4
  5. package/dist/leaflet-city-mapper-worker-src.js.map +2 -2
  6. package/dist/leaflet-city-mapper-worker.js.map +2 -2
  7. package/dist/leaflet-city-mapper.js +5 -5
  8. package/dist/leaflet-city-mapper.js.map +4 -4
  9. package/libs/README.md +18 -0
  10. package/libs/leaflet-lens.js +151 -151
  11. package/libs/leaflet.js +3 -3
  12. package/libs/openlayers-bindings.js +1129 -1129
  13. package/libs/openlayers-bindings.min.js.map +1 -1
  14. package/package.json +2 -4
  15. package/src/README.md +148 -0
  16. package/src/animations/README.md +30 -0
  17. package/src/animations/cancelCameraAnimation.js +13 -11
  18. package/src/animations/cancelGridFade.js +5 -3
  19. package/src/animations/endZoom.js +0 -5
  20. package/src/animations/mapAnimateCamera.js +13 -3
  21. package/src/animations/mapStopPitchBearingAnimation.js +8 -1
  22. package/src/animations/onZoomAnim.js +5 -4
  23. package/src/animations/renderPendingZoomAnimation.js +1 -4
  24. package/src/animations/runCameraAnimations.js +7 -4
  25. package/src/animations/runGridFades.js +1 -4
  26. package/src/animations/runMarkerPanFrame.js +1 -1
  27. package/src/animations/scheduleCameraAnimation.js +10 -8
  28. package/src/animations/scheduleGridFade.js +5 -4
  29. package/src/animations/scheduleMarkerPan.js +10 -6
  30. package/src/animations/startZoom.js +0 -3
  31. package/src/animations/synchronizeZoomView.js +6 -1
  32. package/src/animations/updateZoomCamera.js +21 -17
  33. package/src/archives/README.md +28 -0
  34. package/src/archives/decodeDirectory.js +13 -2
  35. package/src/archives/decodeHeader.js +9 -2
  36. package/src/archives/decompress.js +10 -0
  37. package/src/archives/findDirectoryEntry.js +17 -9
  38. package/src/archives/findTile.js +45 -31
  39. package/src/archives/getDirectoryEntries.js +28 -17
  40. package/src/archives/getHeader.js +7 -2
  41. package/src/archives/getTileData.js +26 -13
  42. package/src/archives/getZxy.js +11 -3
  43. package/src/archives/loadDirectory.js +10 -0
  44. package/src/archives/loadSource.js +12 -3
  45. package/src/archives/readArchiveRange.js +45 -31
  46. package/src/archives/readVarint.js +11 -2
  47. package/src/archives/tileId.js +11 -2
  48. package/src/astronomy/README.md +25 -0
  49. package/src/astronomy/horizontalPosition.js +11 -0
  50. package/src/astronomy/moonPosition.js +9 -2
  51. package/src/astronomy/solarPosition.js +9 -2
  52. package/src/astronomy/solarTime.js +21 -11
  53. package/src/camera/README.md +30 -0
  54. package/src/camera/cameraMapReady.js +6 -8
  55. package/src/camera/cleanupCameraMap.js +8 -10
  56. package/src/camera/constrainCameraToBounds.js +3 -2
  57. package/src/camera/createSceneCamera.js +25 -21
  58. package/src/camera/fitCameraBounds.js +9 -1
  59. package/src/camera/getBearing.js +10 -5
  60. package/src/camera/getPitch.js +10 -5
  61. package/src/camera/initializeCameraMap.js +1 -3
  62. package/src/camera/mapCamera.js +0 -2
  63. package/src/camera/mapContainerPointToLayerPoint.js +7 -2
  64. package/src/camera/mapGetBearing.js +7 -2
  65. package/src/camera/mapGetBounds.js +5 -2
  66. package/src/camera/mapGetBoundsCenterZoom.js +9 -2
  67. package/src/camera/mapGetBoundsZoom.js +9 -2
  68. package/src/camera/mapGetCenterLayerPoint.js +5 -1
  69. package/src/camera/mapGetPitch.js +7 -2
  70. package/src/camera/mapLayerPointToContainerPoint.js +7 -1
  71. package/src/camera/mapLimitCenter.js +9 -2
  72. package/src/camera/mapLimitOffset.js +12 -6
  73. package/src/camera/mapPanBy.js +10 -3
  74. package/src/camera/mapPanInside.js +8 -2
  75. package/src/camera/mapResetNorth.js +8 -0
  76. package/src/camera/mapResetNorthPitch.js +8 -0
  77. package/src/camera/mapSetBearing.js +10 -0
  78. package/src/camera/mapSetPitch.js +10 -0
  79. package/src/camera/mapSetPitchAndBearing.js +12 -3
  80. package/src/camera/mapSetZoomAround.js +9 -1
  81. package/src/camera/mapTryAnimatedPan.js +8 -1
  82. package/src/camera/mapUpdateCameraOverlays.js +6 -0
  83. package/src/camera/setBearing.js +13 -5
  84. package/src/camera/setPitch.js +13 -5
  85. package/src/camera/updateMapCamera.js +6 -4
  86. package/src/camera/updateSceneCamera.js +7 -1
  87. package/src/camera/updateSky.js +1 -3
  88. package/src/cog/README.md +29 -0
  89. package/src/cog/decodeCogTile.js +37 -24
  90. package/src/cog/finiteCogValues.js +12 -5
  91. package/src/cog/getCogAssetEntry.js +26 -15
  92. package/src/cog/getCogBase.js +22 -10
  93. package/src/cog/getCogHeader.js +10 -3
  94. package/src/cog/getCogProfile.js +25 -16
  95. package/src/cog/getCogTile.js +25 -12
  96. package/src/cog/getColorTile.js +38 -25
  97. package/src/cog/getElevationTile.js +29 -16
  98. package/src/cog/hasCogProjection.js +16 -9
  99. package/src/cog/initCog.js +13 -7
  100. package/src/cog/invalidCogFullResponse.js +10 -3
  101. package/src/cog/openCog.js +40 -30
  102. package/src/cog/openCogAsset.js +22 -14
  103. package/src/cog/readCog.js +39 -25
  104. package/src/cog/readCogBlock.js +19 -8
  105. package/src/cog/readCogBody.js +30 -20
  106. package/src/cog/readCogDirectories.js +32 -20
  107. package/src/cog/readCogDirectory.js +34 -21
  108. package/src/cog/readCogLevel.js +36 -27
  109. package/src/cog/readCogTag.js +28 -15
  110. package/src/cog/validCogDimensions.js +15 -6
  111. package/src/cog/validCogEncoding.js +18 -5
  112. package/src/cog/validCogGeoArrays.js +17 -8
  113. package/src/cog/validCogGrid.js +22 -9
  114. package/src/cog/validCogTileCoordinates.js +13 -4
  115. package/src/cog/validateCogContainer.js +17 -9
  116. package/src/cog/validateCogContentRange.js +18 -8
  117. package/src/cog/validateCogOffsets.js +19 -10
  118. package/src/cog/validateCogRange.js +16 -7
  119. package/src/cog/validateCogResponse.js +26 -15
  120. package/src/collision/README.md +28 -0
  121. package/src/collision/advanceFeature.js +13 -0
  122. package/src/collision/boxNormal.js +29 -0
  123. package/src/collision/cachedCollider.js +18 -0
  124. package/src/collision/collectIntersections.js +41 -16
  125. package/src/collision/collectMeshes.js +6 -0
  126. package/src/collision/collideTrip.js +56 -0
  127. package/src/collision/collider.js +28 -18
  128. package/src/collision/countCrossings.js +35 -15
  129. package/src/collision/enclosesOrigin.js +13 -0
  130. package/src/collision/flipsNormal.js +15 -0
  131. package/src/collision/hiddenLightHit.js +19 -8
  132. package/src/collision/horizontalRay.js +13 -1
  133. package/src/collision/indexTriangle.js +18 -11
  134. package/src/collision/insideMesh.js +47 -33
  135. package/src/collision/insideWalker.js +52 -46
  136. package/src/collision/intersectMeshes.js +40 -32
  137. package/src/collision/localRay.js +31 -21
  138. package/src/collision/mergeHits.js +19 -11
  139. package/src/collision/missesBox.js +13 -0
  140. package/src/collision/rayBounds.js +28 -19
  141. package/src/collision/readTriangle.js +32 -23
  142. package/src/collision/slabDistance.js +14 -0
  143. package/src/collision/slabMiss.js +14 -0
  144. package/src/collision/sortCrossings.js +17 -0
  145. package/src/collision/sortHits.js +9 -1
  146. package/src/collision/trafficBounds.js +24 -0
  147. package/src/collision/trafficCollision.js +30 -55
  148. package/src/collision/trafficRay.js +21 -0
  149. package/src/collision/transformTriangle.js +18 -9
  150. package/src/collision/transformVertices.js +18 -0
  151. package/src/collision/triangleDistance.js +34 -21
  152. package/src/collision/vertexCount.js +11 -3
  153. package/src/collision/worldHit.js +30 -18
  154. package/src/colors/README.md +25 -0
  155. package/src/colors/formatRGB.js +7 -0
  156. package/src/colors/hslChannel.js +10 -0
  157. package/src/colors/mixColor.js +10 -0
  158. package/src/colors/parseColor.js +4 -1
  159. package/src/colors/toSRGB.js +7 -0
  160. package/src/controls/README.md +26 -0
  161. package/src/controls/acceptPitchDrag.js +10 -3
  162. package/src/controls/acceptRotateDrag.js +9 -2
  163. package/src/controls/addCameraHandler.js +18 -11
  164. package/src/controls/adjustCameraDrag.js +8 -10
  165. package/src/controls/cameraControls.js +5 -4
  166. package/src/controls/cameraDragClick.js +5 -1
  167. package/src/controls/cameraDragContextMenu.js +10 -6
  168. package/src/controls/cameraDragDown.js +5 -2
  169. package/src/controls/cameraDragEnd.js +7 -3
  170. package/src/controls/cameraDragMove.js +24 -20
  171. package/src/controls/changeCameraTouch.js +12 -14
  172. package/src/controls/cleanupCameraTouch.js +1 -4
  173. package/src/controls/compassAddHooks.js +1 -0
  174. package/src/controls/compassOrientation.js +11 -5
  175. package/src/controls/compassRemoveHooks.js +3 -2
  176. package/src/controls/containerResizeAddHooks.js +1 -0
  177. package/src/controls/containerResizeRemoveHooks.js +3 -2
  178. package/src/controls/dragCamera.js +11 -2
  179. package/src/controls/endAllCameraDrags.js +1 -2
  180. package/src/controls/endAllCameraTouches.js +1 -2
  181. package/src/controls/endCameraTouch.js +18 -12
  182. package/src/controls/endCameraTouchEvent.js +5 -2
  183. package/src/controls/failCompassPermission.js +10 -4
  184. package/src/controls/finishCameraDrag.js +14 -8
  185. package/src/controls/finishCompassPermission.js +24 -17
  186. package/src/controls/isEditableTarget.js +9 -2
  187. package/src/controls/loadCameraControls.js +18 -9
  188. package/src/controls/moveCameraTouch.js +30 -27
  189. package/src/controls/notifyCameraTouchChange.js +1 -0
  190. package/src/controls/pitchDragAddHooks.js +1 -1
  191. package/src/controls/pitchDragRemoveHooks.js +1 -0
  192. package/src/controls/refreshRotateControl.js +2 -0
  193. package/src/controls/refreshRotateFocus.js +3 -2
  194. package/src/controls/removeCameraDrag.js +18 -15
  195. package/src/controls/resizeMap.js +7 -2
  196. package/src/controls/rotateButtonClick.js +15 -10
  197. package/src/controls/rotateButtonKeydown.js +16 -10
  198. package/src/controls/rotateControl.js +11 -3
  199. package/src/controls/rotateOnAdd.js +7 -1
  200. package/src/controls/rotateOnRemove.js +5 -0
  201. package/src/controls/shiftRotateAddHooks.js +1 -1
  202. package/src/controls/shiftRotateRemoveHooks.js +3 -2
  203. package/src/controls/shiftRotateWheel.js +11 -6
  204. package/src/controls/startCameraTouch.js +5 -2
  205. package/src/core/README.md +28 -0
  206. package/src/core/adjustCameraMarkerPan.js +7 -2
  207. package/src/core/cameraCircleBounds.js +5 -1
  208. package/src/core/cameraMarkerDrag.js +1 -2
  209. package/src/core/cameraMarkerOnDrag.js +13 -10
  210. package/src/core/closestCameraLayerPoint.js +7 -1
  211. package/src/core/constructLayer.js +16 -9
  212. package/src/core/extendLeafletClass.js +12 -5
  213. package/src/core/extendTerrainPixelBounds.js +41 -31
  214. package/src/core/fireRasterLoad.js +1 -1
  215. package/src/core/gridlayerGetEvents.js +5 -2
  216. package/src/core/gridlayerGetTiledPixelBounds.js +7 -1
  217. package/src/core/initializeGridContainer.js +1 -1
  218. package/src/core/initializeNativeLayer.js +1 -4
  219. package/src/core/layerAddInitHook.js +12 -7
  220. package/src/core/layerCallInitHooks.js +1 -2
  221. package/src/core/layerMergeOptions.js +14 -7
  222. package/src/core/markerGetEvents.js +5 -2
  223. package/src/core/markerInitInteraction.js +7 -4
  224. package/src/core/markerSetIcon.js +10 -5
  225. package/src/core/markerSetPos.js +5 -2
  226. package/src/core/markerSetRotation.js +19 -9
  227. package/src/core/markerUpdateZIndex.js +6 -4
  228. package/src/core/popupAdjustPan.js +5 -2
  229. package/src/core/popupGetEvents.js +5 -1
  230. package/src/core/popupUpdatePosition.js +1 -2
  231. package/src/core/projectNativePath.js +30 -23
  232. package/src/core/redrawPath.js +11 -6
  233. package/src/core/removeLayer.js +23 -20
  234. package/src/core/setRotation.js +12 -5
  235. package/src/core/tooltipGetEvents.js +5 -1
  236. package/src/core/tooltipSetPosition.js +5 -2
  237. package/src/core/updateGridOpacity.js +2 -1
  238. package/src/core/whenReady.js +11 -8
  239. package/src/geometry/README.md +29 -0
  240. package/src/geometry/addBridges.js +30 -28
  241. package/src/geometry/addGeneratedTriangle.js +7 -3
  242. package/src/geometry/appendAreaTriangle.js +32 -17
  243. package/src/geometry/appendNativeTriangle.js +17 -3
  244. package/src/geometry/appendRouteDash.js +33 -15
  245. package/src/geometry/appendRouteSegment.js +28 -15
  246. package/src/geometry/assembleAreaGeometry.js +48 -41
  247. package/src/geometry/boundsQuad.js +8 -0
  248. package/src/geometry/box.js +10 -0
  249. package/src/geometry/bridgeEdge.js +18 -11
  250. package/src/geometry/bridgeElevation.js +8 -1
  251. package/src/geometry/bridgeFaces.js +22 -15
  252. package/src/geometry/bridgePaths.js +19 -11
  253. package/src/geometry/bridgePolygon.js +37 -31
  254. package/src/geometry/bridgeSides.js +18 -11
  255. package/src/geometry/buildGeometryParts.js +7 -0
  256. package/src/geometry/buildProjectedPoint.js +32 -21
  257. package/src/geometry/buildProjectedPolygon.js +34 -25
  258. package/src/geometry/circleAt.js +18 -5
  259. package/src/geometry/circleGeometry.js +41 -35
  260. package/src/geometry/clipLine.js +8 -1
  261. package/src/geometry/clipSegment.js +9 -0
  262. package/src/geometry/computeBounds.js +5 -2
  263. package/src/geometry/conformModelToTerrain.js +6 -3
  264. package/src/geometry/createLampRing.js +8 -0
  265. package/src/geometry/createModelGeometry.js +44 -34
  266. package/src/geometry/createRasterQuadGeometry.js +7 -1
  267. package/src/geometry/createTreeRing.js +8 -1
  268. package/src/geometry/crossVector.js +15 -7
  269. package/src/geometry/dashValues.js +23 -14
  270. package/src/geometry/dashedSegment.js +33 -21
  271. package/src/geometry/disk.js +9 -0
  272. package/src/geometry/diskAt.js +16 -4
  273. package/src/geometry/emitter.js +18 -8
  274. package/src/geometry/fillNativePolygon.js +28 -20
  275. package/src/geometry/generateTreeGeometry.js +15 -9
  276. package/src/geometry/indexBridge.js +34 -28
  277. package/src/geometry/instanceAreaGeometry.js +37 -31
  278. package/src/geometry/interpolateRoute.js +10 -2
  279. package/src/geometry/lampPostGeometry.js +9 -2
  280. package/src/geometry/lightGeometry.js +9 -2
  281. package/src/geometry/line.js +28 -21
  282. package/src/geometry/lineJoin.js +35 -26
  283. package/src/geometry/markerImageBounds.js +20 -11
  284. package/src/geometry/markerQuadCorners.js +9 -3
  285. package/src/geometry/meshShadowBounds.js +33 -24
  286. package/src/geometry/nativeGeometry.js +9 -1
  287. package/src/geometry/offsetBelowGround.js +10 -3
  288. package/src/geometry/polygon.js +7 -0
  289. package/src/geometry/quad.js +23 -9
  290. package/src/geometry/restoreGeometry.js +29 -23
  291. package/src/geometry/roofCoverage.js +29 -22
  292. package/src/geometry/roofFootprint.js +36 -28
  293. package/src/geometry/routeGeometry.js +7 -2
  294. package/src/geometry/samePoint.js +11 -3
  295. package/src/geometry/segment.js +32 -23
  296. package/src/geometry/setVertexColor.js +1 -1
  297. package/src/geometry/shadowBounds.js +8 -0
  298. package/src/geometry/subtractRoofTile.js +28 -19
  299. package/src/geometry/subtractVector.js +8 -0
  300. package/src/geometry/surface.js +11 -1
  301. package/src/geometry/terrainBuffers.js +33 -26
  302. package/src/geometry/terrainGrid.js +7 -2
  303. package/src/geometry/terrainTileGeometry.js +24 -15
  304. package/src/geometry/treeGeometry.js +7 -4
  305. package/src/geometry/triangle.js +11 -0
  306. package/src/geometry/validateTree.js +19 -7
  307. package/src/geometry/vertexNormals.js +8 -2
  308. package/src/geometry/visitNativeCoordinates.js +7 -0
  309. package/src/globals/CELL.js +6 -2
  310. package/src/globals/Compass.js +5 -0
  311. package/src/globals/ContainerResize.js +5 -0
  312. package/src/globals/HEIGHT.js +5 -0
  313. package/src/globals/L.js +6 -1
  314. package/src/globals/PitchDrag.js +5 -0
  315. package/src/globals/README.md +28 -0
  316. package/src/globals/ShiftRotate.js +5 -0
  317. package/src/globals/TILE_RADIUS.js +5 -0
  318. package/src/globals/TILE_SIZE.js +5 -0
  319. package/src/globals/TouchMode.js +5 -0
  320. package/src/globals/alphaBlend.js +5 -0
  321. package/src/globals/archiveDecoder.js +5 -0
  322. package/src/globals/archiveNorthWest.js +5 -0
  323. package/src/globals/archiveSouthEast.js +5 -0
  324. package/src/globals/atmosphereColor.js +5 -0
  325. package/src/globals/atmosphereStops.js +5 -0
  326. package/src/globals/blobParts.js +5 -0
  327. package/src/globals/cameraAngles.js +5 -0
  328. package/src/globals/cameraAnimatedOptions.js +5 -0
  329. package/src/globals/cameraAnimationFrame.js +5 -0
  330. package/src/globals/cameraAnimations.js +5 -0
  331. package/src/globals/cameraBearingSensitivity.js +5 -0
  332. package/src/globals/cameraDragSensitivity.js +5 -0
  333. package/src/globals/cameraDrags.js +5 -0
  334. package/src/globals/cameraEmptyOptions.js +5 -0
  335. package/src/globals/cameraFocusOptions.js +5 -0
  336. package/src/globals/cameraFov.js +8 -3
  337. package/src/globals/cameraListenerOptions.js +5 -0
  338. package/src/globals/cameraTouchStates.js +5 -0
  339. package/src/globals/cameraZeroPadding.js +5 -0
  340. package/src/globals/cogTags.js +6 -1
  341. package/src/globals/colorLayout.js +5 -0
  342. package/src/globals/colorTexture.js +11 -6
  343. package/src/globals/coreEventTypes.js +5 -0
  344. package/src/globals/coreMatrixKeys.js +5 -0
  345. package/src/globals/coreQuadIndices.js +5 -0
  346. package/src/globals/coreQuadUV.js +5 -0
  347. package/src/globals/coreSampler.js +5 -0
  348. package/src/globals/coreWhite.js +5 -0
  349. package/src/globals/cosObliquity.js +8 -3
  350. package/src/globals/coverageTiles.js +5 -0
  351. package/src/globals/dark.js +5 -0
  352. package/src/globals/defaultMaterial.js +5 -0
  353. package/src/globals/degrees.js +6 -1
  354. package/src/globals/demBuffer.js +5 -0
  355. package/src/globals/demLayout.js +5 -0
  356. package/src/globals/demSize.js +5 -0
  357. package/src/globals/demTarget.js +5 -0
  358. package/src/globals/demTexture.js +5 -0
  359. package/src/globals/depthBindGroup.js +5 -0
  360. package/src/globals/depthTexture.js +5 -0
  361. package/src/globals/directoryReader.js +5 -0
  362. package/src/globals/disabledShadow.js +5 -0
  363. package/src/globals/drawEntries.js +5 -0
  364. package/src/globals/drawFrameEntry.js +5 -0
  365. package/src/globals/drawMeshEntry.js +5 -0
  366. package/src/globals/drawSamplerEntries.js +5 -0
  367. package/src/globals/drawTerrainEntry.js +5 -0
  368. package/src/globals/drawTextureEntries.js +5 -0
  369. package/src/globals/earthCirc.js +6 -1
  370. package/src/globals/elevationWGSL.js +2 -0
  371. package/src/globals/fragmentShader.js +5 -0
  372. package/src/globals/frameBuffer.js +5 -0
  373. package/src/globals/frameCommands.js +5 -0
  374. package/src/globals/frameLayoutEntry.js +5 -0
  375. package/src/globals/geometryDecoder.js +5 -0
  376. package/src/globals/geometryEmpty.js +5 -0
  377. package/src/globals/geometryImageOptions.js +5 -0
  378. package/src/globals/geometryPixelStates.js +5 -0
  379. package/src/globals/geometryQuaternion.js +5 -0
  380. package/src/globals/geometryScale.js +5 -0
  381. package/src/globals/geometrySemantics.js +5 -0
  382. package/src/globals/geometryTranslation.js +5 -0
  383. package/src/globals/geometryWorkerUrl.js +8 -3
  384. package/src/globals/glass.js +5 -0
  385. package/src/globals/gridEvents.js +5 -0
  386. package/src/globals/gridFadeFrame.js +5 -0
  387. package/src/globals/halfRadians.js +6 -1
  388. package/src/globals/headerBounds.js +5 -0
  389. package/src/globals/headerFlags.js +5 -0
  390. package/src/globals/headerOffsets.js +5 -0
  391. package/src/globals/headlight.js +5 -0
  392. package/src/globals/hull.js +5 -0
  393. package/src/globals/instanceLayout.js +5 -0
  394. package/src/globals/lampDirections.js +13 -8
  395. package/src/globals/layerControlAddItem.js +8 -3
  396. package/src/globals/layerProto.js +5 -0
  397. package/src/globals/leafletLayer.js +8 -3
  398. package/src/globals/lightScale.js +6 -1
  399. package/src/globals/limbs.js +5 -1
  400. package/src/globals/loading.js +5 -0
  401. package/src/globals/mapMethods.js +5 -0
  402. package/src/globals/markerMethods.js +5 -0
  403. package/src/globals/markerPanFrame.js +5 -0
  404. package/src/globals/meshBindGroup.js +5 -0
  405. package/src/globals/meshBuffer.js +5 -0
  406. package/src/globals/meshCopySize.js +5 -0
  407. package/src/globals/meshImage.js +5 -0
  408. package/src/globals/meshLayoutEntry.js +5 -0
  409. package/src/globals/meshOffsets.js +5 -0
  410. package/src/globals/meshPipeline.js +5 -0
  411. package/src/globals/meshStack.js +5 -0
  412. package/src/globals/meshTarget.js +5 -0
  413. package/src/globals/moves.js +5 -1
  414. package/src/globals/mvtTextDecoder.js +6 -1
  415. package/src/globals/nativeMethodHandlers.js +5 -0
  416. package/src/globals/nativeScalableStyleKeys.js +6 -1
  417. package/src/globals/nextId.js +5 -0
  418. package/src/globals/normalLayout.js +5 -0
  419. package/src/globals/paints.js +5 -0
  420. package/src/globals/parts.js +5 -0
  421. package/src/globals/pendingGridFades.js +5 -0
  422. package/src/globals/pendingInitializations.js +5 -0
  423. package/src/globals/pendingMapChanges.js +5 -0
  424. package/src/globals/pendingMarkerPan.js +5 -0
  425. package/src/globals/pendingPlacements.js +5 -0
  426. package/src/globals/pendingRasterLoads.js +5 -0
  427. package/src/globals/pendingUpdates.js +5 -0
  428. package/src/globals/pendingZoomAnimations.js +5 -0
  429. package/src/globals/pipelineLayout.js +5 -0
  430. package/src/globals/popupEvents.js +5 -0
  431. package/src/globals/popupPan.js +5 -0
  432. package/src/globals/popupPosition.js +5 -0
  433. package/src/globals/positionLayout.js +5 -0
  434. package/src/globals/programEntries.js +5 -0
  435. package/src/globals/programLayout.js +5 -0
  436. package/src/globals/radians.js +5 -0
  437. package/src/globals/rasterBuffer.js +5 -0
  438. package/src/globals/rasterIndices.js +5 -0
  439. package/src/globals/rasterNormals.js +5 -0
  440. package/src/globals/rasterPoint.js +5 -0
  441. package/src/globals/rasterPositions.js +5 -0
  442. package/src/globals/rasterSampler.js +5 -0
  443. package/src/globals/rasterTexture.js +5 -0
  444. package/src/globals/rasterUVs.js +5 -0
  445. package/src/globals/removeLayer.js +5 -0
  446. package/src/globals/renderEmpty.js +5 -0
  447. package/src/globals/ringDirections.js +5 -0
  448. package/src/globals/roofBindGroup.js +5 -0
  449. package/src/globals/roofBlitSampler.js +5 -0
  450. package/src/globals/roofBuffer.js +5 -0
  451. package/src/globals/roofCommands.js +5 -0
  452. package/src/globals/roofCopySize.js +5 -0
  453. package/src/globals/roofImage.js +5 -0
  454. package/src/globals/roofMin.js +5 -0
  455. package/src/globals/roofOpacities.js +5 -0
  456. package/src/globals/roofPass.js +5 -0
  457. package/src/globals/roofPipeline.js +5 -0
  458. package/src/globals/roofSampler.js +5 -0
  459. package/src/globals/roofShader.js +5 -0
  460. package/src/globals/roofSignatures.js +5 -0
  461. package/src/globals/roofSize.js +5 -0
  462. package/src/globals/roofTarget.js +5 -0
  463. package/src/globals/roofTexture.js +5 -0
  464. package/src/globals/roofTiles.js +5 -0
  465. package/src/globals/roundProfile.js +5 -0
  466. package/src/globals/samplerLayoutEntries.js +5 -0
  467. package/src/globals/sceneCleanupFields.js +5 -0
  468. package/src/globals/sceneEmptyOptions.js +5 -0
  469. package/src/globals/scenePass.js +5 -0
  470. package/src/globals/sceneSunlightUniforms.js +5 -0
  471. package/src/globals/sceneTransferFields.js +5 -0
  472. package/src/globals/sceneWalkHandlers.js +5 -0
  473. package/src/globals/shadowBindGroup.js +5 -0
  474. package/src/globals/shadowBounds.js +5 -0
  475. package/src/globals/shadowCamera.js +5 -0
  476. package/src/globals/shadowDepthLayout.js +5 -0
  477. package/src/globals/shadowHigh.js +5 -0
  478. package/src/globals/shadowInstanceLayouts.js +5 -0
  479. package/src/globals/shadowLayouts.js +5 -0
  480. package/src/globals/shadowLow.js +5 -0
  481. package/src/globals/shadowMeshLayout.js +5 -0
  482. package/src/globals/shadowOffsets.js +5 -0
  483. package/src/globals/shadowPass.js +5 -0
  484. package/src/globals/shadowPipeline.js +5 -0
  485. package/src/globals/shadowPipelineLayout.js +5 -0
  486. package/src/globals/shadowShader.js +5 -0
  487. package/src/globals/shadowTexture.js +5 -0
  488. package/src/globals/shadowValues.js +5 -0
  489. package/src/globals/shirt.js +5 -0
  490. package/src/globals/sinObliquity.js +8 -3
  491. package/src/globals/sizes.js +5 -0
  492. package/src/globals/skin.js +5 -0
  493. package/src/globals/speed.js +5 -1
  494. package/src/globals/sunBindGroup.js +5 -0
  495. package/src/globals/taillight.js +5 -0
  496. package/src/globals/tau.js +6 -1
  497. package/src/globals/terrainLayoutEntry.js +5 -0
  498. package/src/globals/textureLayoutEntries.js +5 -0
  499. package/src/globals/tiledBounds.js +5 -0
  500. package/src/globals/tooltipEvents.js +5 -0
  501. package/src/globals/tooltipPosition.js +5 -0
  502. package/src/globals/trafficClocks.js +5 -0
  503. package/src/globals/trafficEmptyList.js +5 -0
  504. package/src/globals/trafficEmptyOptions.js +5 -0
  505. package/src/globals/trafficRouteMaterial.js +5 -0
  506. package/src/globals/trafficShader.js +5 -1
  507. package/src/globals/triangleContexts.js +5 -0
  508. package/src/globals/trousers.js +5 -0
  509. package/src/globals/types.js +5 -0
  510. package/src/globals/tyre.js +5 -0
  511. package/src/globals/uVLayout.js +5 -0
  512. package/src/globals/vectorStyleNamedColors.js +13 -8
  513. package/src/globals/vectorTileEvents.js +6 -1
  514. package/src/globals/vehicles.js +2 -0
  515. package/src/globals/vertexShader.js +5 -0
  516. package/src/globals/wantedTiles.js +5 -0
  517. package/src/globals/white.js +5 -0
  518. package/src/globals/workerCogSource.js +6 -1
  519. package/src/gpu/README.md +29 -0
  520. package/src/gpu/initializeRendererResources.js +39 -34
  521. package/src/gpu/initializeSharedRenderer.js +51 -44
  522. package/src/gpu/mountRenderer.js +25 -19
  523. package/src/gpu/releaseRenderer.js +8 -0
  524. package/src/gpu/rendererDeviceError.js +5 -3
  525. package/src/gpu/rendererDeviceLost.js +5 -3
  526. package/src/gpu/reportShaderCompilation.js +8 -0
  527. package/src/gpu/requestAdapter.js +8 -0
  528. package/src/gpu/requestDevice.js +9 -0
  529. package/src/gpu/showWebGPUWarning.js +5 -0
  530. package/src/index.js +0 -2
  531. package/src/layer-controls/README.md +25 -0
  532. package/src/layer-controls/layerControlInputId.js +18 -11
  533. package/src/layer-controls/layerCountTitle.js +16 -6
  534. package/src/layer-controls/placeEntry.js +9 -0
  535. package/src/layer-controls/placeEntryElement.js +29 -22
  536. package/src/layer-controls/placeUnderEntry.js +7 -0
  537. package/src/layer-controls/removeEntry.js +1 -0
  538. package/src/layer-controls/renderLayerCount.js +28 -20
  539. package/src/layer-controls/replaceEntry.js +1 -2
  540. package/src/layer-controls/runPlacements.js +1 -2
  541. package/src/layer-controls/underEntry.js +6 -2
  542. package/src/layer-controls/updateLayerCount.js +5 -1
  543. package/src/lighting/README.md +28 -0
  544. package/src/lighting/cacheLightGrid.js +9 -1
  545. package/src/lighting/collectLightMeshes.js +7 -1
  546. package/src/lighting/lightGrid.js +10 -1
  547. package/src/lighting/updatePointLights.js +7 -3
  548. package/src/lighting/visitLightCells.js +26 -13
  549. package/src/lighting/visitLightGridCells.js +11 -0
  550. package/src/lighting/worldLights.js +8 -1
  551. package/src/lighting/writeLightCell.js +14 -5
  552. package/src/materials/README.md +28 -0
  553. package/src/materials/createProgram.js +8 -4
  554. package/src/materials/createProgramLayout.js +44 -36
  555. package/src/materials/createProgramUniforms.js +25 -18
  556. package/src/materials/modelMaterialFor.js +29 -21
  557. package/src/materials/prepareMeshCutout.js +21 -12
  558. package/src/materials/terrainRasterProgram.js +57 -50
  559. package/src/materials/validateRoofMaterial.js +17 -10
  560. package/src/models/README.md +27 -0
  561. package/src/models/applyModelTransform.js +16 -12
  562. package/src/models/buildModelNodes.js +24 -14
  563. package/src/models/createModelContext.js +24 -15
  564. package/src/models/decodeModel.js +13 -2
  565. package/src/models/hasUnsupportedPrimitives.js +7 -0
  566. package/src/models/loadBuffer.js +16 -6
  567. package/src/models/loadModel.js +10 -7
  568. package/src/models/loadModelResources.js +22 -14
  569. package/src/models/modelNode.js +11 -1
  570. package/src/models/normalizeAccessor.js +21 -11
  571. package/src/models/prepareModel.js +29 -19
  572. package/src/models/prepareModelGeometry.js +35 -25
  573. package/src/models/prepareModelPrimitive.js +25 -17
  574. package/src/models/readAccessor.js +10 -4
  575. package/src/models/readAccessorValue.js +16 -7
  576. package/src/models/readAccessorValues.js +17 -0
  577. package/src/models/readModelAttributes.js +32 -20
  578. package/src/models/readModelIndices.js +28 -16
  579. package/src/models/readSparseAccessor.js +31 -19
  580. package/src/models/releaseModelResources.js +15 -10
  581. package/src/mvt/README.md +28 -0
  582. package/src/mvt/addMvtCrossings.js +23 -17
  583. package/src/mvt/appendMvtBandTriangles.js +42 -31
  584. package/src/mvt/appendMvtCoordinates.js +20 -11
  585. package/src/mvt/appendMvtPolygonTriangles.js +29 -19
  586. package/src/mvt/beginMvtPath.js +19 -9
  587. package/src/mvt/closeMvtPath.js +16 -7
  588. package/src/mvt/collectMvtEdges.js +29 -19
  589. package/src/mvt/createMvtReader.js +14 -7
  590. package/src/mvt/decodeVectorTile.js +39 -32
  591. package/src/mvt/expectMvtWire.js +11 -3
  592. package/src/mvt/finishMvtPath.js +14 -5
  593. package/src/mvt/finiteMvtCoordinate.js +14 -7
  594. package/src/mvt/groupMvtPolygons.js +35 -25
  595. package/src/mvt/isMvtFallbackError.js +13 -6
  596. package/src/mvt/mergeMvtActiveEdges.js +18 -9
  597. package/src/mvt/mvtEdgeX.js +12 -4
  598. package/src/mvt/mvtPathsVertices.js +15 -8
  599. package/src/mvt/mvtPolygonPaths.js +19 -12
  600. package/src/mvt/numericMvtValue.js +11 -4
  601. package/src/mvt/readMvtFeature.js +46 -34
  602. package/src/mvt/readMvtField.js +17 -8
  603. package/src/mvt/readMvtGeometry.js +42 -29
  604. package/src/mvt/readMvtInteger.js +22 -12
  605. package/src/mvt/readMvtKnownValue.js +30 -21
  606. package/src/mvt/readMvtLayer.js +40 -31
  607. package/src/mvt/readMvtMessage.js +18 -10
  608. package/src/mvt/readMvtNumber.js +18 -9
  609. package/src/mvt/readMvtNumbers.js +18 -11
  610. package/src/mvt/readMvtString.js +14 -6
  611. package/src/mvt/readMvtValue.js +29 -19
  612. package/src/mvt/skipMvtField.js +22 -14
  613. package/src/mvt/sortMvtActiveEdges.js +20 -15
  614. package/src/mvt/sortedMvtLevels.js +29 -22
  615. package/src/mvt/takeMvtBytes.js +18 -8
  616. package/src/mvt/tessellateVectorRings.js +26 -19
  617. package/src/mvt/triangulateVectorRings.js +23 -19
  618. package/src/native/README.md +27 -0
  619. package/src/native/beforeNativeRender.js +21 -16
  620. package/src/native/bypassNativeEvent.js +21 -11
  621. package/src/native/canScaleNativeStyle.js +26 -17
  622. package/src/native/compareNativeHits.js +10 -2
  623. package/src/native/createNativeMesh.js +46 -31
  624. package/src/native/disposeNativeLayer.js +3 -2
  625. package/src/native/forwardNativeError.js +8 -3
  626. package/src/native/getGridTerrainTile.js +47 -34
  627. package/src/native/gridTerrainElevation.js +34 -26
  628. package/src/native/handleNativeMapEvent.js +9 -4
  629. package/src/native/hideTargets.js +6 -0
  630. package/src/native/initNativeGPU.js +6 -3
  631. package/src/native/isCurrentNativeLayer.js +9 -4
  632. package/src/native/loadGridTerrain.js +36 -26
  633. package/src/native/nativeAddLatLng.js +7 -0
  634. package/src/native/nativeBringToBack.js +7 -0
  635. package/src/native/nativeBringToFront.js +7 -0
  636. package/src/native/nativeEventSource.js +27 -18
  637. package/src/native/nativeEvents.js +5 -4
  638. package/src/native/nativeLayer.js +10 -6
  639. package/src/native/nativeLayerMethod.js +9 -2
  640. package/src/native/nativeProgram.js +28 -20
  641. package/src/native/nativeRedraw.js +7 -0
  642. package/src/native/nativeSetBounds.js +7 -0
  643. package/src/native/nativeSetIcon.js +7 -0
  644. package/src/native/nativeSetLatLng.js +7 -0
  645. package/src/native/nativeSetLatLngs.js +7 -0
  646. package/src/native/nativeSetOpacity.js +7 -0
  647. package/src/native/nativeSetRadius.js +7 -0
  648. package/src/native/nativeSetStyle.js +7 -0
  649. package/src/native/nativeSetUrl.js +7 -0
  650. package/src/native/nativeSetZIndex.js +7 -0
  651. package/src/native/nativeSetZIndexOffset.js +7 -0
  652. package/src/native/nativeTerrainElevation.js +27 -16
  653. package/src/native/nativeVectorGeometry.js +30 -23
  654. package/src/native/orderNativeGridLayer.js +20 -14
  655. package/src/native/prepareGridTerrainRequests.js +23 -16
  656. package/src/native/pruneNativeResources.js +25 -20
  657. package/src/native/putNativeMesh.js +14 -0
  658. package/src/native/quadNativeMesh.js +11 -1
  659. package/src/native/readyNativeGPU.js +10 -6
  660. package/src/native/refreshNativeEvent.js +5 -0
  661. package/src/native/refreshNativeLayer.js +5 -3
  662. package/src/native/refreshNativeLayerContract.js +5 -2
  663. package/src/native/rejectNativeReady.js +7 -2
  664. package/src/native/removeNativeEvents.js +18 -14
  665. package/src/native/removeTargets.js +5 -2
  666. package/src/native/reorderNativeLayer.js +5 -3
  667. package/src/native/resolveNativeReady.js +5 -2
  668. package/src/native/restoreNativeEvents.js +8 -5
  669. package/src/native/retainGridTerrain.js +15 -10
  670. package/src/native/styleNativeMesh.js +17 -11
  671. package/src/native/syncGridLayer.js +5 -1
  672. package/src/native/syncGridTile.js +28 -18
  673. package/src/native/syncImageOverlay.js +10 -5
  674. package/src/native/syncMarker.js +5 -0
  675. package/src/native/syncNativeStrokeAnchors.js +18 -12
  676. package/src/native/syncNativeStrokeZoom.js +34 -29
  677. package/src/native/syncTerrainGridTile.js +38 -28
  678. package/src/native/syncVectorLayer.js +5 -0
  679. package/src/native/synchronizeNativeLayer.js +5 -3
  680. package/src/native/terrainGridMesh.js +47 -34
  681. package/src/native/updateNativeHover.js +15 -7
  682. package/src/native/updateNativeLayerView.js +3 -3
  683. package/src/native/updateNativeStrokeRadius.js +14 -9
  684. package/src/picking/README.md +29 -0
  685. package/src/picking/collectVisibleMesh.js +8 -0
  686. package/src/picking/findFeature.js +4 -4
  687. package/src/picking/hit.js +14 -7
  688. package/src/picking/hitColliderCell.js +29 -19
  689. package/src/picking/hitMesh.js +8 -2
  690. package/src/picking/onClick.js +6 -5
  691. package/src/picking/onPointerLeave.js +5 -5
  692. package/src/picking/onPointerMove.js +6 -5
  693. package/src/picking/pointerClick.js +5 -0
  694. package/src/picking/pointerLeave.js +1 -0
  695. package/src/picking/pointerMove.js +5 -0
  696. package/src/picking/raycast.js +2 -4
  697. package/src/picking/setHighlight.js +6 -5
  698. package/src/picking/shouldSkipOther.js +8 -2
  699. package/src/picking/showFeature.js +7 -4
  700. package/src/picking/validateCameraInverse.js +15 -8
  701. package/src/projections/README.md +28 -0
  702. package/src/projections/cameraAngles.js +8 -1
  703. package/src/projections/displayContainerPoint.js +32 -23
  704. package/src/projections/groundBounds.js +9 -1
  705. package/src/projections/localPixel.js +8 -0
  706. package/src/projections/localPixelForGeometry.js +8 -1
  707. package/src/projections/localPosition.js +8 -2
  708. package/src/projections/markerCameraIconPoint.js +9 -1
  709. package/src/projections/projectBridgePoint.js +16 -4
  710. package/src/projections/projectCameraPoint.js +11 -1
  711. package/src/projections/projectCelestialBody.js +11 -2
  712. package/src/projections/projectRing.js +11 -1
  713. package/src/projections/projectTreePoint.js +9 -1
  714. package/src/projections/toPoint.js +12 -4
  715. package/src/projections/transformZoomAnimationPoint.js +16 -9
  716. package/src/projections/verticalGroundY.js +14 -3
  717. package/src/projections/walkerLocalPosition.js +7 -0
  718. package/src/raster/README.md +28 -0
  719. package/src/raster/addRasterTile.js +10 -2
  720. package/src/raster/comparePendingTiles.js +8 -0
  721. package/src/raster/createRasterMesh.js +6 -5
  722. package/src/raster/finishRasterAttachment.js +9 -4
  723. package/src/raster/finishRasterTile.js +11 -2
  724. package/src/raster/getRasterEvents.js +7 -0
  725. package/src/raster/getRasterTileSize.js +5 -1
  726. package/src/raster/initRaster.js +6 -3
  727. package/src/raster/isRasterLoading.js +7 -3
  728. package/src/raster/loadRasterTile.js +8 -3
  729. package/src/raster/onPMTileAdd.js +6 -3
  730. package/src/raster/onPMTileRemove.js +6 -3
  731. package/src/raster/pruneRasterTiles.js +7 -3
  732. package/src/raster/pumpRasterTiles.js +5 -4
  733. package/src/raster/rasterTileRange.js +32 -23
  734. package/src/raster/readyRaster.js +8 -3
  735. package/src/raster/registerTerrainTile.js +9 -3
  736. package/src/raster/releaseRasterTile.js +6 -3
  737. package/src/raster/releaseRasterTiles.js +5 -3
  738. package/src/raster/removeRasterTile.js +6 -3
  739. package/src/raster/reportRasterError.js +8 -0
  740. package/src/raster/retainRasterTiles.js +19 -14
  741. package/src/raster/setPMTileOpacity.js +8 -0
  742. package/src/raster/setPMTileZIndex.js +8 -0
  743. package/src/raster/setRasterOpacity.js +6 -3
  744. package/src/raster/setRasterTerrain.js +6 -3
  745. package/src/raster/setRasterZIndex.js +6 -3
  746. package/src/raster/updateAttachedTiles.js +9 -3
  747. package/src/raster/updateRasterTiles.js +5 -5
  748. package/src/rendering/README.md +32 -0
  749. package/src/rendering/collectFrameMeshes.js +7 -3
  750. package/src/rendering/collectMeshes.js +11 -0
  751. package/src/rendering/collectVisibleMesh.js +48 -39
  752. package/src/rendering/compareMeshDepth.js +14 -6
  753. package/src/rendering/compareMeshes.js +10 -1
  754. package/src/rendering/createMesh.js +8 -5
  755. package/src/rendering/disposeMesh.js +6 -0
  756. package/src/rendering/drawGeometry.js +9 -2
  757. package/src/rendering/drawPipeline.js +44 -34
  758. package/src/rendering/drawSceneMeshes.js +9 -3
  759. package/src/rendering/nativeStrokeExpansion.js +11 -4
  760. package/src/rendering/prepareFrameBuffer.js +22 -16
  761. package/src/rendering/prepareFrameMeshes.js +10 -3
  762. package/src/rendering/prepareFrameUniforms.js +8 -3
  763. package/src/rendering/prepareMeshUniforms.js +36 -27
  764. package/src/rendering/render.js +2 -5
  765. package/src/rendering/resizeRenderer.js +6 -3
  766. package/src/rendering/revealRoofMesh.js +43 -34
  767. package/src/scene/README.md +36 -0
  768. package/src/scene/addRegisteredLayer.js +5 -4
  769. package/src/scene/addSceneLayer.js +22 -16
  770. package/src/scene/attachLayer.js +8 -3
  771. package/src/scene/attachSharedScene.js +6 -1
  772. package/src/scene/callLayer.js +31 -25
  773. package/src/scene/cancelUpdate.js +5 -3
  774. package/src/scene/createLayer.js +12 -6
  775. package/src/scene/createSceneNode.js +5 -1
  776. package/src/scene/emptyEvents.js +5 -0
  777. package/src/scene/failAttachment.js +9 -3
  778. package/src/scene/get3DEvents.js +7 -3
  779. package/src/scene/getLocation.js +10 -6
  780. package/src/scene/init3D.js +6 -3
  781. package/src/scene/initializeLayer.js +9 -2
  782. package/src/scene/initializerFor.js +8 -0
  783. package/src/scene/isNativeLayer.js +17 -11
  784. package/src/scene/layerInitialize.js +7 -4
  785. package/src/scene/onAdd3DLayer.js +6 -4
  786. package/src/scene/onMapChange.js +0 -5
  787. package/src/scene/onRemove3DLayer.js +6 -5
  788. package/src/scene/ready3D.js +9 -3
  789. package/src/scene/releaseSharedScene.js +6 -2
  790. package/src/scene/removeLayerEvents.js +1 -3
  791. package/src/scene/removeSceneLayer.js +20 -14
  792. package/src/scene/renderPendingMapChange.js +1 -4
  793. package/src/scene/renderPendingUpdates.js +5 -4
  794. package/src/scene/reportLayerError.js +9 -3
  795. package/src/scene/resolveNextInitialization.js +5 -2
  796. package/src/scene/restoreObject.js +6 -3
  797. package/src/scene/scheduleSceneUpdate.js +7 -6
  798. package/src/scene/setParent.js +6 -2
  799. package/src/scene/traverse.js +7 -2
  800. package/src/shaders/README.md +29 -0
  801. package/src/shaders/materialBaseShader.js +26 -17
  802. package/src/shaders/materialShaders.js +9 -1
  803. package/src/shaders/materialSurfaceShader.js +60 -47
  804. package/src/shaders/materialVertexShader.js +89 -77
  805. package/src/shaders/nativeStrokeShader.js +13 -6
  806. package/src/shaders/roofVertexShader.js +16 -9
  807. package/src/shadows/README.md +28 -0
  808. package/src/shadows/bindSunlight.js +5 -3
  809. package/src/shadows/drawShadowMeshes.js +7 -2
  810. package/src/shadows/ensureShadowPipeline.js +7 -0
  811. package/src/shadows/renderSunlight.js +8 -4
  812. package/src/shadows/resizeSunlight.js +6 -3
  813. package/src/shadows/shadowCacheMatches.js +11 -1
  814. package/src/shadows/shadowMatrix.js +8 -1
  815. package/src/shadows/shadowMeshMatches.js +19 -11
  816. package/src/sources/README.md +33 -0
  817. package/src/sources/attachAreaMesh.js +5 -4
  818. package/src/sources/buildArea.js +13 -2
  819. package/src/sources/buildAreaFeature.js +7 -1
  820. package/src/sources/buildAreaFeatures.js +23 -14
  821. package/src/sources/compareAreaDistance.js +8 -0
  822. package/src/sources/extrusionStyle.js +21 -10
  823. package/src/sources/featureAnchor.js +21 -9
  824. package/src/sources/groundOffset.js +9 -2
  825. package/src/sources/initVectorTiles.js +21 -15
  826. package/src/sources/initializeGeoJSON.js +6 -3
  827. package/src/sources/isVectorTileSource.js +11 -4
  828. package/src/sources/matchesAreaTile.js +17 -7
  829. package/src/sources/pendingSourceAreas.js +26 -19
  830. package/src/sources/prepareAreaGeometryJob.js +34 -24
  831. package/src/sources/projectAreaPolygons.js +25 -15
  832. package/src/sources/pumpSourceAreas.js +6 -6
  833. package/src/sources/readyVectorTiles.js +17 -10
  834. package/src/sources/releaseArea.js +6 -4
  835. package/src/sources/setGeoJSONData.js +8 -3
  836. package/src/sources/setGeoJSONLayerData.js +7 -0
  837. package/src/sources/sourceAreaContext.js +9 -2
  838. package/src/sources/updateArea.js +5 -5
  839. package/src/sources/updateSourceStatus.js +6 -3
  840. package/src/sunlight/README.md +28 -0
  841. package/src/sunlight/addTimeControlToMap.js +17 -10
  842. package/src/sunlight/addTimeLayer.js +10 -5
  843. package/src/sunlight/atmosphere.js +9 -2
  844. package/src/sunlight/createSun.js +7 -0
  845. package/src/sunlight/initSunlight.js +5 -0
  846. package/src/sunlight/initializeTimeControl.js +15 -13
  847. package/src/sunlight/onAddSun.js +35 -26
  848. package/src/sunlight/onAddTimeControl.js +12 -5
  849. package/src/sunlight/onRemoveSun.js +10 -10
  850. package/src/sunlight/removeSun.js +22 -20
  851. package/src/sunlight/removeTimeControl.js +13 -7
  852. package/src/sunlight/removeTimeLayer.js +8 -5
  853. package/src/sunlight/requestSunlightRender.js +10 -7
  854. package/src/sunlight/styleTimeControl.js +13 -7
  855. package/src/sunlight/tickSun.js +10 -5
  856. package/src/sunlight/updateCelestialDisc.js +23 -12
  857. package/src/sunlight/updateSky.js +5 -3
  858. package/src/sunlight/updateSun.js +42 -40
  859. package/src/sunlight/useLiveTime.js +11 -6
  860. package/src/sunlight/useSelectedTime.js +24 -22
  861. package/src/terrain/README.md +30 -0
  862. package/src/terrain/applyTerrain.js +26 -20
  863. package/src/terrain/clearLayerTerrain.js +5 -3
  864. package/src/terrain/copyTerrainTile.js +20 -12
  865. package/src/terrain/getElevation.js +8 -5
  866. package/src/terrain/initTerrain.js +5 -3
  867. package/src/terrain/loadReadyTerrain.js +6 -5
  868. package/src/terrain/loadTerrain.js +10 -2
  869. package/src/terrain/loadTerrainTiles.js +10 -3
  870. package/src/terrain/mapElevationOf.js +19 -11
  871. package/src/terrain/onTerrainAdd.js +8 -4
  872. package/src/terrain/onTerrainChange.js +5 -5
  873. package/src/terrain/onTerrainRemove.js +6 -3
  874. package/src/terrain/readBridges.js +13 -4
  875. package/src/terrain/readyTerrainOf.js +14 -7
  876. package/src/terrain/sampleTerrainTile.js +16 -7
  877. package/src/terrain/setLayerTerrain.js +5 -3
  878. package/src/terrain/setTerrainHeight.js +5 -4
  879. package/src/terrain/terrainAtlas.js +8 -2
  880. package/src/terrain/terrainElevation.js +8 -2
  881. package/src/terrain/terrainTileQueue.js +31 -24
  882. package/src/textures/README.md +29 -0
  883. package/src/textures/addImageState.js +12 -7
  884. package/src/textures/attachRasterImage.js +1 -2
  885. package/src/textures/bindMeshTextures.js +57 -50
  886. package/src/textures/collectRoofTiles.js +21 -14
  887. package/src/textures/compareRoofTiles.js +8 -0
  888. package/src/textures/composeRoofAtlas.js +11 -3
  889. package/src/textures/destroyTexture.js +6 -4
  890. package/src/textures/destroyTextureAfterSubmission.js +9 -0
  891. package/src/textures/ensureRoofBlit.js +5 -0
  892. package/src/textures/loadModelImage.js +28 -18
  893. package/src/textures/modelTextureFor.js +45 -37
  894. package/src/textures/modelTextureSampler.js +7 -2
  895. package/src/textures/nativeImageError.js +5 -1
  896. package/src/textures/nativeImageRefresh.js +5 -2
  897. package/src/textures/nativeTextureFor.js +11 -3
  898. package/src/textures/prepareMeshTextures.js +31 -23
  899. package/src/textures/rebuildRoofAtlas.js +8 -3
  900. package/src/textures/removeImageState.js +11 -6
  901. package/src/textures/resizeRoofTexture.js +30 -23
  902. package/src/textures/restoreMaterialTextures.js +22 -16
  903. package/src/textures/textureBinding.js +9 -0
  904. package/src/textures/updateRoofAtlas.js +25 -19
  905. package/src/textures/updateRoofRaster.js +8 -0
  906. package/src/textures/uploadCanvasTexture.js +15 -0
  907. package/src/textures/uploadMeshTexture.js +32 -26
  908. package/src/textures/uploadNativeImage.js +26 -13
  909. package/src/textures/uploadRoofTile.js +29 -23
  910. package/src/traffic/README.md +30 -0
  911. package/src/traffic/addTraffic.js +5 -2
  912. package/src/traffic/clockMinutes.js +7 -0
  913. package/src/traffic/compareDepartures.js +8 -0
  914. package/src/traffic/createTrafficMesh.js +15 -4
  915. package/src/traffic/destroyTrafficGpu.js +5 -0
  916. package/src/traffic/disposeTrafficObject.js +14 -11
  917. package/src/traffic/drawTrafficRoute.js +5 -1
  918. package/src/traffic/failTraffic.js +12 -6
  919. package/src/traffic/failedTrafficLoad.js +9 -2
  920. package/src/traffic/featuresToTrafficLanes.js +8 -0
  921. package/src/traffic/fetchTrafficLanes.js +21 -10
  922. package/src/traffic/groundTraffic.js +5 -1
  923. package/src/traffic/initTraffic.js +17 -15
  924. package/src/traffic/loadTraffic.js +5 -0
  925. package/src/traffic/loadedTrafficLanes.js +19 -12
  926. package/src/traffic/locateTraffic.js +20 -11
  927. package/src/traffic/moveTraffic.js +21 -15
  928. package/src/traffic/placeTraffic.js +5 -0
  929. package/src/traffic/prepareTraffic.js +5 -3
  930. package/src/traffic/readyTraffic.js +8 -3
  931. package/src/traffic/rebaseTraffic.js +5 -3
  932. package/src/traffic/rebuildTrafficMesh.js +5 -1
  933. package/src/traffic/refreshTrafficTrips.js +42 -32
  934. package/src/traffic/removeTraffic.js +5 -2
  935. package/src/traffic/routeColor.js +13 -6
  936. package/src/traffic/scheduledTrips.js +5 -2
  937. package/src/traffic/startTraffic.js +10 -5
  938. package/src/traffic/tickTraffic.js +5 -3
  939. package/src/traffic/trafficBounds.js +5 -0
  940. package/src/traffic/trafficNow.js +14 -9
  941. package/src/traffic/trafficStatusText.js +13 -5
  942. package/src/traffic/trafficStorage.js +13 -5
  943. package/src/traffic/trafficTooltip.js +7 -0
  944. package/src/traffic/tripsAt.js +9 -2
  945. package/src/traffic/updateTraffic.js +11 -8
  946. package/src/traffic/updateTrafficLights.js +23 -18
  947. package/src/traffic/updateTrafficPose.js +15 -8
  948. package/src/traffic/updateTrafficTerrain.js +12 -7
  949. package/src/traffic/uploadTrafficLanes.js +27 -21
  950. package/src/traffic/vehicleOffsets.js +9 -3
  951. package/src/transforms/README.md +27 -0
  952. package/src/transforms/composeLocalTransform.js +23 -16
  953. package/src/transforms/modelNodeMatrix.js +7 -2
  954. package/src/transforms/transformNativePoint.js +19 -7
  955. package/src/transforms/updateWorldMatrix.js +5 -2
  956. package/src/transforms/worldMatrixChanged.js +26 -18
  957. package/src/triangulation/README.md +26 -0
  958. package/src/triangulation/area.js +7 -0
  959. package/src/triangulation/clean.js +9 -0
  960. package/src/triangulation/clipEars.js +32 -23
  961. package/src/triangulation/connectHole.js +30 -18
  962. package/src/triangulation/containsVertex.js +10 -0
  963. package/src/triangulation/cross.js +12 -3
  964. package/src/triangulation/crossesBoundary.js +10 -0
  965. package/src/triangulation/crossesRing.js +9 -0
  966. package/src/triangulation/equal.js +11 -3
  967. package/src/triangulation/inside.js +8 -0
  968. package/src/triangulation/insideHole.js +8 -0
  969. package/src/triangulation/intersects.js +21 -11
  970. package/src/triangulation/isClockWise.js +4 -1
  971. package/src/triangulation/mergeHoles.js +19 -11
  972. package/src/triangulation/minimumX.js +7 -0
  973. package/src/triangulation/on.js +13 -4
  974. package/src/triangulation/polygonRings.js +22 -14
  975. package/src/triangulation/sortHoles.js +7 -0
  976. package/src/triangulation/triangulate.js +3 -2
  977. package/src/triangulation/validateArea.js +19 -10
  978. package/src/utils/README.md +16 -0
  979. package/src/utils/compareDistance.js +11 -3
  980. package/src/utils/noOperation.js +1 -0
  981. package/src/utils/wrap.js +7 -0
  982. package/src/utils/yieldTask.js +12 -5
  983. package/src/vector-style/README.md +27 -0
  984. package/src/vector-style/appendQuotedStyleCharacter.js +30 -22
  985. package/src/vector-style/arrayContainsRange.js +18 -8
  986. package/src/vector-style/evaluateBoolean.js +31 -18
  987. package/src/vector-style/evaluateCoalesceOrCase.js +34 -21
  988. package/src/vector-style/evaluateComparison.js +29 -16
  989. package/src/vector-style/evaluateIExpression.js +21 -8
  990. package/src/vector-style/evaluateInput.js +16 -6
  991. package/src/vector-style/evaluateInterpolate.js +36 -27
  992. package/src/vector-style/evaluateMatch.js +21 -12
  993. package/src/vector-style/evaluateMath.js +26 -14
  994. package/src/vector-style/evaluateMembership.js +29 -18
  995. package/src/vector-style/evaluateNegation.js +26 -13
  996. package/src/vector-style/evaluatePrimitive.js +21 -9
  997. package/src/vector-style/evaluateStep.js +20 -11
  998. package/src/vector-style/evaluateStyle.js +43 -33
  999. package/src/vector-style/evaluateToExpression.js +27 -14
  1000. package/src/vector-style/fillVectorPaint.js +26 -17
  1001. package/src/vector-style/lineVectorPaint.js +31 -21
  1002. package/src/vector-style/parseFunctionalColor.js +23 -14
  1003. package/src/vector-style/parseHexColor.js +20 -13
  1004. package/src/vector-style/parseVectorStyle.js +20 -13
  1005. package/src/vector-style/readPaintValue.js +17 -6
  1006. package/src/vector-style/removeTrailingCommas.js +19 -12
  1007. package/src/vector-style/scaleDashArray.js +25 -13
  1008. package/src/vector-style/skipStyleComment.js +20 -9
  1009. package/src/vector-style/stripStyleComments.js +28 -21
  1010. package/src/vector-style/styleColor.js +18 -11
  1011. package/src/vector-style/validateVectorLayers.js +18 -10
  1012. package/src/vector-style/vectorPaint.js +17 -8
  1013. package/src/vector-style/visibleStyle.js +16 -7
  1014. package/src/vector-tiles/README.md +30 -0
  1015. package/src/vector-tiles/appendVectorBatch.js +34 -22
  1016. package/src/vector-tiles/attachVectorTileBatch.js +25 -17
  1017. package/src/vector-tiles/attachVectorTileBatches.js +26 -15
  1018. package/src/vector-tiles/compareVectorLabelPriority.js +11 -3
  1019. package/src/vector-tiles/compareVectorTileDistance.js +11 -3
  1020. package/src/vector-tiles/configureVectorTileLayer.js +8 -0
  1021. package/src/vector-tiles/createVectorLabel.js +37 -22
  1022. package/src/vector-tiles/forwardVectorTileError.js +10 -5
  1023. package/src/vector-tiles/loadVectorSprite.js +14 -5
  1024. package/src/vector-tiles/loadVectorTile.js +45 -36
  1025. package/src/vector-tiles/onVectorTileAdd.js +44 -39
  1026. package/src/vector-tiles/onVectorTileMessage.js +15 -10
  1027. package/src/vector-tiles/onVectorTileRemove.js +25 -20
  1028. package/src/vector-tiles/onVectorTileWorkerError.js +16 -11
  1029. package/src/vector-tiles/paintVectorTileBatch.js +18 -12
  1030. package/src/vector-tiles/prepareVectorLabel.js +34 -25
  1031. package/src/vector-tiles/prepareVectorStyleLayer.js +38 -30
  1032. package/src/vector-tiles/prepareVectorTile.js +29 -16
  1033. package/src/vector-tiles/projectVectorPaths.js +25 -15
  1034. package/src/vector-tiles/projectVectorPoint.js +15 -6
  1035. package/src/vector-tiles/projectVectorTriangles.js +28 -18
  1036. package/src/vector-tiles/pruneVectorTiles.js +14 -11
  1037. package/src/vector-tiles/pumpVectorTiles.js +21 -18
  1038. package/src/vector-tiles/readTileJSON.js +27 -17
  1039. package/src/vector-tiles/readVectorStyle.js +28 -17
  1040. package/src/vector-tiles/refreshVectorTiles.js +8 -5
  1041. package/src/vector-tiles/reserveVectorLabelCells.js +14 -6
  1042. package/src/vector-tiles/retireVectorTileGroup.js +20 -13
  1043. package/src/vector-tiles/revokeVectorWorkerUrl.js +14 -9
  1044. package/src/vector-tiles/rotateVectorLabel.js +19 -12
  1045. package/src/vector-tiles/rotateVectorLabels.js +9 -6
  1046. package/src/vector-tiles/simplifyVectorPath.js +29 -21
  1047. package/src/vector-tiles/updateVectorLabelMarker.js +36 -27
  1048. package/src/vector-tiles/updateVectorLabelStyle.js +14 -8
  1049. package/src/vector-tiles/updateVectorTileLabels.js +33 -28
  1050. package/src/vector-tiles/updateVectorTilePaint.js +25 -20
  1051. package/src/vector-tiles/updateVectorTiles.js +32 -29
  1052. package/src/vector-tiles/validateVectorTileZooms.js +15 -6
  1053. package/src/vector-tiles/vectorFeaturePaint.js +25 -15
  1054. package/src/vector-tiles/vectorFeaturePaths.js +26 -16
  1055. package/src/vector-tiles/vectorFeatureZoom.js +18 -8
  1056. package/src/vector-tiles/vectorLabelAnchors.js +31 -24
  1057. package/src/vector-tiles/vectorLabelCandidates.js +18 -11
  1058. package/src/vector-tiles/vectorLabelCells.js +32 -23
  1059. package/src/vector-tiles/vectorLabelIcon.js +38 -30
  1060. package/src/vector-tiles/vectorLabelProperty.js +12 -3
  1061. package/src/vector-tiles/vectorLabelText.js +19 -10
  1062. package/src/vector-tiles/vectorSpriteIcon.js +19 -11
  1063. package/src/vector-tiles/vectorStraightRun.js +23 -14
  1064. package/src/vector-tiles/vectorStyleDependencies.js +22 -15
  1065. package/src/vector-tiles/vectorStyleValue.js +16 -5
  1066. package/src/vector-tiles/vectorStyleZoom.js +12 -6
  1067. package/src/vector-tiles/vectorTileAwaited.js +17 -9
  1068. package/src/vector-tiles/vectorTileOverlaps.js +12 -4
  1069. package/src/vector-tiles/vectorTilePaint.js +18 -10
  1070. package/src/vector-tiles/vectorTileSettings.js +27 -17
  1071. package/src/vector-tiles/vectorTilesIdle.js +11 -3
  1072. package/src/vector-tiles/vectorTolerance.js +11 -4
  1073. package/src/vector-tiles/wrapVectorLabel.js +17 -11
  1074. package/src/vehicles/README.md +27 -0
  1075. package/src/vehicles/bicycleModel.js +7 -1
  1076. package/src/vehicles/boatBenches.js +5 -0
  1077. package/src/vehicles/boatModel.js +32 -32
  1078. package/src/vehicles/buildCarriage.js +9 -1
  1079. package/src/vehicles/busModel.js +10 -2
  1080. package/src/vehicles/carModel.js +34 -33
  1081. package/src/vehicles/metroModel.js +8 -0
  1082. package/src/vehicles/mirrorVehiclePart.js +11 -0
  1083. package/src/vehicles/pedestrianModel.js +7 -1
  1084. package/src/vehicles/tramModel.js +8 -0
  1085. package/src/walk/README.md +30 -0
  1086. package/src/walk/animateWalker.js +5 -4
  1087. package/src/walk/createWalk.js +6 -3
  1088. package/src/walk/initWalk.js +5 -0
  1089. package/src/walk/initializeWalkControl.js +11 -6
  1090. package/src/walk/isWalkBlocked.js +15 -6
  1091. package/src/walk/landWalker.js +35 -31
  1092. package/src/walk/moveWalker.js +35 -22
  1093. package/src/walk/onAddWalkControl.js +40 -31
  1094. package/src/walk/onRemoveWalkControl.js +17 -12
  1095. package/src/walk/onWalkBlur.js +3 -2
  1096. package/src/walk/onWalkKey.js +5 -2
  1097. package/src/walk/onWalkPointer.js +6 -0
  1098. package/src/walk/onWalkTerrain.js +3 -2
  1099. package/src/walk/placeWalker.js +1 -2
  1100. package/src/walk/resolveWalkerPosition.js +33 -28
  1101. package/src/walk/startWalking.js +1 -1
  1102. package/src/walk/stepWalkerHeight.js +18 -11
  1103. package/src/walk/stopWalking.js +1 -0
  1104. package/src/walk/toggleWalking.js +3 -2
  1105. package/src/walk/updateWalkerFrame.js +29 -19
  1106. package/src/walk/updateWalkerView.js +31 -22
  1107. package/src/weakmaps/README.md +33 -0
  1108. package/src/weakmaps/addedByLayer.js +5 -0
  1109. package/src/weakmaps/archiveHeaderByLayer.js +5 -0
  1110. package/src/weakmaps/areasByLayer.js +5 -0
  1111. package/src/weakmaps/boundsMethods.js +5 -0
  1112. package/src/weakmaps/bridgeMeshByLayer.js +5 -0
  1113. package/src/weakmaps/bridgesByLayer.js +5 -0
  1114. package/src/weakmaps/cameraAnimationByMap.js +5 -0
  1115. package/src/weakmaps/cameraBearingByMap.js +5 -0
  1116. package/src/weakmaps/cameraByLayer.js +5 -0
  1117. package/src/weakmaps/cameraDraggableByMap.js +5 -0
  1118. package/src/weakmaps/cameraFields.js +5 -0
  1119. package/src/weakmaps/cameraFrameByMap.js +5 -0
  1120. package/src/weakmaps/cameraHandlersByMap.js +6 -1
  1121. package/src/weakmaps/cameraMaps.js +5 -0
  1122. package/src/weakmaps/cameraPitchByMap.js +5 -0
  1123. package/src/weakmaps/cameraReadyByMap.js +5 -0
  1124. package/src/weakmaps/cameraTouchStateByMap.js +5 -0
  1125. package/src/weakmaps/cameraViewByMap.js +5 -0
  1126. package/src/weakmaps/cameraZIndexOffsetByLayer.js +5 -0
  1127. package/src/weakmaps/closestMethods.js +5 -0
  1128. package/src/weakmaps/colliders.js +5 -0
  1129. package/src/weakmaps/containerByLayer.js +5 -0
  1130. package/src/weakmaps/controlByLayer.js +5 -0
  1131. package/src/weakmaps/countStatusByLayer.js +5 -0
  1132. package/src/weakmaps/cursorByLayer.js +5 -0
  1133. package/src/weakmaps/demByLayer.js +5 -0
  1134. package/src/weakmaps/directoriesByLayer.js +5 -0
  1135. package/src/weakmaps/dragByHandler.js +5 -0
  1136. package/src/weakmaps/dragStates.js +5 -0
  1137. package/src/weakmaps/etagByLayer.js +5 -0
  1138. package/src/weakmaps/eventMapByLayer.js +5 -0
  1139. package/src/weakmaps/eventsByLayer.js +5 -0
  1140. package/src/weakmaps/fadeFrameByLayer.js +5 -0
  1141. package/src/weakmaps/fadeVersionByLayer.js +5 -0
  1142. package/src/weakmaps/frameByLayer.js +5 -0
  1143. package/src/weakmaps/geojsonByLayer.js +5 -0
  1144. package/src/weakmaps/geometryWorkersByMap.js +6 -1
  1145. package/src/weakmaps/gridInitializers.js +5 -0
  1146. package/src/weakmaps/groupByLayer.js +5 -0
  1147. package/src/weakmaps/headerByLayer.js +5 -0
  1148. package/src/weakmaps/highlightedFeatureByLayer.js +5 -0
  1149. package/src/weakmaps/hoveredFeatureByLayer.js +5 -0
  1150. package/src/weakmaps/imageStates.js +5 -0
  1151. package/src/weakmaps/inflightByLayer.js +5 -0
  1152. package/src/weakmaps/kindByLayer.js +5 -0
  1153. package/src/weakmaps/layersByLayer.js +5 -0
  1154. package/src/weakmaps/loadingTilesByLayer.js +5 -0
  1155. package/src/weakmaps/locationByLayer.js +5 -0
  1156. package/src/weakmaps/modelByLayer.js +5 -0
  1157. package/src/weakmaps/modelUrlByLayer.js +5 -0
  1158. package/src/weakmaps/nativeEventMaps.js +5 -0
  1159. package/src/weakmaps/nativeGPUBackByMap.js +5 -0
  1160. package/src/weakmaps/nativeGPUByLayer.js +5 -0
  1161. package/src/weakmaps/nativeGPUOrderByMap.js +5 -0
  1162. package/src/weakmaps/nativeProgramsByRenderer.js +6 -1
  1163. package/src/weakmaps/nativeRenderByLayer.js +5 -0
  1164. package/src/weakmaps/pathProjectionByMap.js +6 -1
  1165. package/src/weakmaps/pitchSkyByMap.js +5 -0
  1166. package/src/weakmaps/pointerEventsByLayer.js +5 -0
  1167. package/src/weakmaps/pruneAfterByLayer.js +5 -0
  1168. package/src/weakmaps/pruneVersionByLayer.js +5 -0
  1169. package/src/weakmaps/pruneWantedByLayer.js +5 -0
  1170. package/src/weakmaps/queuedByLayer.js +5 -0
  1171. package/src/weakmaps/rasterGeometryByLayer.js +5 -0
  1172. package/src/weakmaps/rasterProgramByLayer.js +5 -0
  1173. package/src/weakmaps/rasterTilesByLayer.js +5 -0
  1174. package/src/weakmaps/rasterVersionByLayer.js +5 -0
  1175. package/src/weakmaps/raycasterByLayer.js +5 -0
  1176. package/src/weakmaps/readyByLayer.js +5 -0
  1177. package/src/weakmaps/rendererByLayer.js +5 -0
  1178. package/src/weakmaps/rendererDevices.js +5 -0
  1179. package/src/weakmaps/rendererReadyByLayer.js +5 -0
  1180. package/src/weakmaps/renderers.js +5 -0
  1181. package/src/weakmaps/roofRasterByLayer.js +5 -0
  1182. package/src/weakmaps/roofRastersByLayer.js +5 -0
  1183. package/src/weakmaps/rootByLayer.js +5 -0
  1184. package/src/weakmaps/rotateControlByMap.js +5 -0
  1185. package/src/weakmaps/sceneByLayer.js +5 -0
  1186. package/src/weakmaps/sceneFields.js +5 -0
  1187. package/src/weakmaps/sceneLayers.js +5 -0
  1188. package/src/weakmaps/sceneOriginByLayer.js +5 -0
  1189. package/src/weakmaps/shadowMeshesByLayer.js +5 -0
  1190. package/src/weakmaps/sharedByLayer.js +5 -0
  1191. package/src/weakmaps/sizeByLayer.js +5 -0
  1192. package/src/weakmaps/state3dByLayer.js +5 -0
  1193. package/src/weakmaps/streamTerrainByLayer.js +6 -1
  1194. package/src/weakmaps/streamTerrainByMap.js +6 -1
  1195. package/src/weakmaps/sunByMap.js +6 -1
  1196. package/src/weakmaps/sunlightByControl.js +5 -0
  1197. package/src/weakmaps/sunlightByMap.js +5 -0
  1198. package/src/weakmaps/terrain3DByLayer.js +5 -0
  1199. package/src/weakmaps/terrain3DByMap.js +5 -0
  1200. package/src/weakmaps/terrainArchiveByLayer.js +5 -0
  1201. package/src/weakmaps/terrainBaseYByLayer.js +5 -0
  1202. package/src/weakmaps/terrainBoundsByLayer.js +5 -0
  1203. package/src/weakmaps/terrainControllerByLayer.js +5 -0
  1204. package/src/weakmaps/terrainGridsByLayer.js +5 -0
  1205. package/src/weakmaps/terrainLoadingByLayer.js +5 -0
  1206. package/src/weakmaps/terrainOriginElevationByLayer.js +5 -0
  1207. package/src/weakmaps/terrainPromiseByLayer.js +5 -0
  1208. package/src/weakmaps/terrainReadyByLayer.js +5 -0
  1209. package/src/weakmaps/terrainRequestByLayer.js +5 -0
  1210. package/src/weakmaps/terrainSourceByLayer.js +5 -0
  1211. package/src/weakmaps/terrainTilesByLayer.js +5 -0
  1212. package/src/weakmaps/terrainZoomByLayer.js +5 -0
  1213. package/src/weakmaps/tileZoomByLayer.js +5 -0
  1214. package/src/weakmaps/timeControlByMap.js +5 -0
  1215. package/src/weakmaps/tooltipByLayer.js +5 -0
  1216. package/src/weakmaps/touchByContainer.js +5 -0
  1217. package/src/weakmaps/touchPitchByMap.js +5 -0
  1218. package/src/weakmaps/touchRotateByMap.js +5 -0
  1219. package/src/weakmaps/trafficByLayer.js +5 -0
  1220. package/src/weakmaps/typeByLayer.js +5 -0
  1221. package/src/weakmaps/urlByLayer.js +5 -0
  1222. package/src/weakmaps/vectorTileOptionsByLayer.js +6 -1
  1223. package/src/weakmaps/vectorWorkerByLayer.js +6 -1
  1224. package/src/weakmaps/visibleMeshesByLayer.js +5 -0
  1225. package/src/weakmaps/walkByMap.js +6 -1
  1226. package/src/weakmaps/walkerByLayer.js +5 -0
  1227. package/src/weakmaps/wantedRasterTilesByLayer.js +5 -0
  1228. package/src/weakmaps/workerMapByLayer.js +6 -1
  1229. package/src/weakmaps/zoomLevelByLayer.js +5 -0
  1230. package/src/weakmaps/zoomTransitionsByLayer.js +5 -0
  1231. package/src/weakmaps/zoomViewByLayer.js +5 -0
  1232. package/src/workers/README.md +33 -0
  1233. package/src/workers/acquireGeometryWorker.js +39 -29
  1234. package/src/workers/buildAreaInWorker.js +24 -16
  1235. package/src/workers/closeGeometryWorkers.js +16 -11
  1236. package/src/workers/cogWorker.js +27 -20
  1237. package/src/workers/createGeometryWorker.js +30 -20
  1238. package/src/workers/geometryWorker.js +34 -29
  1239. package/src/workers/getCogInWorker.js +18 -7
  1240. package/src/workers/modelWorker.js +17 -10
  1241. package/src/workers/openCogInWorker.js +22 -14
  1242. package/src/workers/runSourceWorker.js +44 -32
  1243. package/src/workers/settleGeometryWorker.js +16 -10
  1244. package/src/workers/startGeometryWorker.js +23 -16
  1245. package/src/workers/vectorTileWorker.js +15 -10
  1246. package/src/collision/setTrafficNormal.js +0 -9
@@ -1,7 +1,7 @@
1
- (()=>{var Pv=Object.defineProperty;var b=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var Sv=(e,t)=>{for(var r in t)Pv(e,r,{get:t[r],enumerable:!0})};var d,L=b(()=>{d=globalThis.L});var B,$=b(()=>{B=Math.PI/180});var tt,yo=b(()=>{tt=180/Math.PI});var Tn,gm=b(()=>{Tn=new WeakMap});function _(e){return Tn.get(e)??0}var J=b(()=>{gm()});var Pn,ym=b(()=>{Pn=new WeakMap});function k(e){return Pn.get(e)??0}var Z=b(()=>{ym()});var No,va=b(()=>{No=Object.freeze({})});var Ye,La=b(()=>{Ye=new WeakMap});function ba(){let e=this.getSize().y,t=_(this)*B,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!Ye.get(this)&&(Ye.set(this,d.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),Ye.get(this).setAttribute("aria-hidden","true"),Ye.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),Ye.get(this)&&(Ye.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",Ye.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,Ye.get(this).style.display=i>0?"":"none")}var $m=b(()=>{La();L();$();J()});function Fe(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=_(e),i=k(e);return Tn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),Pn.set(e,(r%360+360)%360),e._loaded&&(ba.call(e),i!==k(e)&&e.fire("rotate",{bearing:k(e)}),o!==_(e)&&e.fire("pitch",{pitch:_(e)})),e}var vr=b(()=>{ym();gm();J();Z();$m()});var qt,Ma=b(()=>{qt=new WeakMap});var Fo,Ba=b(()=>{Fo=new WeakMap});var Lr,Ta=b(()=>{Lr=new Map});var St,Pa=b(()=>{St={value:null}});function jo(e){Lr.delete(e),qt.set(e,null),Fo.set(e,null),!Lr.size&&St.value!==null&&(cancelAnimationFrame(St.value),St.value=null)}var Sa=b(()=>{Ma();Ba();Ta();Pa()});var qr,Ca=b(()=>{qr=new WeakMap});var Wo,Vm=b(()=>{Wo=new WeakMap});var Gi,Zm=b(()=>{Gi=new WeakMap});var br,Ui=b(()=>{br=new WeakMap});var Mr,Ni=b(()=>{Mr=new WeakMap});var qm,Pu=b(()=>{qm={value:void 0}});var Hm,Su=b(()=>{Hm={value:void 0}});var Ym,ku=b(()=>{Ym={value:void 0}});var Xm,Cu=b(()=>{Xm={value:void 0}});var _a,_u=b(()=>{_a={value:void 0}});var kt,$o=b(()=>{kt=new WeakMap});var Hr,Ea=b(()=>{Hr=new Set});var Fi,Jm=b(()=>{Fi=Object.freeze({capture:!0,passive:!1})});function Km(){this._map.fire("cameratouchchange")}var Eu=b(()=>{});var Vo,Oa=b(()=>{Vo=Object.freeze([.8,.5])});var Ou,zu=b(()=>{Ou=Object.freeze([.8,0])});var za,Qm=b(()=>{za=Object.freeze({preventScroll:!0})});var Aa,ef=b(()=>{Aa=Object.freeze({animate:!0})});function Au(e){St.value=null;let t=[...Lr];Lr.clear();let r,o,i,n,a;for([o,i]of t)if(Fo.set(o,null),qt.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{Fe(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&qt.get(o)===i?Ra(o,i):qt.get(o)===i&&qt.set(o,null)}catch(s){r||=s}}if(r)throw r}var Ru=b(()=>{Ma();Ba();Pa();Ta();vr();tf()});function Ra(e,t){Lr.set(e,t),St.value===null&&(St.value=requestAnimationFrame(Au)),Fo.set(e,St.value)}var tf=b(()=>{Ba();Ta();Pa();Ru()});function Zo(e,t,r,o=No){if(jo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return Fe(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=_(e),s=k(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return qt.set(e,f),Ra(e,f),e}var Ia=b(()=>{Ma();va();vr();J();Z();Sa();tf()});function Iu(e,t=Aa){return Zo(e,0,0,t)}var Du=b(()=>{ef();Ia()});function dt(e,t,r){return Zo(e,_(e),t,r)}var qo=b(()=>{Ia();J()});function Gu(e,t=Aa){return dt(e,0,t)}var Uu=b(()=>{ef();qo()});function Nu(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Iu(r):Gu(r),e.detail&&r.getContainer().focus(za)}var Fu=b(()=>{Qm();Du();Uu()});function Ht(e,t,r){return Zo(e,t,k(e),r)}var ji=b(()=>{Ia();Z()});function ju(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")dt(r,k(r)-o);else if(e.key==="ArrowRight")dt(r,k(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)Ht(r,_(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Ht(r,_(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Wu=b(()=>{qo();Z();ji();J()});function Da(){let e=this._map,t=this.options.visualizePitch?_(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*B))))}) rotateX(${t}deg) rotate(${k(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(k(e))} degrees, pitch ${Math.round(_(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!k(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var rf=b(()=>{$();J();Z()});var je,Br=b(()=>{je={value:new WeakMap}});var Yr,Ga=b(()=>{Yr={value:new Set}});function Ua(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var of=b(()=>{});function Na(e){let t=je.value.get(this);if(t.drag||!t.accept(e)||Ua(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(za),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var nf=b(()=>{Br();Qm();of()});function Fa(e){return jo(e),e}var af=b(()=>{Sa()});function ja(e){let t=je.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;Fa(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*tt}else i*=e.clientY<t.drag.cy?1:-1;Fe(t.map,_(t.map)-o*t.sensitivity[1],k(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var sf=b(()=>{yo();Br();af();vr();J();Z()});function Ho(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Wa=b(()=>{});function Tr(e){Ho(je.value.get(this),e)}var mf=b(()=>{Br();Wa()});function $a(e){let t=je.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var ff=b(()=>{Br()});function Va(e){let t=je.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var pf=b(()=>{Br()});function Za(){let e;for(e of Yr.value)Ho(e)}var cf=b(()=>{Ga();Wa()});function qa(e,t,r,o=Vo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return je.value.set(t,n),Yr.value.add(n),t.addEventListener("pointerdown",Na,!0),t.addEventListener("pointermove",ja),t.addEventListener("pointerup",Tr),t.addEventListener("pointercancel",Tr),t.addEventListener("lostpointercapture",Tr),t.addEventListener("click",$a,!0),t.addEventListener("contextmenu",Va),window.addEventListener("blur",Za),n}var lf=b(()=>{Oa();Br();Ga();nf();sf();mf();ff();pf();cf()});function $u(e){return e.button===0}var Vu=b(()=>{});function Zu(){Da.call(this._rotateControl)}var qu=b(()=>{rf()});function Hu(e){let t=d.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=d.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=d.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=Nu,r.onkeydown=ju,this._refresh=Da,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=qa(e,r,$u,this.options.visualizePitch?Vo:Ou),r.addEventListener("focusout",Zu),d.DomEvent.on(r,"dblclick contextmenu",d.DomEvent.stop),d.DomEvent.disableClickPropagation(t),d.DomEvent.disableScrollPropagation(t),t}var Yu=b(()=>{L();Oa();zu();Fu();Wu();rf();lf();Vu();qu()});function Xu(e){Ho(e);let{element:t}=e;t.removeEventListener("pointerdown",Na,!0),t.removeEventListener("pointermove",ja),t.removeEventListener("pointerup",Tr),t.removeEventListener("pointercancel",Tr),t.removeEventListener("lostpointercapture",Tr),t.removeEventListener("click",$a,!0),t.removeEventListener("contextmenu",Va),je.value.delete(t),Yr.value.delete(e),Yr.value.size||window.removeEventListener("blur",Za)}var Ju=b(()=>{Br();Ga();Wa();nf();sf();mf();ff();pf();cf()});function Ha(){Xu(this._dragState)}var uf=b(()=>{Ju()});function Ku(e){e.off("rotate pitch",this._refresh,this),Ha.call(this)}var Qu=b(()=>{uf()});function ed(e){return new d.Control.Rotate(e)}var td=b(()=>{L()});function rd(e){let t=this._cameraShiftRotate;!e.shiftKey||Ua(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),dt(t._map,k(t._map)+Math.sign(e.deltaY)*5))}var od=b(()=>{qo();Z();of()});function id(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=rd,e.addEventListener("wheel",this._wheel,Fi)}var nd=b(()=>{Jm();od()});function ad(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var sd=b(()=>{});function md(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var fd=b(()=>{});function pd(){this._dragState=qa(this._map,this._map.getContainer(),md,Vo,!0)}var cd=b(()=>{Oa();lf();fd()});function ld(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&dt(t._map,r-o)}var ud=b(()=>{qo()});function df(e,t){e.disable(),e._map.fire("error",{error:t})}var dd=b(()=>{});function hd([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return df(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){df(r,i)}}}var gd=b(()=>{dd()});function yd(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:ld};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(hd)}var xd=b(()=>{ud();gd()});function vd(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var wd=b(()=>{});function Ld(e){e[0]?.target._containerResizeMap.invalidateSize()}var bd=b(()=>{});function Md(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Ld),this._observer.observe(e)}var Bd=b(()=>{bd()});function Td(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Pd=b(()=>{});function Ya(e){let t=kt.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!Mr.get(r).enabled()&&!br.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Fa(r);let a=o.getBoundingClientRect(),s=new d.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:k(r),pitch:_(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new d.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var hf=b(()=>{Ui();Ni();L();$o();af();Z();J()});function Xa(e){let t=kt.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*tt;Fe(r,br.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,Mr.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var gf=b(()=>{Ui();Ni();yo();$o();vr()});function Pr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Wi=b(()=>{});function Yo(e){Pr(kt.get(this),e)}var yf=b(()=>{$o();Wi()});function $i(){let e=qr.get(this),{map:t,container:r}=e,o=Mr.get(t).enabled()||br.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(Pr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var xf=b(()=>{Ca();Ui();Ni();Wi()});function Ja(){let e;for(e of Hr)Pr(e)}var vf=b(()=>{Ea();Wi()});function Sd(){let e=qr.get(this);if(!e)return;let{container:t,map:r}=e;Pr(e),t.removeEventListener("touchstart",Ya,!0),t.removeEventListener("touchmove",Xa,!0),t.removeEventListener("touchend",Yo,!0),t.removeEventListener("touchcancel",Yo,!0),Hr.delete(e),Hr.size||window.removeEventListener("blur",Ja),r.off("cameratouchchange",$i,r),Gi.get(r)?.remove(),kt.delete(t),qr.delete(r)}var kd=b(()=>{Ca();Zm();Ea();$o();Wi();hf();gf();yf();vf();xf()});function Xr(e,t,r){let o=Wo.get(e);o||Wo.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var Cd=b(()=>{Vm()});function ht(e){return d.version.startsWith("2.")?e:e.extend({})}var Ka=b(()=>{L()});var _d={};Sv(_d,{cameraControls:()=>kv});function kv(e){if(Xr(e,"trackContainerMutation",Hm.value),!e.options.rotate)return;Xr(e,"shiftKeyRotate",Xm.value),Xr(e,"pitchDrag",Ym.value),Xr(e,"compassBearing",qm.value),Xr(e,"touchRotate",_a.value),Xr(e,"touchPitch",_a.value),Mr.set(e,Wo.get(e).get("touchRotate")),br.set(e,Wo.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};qr.set(e,r),kt.set(t,r),Hr.add(r),t.addEventListener("touchstart",Ya,Fi),t.addEventListener("touchmove",Xa,Fi),t.addEventListener("touchend",Yo,!0),t.addEventListener("touchcancel",Yo,!0),window.addEventListener("blur",Ja),e.on("cameratouchchange",$i,e),$i.call(e),e.options.rotateControl&&(Gi.set(e,new d.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:No)),Gi.get(e).addTo(e)),e.once("unload",Sd,e)}var Qa,es,ts,rs,os,Xo,Ed=b(()=>{Ca();Vm();Zm();Ui();Ni();L();Pu();Su();ku();Cu();_u();$o();Ea();Jm();va();Eu();Yu();Qu();td();nd();sd();cd();uf();xd();wd();Bd();Pd();hf();gf();yf();xf();kd();vf();Cd();Ka();Qa=class extends ht(d.Handler){};Object.assign(Qa.prototype,{addHooks:yd,removeHooks:vd});qm.value=Qa;es=class extends ht(d.Handler){};Object.assign(es.prototype,{addHooks:Md,removeHooks:Td});Hm.value=es;ts=class extends ht(d.Handler){};Object.assign(ts.prototype,{addHooks:pd,removeHooks:Ha});Ym.value=ts;rs=class extends ht(d.Handler){};Object.assign(rs.prototype,{addHooks:id,removeHooks:ad});Xm.value=rs;os=class extends ht(d.Handler){};Object.assign(os.prototype,{addHooks:Km,removeHooks:Km});_a.value=os;Xo=class extends ht(d.Control){static defaultOptions={position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0}};Object.assign(Xo.prototype,{onAdd:Hu,onRemove:Ku});d.version.startsWith("1.")&&(Xo.prototype.options=Object.assign(Object.create(d.Control.prototype.options),Xo.defaultOptions));d.Control.Rotate=Xo;d.control&&(d.control.rotate=ed)});L();var mt={value:void 0};var dn={value:void 0};L();var j={value:void 0};var et={value:void 0};var hn={value:void 0};var gn={value:void 0};var yn={value:void 0};var xn={value:void 0};var vn={value:void 0};var wn={value:void 0};var Ln={value:void 0};var de=new WeakMap;var re=new WeakMap;var uo=new WeakMap;var ar=new WeakMap;L();var R=new WeakMap;var wt=new WeakMap;function Bi(e){let t=wt.get(e.currentTarget);if(!t)return;let r;for(r of t)De(r)}function Ti(e){let t=wt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function bn(e,t){let r=wt.get(e);r&&(r.delete(t),r.size||wt.delete(e))}function Yf(e,t){let r=wt.get(e);r||wt.set(e,r=new Set),r.add(t)}var ft=new WeakMap;var Nt=new Set;var F=new WeakMap;var w=new WeakMap;var oe=new WeakMap;var Ft=new WeakMap;var sr=new WeakMap;var pt=new WeakMap;var Mn=[null];var ho=new WeakMap;var he=new WeakMap;var qe=new WeakMap;var Xf={subtree:!0};var se=new WeakMap;L();function Bn(e){let t;for(t of Object.values(e._layers))t instanceof d.Marker?t.update():(t instanceof d.Popup||t instanceof d.Tooltip)&&t._updatePosition()}function Jf(e,t){let r=e._map,o=qe.get(e),i,n;for(n of he.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);se.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),Bn(r)}function Kf(e,t){let r=e._map,o,i,n;if(r._animatingZoom){he.get(e)||he.set(e,new Map);for(o of r.getContainer().getAnimations(Xf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||he.get(e).has(o)||(i=o.currentTime||0,o.pause(),he.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of he.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);qe.get(e)&&Jf(e,t)}}var mr=new WeakMap;var Pi={size:[null,null],format:"depth24plus",sampleCount:4,usage:null};var go={size:[null,null],format:null,sampleCount:4,usage:null};async function Qf(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function W(e,t){Qf(e,t,w.get(e).device.queue.onSubmittedWorkDone())}function ep(e,t){let r=w.get(e);(!mr.get(e)||!mr.get(e).equals(t))&&(r.width=t.x,r.height=t.y,r.canvas.width=Math.round(t.x*r.dpr),r.canvas.height=Math.round(t.y*r.dpr),r.canvas.style.width=`${t.x}px`,r.canvas.style.height=`${t.y}px`,r.depthTexture&&W(e,r.depthTexture),r.colorTexture?.destroy(),r.colorTexture=r.device.createTexture((go.size[0]=r.canvas.width,go.size[1]=r.canvas.height,go.format=r.format,go.usage=GPUTextureUsage.RENDER_ATTACHMENT,go)),r.depthTexture=r.device.createTexture((Pi.size[0]=r.canvas.width,Pi.size[1]=r.canvas.height,Pi.usage=GPUTextureUsage.RENDER_ATTACHMENT,Pi)),mr.set(e,t))}var ee=new WeakMap;var ie=new WeakMap;$();yo();var tp=2*Math.atan(1/3)*tt;var rt=2*Math.PI*6378137;var me=new WeakMap;var Be=new WeakMap;var ct=new WeakMap;var Te=new WeakMap;var ot=new WeakMap;var ye=new WeakMap;L();function rp(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function Si(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function fr(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=Si(t,i,n),f=Si(t,i+1,n),p=Si(t,i,n+1),c=Si(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function pr(e,t){if(!e._map||!Te.get(e))return null;let r=t instanceof d.Point?t:e._map.project(t,ye.get(e));return rp(r,ct.get(e))??fr(r,ot.get(e))}function op(e,t,r,o,i){let n,a,s,m,f=`${r}:${o}:${i}`;for(n of Object.values(e.map._layers))if(a=de.get(n),!(a?.disposed||a?.terrainStream!==e)&&(s=a.terrainRequests?.get(f),!(!s?.tiles||n._tiles[f]!==s.tile)&&(m=fr(t,s.tiles),Number.isFinite(m))))return m;return null}function ip(e,t){let r=Math.max(0,Math.min(24,Math.round(e.map.getZoom()))),o=new Map,i,n,a,s,m,f,p,c,l,u,h;for(;r>=0;r--){if(i=e.map.project(t,r),n=2**r,a=Math.floor(i.x/256),s=Math.floor(i.y/256),h=op(e,i,a,s,r),Number.isFinite(h))return h;for(o.clear(),m=0;m<9;m++)f=m%3-1,p=Math.floor(m/3)-1,c=((a+f)%n+n)%n,l=Math.max(0,Math.min(n-1,s+p)),u=e.terrainCache.get(`${r}/${c}/${l}`),u?.data&&o.set(`${a+f}/${s+p}`,u.data);if(h=fr(i,o),Number.isFinite(h))return h}return null}function xe(e,t){let r=me.get(e);if(r)return pr(r,t);let o=Be.get(e);return o&&ip(o,t)}var jt=new WeakMap;J();Z();var np=Math.PI/360;function xo(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let h=1/Math.tan(e.fov*np),x=e.near,g=e.far;m[0]=h/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=h,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=g/(x-g),m[11]=-1,m[12]=0,m[13]=0,m[14]=g*x/(x-g),m[15]=0;let y=e.projectionTransform;y.m11=m[0],y.m12=m[1],y.m13=m[2],y.m14=m[3],y.m21=m[4],y.m22=m[5],y.m23=m[6],y.m24=m[7],y.m31=m[8],y.m32=m[9],y.m33=m[10],y.m34=m[11],y.m41=m[12],y.m42=m[13],y.m43=m[14],y.m44=m[15];let v=e.projectionViewTransform;v.m11=y.m11,v.m12=y.m12,v.m13=y.m13,v.m14=y.m14,v.m21=y.m21,v.m22=y.m22,v.m23=y.m23,v.m24=y.m24,v.m31=y.m31,v.m32=y.m32,v.m33=y.m33,v.m34=y.m34,v.m41=y.m41,v.m42=y.m42,v.m43=y.m43,v.m44=y.m44,v.multiplySelf(u),f[0]=v.m11,f[1]=v.m12,f[2]=v.m13,f[3]=v.m14,f[4]=v.m21,f[5]=v.m22,f[6]=v.m23,f[7]=v.m24,f[8]=v.m31,f[9]=v.m32,f[10]=v.m33,f[11]=v.m34,f[12]=v.m41,f[13]=v.m42,f[14]=v.m43,f[15]=v.m44}function it(e,t,r=!1){let o=se.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function ap(e,t){let r=e._map,o=se.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(rt*Math.cos(ie.get(e).lat*B)),n=it(r,j.value.layerPointToContainerPoint.call(r,r.project(ie.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=jt.get(r)?.control?._walk,f=(xe(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=_(r)*B,l=k(r)*B,u=Math.sin(c),h=Math.cos(c),x=Math.sin(l),g=Math.cos(l),y=ee.get(e);y.fov=tp,y.aspect=t.x/t.y,y.near=Math.max(.1,a/1e4),y.far=Math.max(1e4,a*10),y.position[0]=s+x*u*a,y.position[1]=f+h*a,y.position[2]=p+g*u*a,y.up[0]=-x*h,y.up[1]=u,y.up[2]=-g*h,y.target[0]=s,y.target[1]=f,y.target[2]=p,xo(y)}var jr=new WeakMap;function sp(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}yo();function mp(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*tt),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*tt),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*tt),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function Pe(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=sp(e,i),!i){for(n of e.children)Pe(n);return}let a,s;e.matrix?a=e.matrix:a=mp(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)Pe(n)}function _e(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,h,x;for(l=0;l<3;l++){for(h=1/0,x=-1/0,u=l;u<m.data.length;u+=m.size)h=Math.min(h,m.data[u]),x=Math.max(x,m.data[u]);t[l]=Math.fround(t[l]+h),r[l]=Math.fround(r[l]+x)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function fp(e){let t=e.program?.uniforms?.strokeScale?.value??1;return Math.max(0,t-1)*(e.geometry.nativeStrokeRadius||0)}function pp(e,t,r,o,i){e.geometry.bounds||_e(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let h=n.center;s.x=a[0]*h[0]+a[4]*h[1]+a[8]*h[2]+a[12],s.y=a[1]*h[0]+a[5]*h[1]+a[9]*h[2]+a[13],s.z=a[2]*h[0]+a[6]*h[1]+a[10]*h[2]+a[14],s.scale=Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.radius=n.radius*s.scale,s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p}=s,c=s.radius+fp(e)*s.scale,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function xm(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),pp(e,r,o,i,n));let s;for(s of e.children)xm(s,t,r,o,i,n,a)}function cp(e,t,r){let i=ee.get(e).projectionViewMatrix,n=w.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=jr.get(e);u||jr.set(e,u=[]),u.length=0;let h=Ft.get(e);h||Ft.set(e,h=[]),h.length=0,r&&Pe(oe.get(e)),xm(oe.get(e),t,i,a,s,u,h)}var z=new WeakMap;var I=new WeakMap;var K=new WeakMap;var ki=new WeakMap;var fe=new WeakMap;var Ee=new WeakMap;L();var lp=[];$();var up=[];var dp={x:0,y:0};var hp={x:1,y:1};var gp={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var vo={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var yp={magFilter:"linear",minFilter:"linear"};function xp(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(gp);e.roofBlit={pipeline:t.createRenderPipeline((vo.vertex.module=r,vo.fragment.module=r,vo)),sampler:t.createSampler(yp)},vo.vertex.module=null,vo.fragment.module=null}}var Sn={size:null,usage:null};var kn={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var Cn={source:null};var _n={texture:null};var En=[null,null];function vp(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((Cn.source=t.image,Cn),(_n.texture=r.texture,_n),(En[0]=r.texture.width,En[1]=r.texture.height,En)),Cn.source=null,_n.texture=null,r.uploaded=r.image)}var lt={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var On=[null];var zn={value:new Float32Array(64)};function wp(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Lp(e,t,r,o,i,n,a){let s=w.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;zn.value.length<p&&(zn.value=new Float32Array(p));let c=zn.value,l=m.createBuffer((Sn.size=c.byteLength,Sn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,Sn)),u=m.createCommandEncoder(),h=u.beginRenderPass((kn.colorAttachments[0].view=K.get(e).texture.texture.createView(),kn));kn.colorAttachments[0].view=null,h.setPipeline(s.roofBlit.pipeline),t.sort(wp);let x,g,y,v,S,T,P,A;for([x,{tile:g,layer:y}]of t.entries())({coords:v}=g),S=g.texture,vp(m,g),c[x*64]=y.options.opacity,T=256*f.getZoomScale(r,v.z),P=(v.x*T-o.x)*n/i.x,A=(v.y*T-o.y)*a/i.y,h.setViewport(P,A,Math.min(T*n/i.x,n-P),Math.min(T*a/i.y,a-A),0,1),h.setBindGroup(0,m.createBindGroup((lt.layout=s.roofBlit.pipeline.getBindGroupLayout(0),lt.entries[0].resource=S.texture.createView(),lt.entries[1].resource=s.roofBlit.sampler,lt.entries[2].resource.buffer=l,lt.entries[2].resource.offset=x*256,lt))),lt.layout=null,lt.entries[0].resource=null,lt.entries[1].resource=null,lt.entries[2].resource.buffer=null,h.draw(4);h.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((On[0]=u.finish(),On)),On[0]=null,l.destroy()}function bp(e,t){let r=-1/0,o,i;for(o of e)for(i of I.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Mp={size:[null,null],format:"rgba8unorm",usage:null};var Bp={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function Tp(e,t,r,o){let i=w.get(e),n=Mp;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(W(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(Bp),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Pp(e,t,r,o){let i=e._map,n=w.get(e),a=up;a.length=0;let s=bp(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let h=i.project(ie.get(e),s),x=dp,g=hp;x.x=a.length?m:h.x,x.y=a.length?f:h.y,g.x=a.length?p-m:1,g.y=a.length?c-f:1;let y=Math.min(1,4096/Math.max(g.x,g.y)),v=Math.max(1,Math.ceil(g.x*y)),S=Math.max(1,Math.ceil(g.y*y)),T=i.options.crs.scale(s)/(rt*Math.cos(ie.get(e).lat*B)),P={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:K.get(e)?.texture};K.set(e,P),P.signature=r,P.updatedAt=o,P.matrix[0]=T/g.x,P.matrix[10]=T/g.y,P.matrix[12]=(h.x-x.x)/g.x,P.matrix[14]=(h.y-x.y)/g.y,Tp(e,P,v,S),xp(n);try{Lp(e,a,s,x,g,v,S)}finally{a.length=0}}function Sp(e,t,r){let o=lp;o.length=0;let i=!1,n;for(n of t)o.push(`${d.Util.stamp(n)}:${Ee.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!fe.get(n);let a=o.join("|");o.length=0,(!K.get(e)||K.get(e).signature!==a&&(!i||r-K.get(e).updatedAt>=50))&&Pp(e,t,a,r)}function kp(e,t){let r=e._map,o=ki.get(e);o||ki.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of F.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))z.get(a)==="raster"&&I.get(a)&&a.options.opacity>0&&o.push(a);Sp(e,o,t)}else K.get(e)&&(W(e,K.get(e).texture.texture),K.set(e,null));return o}function Cp(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function _p(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||Cp(e,t)}var U=new WeakMap;var cr=new WeakMap;$();function Ep(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=cr.get(r),s=o.project(ie.get(t),a),m=o.options.crs.scale(a)/(rt*Math.cos(ie.get(t).lat*B)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,h,x,g,y,v,S,T;for(u=0;u<8;u++)h=u&1?i.max[0]:i.min[0],x=u&2?i.max[1]:i.min[1],g=u&4?i.max[2]:i.min[2],y=s.x+(n[0]*h+n[4]*x+n[8]*g+n[12])*m,v=s.y+(n[2]*h+n[6]*x+n[10]*g+n[14])*m,f=Math.min(f,y),p=Math.min(p,v),c=Math.max(c,y),l=Math.max(l,v);return U.get(r).maxLat!==void 0&&U.get(r).minLon!==void 0&&U.get(r).minLat!==void 0&&U.get(r).maxLon!==void 0&&(S=o.project([U.get(r).maxLat,U.get(r).minLon],a),T=o.project([U.get(r).minLat,U.get(r).maxLon],a),f=Math.max(f,S.x),p=Math.max(p,S.y),c=Math.min(c,T.x),l=Math.min(l,T.y),f>=c||p>=l)?null:[f,p,c,l]}function Op(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,h;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),h=Math.min(p,n+o),c>=u||l>=h){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),h<p&&a.push([s,h,f,p]),s<c&&a.push([s,l,c,h]),u<f&&a.push([u,l,f,h])}return a}function zp(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!U.get(n)){i=!0;continue}if(a=Ep(e,t,n),!!a){o=!0,s=[a];for(m of I.get(n).values())if(!(!m.done&&!m.error)&&(s=Op(s,m,cr.get(n)),!s.length))return!0}}return!o&&!i}function Ap(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){jt.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==K.get(e)?.signature&&(t._roofCoverageSignature=K.get(e)?.signature,t._roofCovered=zp(t,e,r)),n=!1;for(i of r)if(!U.get(i)||fe.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Rp(e,t,r,o){let i=jr.get(e),n=Ft.get(e),a=w.get(e),s=!1,m,f;for(m of i)Ap(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(_p);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var An={size:null,usage:null};function Ip(e,t,r){let o=w.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&W(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((An.size=Math.max(64,t.length*4+r.length*2)*256,An.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,An)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var M=new WeakMap;var nt={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function Rn(e){let t=w.get(e).sunlight;t.bindGroup=w.get(e).device.createBindGroup((nt.layout=t.layout,nt.entries[0].resource.buffer=t.buffer,nt.entries[1].resource=t.texture.createView(),nt.entries[2].resource=t.sampler,nt.entries[3].resource.buffer=t.lights,nt)),nt.layout=null,nt.entries[0].resource.buffer=null,nt.entries[1].resource=null,nt.entries[2].resource=null,nt.entries[3].resource.buffer=null}function Dp(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function Gp(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?Dp(e,t,u,a,s):a[u]++}function vm(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)Gp(s,m,t,r,o,i,n,a)}function Up(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,h=Math.ceil((l-p)/s)+1,x=new Uint32Array(u*h),g=new Uint32Array(u*h);vm(e,f,p,s,u,x);let y=0;for(n of x)y+=n;let v=(2+u*h+y*2)*4;if(v*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(v),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=h,m[5]=r;let S=2+u*h;for(a=0;a<x.length;a++)x[a]&&(m[(2+a)*4]=g[a]=S,m[(2+a)*4+1]=x[a],S+=x[a]*2);vm(e,f,p,s,u,g,m)}else m=new Float32Array(8);return{data:m,count:r}}var Np=.03/(4*Math.PI);function Fp(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*Np;return r}function wm(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:Fp(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...Up(c,r),meshes:l}}var lr=[];function Lm(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||lr)Lm(o,t,r)}function jp(e){let{device:t,sunlight:r}=w.get(e),o=[],i=[],n;for(n of F.get(e))!n.options.nightLight||!M.get(n).visible||Lm(M.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=wm(o,r.staticLightGrid,a),m=wm(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(W(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Rn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function Wp(e,t,r,o){let i=w.get(e),n=ee.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,h=Math.hypot(c,l,u)||1,x=Math.hypot(a[4],a[5],a[6])||1;Ip(e,t,r);let g=i.uniformData;g.set(n.viewMatrix,0),g.set(n.projectionMatrix,16),K.get(e)?.matrix?g.set(K.get(e).matrix,32):(g.fill(0,32,48),g[32]=g[37]=g[42]=g[47]=1),g[48]=c/h,g[49]=l/h,g[50]=u/h,g[51]=o&&o.altitude<=0?0:1,g[52]=a[4]/x,g[53]=a[5]/x,g[54]=a[6]/x;let y=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;g[55]=y*y*(3-2*y);let v=o?.tint;g[56]=v?v[0]:1,g[57]=v?v[1]:1,g[58]=v?v[2]:1,g[59]=0,y>0&&jp(e),i.uniformSlot=1}var ur={colorAttachments:[{view:null,resolveTarget:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var bm=[null];var we={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},multisample:{count:4},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var $p={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function Vp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((we.layout=i.pipelineLayout,we.vertex.module=i.vertex,we.vertex.buffers=i.vertexBuffers,we.fragment.module=i.fragment,we.fragment.targets[0].format=e.format,we.fragment.targets[0].blend=i.transparent?$p:void 0,we.fragment.targets[0].writeMask=GPUColorWrite.ALL,we.primitive.cullMode=r,we.primitive.frontFace=o,we.depthStencil.depthWriteEnabled=i.depthWrite,we.depthStencil.depthCompare=n,we)),we.layout=null,we.vertex.module=null,we.vertex.buffers=null,we.fragment.module=null,i.pipelineCache.set(a,s)),s}function Zp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function qp(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,Zp(e,t,n),i[n+40]=r.strokeScale?.value??1,i[n+41]=i[n+42]=i[n+43]=0,o}var Wr={source:null,flipY:null};var wo={texture:null};var Lo=[null,null];function Hp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Wr.source=t.image,Wr.flipY=!!t.flipY,Wr),(wo.texture=t.texture,wo),(Lo[0]=t.image.width,Lo[1]=t.image.height,Lo)),Wr.source=null,wo.texture=null,t.uploaded=t.image)}var bo={layout:null,entries:null};var Yp=[];var In={binding:0,resource:{buffer:null,size:176}};var Dn={binding:1,resource:{buffer:null,size:240}};var Gn={binding:2,resource:null};var Ci=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var _i=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function Xp(e,t,r){let{program:o}=t,i=Yp;i.length=0,In.resource.buffer=e.uniformBuffer,Dn.resource.buffer=e.uniformBuffer,i.push(In,Dn),o.terrain&&(Gn.resource=o.terrain.texture.createView(),i.push(Gn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],Ci[a].binding=s.texture,Ci[a].resource=m.texture.createView(),_i[a].binding=s.sampler,_i[a].resource=m.sampler,i.push(Ci[a],_i[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((bo.layout=o.bindGroupLayout,bo.entries=i,bo)),bo.layout=null,bo.entries=null,In.resource.buffer=null,Dn.resource.buffer=null,Gn.resource=null,a=0;a<r.length;a++)Ci[a].resource=null,_i[a].resource=null;i.length=0}function Jp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);Hp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&Xp(e,t,i)}function Un(e,t,r,o,i){let{geometry:n}=t,{attributes:a,drawRange:s}=n,m=w.get(e),{device:f}=m,p=Vp(m,t,o,i),c=qp(m,t);Jp(m,t),r.setPipeline(p),r.setBindGroup(0,t.bindGroup,(bm[0]=c,bm)),r.setVertexBuffer(0,a.position.buffer),r.setVertexBuffer(1,a.normal.buffer),a.color&&r.setVertexBuffer(2,a.color.buffer),a.uv&&r.setVertexBuffer(3,a.uv.buffer);let l=a.instanceOffset;l&&r.setVertexBuffer(4,l.buffer);let u,h;for(u in a)h=a[u],h.needsUpdate&&(f.queue.writeBuffer(h.buffer,0,h.data),h.needsUpdate=!1,(u==="position"||u==="instanceOffset")&&(n.bounds=null));let x=a.index;x?(r.setIndexBuffer(x.buffer,x.indexFormat),r.drawIndexed(s.count,l?.count??1,s.start,0,0)):r.draw(s.count,l?.count??1,s.start,0)}function Kp(e,t,r){let o=w.get(e),i=t.beginRenderPass((ur.colorAttachments[0].view=o.colorTexture.createView(),ur.colorAttachments[0].resolveTarget=o.context.getCurrentTexture().createView(),ur.depthStencilAttachment.view=o.depthTexture.createView(),ur));ur.colorAttachments[0].view=null,ur.colorAttachments[0].resolveTarget=null,ur.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=K.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(Un(e,n,i,"front",f),Un(e,n,i,"back",f)):Un(e,n,i,p.cullMode,f)}i.end()}var Qp=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var ec=new Float32Array(20);function tc(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function rc(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!tc(o,a)){i=!1;break}}return i}var oc={min:[0,0,0],max:[0,0,0]};var ic={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var nc=[0,0,0];var ac=[0,0,0];function sc(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function mc(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&_e(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=sc(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function fc(e,t){let{min:r,max:o}=mc(e,oc),i=ic;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=nc,a=ac,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,xo(i);let h=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=h[m]*f+h[m+4]*p+h[m+8]*c+h[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let x=2/(a[0]-n[0]),g=2/(a[1]-n[1]),y=-1/(a[2]-n[2]),v=new Float32Array(16);for(s=0;s<16;s+=4)v[s]=h[s]*x,v[s+1]=h[s+1]*g,v[s+2]=h[s+2]*y,v[s+3]=h[s+3];return v[12]-=(a[0]+n[0])/(a[0]-n[0]),v[13]-=(a[1]+n[1])/(a[1]-n[1]),v[14]+=a[2]/(a[2]-n[2]),v}var Mm={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var Bm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var Mo={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var Nn={code:null};var Lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var Bo={bindGroupLayouts:[null,null]};var To=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Fn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var pc=[To,Fn];var cc=[To];function Tm(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Mm.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Mm)),t.depthLayout=e.createBindGroupLayout((Bm.entries[0].visibility=GPUShaderStage.VERTEX,Bm)),t.depthBindGroup=e.createBindGroup((Mo.layout=t.depthLayout,Mo.entries[0].resource.buffer=t.buffer,Mo)),Mo.layout=null,Mo.entries[0].resource.buffer=null);let i=e.createShaderModule((Nn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,Nn));Nn.code=null;let n=r?pc:cc;t[o]=e.createRenderPipeline((Lt.layout=e.createPipelineLayout((Bo.bindGroupLayouts[0]=t.meshLayout,Bo.bindGroupLayouts[1]=t.depthLayout,Bo)),Lt.vertex.module=i,Lt.vertex.buffers=n,Lt.fragment.module=i,Lt)),Bo.bindGroupLayouts[0]=null,Bo.bindGroupLayouts[1]=null,Lt.layout=null,Lt.vertex.module=null,Lt.vertex.buffers=null,Lt.fragment.module=null}}var jn={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Po={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var Pm=[null];function lc(e,t,r){let o=w.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass((jn.depthStencilAttachment.view=n.texture.createView(),jn));jn.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,h,x;for(m of r){f=m.geometry.attributes,p=f.instanceOffset,c=p?n.instancePipeline:n.pipeline,c!==s&&(s=c,a.setPipeline(s)),l=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,l/4),o.uniformData[l/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((Po.layout=n.meshLayout,Po.entries[0].resource.buffer=o.uniformBuffer,Po)),Po.layout=null,Po.entries[0].resource.buffer=null);for(u of Object.values(f))u.needsUpdate&&(i.queue.writeBuffer(u.buffer,0,u.data),u.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(Pm[0]=l,Pm)),a.setVertexBuffer(0,f.position.buffer),p&&a.setVertexBuffer(1,p.buffer),h=f.index,x=m.geometry.drawRange,h?(a.setIndexBuffer(h.buffer,h.indexFormat),a.drawIndexed(x.count,p?.count??1,x.start,0,0)):a.draw(x.count,p?.count??1,x.start,0)}a.end()}var Ei={size:[null,null],format:"depth32float",usage:null};function Wn(e,t){let r=w.get(e).device,o=w.get(e).sunlight;o.size!==t&&(o.texture&&W(e,o.texture),o.size=t,o.texture=r.createTexture((Ei.size[0]=t,Ei.size[1]=t,Ei.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,Ei)),Rn(e))}function uc(e,t,r,o){let i=w.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,Qp),a.enabled=!1,a.cache=null;return}if(rc(a,r,o))return;let s=ec;a.enabled=!0,Wn(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(fc(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),Tm(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){Tm(n,a,!0);break}lc(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function $n(e){let t=ft.get(e);Nt.delete(e),ft.set(e,null),!Nt.size&&t!=null&&cancelAnimationFrame(t)}var Wt=new WeakMap;var Oi=new WeakMap;var zi=new WeakMap;var pe=new WeakMap;var Vn=new WeakMap;function q(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function So(e,t){Vn.get(e)?.abort();let r=I.get(e).get(t);r&&(q(r,null),E(e),r.texture!==t.texture&&W(e,r.texture.texture),I.get(e).delete(t))}function ko(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;I.get(e).get(r)===t&&(I.get(e).delete(r),Ee.set(e,(Ee.get(e)||0)+1),t.request.abort(),pe.get(e)&&So(pe.get(e),t),t.mesh&&q(t.mesh,null),t.texture&&W(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),E(e))}function Co(e){let t=sr.get(e),r=performance.now();if(Oi.get(e)===Ee.get(e)&&zi.get(e)===t&&r<Wt.get(e))return Number.isFinite(Wt.get(e));Oi.set(e,Ee.get(e)),zi.set(e,t),Wt.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=I.get(e).get(i),n?.done&&r-n.loadedAt<250&&Wt.set(e,Math.min(Wt.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of I.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||ko(e,n)}return Number.isFinite(Wt.get(e))}L();function _o(e){return de.get(e.source)===e&&e.map.hasLayer(e.source)}function dc(e){let t=Be.get(e.map);if(e.terrainStream!==t&&(e.terrainStream=t,e.terrainRequests=t?new Map:null),e.terrainRequests){let r;for(r of e.terrainRequests.keys())e.source._tiles[r]||e.terrainRequests.delete(r)}return t}L();var $t=Object.freeze([1,1,1]);var $r=new WeakMap;L();function bt(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof d.GridLayer&&(t.opacity=o);let m=n?i._zIndex+($r.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var hc=Object.freeze([0,2,1,1,2,3]);var Sm=Object.freeze([0,0,1,0,0,1,1,1]);var gc=Object.freeze({minFilter:"linear",magFilter:"linear"});function Ge(e,t){if(!t)return;q(t,null),E(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function xc(e,t,r,o,i,n,a){let s,m=o;try{if(o instanceof HTMLImageElement){let f=document.createElement("canvas");f.width=n,f.height=a;let p=f.getContext("2d");if(!p)throw new Error("Unable to rasterize SVG image");p.drawImage(o,0,0,n,a),m=f}if(s=await createImageBitmap(m),!_o(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,De(e)}catch(f){e.failed=!0,e.source.fire("error",{error:f})}finally{s?.close()}}function vc(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Zn(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){a&&(Ge(o,n.get(t)),n.delete(t),W(o,a.texture),i.delete(t));let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=w.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(gc)},i.set(t,a),r instanceof HTMLCanvasElement||s.startsWith("data:image/svg+xml")?(a.pending=!0,xc(e,t,a,r,p,m,f)):vc(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}L();L();var Eo=Object.freeze({});var qn={size:null,usage:null};var Mt={value:0};function Oe(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var Hn={code:null};var Yn={code:null};var Oo={bindGroupLayouts:[null,null]};var wc=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Lc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var bc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Mc=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Xn={entries:null};var Bc=[];var km={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var Cm={binding:1,visibility:null,buffer:{type:"uniform"}};var _m={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var Tc=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Pc=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function Sc(e,t){let r=Bc;r.length=0,km.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Cm.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(km,Cm),t.hasTerrain&&(_m.visibility=GPUShaderStage.VERTEX,r.push(_m));let o,i,n=0;for(o of t.bindings)i=Tc[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Pc[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Xn.entries=r,Xn));return Xn.entries=null,a}function Jn(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),e.nativeStroke&&(t.strokeScale={value:1}),t}function zo(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function kc(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Cc(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function _c(e){return{position:e.nativeStroke?"position = input.normal + (input.position - input.normal) * u.nativeStroke.x;":"",normal:e.nativeStroke?"let sourceNormal = vec3<f32>(0.0, 1.0, 0.0);":"let sourceNormal = input.normal;"}}function Ec(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"",s=_c(e);return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""} struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${s.position} ${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);${s.normal} let normal =(cross(m[1],m[2])* sourceNormal.x + cross(m[2],m[0])* sourceNormal.y + cross(m[0],m[1])* sourceNormal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Cc(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Oc(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function zc(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Oc(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function Ac(e=Eo,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);kc(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=Ec(e,t,r,m,f,s),c=[],l=zo(c,"baseTexture",o),u=zo(c,"metalTexture",i),h=zo(c,"emissiveTexture",n),x=zo(c,"occlusionTexture",a),g=zo(c,"roofTexture",s),y=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${h}${x}${g} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${zc(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:y,bindings:c,textured:f,hasTerrain:m}}async function Rc(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
2
- `:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function Ue(e,t=Eo){let r=w.get(e),{device:o}=r,i=Ac(t,!!e.options.nightSparkle,t.terrain?wc:""),n=o.createShaderModule((Hn.code=i.vertex,Hn));Hn.code=null;let a=o.createShaderModule((Yn.code=i.fragment,Yn));Yn.code=null,Rc(e,[n.getCompilationInfo(),a.getCompilationInfo()]);let s=[To,Lc,t.vertexColors?bc:null,i.textured?Mc:null];t.instanced&&s.push(Fn);let m=Sc(o,i),f=o.createPipelineLayout((Oo.bindGroupLayouts[0]=m,Oo.bindGroupLayouts[1]=r.sunlight.layout,Oo));Oo.bindGroupLayouts[0]=null,Oo.bindGroupLayouts[1]=null;let p=Jn(t);return{device:o,vertex:n,fragment:a,bindings:i.bindings,vertexBuffers:s,bindGroupLayout:m,pipelineLayout:f,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:p,_layerMaterial:t}}function dr(e,t,r=Eo,o=0,i){let{device:n}=w.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((qn.size=Math.max(4,f.byteLength),qn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,qn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Oe(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||Ue(e,{vertexColors:!0,doubleSided:!0,...r}),id:Mt.value++,renderOrder:0,extras:{}};return q(l,M.get(e)),E(e),l}var Em=new WeakMap;function Om(e,t){let r=w.get(e),o=Em.get(r);o||(o=new Map,Em.set(r,o));let i=`${!!t.baseTexture}:${!!t.nativeStroke}:${!!t.depthWrite}`,n=o.get(i);return n||(n=Ue(e,{doubleSided:!0,...t}),o.set(i,n)),{...n,uniforms:Jn(t),_layerMaterial:t}}function Dc(e,t,r,o,i,n,a,s,m){let{backend:f,source:p,meshes:c}=e,l=m?e.strokeAnchors:[],u,h=c.get(t);if(!m)for(u=0;u<r.length;u++)l.push(u%3===1?1:0);let x={position:r,normal:l};a&&(x.uv=a);let g={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND",depthWrite:s,nativeStroke:m};return n&&(g.baseTexture=n),h&&Ge(f,h),h=dr(f,x,g,0,p instanceof d.GridLayer?(s?e.terrainRasterProgram:e.rasterProgram)||Om(f,g):Om(f,g)),p instanceof d.GridLayer&&(s?e.terrainRasterProgram||=h.program:e.rasterProgram||=h.program,h.texture=n),c.set(t,h),h}function Gc(e){let t=e.geometry.attributes,r=t.position.data,o=t.normal.data,i,n=0;for(i=0;i<r.length;i+=3)n=Math.max(n,Math.hypot(r[i]-o[i],r[i+1]-o[i+1],r[i+2]-o[i+2]));e.geometry.nativeStrokeRadius=n}function Ao(e,t,r,o,i,n,a,s=!1){let{source:m,meshes:f}=e;if(!r.length)return;let p=t==="stroke"&&!!e.strokeCoordinates&&m.options.interactive===!1,c=f.get(t);if(!c||c.geometry.attributes.position.data.length!==r.length||m instanceof d.GridLayer&&c.program.depthWrite!==s||c.program.uniforms.baseTexture?.value!==n||!!c.program._layerMaterial.nativeStroke!==p)c=Dc(e,t,r,o,i,n,a,s,p);else{let l=c.geometry.attributes.position;l.data.set(r),l.needsUpdate=!0,c.geometry.bounds=null,p&&(c.geometry.attributes.normal.data.set(e.strokeAnchors),c.geometry.attributes.normal.needsUpdate=!0)}return p&&Gc(c),c.program.uniforms.strokeScale&&(c.program.uniforms.strokeScale.value=1),bt(e,c,o,i),c}function Ro(e,t,r,o,i){let n=Zn(e,t,r);if(!n)return;let a=hc,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(Sm[f*2],Sm[f*2+1]);return Ao(e,t,s,$t,i,n,m)}var D=new WeakMap;$();function Vt(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(D.get(o)),a=i.project(t),s=Math.cos(D.get(o).lat*B);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function Kn(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(Vt(e,i));return r}function Uc(e,t,r,o){let i=e.textures.get(t),n=e.meshes.get(t);if(n&&!n._terrainRequest&&i?.image===r.el&&i.url===(r.el.currentSrc||r.el.src))return i.used=!0,bt(e,n,$t,o),n;let[a,s]=e.source._tileCoordsToNwSe(r.coords);return Ro(e,t,r.el,Kn(e,new d.LatLngBounds(a,s)),o)}async function Nc(e,t,r,o){let i=2**t;r=(r%i+i)%i,o=Math.max(0,Math.min(i-1,o));let n=`${t}/${r}/${o}`,a=e.terrainCache.get(n);a?(e.terrainCache.delete(n),e.terrainCache.set(n,a)):(a={promise:e.layer.options.getTile(t,r,o,e.terrainController.signal)},e.terrainCache.set(n,a));try{if(a.data||(a.data=await a.promise),!(a.data instanceof Float32Array)||a.data.length!==65536)throw new Error(`Invalid elevation tile ${n}: expected 256x256 Float32Array`);if(!a.range){let s=1/0,m=-1/0,f;for(f of a.data)!Number.isFinite(f)||f<=-1e3||(s=Math.min(s,f),m=Math.max(m,f));a.range=[s,m]}}catch(s){throw e.terrainCache.get(n)===a&&e.terrainCache.delete(n),s}for(;e.terrainCache.size>256;)e.terrainCache.delete(e.terrainCache.keys().next().value);return a.data}async function Fc(e,t,r,o){let{x:i,y:n,z:a}=r.coords,s=o.stream,m=[],f=new Map,p,c,l=0;try{for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)m.push(Nc(s,a,i+p,n+c));let u=await Promise.all(m);if(e.disposed||s.terrainController.signal.aborted||e.source._tiles[t]!==r||e.terrainRequests.get(t)!==o)return;for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)f.set(`${i+p}/${n+c}`,u[l++]);o.tiles=f,De(e),e.map.fire("terrainchange"),e.source._update()}catch(u){!e.disposed&&!s.terrainController.signal.aborted&&e.source._tiles[t]===r&&(o.error=u,s.layer.fire("error",{error:u,coords:r.coords}))}}function jc(e,t,r,o,i){let n=Zn(e,t,r.el);if(!n)return;let{x:a,y:s,z:m}=r.coords,f=32,p=Vt(e,e.map.unproject([a*256,s*256],m)),c=Vt(e,e.map.unproject([(a+1)*256,(s+1)*256],m)),l=[],u=[],h=[],x=M.get(e.backend).position[1],g,y,v,S,T,P,A,Q,N,G;for(g=0;g<=f;g++)for(y=0;y<=f;y++){if(v=y/f,S=g/f,T=fr({x:(a+v)*256,y:(s+S)*256},o.tiles),!Number.isFinite(T))throw new Error(`Missing elevation sample in ${m}/${a}/${s}`);l.push([p[0]+(c[0]-p[0])*v,T-x,p[2]+(c[2]-p[2])*S,v,S])}for(g=0;g<f;g++)for(y=0;y<f;y++){P=g*(f+1)+y,A=P+1,Q=P+f+1,N=Q+1;for(G of[P,Q,A,A,Q,N])u.push(l[G][0],l[G][1],l[G][2]),h.push(l[G][3],l[G][4])}let V=Ao(e,t,u,$t,i,n,h,!0);return V._terrainRequest=o,V}function Wc(e,t,r,o){let i=e.textures.get(t),n=e.meshes.get(t),a=e.terrainRequests.get(t);return(!a||a.tile!==r)&&(a={tile:r,stream:e.terrainStream},e.terrainRequests.set(t,a),Fc(e,t,r,a)),a.tiles?n&&n._terrainRequest===a&&i?.image===r.el&&i.url===(r.el.currentSrc||r.el.src)?(i.used=!0,bt(e,n,$t,o),n):jc(e,t,r,a,o):(n&&i?.image===r.el&&(i.used=!0,bt(e,n,$t,o)),null)}function $c(e){let t,r,o;for([t,r]of e.meshes)e.source._tiles[t]||!r._terrainRequest||(o=e.textures.get(t),o&&(o.used=!0,r._nativeUsed=!0))}function Vc(e){let{source:t}=e,r=dc(e),o,i,n,a,s=!1;for(o in t._tiles)if(Object.hasOwn(t._tiles,o)){if(i=t._tiles[o],!i.loaded||i.el instanceof HTMLImageElement&&!i.el.naturalWidth){s=!!r;continue}n=(t.options.opacity??1)*(i._gpuOpacity??1),a=e.terrainRequests?Wc(e,o,i,n):Uc(e,o,i,n),e.terrainRequests&&!e.terrainRequests.get(o).tiles&&(s=!0),a&&(a.renderOrder+=i.coords.z/100)}r&&(s||!Object.keys(t._tiles).length)&&$c(e)}function Zc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&Ro(e,"image",t._image,Kn(e,t.getBounds()),t.options.opacity??1)}var qc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);L();$();Z();function Qn(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?k(e._map)*B:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new d.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function Ai(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function Hc(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function Yc(e,t,r){let{source:o,map:i,backend:n}=e,a=Vt(e,o.getLatLng());if(Be.get(i)){let Mi=M.get(n),un=xe(i,o.getLatLng());Number.isFinite(un)&&(a[1]=(un-Mi.position[1])/Mi.scale[1])}let s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=M.get(n).worldMatrix,u=ee.get(n).projectionViewMatrix,h,x;for(h=0;h<16;h++)x=qc[h],f[x]=l[h],p[x]=u[h];Ai(c,f,a[0],a[1],a[2],1),Ai(c,p,c.x,c.y,c.z,c.w);let g=c.x,y=c.y,v=c.z,S=c.w;p.invertSelf(),f.invertSelf();let[T,P,A,Q]=Hc(e,t,r),N=(g/S+1)*s.x/2,G=(1-y/S)*s.y/2,V=N-A,ue=G-Q,Me=[],st,Ce,vt,Ze,bi;for(h=0;h<4;h++)st=V+(h%2?T:0),Ce=ue+(h<2?0:P),vt=Qn(o,st-N,Ce-G),Ze=N+vt.x,bi=G+vt.y,Ai(c,p,Ze/s.x*2-1,1-bi/s.y*2,v/S,1),Ai(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),Me.push([c.x,c.y,c.z]);return Me}function Xc(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=Ro(e,o,i,Yc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}function ea(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function ta(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Bt(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:ea(ta(0,e.h,e.l,n)),g:ea(ta(8,e.h,e.l,n)),b:ea(ta(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Jc(e){let{source:t,meshes:r,strokeCoordinates:o,strokeAnchors:i}=e,n=r.get("stroke"),a,s,m,f,p;if(n){let c=2**(e.strokeZoom-e.map.getZoom())*Number(t.options.weight)/e.strokeWeight,l=n.geometry.attributes.position;if(n.program.uniforms.strokeScale)n.program.uniforms.strokeScale.value=c;else{for(a=0;a<o.length;a++)l.data[a]=i[a]+(o[a]-i[a])*c;l.needsUpdate=!0,n.geometry.bounds=null}({r:s,g:m,b:f}=Bt(t.options.color)),bt(e,n,[s,m,f],t.options.opacity??1)}p=r.get("fill"),p&&({r:s,g:m,b:f}=Bt(t.options.fillColor||t.options.color),bt(e,p,[s,m,f],t.options.fillOpacity??1))}var Io=[];L();L();L();function Ne(e,t,r,o,i,n,a,s){return t.push(...e(r,n),...e(o,a),...e(i,s))}var Ri=2*Math.PI;L();function zm(e,t,r,o,i){return new d.Point(e.x+t*Math.cos(i*Ri/o),e.y+r*Math.sin(i*Ri/o))}function Vr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)Ne(e,o,t,zm(t,r,i,n,a),zm(t,r,i,n,a+1),t,t,t)}function ra(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t,c=r,l=t.distanceTo(r);if(!l)return;let u=r.subtract(t).divideBy(l),h=new d.Point(-u.y*f,u.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(u.multiplyBy(f))),i&&(r=r.add(u.multiplyBy(f)))),Ne(m,s,t.add(h),t.subtract(h),r.add(h),p,p,c),Ne(m,s,r.add(h),t.subtract(h),r.subtract(h),c,p,c),n.lineCap==="round"&&(o&&Vr(m,t,f,s),i&&Vr(m,r,f,s))}L();function Kc(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Vr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),h=o.subtract(f).divideBy(i),x=u.x*h.y-u.y*h.x>0?-1:1,g=new d.Point(-u.y*x,u.x*x),y=new d.Point(-h.y*x,h.x*x),v=f.add(g.multiplyBy(p)),S=f.add(y.multiplyBy(p)),T=1+g.x*y.x+g.y*y.y,P=T>0?g.add(y).multiplyBy(p/T):null;Ne(s,m,v,f,S,f,f,f),n.lineJoin==="miter"&&P&&Math.hypot(P.x,P.y)<=p*4&&Ne(s,m,v,f.add(P),S,f,f,f)}function Qc(e,t,r,o,i,n){let a=e.dash,s=0,m=(i%n+n)%n,f=0,p,c,l=0;for(;f<a.length-1&&m>=a[f];)m-=a[f++];let u=Math.max(0,a[f]-m);for(;s<o;){if(p=Math.min(o,s+u),p>s&&f%2===0&&(c=r.subtract(t).divideBy(o),ra(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),p<=s){if(++l>=a.length)throw new Error("Leaflet dashArray is too small for these coordinates")}else l=0;s=p,f=(f+1)%a.length,u=a[f]}}function oa(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?Qc(e,p,c,l,a,s):(ra(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&Kc(e,t,f,c,l)),a+=l}function el(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function tl(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function rl(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:el(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)tl(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Se(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function ut(e,t){return e.x===t.x&&e.y===t.y}function ol(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],ut(o,i)||Math.abs(Se(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function il(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function nl(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=ol(t.slice(o,o+=n.length)),il(a)!==!!i&&a.reverse(),r.push(a);return r}function ia(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function al(e,t){let r;for(r=1;r<t.length;r++)if(ia(e,t[r]))return!0;return!1}function Ii(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function sl(e,t,r,o){if(ut(e,r)||ut(e,o)||ut(t,r)||ut(t,o))return!1;let i=Se(e,t,r),n=Se(e,t,o),a=Se(r,o,e),s=Se(r,o,t);return i*n<0&&a*s<0||i===0&&Ii(e,t,r)||n===0&&Ii(e,t,o)||a===0&&Ii(r,o,e)||s===0&&Ii(r,o,t)}function Am(e,t,r){let o;for(o=0;o<r.length;o++)if(sl(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function ml(e,t,r,o){if(Am(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(Am(e,t,o[i]))return!0;return!1}function fl(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!ia(o,r[0])||al(o,r))&&(ml(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function pl(e,t,r,o){let i;for(i of e)if(!ut(i,t)&&!ut(i,r)&&!ut(i,o)&&Se(t,r,i)>=0&&Se(r,o,i)>=0&&Se(o,t,i)>=0)return!0;return!1}function cl(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Se(i,n,a)<=1e-10)&&!pl(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Se(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function Rm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function ll(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=Rm(e[n]);let s=Rm(e[0])-o;for(a of r)i+=Se(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function na(e,t=lr){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=nl(r,s),f=m[0].slice(),p=rl(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=fl(f,a,m,c);let l=cl(f);return ll(m,s,l),l}function ul(e,t){let{options:r,fill:o,point:i}=e;if(r.triangulated){if(t.length!==1||t[0].length!==3)throw new Error("triangulated polygons require three vertices per polygon and no holes");Ne(i,o,t[0][0],t[0][1],t[0][2]);return}let n=[],a,s;for(a of t)a.length>=3&&n.push(a);let m=n.flat();for(s of na(n[0],n.slice(1)))Ne(i,o,m[s[0]],m[s[1]],m[s[2]])}function Im(e,t,r){let{options:o,map:i}=e,n=[],a,s,m;for(a of t){s=[];for(m of a)s.push(i.project(m));n.push(s)}r&&o.fill&&n[0]?.length>=3&&ul(e,n);for(a of n)oa(e,a,r)}function Dm(e,t,r){if(!t.length)return;let o;if(t[0]instanceof d.LatLng)Im(e,[t],r);else if(r&&t[0][0]instanceof d.LatLng)Im(e,t,r);else for(o of t)Dm(e,o,r)}function dl(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}L();L();function hr(e,t,r,o,i,n=0){let a=i*Ri/o;return new d.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}L();var Gm=new WeakMap;function Do(e){if(!d.version.startsWith("2."))return e._project();let t=e._map,r=e._renderer,o=Gm.get(t);o||(o=Object.create(d.Renderer.prototype),o._map=t,Gm.set(t,o)),o._pathZoom=t.getZoom(),o._pathOrigin=t.getPixelOrigin(),e._renderer=o;try{e._project()}finally{r?e._renderer=r:delete e._renderer}}function hl(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof d.Circle){Do(e);let x=e._point.add(r.getPixelOrigin());f.x=x.x,f.y=x.y,p=e._pxRadius??e._radius,c=e._pxRadiusY??e._radiusY??p}a.fill&&Vr(o,f,p,i,c);let h=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let x=[];for(l=0;l<h;l++)x.push(hr(f,p,c,h,l));oa(t,x,!0)}else if(a.stroke&&m>0)for(u=0;u<h;u++)Ne(o,n,hr(f,p,c,h,u,m/2),hr(f,p,c,h,u,-m/2),hr(f,p,c,h,u+1,m/2)),Ne(o,n,hr(f,p,c,h,u+1,m/2),hr(f,p,c,h,u,-m/2),hr(f,p,c,h,u+1,-m/2))}function gl(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=dl(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof d.CircleMarker)hl(e,m);else{let f=e instanceof d.Polygon;Dm(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Um(e,t){if(e.pixelProjection){let{transformation:r,scale:o,origin:i,metres:n}=e.pixelProjection,a=r.untransform(t,o);return[(a.x-i.x)*n,0,-(a.y-i.y)*n]}return Vt(e,e.map.unproject(t))}function yl(e,t){let r=Io[Io.length-1];return t&&r.strokeAnchors&&r.strokeAnchors.push(...Um(r,t)),Um(r,e)}$();L();function xl(e){let{source:t}=e;e.strokeCoordinates=null,e.strokeAnchors=t instanceof d.Polyline&&!t.options.dashArray?[]:null;let r=e.map.options.crs,o=D.get(e.backend);e.pixelProjection={transformation:r.transformation,scale:r.scale(e.map.getZoom()),origin:r.project(o),metres:Math.cos(o.lat*B)},Io.push(e);try{return gl(t,e.map,yl)}finally{Io.pop()}}function vl(e,t){let{source:r}=e;e.strokeAnchors?.length===t.length&&t.length?(r.options.interactive===!1?e.strokeCoordinates=t:(e.strokeCoordinates=new Float64Array(t),e.strokeAnchors=new Float64Array(e.strokeAnchors)),e.strokeZoom=e.map.getZoom(),e.strokeWeight=Number(r.options.weight)):e.strokeAnchors=null}function wl(e){let{source:t}=e;if(e.zoomOnly){Jc(e),e.zoomOnly=!1;return}let{fill:r,stroke:o}=xl(e);vl(e,o);let i,n,a,s,m,f,p,c,l;for(i=0;i<2;i++)n=i?"stroke":"fill",a=i?o:r,s=i?t.options.color:t.options.fillColor||t.options.color,m=i?t.options.opacity:t.options.fillOpacity,a.length&&({r:f,g:p,b:c}=Bt(s),Ao(e,n,a,[f,p,c],m??1),n==="stroke"&&t.options.interactive===!1&&e.strokeCoordinates&&(l=e.meshes.get(n).geometry.attributes,e.strokeCoordinates=l.position.data,e.strokeAnchors=l.normal.data))}function Ll(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(Ge(o,i),t.delete(a),n=r.get(a),n&&W(o,n.texture),r.delete(a));for([a,n]of r)n.used||(W(o,n.texture),r.delete(a))}function aa(e){let{source:t,meshes:r,textures:o}=e;if(!_o(e)||!w.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof d.GridLayer?Vc(e):t instanceof d.ImageOverlay?Zc(e):e.marker?Xc(e):wl(e),Ll(e)}function bl(e){try{aa(e);let t=e.meshes.get("stroke")?.program.uniforms.strokeScale;if(t){let r=se.get(e.map)?.zoom??e.map.getZoom();t.value=2**(e.strokeZoom-r)*Number(e.source.options.weight)/e.strokeWeight}}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function gr(e){if($n(e),R.get(e)!==e||!w.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;Kf(e,r),ep(e,o),ap(e,o),Pe(oe.get(e));let i=!1,n,a;for(n of F.get(e))a=ho.get(n),a&&(bl(a),i=!0);let s=pt.get(t);cp(e,s,i);let m=Ft.get(e),f=w.get(e),p=kp(e,r),c=f.frameMeshes||=[];c.length=0;let l=Rp(e,p,r,c),u=f.device.createCommandEncoder();Wp(e,c,m,s),uc(e,u,m,s),Kp(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((Mn[0]=u.finish(),Mn)),Mn[0]=null;for(n of F.get(e))sr.get(n)&&(l=Co(n)||l);(t._animatingZoom||l)&&E(e)}function Ml(){let e=[...Nt];Nt.clear();let t,r;for(r of e)if(ft.set(r,null),!(R.get(r)!==r||!w.get(r)))try{gr(r)}catch(o){t||=o}if(t)throw t}function E(e){let t=R.get(e);if(!t)return e;if(t!==e)return E(t),e;if(ft.get(e)!=null)return e;let r=Nt.values().next().value;return Nt.add(e),ft.set(e,r?ft.get(r):requestAnimationFrame(Ml)),e}L();function sa(e){let{source:t}=e,r=t instanceof d.Marker&&t.options.icon instanceof d.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function De(e=this){e.zoomOnly=!1,e.dirty=!0,e.viewDirty=!0,e.failed=!1,sa(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",Bi),o.removeEventListener("error",Ti),bn(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),Yf(o,e),o.addEventListener("load",Bi),o.addEventListener("error",Ti));R.get(e.backend)&&E(e.backend)}L();var Bl=new Set(["color","opacity","weight","fillColor","fillOpacity"]);function Tl(e,t,r){let{source:o}=t;if(e!=="setStyle"||o.options.interactive!==!1||t.dirty&&!t.zoomOnly)return!1;let i=t.strokeCoordinates&&t.meshes.get("stroke")?.program.uniforms.strokeScale,n=o instanceof d.Polygon&&!o.options.stroke&&t.meshes.has("fill");if(!i&&!n)return!1;let a;if(r[0]){for(a of Object.keys(r[0]))if(!Bl.has(a))return!1}return!0}L();function Pl(e,t){let{source:r}=e;if(!(r instanceof d.GridLayer)||t!=="bringToFront"&&t!=="bringToBack")return;let o=t==="bringToFront"?-1/0:1/0,i,n;for(i of Object.values(e.map._layers))i===r||!(i instanceof d.GridLayer)||i.getPane()!==r.getPane()||(n=i.options.zIndex||0,o=t==="bringToFront"?Math.max(o,n):Math.min(o,n));let a=t==="bringToFront"?o+1:o-1;Number.isFinite(a)&&r.setZIndex(a)}function H(e,t,r){let o=de.get(t),i=o.methods.get(e).original,n=Tl(e,o,r),a=i.apply(t,r);return Pl(o,e),e==="bringToFront"&&(o.order=ar.get(o.map)+1,ar.set(o.map,o.order)),e==="bringToBack"&&(o.order=uo.get(o.map)-1,uo.set(o.map,o.order)),De(o),n&&(!t.options.stroke||Number(t.options.weight)>0)&&(o.zoomOnly=!0),a}function Sl(...e){return H("setLatLng",this,e)}function kl(...e){return H("setLatLngs",this,e)}function Cl(...e){return H("addLatLng",this,e)}function _l(...e){return H("setRadius",this,e)}function El(...e){return H("setStyle",this,e)}function Ol(...e){return H("redraw",this,e)}function zl(...e){return H("setIcon",this,e)}function Al(...e){return H("setUrl",this,e)}function Rl(...e){return H("setBounds",this,e)}function Il(...e){return H("setOpacity",this,e)}function Dl(...e){return H("setZIndex",this,e)}function Gl(...e){return H("setZIndexOffset",this,e)}function Ul(...e){return H("bringToFront",this,e)}function Nl(...e){return H("bringToBack",this,e)}var Nm={setLatLng:Sl,setLatLngs:kl,addLatLng:Cl,setRadius:_l,setStyle:El,redraw:Ol,setIcon:zl,setUrl:Al,setBounds:Rl,setOpacity:Il,setZIndex:Dl,setZIndexOffset:Gl,bringToFront:Ul,bringToBack:Nl};L();var yr=Object.freeze({});function ma(e=yr){return new d.Layer(e)}L();var Zr=new WeakMap;var ne=new WeakMap;var Tt=new WeakMap;function Fl(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function jl(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Fl(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Wl(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function $l(e,t,r){e.geometry.bounds||_e(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function fa(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function pa(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=fa(n,a),p=s?t%f:t,c=s?Math.floor(t/f)*s.size:0,l=s?.data[c]??0,u=s?.data[c+1]??0,h=s?.data[c+2]??0,x=(a?a.data[p]:p)*m,g=(a?a.data[p+1]:p+1)*m,y=(a?a.data[p+2]:p+2)*m;r[0]=n.data[x],r[1]=n.data[x+1],r[2]=n.data[x+2],o[0]=n.data[g],o[1]=n.data[g+1],o[2]=n.data[g+2],i[0]=n.data[y],i[1]=n.data[y+1],i[2]=n.data[y+2],s&&(r[0]=Math.fround(r[0]+l),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+h),o[0]=Math.fround(o[0]+l),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+h),i[0]=Math.fround(i[0]+l),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+h))}function Vl(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Zl(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],h=a[1]*u-a[2]*l,x=a[2]*c-a[0]*u,g=a[0]*l-a[1]*c,y=m*h+f*x+p*g;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(y)<1e-9:y<1e-9)return 1/0;let v=n[0]-r[0],S=n[1]-r[1],T=n[2]-r[2],P=(v*h+S*x+T*g)/y;if(P<0||P>1)return 1/0;let A=S*p-T*f,Q=T*m-v*p,N=v*f-S*m,G=(a[0]*A+a[1]*Q+a[2]*N)/y;return G<0||P+G>1||Vl(e,t,P,G,s)?1/0:(c*A+l*Q+u*N)/y}function ql(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function ca(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,h,x,g,y;for(f of t)if(Wl(e,f,s,m),!!$l(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,h=1/0,x=void 0,g=0;g<u*(l?.count??1);g+=3)pa(f,g,i,n,a),y=Zl(f,g,i,n,a,s,m,r),y>0&&y<h&&(h=y,x=g/3);x!==void 0&&o.push(ql(e,f,s,m,h,x))}return jl(o)}function Zt(e,t,r){if(t(e,r))return;let o;for(o of e.children)Zt(o,t,r)}function la(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Hl(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function Go(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Hl(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Yl(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,h,x,g;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=Go(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],h=e.template.position[c+2],x=e.template.normal[c],g=e.template.normal[c+2],t.data[l]=a-u*p-h*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-h*p,r.data[l]=-x*p-g*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=x*f-g*p}function Xl(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function ua(e,t,r=M.get(e).children,o=!0){if(!w.get(e))return[];let i=Tt.get(e);i&&Yl(i);let n=e._map.getContainer().getBoundingClientRect();Pe(oe.get(e)),xo(ee.get(e));let a=ne.get(e).inverse,s=ee.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,h;Xl(a),ne.get(e).origin[0]=ee.get(e).position[0],ne.get(e).origin[1]=ee.get(e).position[1],ne.get(e).origin[2]=ee.get(e).position[2],ne.get(e).direction[0]=p/u-ne.get(e).origin[0],ne.get(e).direction[1]=c/u-ne.get(e).origin[1],ne.get(e).direction[2]=l/u-ne.get(e).origin[2];let x=ne.get(e).direction,g=Math.hypot(x[0],x[1],x[2])||1;ne.get(e).direction[0]/=g,ne.get(e).direction[1]/=g,ne.get(e).direction[2]/=g;let y=ne.get(e).meshes;y.length=0;for(h of r)o?Zt(h,la,y):h.geometry&&h.visible&&h._appearance!==0&&y.push(h);return ca(ne.get(e),y,w.get(e).uniformData?.[55])}function Jl(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var te=new WeakMap;var Kl=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);L();function Ql(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function eu(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof d.Marker||n.options.interactive===!1||!(n instanceof d.Path)&&!n.options.interactive)&&o.push(...ua(a,t,i.meshes.values(),!1));return o.sort(Ql),o[0]?.object._nativeSource||null}function da(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function tu(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&da(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function Fm(e,t=e.type,r){let o=this,i=Zr.get(o),n=i.fireDOMEvent,a=te.get(o);if(!w.get(a)||r||!Kl.has(t))return n.call(this,e,t,r);if(tu(o,i,e,t))return n.call(this,e,t,r);let s=eu(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&da(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function ru(e){let{map:t}=e,r=Zr.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=d.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=Fm,r.restore=Jl,Zr.set(t,r),t._fireDOMEvent=Fm}r.states.add(e),e._nativeEventContext=r}L();function Uo(e){if(!(e?.type==="zoomend"&&this.source instanceof d.Polyline&&(!this.source.options.stroke||!(Number(this.source.options.weight)>0)))){if(e?.type==="zoomend"&&this.strokeCoordinates&&(!this.dirty||this.zoomOnly)){this.zoomOnly=!0,this.dirty=!0,E(this.backend);return}e?.type==="terrainchange"&&this.marker&&this.source.update(),De(this)}}function ha(){this.viewDirty=!0,R.get(this.backend)&&E(this.backend)}function ou(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Zr.delete(r))}function Di(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",Uo,e),r.off("zoomend terrainchange",Uo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",ha,e),ou(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())Ge(o,p);i.clear();for(c of n.values())W(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",Bi),l.removeEventListener("error",Ti),bn(l,e);ho.delete(o),o.remove()}function iu(){this.ready.resolve()}function nu({error:e}){this.ready.reject(e)}function au({error:e}){this.source.fire("error",{error:e})}async function su(e){let{source:t,map:r}=e,o=e.backend=ma({source:{type:"vector"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,ar.get(r)||ar.set(r,0),uo.get(r)||uo.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=ar.get(r)+1,ar.set(r,e.order),e.marker=t instanceof d.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",Uo,e),r.on("zoomend terrainchange",Uo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",ha,e),ru(e);let n,a,s;for(n in Nm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=Nm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",iu,e),o.once("error",nu,e),o.on("error",au,e),De(e),o.addTo(r);try{await m.promise}catch(f){throw Di.call(e),f}if(!_o(e))return t;ho.set(o,e);try{aa(e)}catch(f){throw Di.call(e),f}return E(e.backend),t}function mu(e){de.get(e.source)===e&&de.set(e.source,null),e.backend&&Di.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function fu(e){return de.get(e.source)!==e?e.source:su(e)}function He(e,t){e.fire("error",{error:t})}function ga(e,t){if(de.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};de.set(e,r),sa(r),e.once("remove",mu.bind(null,r)),re.set(e,Promise.resolve().then(fu.bind(null,r))),re.get(e).catch(He.bind(null,e))}var ya=[1,0,1,0];L();function ce(e){return new d.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}$();Z();J();function xa(e,t){let r=k(e)*B,o=_(e)*B;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function ze(e,t,r=!1,o=!1,i=0){let n=e.getSize(),a=n.x/2,s=n.y/2,m=n.y*1.5,f=ce(t);if(!m)return f;let[p,c,l,u]=xa(e,ya),h=f.x-a,x=f.y-s;if(r){let S=n.y*e.options.pitchMaxDistance,T=l*m+u*x,P=T*l>0?(x*(m-l*i)+m*u*i)/T:-S;o&&(P=Math.max(-S,Math.min(S,P)));let A=h*(m-u*P-l*i)/m;return f.x=p*A+c*P+a,f.y=-c*A+p*P+s,f}let g=p*h-c*x,y=c*h+p*x,v=m/(m-u*y-l*i);return f.x=g*v+a,f.y=(l*y-u*i)*v+s,f}function pu(e){return ze(this,it(this,j.value.layerPointToContainerPoint.call(this,e)))}function cu(e){return j.value.containerPointToLayerPoint.call(this,it(this,ze(this,e,!0),!0))}function lu(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function uu(e,t){let r=this.getSize().divideBy(2),o=r.subtract(ze(this,r.subtract(ce(e)),!0));return j.value.panBy.call(this,o,t)}L();J();Z();function du(e,t,r){if(!_(this)&&!k(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof d.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var Pt=Object.freeze([0,0]);J();Z();function hu(e,t={}){if(!_(this)&&!k(this))return j.value.panInside.call(this,e,t);let r=ce(t.paddingTopLeft||t.padding||Pt),o=this.getSize().subtract(ce(t.paddingBottomRight||t.padding||Pt)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}L();J();Z();L();function xr(e,t=Pt,r=0){let o=ce(t).divideBy(2),i=e.getSize().subtract(o),n=new d.Bounds,a=o.x,s=o.y,m;for(m=0;m<4;m++)o.x=m%2?i.x:a,o.y=m<2?s:i.y,n.extend(ze(e,o,!0,!0,r));return n}function gu(e,t,r){if(!r||!this._loaded||!_(this)&&!k(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=xr(this),n=this.project(e,t),a=new d.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}J();Z();function yu(e,t){if(!t||!_(this)&&!k(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(ze(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(ze(this,r.subtract(n.subtract(i))))}J();Z();L();va();function jm(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function wa(e,t,r=No){t=t.getBounds?t.getBounds():t instanceof d.LatLngBounds?t:new d.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=ce(r.paddingTopLeft||r.padding||Pt).subtract(i),s=i.subtract(ce(r.paddingBottomRight||r.padding||Pt)),[m,f,p,c]=xa(e,ya);if(p<0){let Tv=a.y;a.y=-s.y,s.y=-Tv}let l=e.getSize().y*e.options.pitchMaxDistance,u=jm(a.y,Math.abs(p),n,c,l),h=jm(s.y,Math.abs(p),n,c,l),x=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),g=1/0,y=-1/0,v=a.x*c/n,S=s.x*c/n,T=S-v,P=1/0,A=-1/0,Q=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],N,G,V,ue,Me;for(N=0;N<4;N++)G=Q[N],V=e.project(G,o).subtract(x),ue=m*V.x-f*V.y,Me=f*V.x+m*V.y,g=Math.min(g,Me),y=Math.max(y,Me),P=Math.min(P,ue+v*Me),A=Math.max(A,ue+S*Me);let st=Math.min((h-u)/(y-g),(s.x-a.x-T*u)/(A-P-T*g)),Ce=e.getScaleZoom(st,o),vt=e.options.zoomSnap;if(vt&&(Ce=Math.floor(Math.round(Ce/(vt/100))/100)*vt),Ce=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,Ce)),!Number.isFinite(Ce))return{center:t.getCenter(),zoom:Ce};let Ze=e.getZoomScale(Ce,o),bi=y*Ze-h,Mi=g*Ze-u,un=Math.max(bi,T?(Ze*(A-P)-s.x+a.x)/T:bi),hm=(Math.min(Mi,un)+Mi)/2,Hf=(Ze*(P+A)-a.x-s.x-(v+S)*hm)/2;return x.x+=(m*Hf+f*hm)/Ze,x.y+=(-f*Hf+m*hm)/Ze,{center:e.unproject(x,o),zoom:Ce}}function xu(e,t){return _(this)||k(this)?wa(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}L();J();Z();function vu(e,t,r){if(!_(this)&&!k(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return wa(this,e,{padding:ce(r||Pt).divideBy(2)}).zoom;e=e instanceof d.LatLngBounds?e:new d.LatLngBounds(e);let o=xr(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function wu(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:((j.value._panBy||j.value.panBy).call(this,r,t),!0)}L();J();Z();function Lu(){if(!_(this)&&!k(this))return j.value.getBounds.call(this);let e=xr(this),t=new d.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,it(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var bu=new WeakSet;var Wm=new WeakMap;vr();$m();function Mu(){this.options.maxBounds&&this._panInsideMaxBounds()}var wr=new WeakMap;La();Sa();J();Z();function ka(){let e=this,t=wr.get(e);if(!_(e)&&!k(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(ze(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Bu(){jo(this),Ye.get(this)?.remove(),wr.get(this)&&(wr.get(this).off("predrag",ka,this),wr.delete(this))}function Tu(){let e=this.dragging?._draggable;e&&(wr.set(this,e),e.on("predrag",ka,this))}async function Od(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(Ed(),_d));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function Xe(){}function zd(){if(bu.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}Fe(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",ba),this.on("rotate pitch",Mu,this),this.once("unload",Bu,this),this.whenReady(Tu,this),(this.options.rotate||this.options.trackContainerMutation)&&(Wm.set(this,Od(this)),Wm.get(this).catch(Xe))}L();function Ad(e){e instanceof d.DivIcon||(e.options.crossOrigin||=!0);let t=et.value.setIcon.call(this,e);return this._map&&!(e instanceof d.DivIcon)&&ga(this,this._map),t}function Rd(){let e=et.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}$();function Jo(e,t,r){let o=te.get(e),i=o&&ie.get(o);if(!Be.get(e)||!i)return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos());let n=xe(e,r||e.layerPointToLatLng(t))??0,a=xe(e,e.getCenter())??0,s=se.get(e)?.zoom??e.getZoom(),m=(n-a)*e.options.crs.scale(s)/(rt*Math.cos(i.lat*B)),f=it(e,j.value.layerPointToContainerPoint.call(e,t));return ze(e,f,!1,!1,m).subtract(e._getMapPanePos())}function Id(e){et.value._setPos.call(this,Jo(this._map,e,this.getLatLng()));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=Qn(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function Ct(e=this){let t=de.get(e);t?.backend&&!t.disposed&&De(t)}function Dd(e){et.value._updateZIndex.call(this,e);let t=$r.get(this)!==e;$r.set(this,e),t&&Ct(this)}var Jr=new WeakMap;L();function Gd(e){let t=this._marker._map,r=d.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);d.DomUtil.setPosition(this._marker._icon,o),Jr.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}L();J();Z();var Vi=new Map;var Ko={value:null};function Ud(){Ko.value=null;let e=[...Vi];Vi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function Nd(e,t){Vi.set(e,t),Ko.value===null&&(Ko.value=requestAnimationFrame(Ud)),e._panRequest=Ko.value}function Fd(e){let t=this._marker,r=t._map;if(!_(r)&&!k(r))return Jr.get(this)._cameraOriginalAdjustPan.call(this,e);let o=d.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=ce(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),d.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),Nd(this,e)}function jd(){if(!this.dragging||Jr.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;Jr.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Gd,e._adjustPan=Fd,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function Wd(){let e=et.value._initInteraction.call(this);return jd.call(this),e}function $d(){let e=hn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}function Vd(){let e=gn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}J();Z();function Zd(){let e=this._map;if(!_(e)&&!k(e))return xn.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=ce(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(ce(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}L();function qd(){if(yn.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=Jo(this._map,e,this._latlng).subtract(e);this._zoomAnimated?d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}L();function Hd(e){vn.value.call(this,e);let t=Jo(this._map,e,this._latlng).subtract(e);d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t))}L();function Yd(){let e=Ln.value.call(this);return e.rotate=e.pitch=d.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}L();Z();J();$();function Xd(e,t,r,o){let i=e._map,n=1/0,a=-1/0,s,m;for([s,m]of r.terrainCache)!s.startsWith(`${e._tileZoom}/`)||!m.range||(n=Math.min(n,m.range[0]),a=Math.max(a,m.range[1]));if(!Number.isFinite(n)||!Number.isFinite(a))return t;let f=se.get(i)?.zoom??i.getZoom(),p=i.options.crs.scale(f)/(rt*Math.cos(o.lat*B)),c=xe(i,i.getCenter())??0,l,u,h,x,g;for(l=0;l<2;l++)for(h=xr(i,void 0,((l?a:n)-c)*p),u=0;u<2;u++)x=u?h.max:h.min,g=j.value.containerPointToLayerPoint.call(i,it(i,x,!0)),t.extend(i.project(i.layerPointToLatLng(g),e._tileZoom));return t}function Jd(e){let t=this._map,r=Be.get(t);if(!r&&!k(t)&&!_(t))return wn.value.call(this,e);let o=t.getBounds(),i=new d.Bounds(t.project(o.getNorthWest(),this._tileZoom),t.project(o.getSouthEast(),this._tileZoom)),n=te.get(t),a=n&&ie.get(n);return!r||!a?i:Xd(this,i,r,a)}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Map.prototype));d.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});Object.assign(d.Map.prototype,{layerPointToContainerPoint:pu,containerPointToLayerPoint:cu,_getCenterLayerPoint:lu,panBy:uu,setZoomAround:du,panInside:hu,_limitCenter:gu,_limitOffset:yu,_getBoundsCenterZoom:xu,getBoundsZoom:vu,_tryAnimatedPan:wu,getBounds:Lu});d.Map.addInitHook(zd);et.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Marker.prototype));d.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});Object.assign(d.Marker.prototype,{setIcon:Ad,getEvents:Rd,_setPos:Id,_updateZIndex:Dd,_initInteraction:Wd});hn.value=d.Popup.prototype.getEvents;Object.assign(d.Popup.prototype,{getEvents:$d});gn.value=d.Tooltip.prototype.getEvents;Object.assign(d.Tooltip.prototype,{getEvents:Vd});yn.value=d.Popup.prototype._updatePosition;xn.value=d.Popup.prototype._adjustPan;Object.assign(d.Popup.prototype,{_adjustPan:Zd,_updatePosition:qd});vn.value=d.Tooltip.prototype._setPosition;Object.assign(d.Tooltip.prototype,{_setPosition:Hd});wn.value=d.GridLayer.prototype._getTiledPixelBounds;Ln.value=d.GridLayer.prototype.getEvents;Object.assign(d.GridLayer.prototype,{getEvents:Yd,_getTiledPixelBounds:Jd});L();var Qo=new WeakMap;var Zi=new WeakMap;var qi=new WeakMap;L();La();$();J();Z();function Kd(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function wf(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=Kd(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Yt({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=pt.get(e),a=Ye.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=_(e)*B,f=k(e)*B;wf(r,n,a,s,m,f,i),wf(o,n?.moon,a,s,m,f,i)}var Qd=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var Lf=[0,0,0];function is(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function bf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function eh(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=Qd,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${bf(is(n[1],i[1],a,Lf))}, ${bf(is(n[2],i[2],a,Lf))})`,tint:is(n[3],i[3],a)}}function ns(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}$();function as(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*B-o,a=t*B,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/B+180+360)%360;return{altitude:s/B,azimuth:f,direction:[Math.sin(f*B)*Math.cos(s),Math.sin(s),-Math.cos(f*B)*Math.cos(s)]}}$();$();var Hi=Math.sin(23.4397*B);$();var Yi=Math.cos(23.4397*B);function th(e,t,r){let o=ns(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*B,n=(218.316+13.176396*o+6.289*Math.sin(i))*B,a=5.128*Math.sin((93.272+13.22935*o)*B)*B,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Yi-Math.sin(a)*Hi,f=Math.cos(a)*Math.sin(n)*Hi+Math.sin(a)*Yi;return as(o,t,r,Math.atan2(m,s),Math.asin(f))}$();function rh(e,t,r){let i=ns(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*B,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*B,s=Math.asin(Math.sin(a)*Hi),m=Math.atan2(Math.sin(a)*Yi,Math.cos(a));return as(i,t,r,m,s)}function Kr(e){let t=te.get(e);t&&E(t)}function Sr(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=rh(t.time,m.lat,m.lng);pt.set(r,f),Object.assign(f,eh(f.altitude)),f.moon=th(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Yt(e),Kr(r)}catch(s){pt.delete(r),Yt(e),Kr(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function oh(e){e.control.live=!0,Sr(e)}function ih(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),pt.delete(r),Yt(e),Kr(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),Sr(e)}function nh(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=d.DomUtil.create("div","sunlight-sun"),o=d.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=d.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=Sr.bind(null,l),l.updateSky=Yt.bind(null,l),m.onclick=oh.bind(null,l),n.onchange=a.oninput=ih.bind(null,l),d.DomEvent.disableClickPropagation(i),d.DomEvent.disableScrollPropagation(i),l}function ah(e){e.control.live&&Sr(e)}function sh(e,t){let r=qi.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=nh(t),qi.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),Qo.set(t,e),Zi.set(e,r),r.update(),r.timer=setInterval(ah,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}L();L();function mh(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${d.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=d.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}L();L();var Mf=d?.LayersControl?.prototype._addItem;Mf&&!d.Control.Layers&&(d.LayersControl.prototype._addItem=Cv);function Cv(e){let t=Mf.call(this,e);return t.querySelector(".leaflet-control-layers-selector").layerId=d.Util.stamp(e.layer),t}function fh(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===d.Util.stamp(t)||i instanceof d.LayerGroup&&i.hasLayer(t))return mh(o,t,r),!0;return!1}function ss(e){let t=fh(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var ms=[];function ph(){let e=ms.shift();e?.map.hasLayer(e.layer)&&ss(e)}function fs(){ms.push(this),queueMicrotask(ph)}function ch(){this.map.off("layeradd layerremove",fs,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function ei(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",fs,o),e.once("remove",ch,o),ss(o)}var _t=new WeakMap;L();function lh(e){return _t.get(this).addTo(e)}L();function uh(){return d.Control.prototype.remove.call(_t.get(this))}function Bf(e){d.Util.setOptions(this,e),this.live=!0,this.layer=new d.Layer,_t.set(this.layer,this),z.set(this.layer,"time")}function dh(e){return sh(this,e)}L();function Tf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function hh(e){d.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?ei(this.layer,t,Tf.bind(null,t)):Tf(t,!1),this}L();function gh(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):d.Control.prototype.remove.call(this)}function yh(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=qi.get(t);clearInterval(r),Qo.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),pt.delete(t),Yt(e),o.remove(),i.remove(),Kr(t),n===e&&(n.control=null)}function xh(){let e=Zi.get(this);e&&(yh(e),Zi.delete(this))}Ka();var Qr=class extends ht(d.Control){static initHooks=!0;static defaultOptions={position:"bottomright"};constructor(t){super(t),d.version.startsWith("2.")&&(Bf.call(this,t),this.callInitHooks())}};Object.assign(Qr.prototype,{onAdd:dh,onRemove:xh,addTo:hh,remove:gh});d.version.startsWith("1.")&&(Qr.prototype.options=Object.assign(Object.create(d.Control.prototype.options),Qr.defaultOptions),Qr.prototype.initialize=Bf);d.Control.Time=Qr;L();L();var Xt=new WeakMap;var ps=new WeakMap;L();var Le=new WeakMap;var Y=new WeakMap;var kr=new WeakMap;var Cr=new WeakMap;var X=new WeakMap;var Je=new WeakMap;var We=new WeakMap;var _r=new WeakMap;var ae=new WeakMap;L();var cs=new WeakMap;var Xi=new WeakMap;var Jt=new WeakSet;var Pf=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var Sf=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var kf=["minLon","minLat","maxLon","maxLat"];function vh(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Pf.length;o++)r[Pf[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<Sf.length;o++)r[Sf[o]]=t.getUint8(96+o);for(o=0;o<kf.length;o++)r[kf[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var ti=new WeakMap;async function ri(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(ae.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(ti.get(e)&&n!==ti.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&ti.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function eo(e){if(!Jt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return eo(e.options.archive);let t=Xi.get(e);return t||(t=ri(e,0,127).then(vh),Xi.set(e,t)),t}var gt=new WeakMap;var Et=new WeakMap;$();function ls(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of Y.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function wh(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=w.get(t).device,i=e.preparedGeometry,n={position:{size:3,data:i.positions},normal:{size:3,data:i.normals},color:{size:3,data:i.colors}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:i.uvs});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Oe(),device:o,geometry:m,program:Ue(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:Mt.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,q(r.mesh,M.get(t)),E(t)}var Lh=new TextDecoder;function bh(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var Mh={bytes:null,cursor:0};function oi(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function Bh(e){let t=Mh,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=oi(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=oi(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=oi(t);for(s of i)if(s.length=oi(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=oi(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function us(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function Th(e,t,r,o){return Bh(await us(await ri(e,t,r),o))}async function Ph(e,t,r,o){let i=Cr.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,Th(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function Sh(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function kh(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await us(await ri(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function Ch(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await Ph(e,i,n,t.internalCompression),o?.throwIfAborted(),c=Sh(p,r),!c)return;if(c.runLength)return l=await kh(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function to(e,t,r,o,i){if(!Jt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return to(e.options.archive,t,r,o,i);let n=bh(t,r,o);i?.throwIfAborted();let a=await eo(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return Ch(e,a,n,i)}async function _h(e,t){if(X.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await to(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(Lh.decode(r.data)):{type:"FeatureCollection",features:[]}}$();function Eh(e,t,r){let o=r.options.crs,i=o.project(D.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(D.get(e).lat*B),jobs:[],featureFaces:[],skipped:0}}var ds=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function Oh(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data?.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function zh(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=Oh.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Cf=new WeakMap;function Ah(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function hs(e,t){if(typeof Worker>"u")throw new Error("Web Workers are required to prepare source geometry");let r=e,o,i;if(globalThis.location){let a=new URL(e,location.href);(a.protocol==="https:"||a.protocol==="http:")&&a.origin!==location.origin&&(o=URL.createObjectURL(new Blob([`import ${JSON.stringify(a.href)};`],{type:"text/javascript"})),r=o)}try{i=new Worker(r,{type:"module"})}finally{!i&&o&&URL.revokeObjectURL(o)}let n={url:e,pool:t,worker:i,blobUrl:o};return t&&t.entries.add(n),n}function Rh(e,t){let r=e&&Cf.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Cf.set(e,r),e.once("unload",Ah.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return hs(t,r)}async function ii(e,t,r,o=new AbortController().signal){o.throwIfAborted();let i=Rh(e,t||ds),{worker:n,pool:a}=i,s={worker:n,signal:o,input:r};i.task=s;let m=!1;try{let f=await new Promise(zh.bind(null,s));return m=!0,f}finally{n.removeEventListener("message",s.onEvent),n.removeEventListener("error",s.onEvent),n.removeEventListener("messageerror",s.onEvent),o.removeEventListener("abort",s.onEvent),i.task=null,m&&a&&!a.closed&&!o.aborted?a.idle.push(i):(i.closed||n.terminate(),a&&a.entries.delete(i)),i.blobUrl&&(URL.revokeObjectURL(i.blobUrl),i.blobUrl=null)}}async function Ih(e,t){try{let r=await ii(e.map||e.backend._map,e.backend.options.workerUrl,{jobs:e.jobs,nightLight:!!e.backend.options.nightLight},t),o;for(o=0;o<r.ranges.length;o++)Object.assign(e.featureFaces[o],r.ranges[o]);e.positions=r.positions,e.uvs=r.uvs,e.lights=r.lights,e.preparedGeometry=r}finally{e.jobs=null}}function Dh(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function Gh(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}L();function Uh(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new d.LatLng(r,t),f=i.project(m),p=xe(s,m),c=M.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}L();function Nh(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=M.get(r),f,p,c,l,u,h;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new d.LatLng(c,p),u=o.project(l),h=xe(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(h)&&Number.isFinite(m.position[1])?h-m.position[1]:0})}return s}function Fh(e,t){let r=t.type==="Polygon"?[t.coordinates]:t.type==="MultiPolygon"?t.coordinates:[],o=[],i,n,a;for(i of r){if(!i.length)throw new Error("Empty GeoJSON polygon");a=[];for(n of i)a.push(Nh(e,n));o.push(a)}return o}function jh(e,t,r,o,i,n){let a=t.geometry,s=Fh(e,a),m=a.type==="Point"?Uh(e,r,o):null,f=e.backend.options.nightLight,p=m?Bt(i.color??(f?void 0:5210683)):n,c=m&&!f?Bt(i.trunkColor??7491898):null;e.jobs.push({point:m,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:p.r,g:p.g,b:p.b},trunkColor:c?{r:c.r,g:c.g,b:c.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}L();function Wh(e,t,r,o){if(!t)return!0;let i=e.project(new d.LatLng(o,r),t.z);return Math.floor(i.x/256)===t.x&&Math.floor(i.y/256)===t.y}function $h(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=Dh(t,r.options.nightLight),s=t.geometry,m=a[0],f=a[1];if(!Wh(i,n,m,f))return;let p=Gh(r,t);if(p===null){e.skipped++;return}let{color:c=14267276}=p,l=Bt(c);jh(e,t,m,f,p,l),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:l})}async function Vh(e,t,r){let o=performance.now()+4,i;for(i of r){if(t.request.signal.aborted)return;if(performance.now()>=o){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;o=performance.now()+4}$h(e,i)}}async function Zh(e,t,r){try{if(await new Promise(requestAnimationFrame),await se.get(r),t.request.signal.aborted)return;let o=await _h(e,t);if(t.request.signal.aborted)return;if(o?.type!=="FeatureCollection"||!Array.isArray(o.features))throw new Error("Invalid GeoJSON response");if(X.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");if(e.options.worker===!1)throw new Error("worker: false is no longer supported; GeoJSON geometry requires Web Workers");let i=Eh(e,t,r);if(await Vh(i,t,o.features),t.request.signal.aborted||(await Ih(i,t.request.signal),t.request.signal.aborted))return;wh(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{Je.set(e,Je.get(e)-1),Ji(e,r)}}function gs(e,t){return e.distance-t.distance}function qh(e,t){let r=[],o,i,n;for(o of e)for(i of Y.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(gs),r}function Ji(e,t=e._map){let r=t&&te.get(t);if(!r||!F.has(r))return;let o=[],i,n,a;for(i of F.get(r))Number.isFinite(Je.get(i))&&Y.get(i)&&(ae.get(i)||X.get(i))&&o.push(i);let s=qh(o,t),m=0;for(i of o)m+=Je.get(i);for({layer:a,area:n}of s){if(m>=4)break;Je.get(a)>=2||(n.started=!0,Je.set(a,Je.get(a)+1),m++,Zh(a,n,t))}for(i of o)ls(i)}var at=new WeakMap;var ke=new WeakMap;function Ot(e,t){t?.model&&(t=null),!(at.get(e)?.mesh===t?.mesh&&at.get(e)?.vertexStart===t?.vertexStart)&&(at.get(e)&&(at.get(e).mesh.highlight=null),at.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),E(e))}var Ae=new WeakMap;var Er=new WeakMap;var Re=new WeakMap;function zt(e,t,r){let o=Re.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ae.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=R.get(e),n;if(i){let a=!1;for(n of F.get(i))if(Re.get(n)&&!Re.get(n).hidden){a=!0;break}a?(Er.get(i)===void 0&&Er.set(i,Ae.get(e).style.cursor),Ae.get(e).style.cursor="pointer"):Er.get(i)!==void 0&&(Ae.get(e).style.cursor=Er.get(i),Er.delete(i))}}function ro(e,t){t.request.abort();let r;if(t.mesh){at.get(e)?.mesh===t.mesh&&(Ot(e,null),ke.set(e,null),zt(e,null)),q(t.mesh,null),E(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Hh(e,t){return e.distance-t.distance}function oo(e){if(!e._map||!R.get(e))return;if(X.get(e)){Y.get(e).has("geojson")||Y.get(e).set("geojson",{request:new AbortController}),Ji(e);return}if(!U.get(e))return;let t=U.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([U.get(e).maxLat,U.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([U.get(e).minLat,U.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of Y.get(e))m.has(c)||(ro(e,l),Y.get(e).delete(c));let h=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,h.push(u);h.sort(Hh);for(u of h)c=`${u.x}/${u.y}`,Y.get(e).has(c)||Y.get(e).set(c,{coords:u,request:new AbortController});Ji(e)}function ni(e){if(!M.get(e)||!D.get(e))return;Et.get(e)==null&&Et.set(e,M.get(e).position[1]);let t=me.get(e._map),r=t&&pr(t,D.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;M.get(e).position[1]=Et.get(e)+(r??0)+o}function Yh(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Xh(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Jh(e,t){let r=R.get(t),o;if(e.geometry&&e.geometry.device!==w.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=w.get(r).device;Yh(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Xh(n,a),e.program.pipelineCache.clear(),e.program=Ue(t,n),e.device=a}e.texture&&e.texture.device!==w.get(r).device&&(o=e.texture,o.device=w.get(r).device,o.texture=w.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=w.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var ai=new WeakMap;function Kh(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function Or(e,t,r){throw Kh(r),gt.get(t).reject(e),te.delete(r),e}async function Qh(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){Or(o,e,t)}return r||Or(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function eg(e,t,r){try{return await e.requestDevice()}catch(o){Or(o,t,r)}}function tg(e){let t=ai.get(e.currentTarget),r=te.get(t);if(w.get(r)?.device!==e.currentTarget||!F.get(r))return;let o;for(o of F.get(r))o.fire("error",{error:e.error})}function rg([e,t]){let r=ai.get(t),o=te.get(r);if(!o||w.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of F.get(o))n.fire("error",{error:i})}function og(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var si=new Float32Array(20);si[0]=si[5]=si[10]=si[15]=1;function ig(e,t){let r=w.get(e),o=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),i=t.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),n=t.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),a=t.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});r.sunlight={layout:o,buffer:i,sampler:n,lights:a,size:0},t.queue.writeBuffer(i,0,si),Wn(e,1),r.roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:null,format:"rgba8unorm",srgb:!1,uploaded:null}}var io=new WeakMap;var ys=[];function ng(){let e=ys.shift();io.set(e,!1),!(R.get(e)!==e||!w.get(e))&&(e._map._animatingZoom?E(e):gr(e))}function Ki(){let e=this;io.get(e)||(io.set(e,!0),ys.push(e),queueMicrotask(ng))}var mi=new WeakMap;function Qi(){mi.set(this,null)}var xs=[];function ag(){let e=xs.shift();R.get(e)===e&&w.get(e)&&gr(e)}function en(e){let t=this._map;e&&!qe.get(this)&&(qe.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),xs.push(this),queueMicrotask(ag)}function tn(){let e=this,t;if(he.get(e))for(t of he.get(e).keys())t.finish();he.set(e,null),qe.set(e,null),se.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),Bn(e._map),mi.set(e,null),E(e)}function sg(e,t,r){mr.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;z-index:1;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene"),t.getPane("mapPane").before(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ki,e),t.on("zoomstart",Qi,e),t.on("zoomanim",en,e),t.on("zoomend",tn,e)}async function mg(e,t){let r=document.createElement("canvas");navigator.gpu||Or(new Error("Layer3D requires WebGPU"),e,t);let o=await Qh(e,t),i=await eg(o,e,t);ai.set(i,t),i.addEventListener("uncapturederror",tg),Promise.all([i.lost,Promise.resolve(i)]).then(rg);let n=r.getContext("webgpu");n||(i.destroy(),Or(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),R.set(e,e),F.set(e,new Set),ie.set(e,D.get(e)),oe.set(e,Oe()),ee.set(e,og()),w.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),ig(e,i),sg(e,t,r)}async function fi(e,t){let r=te.get(t);gt.get(r)&&await gt.get(r).promise,r||(r=e,gt.set(e,Promise.withResolvers()),gt.get(e).promise.catch(Xe),te.set(t,r),await mg(e,t),gt.get(e).resolve(),gt.delete(r),gr(r),te.set(t,r));let o=t.options.crs.project(ie.get(r)),i=t.options.crs.project(D.get(e)),n=Math.cos(ie.get(r).lat*B);Et.get(e)==null&&Et.set(e,M.get(e).position[1]),M.get(e).position[0]=(i.x-o.x)*n,M.get(e).position[1]=Et.get(e),M.get(e).position[2]=-(i.y-o.y)*n,ni(e),M.get(e).scale.fill(n/Math.cos(D.get(e).lat*B)),R.set(e,r),w.set(e,w.get(r)),oe.set(e,oe.get(r)),ee.set(e,ee.get(r)),F.get(r).add(e),q(M.get(e),oe.get(r)),Zt(M.get(e),Jh,e),E(r),(U.get(e)&&z.get(e)!=="raster"||X.get(e))&&oo(e)}var $e=new WeakMap;$();L();function fg(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,v;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],h=m*l-f*c,x=f*p-s*l,g=s*c-m*p,u=0;u<3;u++)y=u===0?i:u===1?n:a,r[y*3]+=h,r[y*3+1]+=x,r[y*3+2]+=g;for(o=0;o<r.length;o+=3)for(v=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=v;return r}function _f(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)_f(r,t)}function pi(e,t){if(!$e.get(e))return;let r=[];_f($e.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,h,x,g,y,v,S,T,P,A;if(!Te.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),_e(n));return}Pe(M.get(e));let Q=e._map,N=Q.options.crs,G=N.project(ie.get(R.get(e))),V=Math.cos(ie.get(R.get(e)).lat*B),ue=N.scale(ye.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],h=m.data[l+1],x=m.data[l+2],g=p[1]*u+p[5]*h+p[9]*x+p[13],y=Math.max(0,Math.min(1,1-(g-M.get(e).position[1])/8)),y&&(v=p[0]*u+p[4]*h+p[8]*x+p[12],S=p[2]*u+p[6]*h+p[10]*x+p[14],T=N.transformation.transform(new d.Point(G.x+v/V,G.y-S/V),ue),P=pr(t,T),Number.isFinite(P)&&(A=(P-g)*y,m.data[l]+=c[4]*A,m.data[l+1]+=c[5]*A,m.data[l+2]+=c[6]*A));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(fg(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),_e(n)}E(e)}function pg(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function rn(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=w.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=pg(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function cg(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:rn(e,o?.baseColorTexture,!0),metalTexture:rn(e,o?.metallicRoughnessTexture),emissiveTexture:rn(e,t.emissiveTexture,!0),occlusionTexture:rn(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function lg(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||lr)o.materials.push(cg(o,i));return o}var ug=[0,0,0,1];var dg=[1,1,1];var hg=[0,0,0];function gg(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||ug,[n,a,s]=e.scale||dg;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||hg,1]}function yg(e,t,r){let o=e.materials[t.material]||{color:[1,1,1],metallic:1};if((o.baseTexture||o.metalTexture||o.emissiveTexture||o.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let i=Ue(e.backend,o);e.resources.push(i);let n=w.get(e.backend).device,a,s;for([a,s]of Object.entries(r))s.size||=1,s.count=s.data.length/s.size,s.indexFormat=s.data instanceof Uint32Array?"uint32":"uint16",s.buffer=n.createBuffer({size:Math.max(4,s.data.byteLength),usage:a==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),n.queue.writeBuffer(s.buffer,0,s.data);let m={device:n,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(m),{device:n,geometry:m,program:i}}function Ef(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Oe(),name:n.name};a.matrix=gg(n);let s,m,f,p,c;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=structuredClone(s.preparedAttributes),f=yg(e,s,m),p={...Oe(),device:f.device,geometry:f.geometry,program:f.program,fadeDuration:250,id:Mt.value++,renderOrder:0},p.name=o.meshes[n.mesh].name,p.extras=n.extras||{},q(p,a);for(c of n.children||lr)q(Ef(e,c),a);return i.delete(t),a}function xg(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function vg(e,t){let r=[],o;try{for(o of t.nodes)r.push(Ef(e,o))}catch(i){throw xg(e),i}return r}function wg(e){let t=$e.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function Lg(e){await Le.get(e).promise;let t=new URL(We.get(e),document.baseURI).href,{description:r,images:o}=await ii(e._map,e.options.workerUrl,{type:"model",url:t});await Le.get(e).promise,await se.get(e._map);let i=lg(e,r,o),n=r.scenes?.[r.scene||0];if(!n)throw new Error("Missing glTF scene");let a=vg(i,n),s={...Oe(),id:t,extras:r.extras||{}};if(!a.length)throw new Error("Expected a glTF model with a non-empty scene");let m;for(m of a)q(m,s);$e.set(e,s),wg(e),q($e.get(e),M.get(e)),pi(e,me.get(e._map))}async function bg(e){try{return M.set(e,Oe()),ne.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(ae.get(e)||X.get(e))&&(cs.set(e,M.get(e)),ae.get(e)&&U.set(e,await eo(e))),e._map&&(await fi(e,e._map),Le.get(e).resolve()),We.get(e)&&await Lg(e),R.get(e)&&E(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}function Mg(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${We.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Bg(e,t,r,o){let i=kr.get(e),n=We.get(e),a=$e.get(e);n&&(t=a?1:0);let s=r||(n?!a:!U.get(e)&&!X.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=Mg(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Of(e){let t=e.target,r=kr.get(t);if(!t._map)return;e.type==="add"&&ei(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of Y.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Bg(t,o,i,n)}function At(e,t=yr){_r.set(e,!0),d.Util.setOptions(e,{ariaLabel:"3D scene",...t}),z.set(e,"3d");let r=!X.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(We.set(e,r?e.options.url:null),ae.set(e,e.options.url&&!r&&!X.get(e)?new URL(e.options.url,document.baseURI).href:null),Cr.set(e,new Map),e.options.center&&D.set(e,new d.LatLng(e.options.center[0],e.options.center[1])),Y.set(e,new Map),Je.set(e,0),ae.get(e)||X.get(e)||r){let o=d.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",kr.set(e,o),e.on("add error",Of),e.on("ready progress",d.Util.throttle(Of,250,e))}Le.set(e,Promise.withResolvers()),re.set(e,Promise.resolve().then(bg.bind(null,e))),re.get(e).catch(Xe)}function Tg(){this.keys.clear()}var on={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};L();ji();vr();J();Z();function Pg(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?(Fe(t,Math.max(20,Math.min(85,_(t)-(e.clientY-this.dragY)*.2)),k(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var nn=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];$();function Rt(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=D.get(t),a=M.get(t),s=i.project(n),m=Math.cos(n.lat*B),f=i.project(r.latlng),p=xe(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function vs(){let[e,t,r]=Rt.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<nn.length;a++)[,s,m,f]=nn[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;E(this.layer)}function Sg(){this.meshes&&vs.call(this)}function ws(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,d.DomEvent.off(document,"keydown keyup",this.onKey),d.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)Ge(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){d.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),Ht(e,this.saved.pitch),this.saved=null}}function kg(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!on[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}$();L();var Cg=["dragging","keyboard","doubleClickZoom","boxZoom"];J();Z();ji();function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}var Kt=[.16,.2,.32];var zf=[.75,.2,.15];var yt=[.85,.64,.5];var Qt=[.08,.07,.06];var Ls={body:[[C(-.17,.17,-.1,.1),.82,.95,Kt],[C(-.19,.19,-.11,.11),.95,1.44,zf],[C(-.05,.05,-.05,.05),1.44,1.5,yt],[C(-.1,.1,-.11,.1),1.5,1.72,yt],[C(-.105,.105,-.06,.115),1.58,1.77,Qt],[C(-.105,.105,-.115,-.06),1.7,1.77,Qt]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Kt],[C(-.07,.07,-.17,.07),-.9,-.82,Qt]],arm:[[C(-.05,.05,-.05,.05),-.55,0,zf],[C(-.045,.045,-.045,.045),-.66,-.55,yt]]};function an(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,h=f*p-s*l,x=s*c-m*p,g=Math.hypot(u,h,x),y,v;for(y=0;y<3;y++)v=y===0?o:y===1?i:n,e.push(...v),t.push(u/g,h/g,x/g),r.push(...a)}function ci(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,h;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)h=(u+1)%a.length,an(t,r,o,i[u],i[h],n[h],f),an(t,r,o,i[u],n[h],n[u],f);for(u=1;u<a.length-1;u++)an(t,r,o,n[0],n[u],n[u+1],f),an(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function _g(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}L();var Af=new WeakMap;function Eg(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function bs(e){let t=Af.get(e.geometry);if(t)return t;let r=e.worldMatrix,{position:o,index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=fa(o,i),f=m*(s?.count??1),p=[],c=[],l=new Map,u=[0,0,0],h=[0,0,0],x=[0,0,0],g=[],y,v,S,T,P,A,Q,N,G,V,ue,Me,st,Ce,vt,Ze=-1/0;for(y=0;y<f;y+=3)v=i?i.data[y%m]:y%m,!(e.program.nightLight&&a&&a.data[v*2]<=2)&&(pa(e,y,u,h,x),g[0]=r[0]*u[0]+r[4]*u[1]+r[8]*u[2]+r[12],g[1]=r[1]*u[0]+r[5]*u[1]+r[9]*u[2]+r[13],g[2]=r[2]*u[0]+r[6]*u[1]+r[10]*u[2]+r[14],g[3]=r[0]*h[0]+r[4]*h[1]+r[8]*h[2]+r[12],g[4]=r[1]*h[0]+r[5]*h[1]+r[9]*h[2]+r[13],g[5]=r[2]*h[0]+r[6]*h[1]+r[10]*h[2]+r[14],g[6]=r[0]*x[0]+r[4]*x[1]+r[8]*x[2]+r[12],g[7]=r[1]*x[0]+r[5]*x[1]+r[9]*x[2]+r[13],g[8]=r[2]*x[0]+r[6]*x[1]+r[10]*x[2]+r[14],T=g[3]-g[0],P=g[4]-g[1],A=g[5]-g[2],Q=g[6]-g[0],N=g[7]-g[1],G=g[8]-g[2],V=P*G-A*N,ue=T*N-P*Q,Me=A*Q-T*G,st=Math.hypot(V,Me,ue),!(!st||Math.abs(Me)>.9*st)&&(n&&(S=v*3,(r[0]*n.data[S]+r[4]*n.data[S+1]+r[8]*n.data[S+2])*V+(r[2]*n.data[S]+r[6]*n.data[S+1]+r[10]*n.data[S+2])*ue<0&&(V=-V,ue=-ue)),Ce=Math.hypot(V,ue),vt=c.length/2,p.push(...g),Ze=Math.max(Ze,g[0],g[3],g[6]),c.push(V/Ce,ue/Ce),Eg(l,g,vt)));return t={tri:Float32Array.from(p),nrm:Float32Array.from(c),cells:l,maxX:Ze,origin:[r[12],r[13],r[14]]},Af.set(e.geometry,t),t}function Ms(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],h=-a*l,x=a*c-n*u,g=n*l,y=m*h+f*x+p*g;if(Math.abs(y)<1e-9)return-1;let v=r-e[s],S=o-e[s+1],T=i-e[s+2],P=(v*h+S*x+T*g)/y;if(P<0||P>1)return-1;let A=S*p-T*f,Q=T*m-v*p,N=v*f-S*m,G=(n*A+a*N)/y;return G<0||P+G>1?-1:(c*A+l*Q+u*N)/y}function Og(e,t,r,o,i,n,a,s){let m,f,p,c;for(m=Math.floor(t/8);m<=a;m++)if(f=e.cells.get(`${m},${s}`),!!f)for(p of f)i.has(p)||(i.add(p),c=Ms(e.tri,p,t,r,o,1,0),c>1e-4&&n.push(c))}function zg(e){let t,r,o;for(t=1;t<e.length;t++){for(o=e[t],r=t-1;r>=0&&e[r]>o;)e[r+1]=e[r--];e[r+1]=o}let i=0,n=-1/0;for(o of e)o-n>1e-4&&i++,n=o;return i}function Rf(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||_e(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let h=bs(e),x=Math.floor(h.maxX/8);if(t>=h.maxX)return!1;let g=Math.floor(o/8),y=n;return y.length=0,i.clear(),Og(h,t,r,o,i,y,x,g),zg(y)%2===1}function Ag(e,t,r,o,i,n){o<1e-6?(e.normal[0]=-i,e.normal[1]=-n):(e.normal[0]=t/o,e.normal[1]=r/o)}function Bs(e,t,r,o,i,n,a,s){let m=Tt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=m.collisionBounds;if(!f){f=m.collisionBounds={radius:0,minY:1/0,maxY:-1/0};let V,ue,Me,st;for(V=0;V<m.template.position.length;V+=3)ue=m.template.position[V],Me=m.template.position[V+1],st=m.template.position[V+2],f.radius=Math.max(f.radius,Math.hypot(ue,st)),f.minY=Math.min(f.minY,Me),f.maxY=Math.max(f.maxY,Me)}let p=M.get(e),c=m.position||={},l=Math.max(p.scale[0],p.scale[1],p.scale[2]),u=f.radius*l+.35,h,x,g,y,v,S,T,P,A,Q,N,G;for(h of m.trips)if({x:N,y:A,z:G}=Go(m,h,c),A=p.position[1]+(A+f.minY)*p.scale[1],Q=p.position[1]+(c.y+f.maxY)*p.scale[1],!(A>r+1.7*l||Q<r+.2*l)&&(N=p.position[0]+N*p.scale[0],G=p.position[2]+G*p.scale[2],x=(N-t)*i+(G-o)*n,g=Math.max(0,Math.min(a,x)),y=t+g*i-N,v=o+g*n-G,S=y*y+v*v,!(S>=u*u))){if(a===0){s.found=!0,P=Math.hypot(t-N,o-G),s.normal[0]=P?(t-N)/P:0,s.normal[1]=P?(o-G)/P:0;continue}T=Math.max(0,x-Math.sqrt(u*u-S)),!(T>a||T>=s.best)&&(s.best=T,s.found=!0,P=Math.hypot(t+T*i-N,o+T*n-G),Ag(s,t+T*i-N,o+T*n-G,P,i,n))}return s.found}function If(e){let{layer:t,local:r,hitData:o}=e,i=R.get(t);if(!i||!F.get(i))return!1;Pe(oe.get(t));let n=M.get(t),a=Rt.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=F.get(i),c,l,u,h;for(c of p)if(!(c===t||z.get(c)==="terrain")){if(z.get(c)==="traffic"){if(o.best=0,o.found=!1,Bs(c,s,m,f,0,0,0,o))return!0;continue}for(h=o.nodes,h.length=0,M.get(c)&&h.push(M.get(c));h.length;)if(l=h.pop(),!!l.visible){if(l.geometry&&(Rf(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||Rf(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)h.push(u)}}return!1}function Ts(){if(!this.saved||!If(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new d.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!If(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function Ps(e){return Math.atan2(Math.sin(e),Math.cos(e))}function Rg(e,t){return e===t||Xt.get(e)==="terrain"||Xt.get(e)==="traffic"}function Ig(e){let t=ne.get(this.layer),r=Rt.call(this,this.local),o=M.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;Pe(oe.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of F.get(R.get(this.layer)))Rg(s,this.layer)||z.get(s)==="raster"||s.options.nightLight||Zt(M.get(s),la,t.meshes);for(m of ca(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}L();$();function Dg(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=Ms(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function Gg(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||_e(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=bs(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],h=s-r[14]+c.origin[2];t.seen.clear();let g,y,v;for(g=Math.floor(Math.min(l,l+m*p)/8);g<=Math.floor(Math.max(l,l+m*p)/8);g++)for(y=Math.floor(Math.min(h,h+f*p)/8);y<=Math.floor(Math.max(h,h+f*p)/8);y++)v=c.cells.get(g+","+y),v&&Dg(v,c,t,l,u,h)}function Ug(e,t,r,o,i,n,a,s){Pe(oe.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of F.get(R.get(e)))if(!(m===e||z.get(m)==="terrain")){if(z.get(m)==="traffic"){Bs(m,t,r,o,i,n,a,s);continue}Zt(M.get(m),Gg,s)}return s.found?s.normal:null}function Df(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Ug(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function Ng(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=M.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=Rt.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=Df.call(this,s,m,f);if(c){let l=s*c[0]-m*c[1];s-=l*c[0],m+=l*c[1],Df.call(this,s,m,f)&&(s=m=0)}this.state.latlng=new d.LatLng(o+m/111320,i+s/(111320*Math.cos(o*B))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}yo();$();Z();vr();J();function Fg(e,t,r){let o=this.layer._map;if(e||t){let n=k(o)*B,a=Ps(-this.state.heading-n);Math.abs(a)>.001&&Fe(o,_(o),(n+a*Math.min(1,r*4))*tt),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}function jg(e,t,r,o,i,n){o&&(e.state.heading=Ps(e.state.heading+o*2.5*i),n=!0),r&&(Ng.call(e,r,i),n=!0),n&&Ig.call(e,t),Fg.call(e,r,o,i)&&(n=!0),n&&vs.call(e)}function Wg(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!w.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,Ts.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of nn)this.meshes.push(dr(t,ci(Ls[i])));o=!0}let a=M.get(t).position[1]+Rt.call(this,this.local)[1]*M.get(t).scale[1];_g.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=on[n]?.[0]||0,m+=on[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),jg(this,a,s,m,r,o)}function Ss(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*rt*Math.cos(this.state.latlng.lat*B)/256)),o;this.saved={zoom:e.getZoom(),pitch:_(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Cg)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-k(e)*B,e.setView(this.state.latlng,r,{animate:!1}),Ht(e,75),Ts.call(this),d.DomEvent.on(document,"keydown keyup",this.onKey),d.DomEvent.on(window,"blur",this.onBlur),d.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function $g(){this.saved?ws.call(this):Ss.call(this)}function Vg(e,{speed:t,distance:r,...o}){let i=new d.Layer;Xt.set(i,"walk"),At(i,o);let n=new Set,a=d.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=d.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=d.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",d.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ps.set(i,f.state),f.step=Wg.bind(f),f.onKey=kg.bind(f),f.onBlur=Tg.bind(f),f.onPointer=Pg.bind(f),f.onTerrain=Sg.bind(f),f.start=Ss.bind(f),f.stop=ws.bind(f),f.toggle=$g.bind(f),e._walk=f,d.DomEvent.on(s,"click",f.toggle)}function Gf(e){d.Util.setOptions(this,e),Vg(this,this.options)}function Zg(e){let t=jt.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},jt.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function qg(e){let t=jt.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}Ka();var no=class extends ht(d.Control){static initHooks=!0;static defaultOptions={position:"bottomright",speed:70,distance:20};constructor(t){super(t),d.version.startsWith("2.")&&(Gf.call(this,t),this.callInitHooks())}};Object.assign(no.prototype,{onAdd:Zg,onRemove:qg});d.version.startsWith("1.")&&(no.prototype.options=Object.assign(Object.create(d.Control.prototype.options),no.defaultOptions),no.prototype.initialize=Gf);d.Control.Walk=no;var ao=new WeakMap;var zr=new WeakMap;L();function Hg(){ao.get(this).off(zr.get(this),this),ao.set(this,null),zr.set(this,null)}var Ar=new WeakMap;L();function ks(e,t){let r=$e.get(e);if(!M.get(e)||!ee.get(e))return null;let o,i,n,a,s,m,f;for(o of ua(e,t,M.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function li(e){ke.set(e,null),Ot(e,null),zt(e,null),e.fire("featurehover",{feature:null})}function Xg(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){ke.get(e)&&li(e);return}ke.set(e,ks(e,t)),Ot(e,ke.get(e)),zt(e,ke.get(e),t),e.fire("featurehover",{feature:ke.get(e),originalEvent:t})}function Jg(e){Xg(this,e)}function Kg(e,t){let r=ks(e,t);ke.set(e,r),Ot(e,r),zt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function Qg(e){Kg(this,e)}function ey(){li(this)}async function ty(e,t){try{await fi(e,t),Le.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function sn(e,t){if(!D.get(e)){let r=t.getCenter();D.set(e,new d.LatLng(r.lat,r.lng))}(ae.get(e)||X.get(e)||e.options.tooltip||We.get(e))&&(Ae.set(e,t.getContainer()),Ar.get(e)||Ar.set(e,{mousemove:Jg,click:Qg,mouseleave:ey}),e.options.tooltip&&(Re.set(e,d.DomUtil.create("div","leaflet-3d-tooltip",Ae.get(e))),Re.get(e).hidden=!0,Re.get(e).setAttribute("role","tooltip"),Re.get(e).setAttribute("aria-live","polite"),Re.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),d.DomEvent.on(Ae.get(e),Ar.get(e),e)),M.get(e)&&ty(e,t)}var er=new WeakMap;var Ke=new WeakMap;var tr=new WeakMap;$();var Cs={x:0,y:0};var Ie=new WeakMap;var ge=new WeakMap;var It=new WeakMap;var mn={size:[null,null],format:"r32float",usage:null};var _s={texture:null};var Uf={bytesPerRow:null};var Es=[null,null];function ry(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function oy(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,ry(n,s,c,r);return n}function iy(e,t){let r=w.get(e).device;if(ge.get(e)?.device===r)return ge.get(e);let o=er.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=oy(ot.get(e),o);return Ie.get(e)&&W(e,Ie.get(e).texture),Ie.set(e,{texture:r.createTexture((mn.size[0]=i*256,mn.size[1]=n*256,mn.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,mn)),low:Number.isFinite(s)?s:Ke.get(e),high:Number.isFinite(m)?m:Ke.get(e)}),r.queue.writeTexture((_s.texture=Ie.get(e).texture,_s),a,(Uf.bytesPerRow=i*1024,Uf),(Es[0]=i*256,Es[1]=n*256,Es)),_s.texture=null,It.set(e,new Map),ge.set(e,Ue(e,{baseTexture:t,unlit:!0,terrain:Ie.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ge.get(e)}var Os={size:null,usage:null};function ny(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function ay(e,t){let r=w.get(e).device,o=It.get(e).get(t);if(!o){o=ny(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((Os.size=Math.max(4,n.data.byteLength),Os.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,Os)),r.queue.writeBuffer(n.buffer,0,n.data);It.get(e).set(t,o)}return o}function sy(e,t,r,o){let i=Ke.get(e),n=Math.min(Ie.get(e).low,i)-i,a=Math.max(Ie.get(e).high,i)-i;return{device:w.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function my(e,t,r,o){if(!await tr.get(e)||!e._map||me.get(e._map)!==e||pe.get(t)!==e||o.request.signal.aborted||!I.get(t).has(`${r.z}/${r.x}/${r.y}`)||I.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-ye.get(e)))),a=e._map,s=a.options.crs,m=s.project(D.get(e)),f=Math.cos(D.get(e).lat*B),p=s.scale(r.z),c=2**(ye.get(e)-r.z),l=Cs;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let h=s.transformation.untransform(l,p),x=w.get(e).device,g=o.texture,y=iy(e,g),v=ay(e,n),S=Ke.get(e),T=(h.x-u.x)*f,P=-(h.y-u.y)*f,A=sy(e,v,T,P),Q={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[T,1,P],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:x,geometry:A,program:y,texture:g,terrain:[r.x*256*c-er.get(e).min.x*256,r.y*256*c-er.get(e).min.y*256,256*c,S],tile:o,opacity:t.options.opacity??1,id:Mt.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,q(Q,M.get(e)),E(e),I.get(e).set(o,Q)}async function zs(e,t,r){if(pe.get(e)&&r.done&&!r.request.signal.aborted&&I.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await my(pe.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}function ui(e,t){if(!I.get(e)||pe.get(e)===t)return;let r;for(r of I.get(e).values())pe.get(e)&&So(pe.get(e),r),r.mesh&&(r.mesh.visible=!0,q(r.mesh,M.get(e)));if(pe.set(e,t||null),t)for(r of I.get(e).values())r.done&&zs(e,r.coords,r)}async function fy(e,t,r){try{await r,Le.get(e).resolve(),ui(e,me.get(t))}catch(o){e.fire("error",{error:o})}}var py=new Map;var cy=new Map;function ly(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var fn=[null];var Dt=new WeakMap;$();var pn={size:[null,null],format:"rgba8unorm",usage:null};var uy={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var As={size:null,usage:null};var dy=[0,0,0,1,0,0,0,0,1,1,0,1];var hy=[0,1,0,0,1,0,0,1,0,0,1,0];var gy=[0,0,1,0,0,1,1,1];var yy=[0,2,1,1,2,3];function xy(e){let t={position:{size:3,data:new Float32Array(dy)},normal:{size:3,data:new Float32Array(hy)},uv:{size:2,data:new Float32Array(gy)},index:{data:new Uint16Array(yy)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((As.size=o.data.byteLength,As.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,As)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function vy(e,t){let r=w.get(e).device,o={device:r,texture:r.createTexture((pn.size[0]=t.image.width,pn.size[1]=t.image.height,pn.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,pn)),sampler:r.createSampler(uy),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Wr,n=wo,a=Lo;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ge.get(e)||ge.set(e,Ue(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Dt.get(e)||Dt.set(e,xy(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(D.get(e)),p=Math.cos(D.get(e).lat*B),c=m.scale(s.z),l=Cs;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let h=m.transformation.untransform(l,c),x=(h.x-u.x)*p,g=-(h.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[x,1,g],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Dt.get(e),program:ge.get(e),texture:o,opacity:e.options.opacity,id:Mt.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},q(t.mesh,M.get(e))}async function wy(e,t){try{await re.get(e);let r=await to(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{fn[0]=r.data;let o=new Blob(fn);fn[0]=null,t.image=await createImageBitmap(o)}}catch{throw fn[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}vy(e,t),t.loadedAt=performance.now(),t.done=!0,Ee.set(e,(Ee.get(e)||0)+1),zs(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),E(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,Ee.set(e,(Ee.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{fe.set(e,fe.get(e)-1),e._map&&(Rs(e),Co(e),fe.get(e)||e.fire("load"),E(e))}}function Ly(e,t){t.started=!0;let r=fe.get(e)===0;return fe.set(e,fe.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),wy(e,t)}function Rs(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of I.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(ly);for({tile:i}of o){if(fe.get(e)>=4)break;Ly(e,i)}}function by(e,t){let r=I.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&ko(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var Rr=[0,0];var Ir=[0,0];function My(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();Rr[0]=t.maxLat,Rr[1]=t.minLon,Ir[0]=t.minLat,Ir[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(Rr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(Ir,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function Ds(e){let t=e._map;if(!t||!R.get(e)||!U.get(e))return;let r=Math.max(U.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));cr.set(e,r);let o=My(t,U.get(e),r),i=py;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});sr.set(e,new Set(i.keys()));let p=cy;p.clear();let c=Math.max(U.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)I.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),by(e,u),Rs(e),Co(e)}async function By(e,t,r){try{await Promise.all([r,re.get(e)]),e._map===t&&t.hasLayer(e)&&Ds(e)}catch(o){e.fire("error",{error:o})}}function Ty(e,t){D.get(e)||D.set(e,t.getCenter());let r=fi(e,t);fy(e,t,r),By(e,t,r)}var Gs=new WeakMap;var Us=new WeakMap;var di=new WeakMap;var Dr=new WeakMap;var so=new WeakMap;var Ns=new WeakMap;async function Py(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await to(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);ot.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function Sy(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}L();function ky(e,t){let r=e._map;ye.set(e,t.maxZoom),Rr[0]=t.maxLat,Rr[1]=t.minLon;let o=r.project(Rr,ye.get(e)).divideBy(256).floor();Ir[0]=t.minLat,Ir[1]=t.maxLon;let i=r.project(Ir,ye.get(e)).divideBy(256).floor();er.set(e,new d.Bounds(o,i));let n=[],a=r.project(r.getCenter(),ye.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:ye.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(gs),n}var mo=new WeakMap;$();L();function Cy([e,t,r],o,i,n,a){let s=o.project(new d.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function _y(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function Ey(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,h,x;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let g={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(g.min[0]/64);l<=Math.floor(g.max[0]/64);l++)for(u=Math.floor(g.min[1]/64);u<=Math.floor(g.max[1]/64);u++)h=`${l}/${u}`,x=ct.get(e).get(h),x||ct.get(e).set(h,x=[]),x.push(g)}function Oy(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,h;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,h=t[l],o.push(h[0],h[1]-(u>=3?1.2:0),h[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function zy(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Ay(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)zy(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function Ry(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,h,x,g,y,v,S,T;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let P=[],A=[];for(p of f)for([l,u,h]of p)x=o.project([u,l],i),P.push([x.x,x.y,h]);for(p of f)for(g of p)A.push(Cy(g,n,a,s,m));try{y=_y(f,P),[v,...S]=y,T=na(v,S)}catch{return}Ey(r,P,T),Oy(e,A,T),Ay(e,A,f)}function Iy(e,t){let r=e._map,o=r.options.crs,i=ye.get(e),n=o.project(D.get(e)),a=Math.cos(D.get(e).lat*B),s=M.get(e).position[1],m=[],f=[],p=[];ct.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,h;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,h=0;h<(l.type==="Polygon"?1:u.length);h++)Ry(c,l.type==="Polygon"?u:u[h]);m.length&&mo.set(e,dr(e,{position:m,normal:f,color:p}))}function Dy(e,t,r){Te.set(e,!0),Ke.set(e,pr(e,D.get(e))??0);let o;for(o of Object.values(t._layers))ni(o),pi(o,e);r&&Iy(e,r),t.fire("terrainchange"),E(e),e.fire("terrainready")}async function Fs(e){if(Dr.get(e)||!e._map)return;Dr.set(e,!0),Te.set(e,!1);let t=new AbortController;di.set(e,t);let r;try{if(!so.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=ma({source:{type:"raster",url:so.get(e),archive:e.options.archive,asset:e.options.asset,workerUrl:e.options.workerUrl}});Ns.set(o,e._map),Us.set(e,o),await re.get(o);let i=U.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=ky(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(Py(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(Sy);return t.signal.aborted||e._map!==n?void 0:(Dy(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{Dr.set(e,!1)}}function Gy(){Fs(this.backend).then(this.resolve,this.reject)}function Uy(e){z.get(e)==="raster"&&ui(e,this)}function Ny(e,t){if(Be.get(t)||me.get(t)&&me.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(Gs.get(e)){Be.set(t,{layer:e,map:t,terrainCache:new Map,terrainController:new AbortController}),sn(e,t),t.fire("terrainchange");return}if(me.set(t,e),sn(e,t),M.get(e))tr.set(e,Fs(e));else{let r=Promise.withResolvers();tr.set(e,r.promise),e.once("ready",Gy,{backend:e,...r})}t.eachLayer(Uy,e),t.fire("terrainchange")}var js=[];function Fy(){js.shift()?.fire("load")}function jy(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(js.push(this),queueMicrotask(Fy))}function Wy(e,t){switch(z.get(e)){case"3d":return sn(e,t);case"raster":return Ty(e,t);case"terrain":return Ny(e,t);case"image":return jy.call(e,t);case"time":return lh.call(e,t)}}function $y(e){if(!e._map)return;let t;for(t of Y.get(e).values())ro(e,t);Y.get(e).clear(),oo(e)}function Vy(e){let t={};return ae.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=oo.bind(null,e)),(X.get(e)||ae.get(e))&&(t.terrainchange=$y.bind(null,e)),t}function Zy(e){let t=Ds.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}function qy(){return{}}L();function Hy(e){return!_r.get(e)&&(e instanceof d.GridLayer||e instanceof d.Polyline||e instanceof d.CircleMarker||e instanceof d.Marker&&!(e.options.icon instanceof d.DivIcon)||e instanceof d.ImageOverlay&&!(e instanceof d.VideoOverlay)&&!(e instanceof d.SVGOverlay))}function Yy(e){let t=Hy(this);t&&((this instanceof d.GridLayer||this instanceof d.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof d.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(z.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,z.get(this)!=="pending"&&z.get(this)!=="time"&&(zr.set(this,z.get(this)==="raster"?Zy(this):_r.get(this)?Vy(this):qy()),ao.set(this,r),r.on(zr.get(this),this),this.once("remove",Hg,this)),Wy(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):mt.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&ga(this,e.target))}L();var Ws=[];var $s={value:Promise.resolve()};function Xy(e,t){X.set(e,!0),At(e,t)}function Jy(e){return e.data===void 0&&(e.tileJSON!==void 0||typeof e.url=="string"&&/\{[zxy]\}|%7B[zxy]%7D/i.test(e.url))}L();var be=new WeakMap;async function Ky(e){let t=new URL(e.tileJSON,document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`TileJSON: HTTP ${r.status}`);let o=await r.json();if(!o||!Array.isArray(o.tiles)||!o.tiles.length||typeof o.tiles[0]!="string")throw new Error("TileJSON requires a tile URL template");return{...e,url:new URL(o.tiles[0],t).href,minNativeZoom:e.minNativeZoom??o.minzoom,maxNativeZoom:e.maxNativeZoom??o.maxzoom,attribution:e.attribution??o.attribution}}function Qy(e){let t="",r=!1,o=!1,i=0,n="";for(i=0;i<e.length;i++)n=e[i],!(!r&&n===","&&/^\s*[\]}]/.test(e.slice(i+1)))&&(t+=n,o?o=!1:r&&n==="\\"?o=!0:n==='"'&&(r=!r));return t}function ex(e,t){if(t.quoted)return t.escaped?(t.escaped=!1,e==="'"?e:"\\"+e):e==="\\"?(t.escaped=!0,""):e===t.quoted?(t.quoted="",'"'):e==='"'?'\\"':e;if(e==='"'||e==="'")return t.quoted=e,'"'}function tx(e,t,r){if(r==="/"){for(;t<e.length&&e[t]!==`
3
- `;)t++;return t}let o=e.indexOf("*/",t+2);if(o<0)throw new Error("Unterminated style comment");return o+1}function rx(e){let t="",r=0,o="",i="",n,a={quoted:"",escaped:!1};for(r=0;r<e.length;r++){if(o=e[r],i=e[r+1],n=ex(o,a),n!==void 0){t+=n;continue}o==="/"&&(i==="/"||i==="*")?(r=tx(e,r,i),t+=i==="/"?`
4
- `:" "):t+=o}return t}function ox(e){let t=0,r=null;if(!Array.isArray(e))throw new Error("Invalid vector style layers");for(t=0;t<e.length;t++)if(r=e[t],!r||typeof r.id!="string"||typeof r.type!="string")throw new Error("Invalid vector style layers")}function ix(e){let t=/^\s*(?:const|let|var)\s+otm_layers\s*=\s*/.exec(e);t&&(e=e.slice(t[0].length));let r=Qy(rx(e).trim().replace(/;$/,"")),o=JSON.parse(r),i=o.layers??o;return ox(i),i}async function nx(e){if(typeof e=="string"){let r=await fetch(e);if(!r.ok)throw new Error(`Vector style: HTTP ${r.status}`);e=ix(await r.text())}else e=e?.layers??e;if(!Array.isArray(e))throw new Error("Invalid vector style layers");let t;for(t of e)if(!t||typeof t.id!="string"||typeof t.type!="string")throw new Error("Invalid vector style layers");return e}function ax(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||t<e||r<t||r>24)throw new Error("Invalid vector tile zoom range")}async function sx(e){if(!e||typeof e!="object")throw new TypeError("Vector tiles require source options");e.tileJSON&&(e=await Ky(e));let{url:t,style:r,minNativeZoom:o=0,maxNativeZoom:i=14,maxZoom:n=19}=e,a;typeof t=="string"&&(t=t.replaceAll(/%7B([zxy])%7D/gi,"{$1}"));for(a of["{z}","{x}","{y}"])if(typeof t!="string"||!t.includes(a))throw new Error("Vector tiles require an XYZ URL template");return ax(o,i,n),r=await nx(r),{...e,url:t,style:r,minNativeZoom:o,maxNativeZoom:i,maxZoom:n}}async function mx(e){let t=await fetch(`${e}.json`);if(!t.ok)throw new Error(`Sprite ${e}.json: HTTP ${t.status}`);return{url:`${e}.png`,index:await t.json()}}var Vs="move zoom rotate pitch resize viewreset";function fx(e,t,r,o,i){let n=0;if(e==="all"){for(n=0;n<t.length;n++)if(!O(t[n],r,o,i))return!1;return!0}if(e==="any"){for(n=0;n<t.length;n++)if(O(t[n],r,o,i))return!0;return!1}throw new Error(`Unsupported vector style expression: ${e}`)}function px(e,t,r,o,i){let n=0,a=null;if(e==="coalesce"){for(n=0;n<t.length;n++)if(a=O(t[n],r,o),a!=null)return a;return null}if(e==="case"){for(n=0;n<t.length-1;n+=2)if(O(t[n],r,o))return O(t[n+1],r,o);return O(t[t.length-1],r,o)}throw new Error(`Unsupported vector style expression: ${e}`)}function Gr(e,t,r,o){return o&&typeof e=="string"?t[e]:O(e,t,r)}function cx(e,t,r,o,i){let n=Gr(t[0],r,o,i),a=O(t[1],r,o);switch(e){case"==":return n===a;case"!=":return n!==a;case"<=":return n<=a;case">=":return n>=a;case"<":return n<a;case">":return n>a;default:throw new Error(`Unsupported vector style expression: ${e}`)}}var Nf={black:[0,0,0,1],white:[255,255,255,1],gray:[128,128,128,1],blue:[0,0,255,1],red:[255,0,0,1],green:[0,128,0,1]};function lx(e){let t=/^rgba?\(([^)]+)\)$/.exec(e);if(t){let r=t[1].split(","),o=0,i=!0;for(o=0;o<r.length;o++)r[o]=Number(r[o]);for(r.length===3&&r.push(1),o=0;o<r.length;o++)Number.isFinite(r[o])||(i=!1);if(r.length===4&&i)return r}throw new Error(`Unsupported interpolated style color: ${e}`)}function ux(e){let t=0,r=0;e.length===4&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let o=[];for(t=1;t<6;t+=2)r=parseInt(e.slice(t,t+2),16),o.push(r);return o.push(1),o}function Ur(e){return Object.hasOwn(Nf,e)?Nf[e]:/^#[0-9a-f]{3}$/i.test(e)||/^#[0-9a-f]{6}$/i.test(e)?ux(e):lx(e)}function dx(e,t,r){let o=O(e[1],t,r),i=e[0][0]==="exponential"?e[0][1]:1,n=0,a=0,s=0,m=0,f=null,p=null,c=0,l="";if(o<=e[2])return O(e[3],t,r);for(n=4;n<e.length;n+=2)if(!(o>e[n])){if(a=e[n-2],s=e[n],m=i===1?(o-a)/(s-a):(i**(o-a)-1)/(i**(s-a)-1),f=O(e[n-1],t,r),p=O(e[n+1],t,r),typeof f=="number"&&typeof p=="number")return f+(p-f)*m;for(f=Ur(f),p=Ur(p),c=0;c<3;c++)c&&(l+=","),l+=Math.round(f[c]+(p[c]-f[c])*m);return`rgba(${l},${f[3]+(p[3]-f[3])*m})`}return O(e.at(-1),t,r)}function Ff(e,t,r,o){let i=0,n=null;for(i=t;i<r;i++)if(n=e[i],n===o||n!==n&&o!==o)return!0;return!1}function Zs(e,t,r,o,i){let n=null;if(e==="!in")return n=Gr(t[0],r,o,i),!Ff(t,1,t.length,n);if(i)return n=Gr(t[0],r,o,!0),Ff(t,1,t.length,n);let a=O(t[1],r,o);return n=Gr(t[0],r,o,!1),a.includes(n)}function hx(e,t,r,o,i){if(e==="in")return Zs(e,t,r,o,i);if(e==="interpolate")return dx(t,r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function gx(e,t,r,o){let i=0,n=0;if(e==="+"){for(i=0;i<t.length;i++)n+=O(t[i],r,o);return n}if(e==="-")return t.length===1?-O(t[0],r,o):O(t[0],r,o)-O(t[1],r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function yx(e,t,r){let o=O(e[0],t,r),i=0,n=!1;for(i=1;i<e.length-1;i+=2)if(Array.isArray(e[i])?n=e[i].includes(o):n=e[i]===o,n)return O(e[i+1],t,r);return O(e[e.length-1],t,r)}function xx(e,t,r,o,i){if(e==="!")return!O(t[0],r,o,i);if(e==="!=")return Gr(t[0],r,o,i)!==O(t[1],r,o);if(e==="!in")return Zs(e,t,r,o,i);throw new Error(`Unsupported vector style expression: ${e}`)}function vx(e,t,r,o){switch(e){case"literal":return t[0];case"get":return r[t[0]];case"has":return Object.hasOwn(r,t[0]);case"zoom":return o;default:throw new Error(`Unsupported vector style expression: ${e}`)}}function wx(e,t,r){let o=O(e[0],t,r),i=e[1],n=0;for(n=2;n<e.length&&!(o<e[n]);n+=2)i=e[n+1];return O(i,t,r)}function Lx(e,t,r,o){if(e==="to-boolean")return!!O(t[0],r,o);if(e==="to-number"){let i=0,n=0;for(i=0;i<t.length;i++)if(n=Number(O(t[i],r,o)),Number.isFinite(n))return n;throw new Error("Invalid numeric style expression")}throw new Error(`Unsupported vector style expression: ${e}`)}function O(e,t,r,o=!1){if(!Array.isArray(e))return e;let i=e[0],n=e.slice(1),a=String(i);if(/^(?:literal|get|has|zoom)$/.test(a))return vx(i,n,t,r);switch(a[0]){case"a":return fx(i,n,t,r,o);case"!":return xx(i,n,t,r,o);case"=":case"<":case">":return cx(i,n,t,r,o);case"i":return hx(i,n,t,r,o);case"t":return Lx(i,n,t,r,o);case"c":return px(i,n,t,r,o);case"m":return yx(n,t,r);case"s":return wx(n,t,r);default:return gx(i,n,t,r)}}function Qe(e){return e._map.getZoom()+(be.get(e).styleZoomOffset??0)}function bx(){clearTimeout(this.timer),this.changedAt=performance.now(),this.timer=setTimeout(this.update.bind(this),180)}$();function qs(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),Ct(e),e}function cn(e,t,r){if(!r.along)return;let o=e.latLngToContainerPoint(r.along[0]),i=e.latLngToContainerPoint(r.along[1]),n=Math.atan2(i.y-o.y,i.x-o.x)/B;n>90?n-=180:n<-90&&(n+=180),t.options.rotation!==n*B&&qs(t,n*B)}function Mx(){let e;for(e of this.labels.values())e._mvtLabel&&cn(this._map,e,e._mvtLabel)}var hi=new WeakMap;function gi(e){let t=hi.get(e);t?.blobUrl&&(URL.revokeObjectURL(t.blobUrl),t.blobUrl=null)}function Bx({data:e}){gi(this);let t=this.waiting.get(e.id);t&&(this.waiting.delete(e.id),e.error?t.reject(new Error(e.error)):t.resolve(e))}function Tx(e){gi(this);let t=new Error(`Worker MVT: ${e.message}`),r;for(r of this.waiting.values())r.reject(t);this.waiting.clear(),He(this,t)}function Px(e){let{style:t,pane:r}=be.get(this),o,i;for([o]of t.entries())(e.getPane(`${r}-${o}`)||e.createPane(`${r}-${o}`)).style.zIndex=200+o;for(i of t)if(i.type==="background"){e.getContainer().style.background=O(i.paint["background-color"],{},Qe(this));break}this.session={},this.tiles=new Map,this.labels=new Map,this.waiting=new Map,this.retiring=new Set,this.inflight=0,this.sequence=0,this.changedAt=0,this.paintZoom=null;let n=hs(this.options.workerUrl||ds);hi.set(this,n),this.worker=n.worker,this.worker.onmessage=Bx.bind(this),this.worker.onerror=Tx.bind(this),this.refresh=bx.bind(this),this.rotateLabels=Mx.bind(this),e.on(Vs,this.refresh),e.on("move rotate pitch",this.rotateLabels),this.update()}function Sx(e){e.off(Vs,this.refresh),e.off("move rotate pitch",this.rotateLabels),clearTimeout(this.timer),this.session=null,this.worker.terminate(),gi(this),hi.delete(this);let t,r,o,i;for(t of this.waiting.values())t.reject(new DOMException("Layer removed","AbortError"));this.waiting.clear();for(r of this.tiles.values())r.controller.abort(),r.group?.remove();for(o of this.retiring)o.remove();for(i of this.labels.values())i.remove();this.tiles.clear(),this.labels.clear(),this.retiring.clear()}function kx(){if(!this.session)return;let{minNativeZoom:e,maxNativeZoom:t}=be.get(this),r=Math.max(e,Math.min(t,Math.floor(Qe(this)))),o=this._map.getBounds(),i=2**r,n=this._map.project(o.getNorthWest(),r).divideBy(256),a=this._map.project(o.getSouthEast(),r).divideBy(256),s,m,f,p;for(s of this.tiles.values())s.needed=!1;for(m=Math.floor(n.x);m<=Math.floor(a.x);m++)for(f=Math.max(0,Math.floor(n.y));f<=Math.min(i-1,Math.floor(a.y));f++)p=`${r}/${m}/${f}`,s=this.tiles.get(p),s||(s={key:p,coords:{z:r,x:m,y:f},controller:new AbortController},this.tiles.set(p,s)),s.needed=!0;this.prune(),this.pump(),this.updatePaint().catch(He.bind(null,this)),this.updateLabels().catch(He.bind(null,this))}function Nr(e,t,r,o,i){return e[t]===void 0?r:O(e[t],o,i)}function Cx(e,t,r){let o=Ur(Nr(e,"fill-color","#000",t,r)),i=Nr(e,"fill-outline-color",null,t,r),n=i===null?null:Ur(i),a=Nr(e,"fill-opacity",1,t,r)*o[3],s={r:o[0]/255,g:o[1]/255,b:o[2]/255},m=n?{r:n[0]/255,g:n[1]/255,b:n[2]/255}:null;return{fillColor:s,fillOpacity:a,color:m,weight:.5}}function _x(e,t,r,o){if(!e)return;let i=e,n=0,a="";if(typeof e[0]!="number"&&(i=O(e,r,o)),!Array.isArray(i))throw new TypeError("Style dash array must be an array");for(n=0;n<i.length;n++)n&&(a+=" "),a+=i[n]*t;return a}function Ex(e,t,r,o){let i=Nr(t,"line-width",1,r,o),n=Ur(Nr(t,"line-color","#000",r,o)),a=Nr(t,"line-opacity",1,r,o)*n[3],s=_x(t["line-dasharray"],i,r,o),m=e.layout?.["line-cap"]||"butt",f=e.layout?.["line-join"]||"miter";return{color:{r:n[0]/255,g:n[1]/255,b:n[2]/255},opacity:a,weight:i,dashArray:s,lineCap:m,lineJoin:f}}function Ox(e,t,r){let o=e.paint||{};return e.type==="fill"?Cx(o,t,r):Ex(e,o,t,r)}function Hs(e,t,r){return r>=(e.minzoom??0)&&r<(e.maxzoom??1/0)&&e.layout?.visibility!=="none"&&(!e.filter||O(e.filter,t,r,!0))}function Ys(e,t){let r=Ox(e.entry,e.properties,t);return Hs(e.entry,e.properties,t)||(r.opacity=0,r.fillOpacity=0),r}function zx(e,t){let r=Ys(e,t),{layer:o}=e;e.kind==="line"?r.dashArray!==o.options.dashArray?o.setStyle(r):o.setStyle({color:r.color,opacity:r.opacity,weight:r.weight}):(JSON.stringify(r.fillColor)!==JSON.stringify(o.options.fillColor)||r.fillOpacity!==o.options.fillOpacity)&&o.setStyle({fillColor:r.fillColor,fillOpacity:r.fillOpacity})}function fo(e,t){return e.session===t&&performance.now()-(e.changedAt||0)>=180}function xt(e=0){let t=Promise.withResolvers();return setTimeout(t.resolve,e),t.promise}async function Ax(){let e=Qe(this),t=this.session;if(this.paintZoom===e)return;let r=this.paintRevision=(this.paintRevision||0)+1,o=0,i,n;for(i of this.tiles.values())if(i.rendered)for(n of i.rendered){if(!fo(this,t)||this.paintRevision!==r||Qe(this)!==e)return;zx(n,e),++o%32===0&&await xt()}this.paintZoom=e}function Rx(e,t){return e.priority-t.priority}function Ix(e){let t=[],r,o;for(r of e.tiles.values())if(!(!r.needed||!r.labelCandidates))for(o of r.labelCandidates)t.push(o);return t.sort(Rx)}function Dx(e,t){e.size=O(e.entry.layout?.["text-size"]??12,e.properties,t),e.color=O(e.entry.paint?.["text-color"]??"#000",e.properties,t),e.halo=O(e.entry.paint?.["text-halo-color"]??"#fff",e.properties,t),e.haloWidth=O(e.entry.paint?.["text-halo-width"]??0,e.properties,t)}function Gx(e,t,r){let o=e._map,i=Qe(e);if(!Hs(t.entry,t.properties,i)||(Dx(t,i),!(t.size>0))||t.icon&&!be.get(e).spriteSheet?.index[t.icon]||t.along&&t.pixelBase*2**o.getZoom()<t.text.length*t.size*.6)return null;let n=o.latLngToContainerPoint(t.latlng);if(n.x<0||n.y<0||n.x>r.x||n.y>r.y)return null;let a=t.text.length*t.size*.65+16,s=[],m,f;for(m=Math.floor((n.x-a/2)/32);m<=Math.floor((n.x+a/2)/32);m++)for(f=Math.floor((n.y-t.size)/24);f<=Math.floor((n.y+t.size)/24);f++)s.push(`${m}:${f}`);return s}function Ux(e,t){let r;for(r of e)if(t.has(r))return!1;for(r of e)t.add(r);return!0}L();L();L();function Nx(e,t){let{x:r,y:o,width:i,height:n}=t.index[e.icon],[a,s]=e.iconOffset;return new d.DivIcon({className:"",html:`<div style="width:${i}px;height:${n}px;background:url(${t.url}) -${r}px -${o}px"></div>`,iconSize:[i,n],iconAnchor:[i/2-a,n/2-s]})}function Fx(e){let t=Math.floor(19.23076923076923),r=[],o="",i;for(i of e.split(" "))o&&Array.from(`${o} ${i}`).length>t?(r.push(o),o=i):o=o?`${o} ${i}`:i;return r.push(o),r}function jf(e,t){if(e.icon)return Nx(e,t);let r=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=e.along?[e.text]:Fx(e.text),i=0,n,a,s,m;for(n of o)i=Math.max(i,Array.from(n).length);let f=Math.max(40,i*e.size*.65+12),p=e.size*1.2,c=o.length*p+12;r.setAttribute("width",f),r.setAttribute("height",c);let l={x:f/2,"text-anchor":"middle","font-family":"sans-serif","font-size":e.size,fill:e.color,stroke:e.halo,"stroke-width":e.haloWidth*2,"paint-order":"stroke"};for(m=0;m<o.length;m++){s=document.createElementNS(r.namespaceURI,"text");for(a of Object.keys(l))s.setAttribute(a,l[a]);s.setAttribute("y",c/2+(m-(o.length-1)/2)*p+e.size*.35),s.textContent=o[m],r.append(s)}return new d.Icon({iconUrl:`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(r))}`,iconSize:[f,c],iconAnchor:[f/2,c/2]})}function Xs({error:e}){He(this,e)}function jx(e,t,r){let o=JSON.stringify([t.size,t.color,t.halo,t.haloWidth,t.icon]),i=be.get(e).spriteSheet,n=e.labels.get(r);if(n){if(n._mvtLabel=t,n._mvtLabelStyle===o)return cn(e._map,n,t),!1;n.setIcon(jf(t,i))}else{let{pane:a}=be.get(e);n=new d.Marker(t.latlng,{icon:jf(t,i),pane:`${a}-${t.order}`,title:t.text,alt:t.text,interactive:!1,keyboard:!1,rotateWithView:!1}).on("error",Xs,e).addTo(e._map),e.labels.set(r,n)}return n._mvtLabelStyle=o,n._mvtLabel=t,cn(e._map,n,t),!0}async function Wx(){let e=this.session,t=this.labelRevision=(this.labelRevision||0)+1;this.labelsReady=!1;let r=Ix(this),o=this._map.getSize(),i=new Set,n=new Set,a=0,s,m,f,p;for(s of r){if(++a%128===0&&await xt(),!fo(this,e)||this.labelRevision!==t)return;f=Gx(this,s,o),!(!f||!s.allowOverlap&&!Ux(f,i))&&(m=`${s.text}${s.icon||""}:${s.latlng.join(":")}`,n.add(m),jx(this,s,m)&&await xt())}for([m,p]of this.labels){if(!fo(this,e)||this.labelRevision!==t)return;n.has(m)||(p.remove(),this.labels.delete(m),await xt())}this.labelsReady=!0}function $x(e,t){let r=e.z-t.z;return r>=0?e.x>>r===t.x&&e.y>>r===t.y:t.x>>-r===e.x&&t.y>>-r===e.y}function Vx(e,t){let r;for(r of e.tiles.values())if(r.needed&&!r.group&&$x(r.coords,t.coords))return!0;return!1}function Zx(){let e,t;for([t,e]of this.tiles)e.needed||e.group&&Vx(this,e)||(e.controller.abort(),this.tiles.delete(t),e.group&&this.retire(e.group).catch(He.bind(null,this)))}async function qx(e){let t=this.session;this.retiring.add(e);let r=0,o;for(o of e.getLayers()){if(this.session!==t)return;e.removeLayer(o),++r%8===0&&await xt()}e.remove(),this.retiring.delete(e)}function Hx(e,t){return e.distance-t.distance}function Yx(){if(!this.session)return;let e=this._map.getCenter(),t=[],r,o;for(r of this.tiles.values())!r.needed||r.started||(o=this._map.project(e,r.coords.z).divideBy(256),r.distance=(r.coords.x-o.x)**2+(r.coords.y-o.y)**2,t.push(r));t.sort(Hx);for(r of t){if(this.inflight>=4)break;r.started=!0,this.inflight++,this.load(r)}}L();L();function Xx(e,t,r,o){let{pane:i}=be.get(e),a={...Ys(o,Qe(e)),pane:`${i}-${o.order}`,interactive:!1,smoothFactor:0},s=o.kind==="fill"?new d.Polygon(o.paths,{...a,stroke:!1,triangulated:!0}):new d.Polyline(o.paths,a);s.on("error",Xs,e),t.rendered.push({layer:s,kind:o.kind,entry:o.entry,properties:o.properties}),r.addLayer(s)}async function Jx(e,t,r,o,i){let n,a=performance.now();for(n of o){for(;!fo(e,i)&&e.session===i&&!t.controller.signal.aborted;)await xt(50);if(t.controller.signal.aborted||e.session!==i)return!1;Xx(e,t,r,n),performance.now()-a>8&&(await xt(),a=performance.now())}return!0}async function Kx(e){let{coords:t,controller:r}=e,o=this.session,{url:i,style:n,sourceId:a,maxZoom:s,maxNativeZoom:m}=be.get(this),f=2**t.z,p=(t.x%f+f)%f,c;try{let l=d.Util.template(i,{z:t.z,x:p,y:t.y}),u=await fetch(l,{signal:r.signal});if(!u.ok)throw new Error(`Tile ${e.key}: HTTP ${u.status}`);let h=await u.arrayBuffer();if(r.signal.aborted)return;let x=++this.sequence,g=Promise.withResolvers();this.waiting.set(x,g),this.worker.postMessage({type:"vector",id:x,buffer:h,coords:t,style:n,source:a,maxZoom:s,zoom:Qe(this),mapZoom:t.z>=m?s:this._map.getZoom()},[h]);let y=await g.promise;if(r.signal.aborted||this.session!==o)return;if(c=new d.LayerGroup().addTo(this._map),e.rendered=[],!await Jx(this,e,c,y.batches,o)){c.remove();return}e.group=c,e.labelCandidates=y.labels,this.fire("tileload",{coords:t,group:c}),this.prune(),this.refresh()}catch(l){c?.remove(),!r.signal.aborted&&this.session===o&&this.fire("error",{error:l})}finally{this.session===o&&(this.inflight--,this.pump())}}async function Qx(e,t){let r=await sx(t);typeof r.sprite=="string"&&(r.spriteSheet=await mx(r.sprite));let{url:o,tileJSON:i,style:n,sourceId:a,minNativeZoom:s,maxNativeZoom:m,maxZoom:f,...p}=r;return d.Util.setOptions(e,p),r.pane=`mvt-${d.Util.stamp(e)}`,be.set(e,r),Object.assign(e,{onAdd:Px,onRemove:Sx,update:kx,updatePaint:Ax,updateLabels:Wx,prune:Zx,retire:qx,pump:Yx,load:Kx}),e}function e0(e){let t=e._map;return t?.removeLayer(e),z.delete(e),t?.addLayer(e),e.fire("ready"),e}function Js(e,t){throw e.fire("error",{error:t}),t}function t0(e,t){z.set(e,"pending");let r=Qx(e,t).then(e0.bind(null,e)).catch(Js.bind(null,e));re.set(e,r),r.catch(Xe)}L();async function r0(e,t){let r=await eo(t);return e.options.archive=t,U.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function o0(e){let t,r;for(t of I.get(e).values())ko(e,t);if(ge.get(e)?.pipelineCache.clear(),ge.set(e,null),Dt.get(e)){for(r of Object.values(Dt.get(e).attributes))W(e,r.buffer);Dt.set(e,null)}}var Fr=new WeakMap;var yi=new WeakMap;var Ks={_3d:_r,_added:Le,_areas:Y,_bridgeMesh:mo,_bridges:ct,_cameraZIndexOffset:$r,_countStatus:kr,_cursor:Er,_dem:Ie,_directories:Cr,_etag:ti,_fadeFrame:Fr,_fadeVersion:yi,_frame:ft,_geojson:X,_header:Xi,_inflight:Je,_layers:F,_loadingTiles:fe,_nativeGPU:de,_pointerEvents:Ar,_pruneAfter:Wt,_pruneVersion:Oi,_pruneWanted:zi,_queued:io,_rasterGeometry:Dt,_rasterProgram:ge,_rasterTiles:I,_rasterVersion:Ee,_rendererReady:gt,_roofRaster:K,_roofRasters:ki,_sceneOrigin:ie,_shadowMeshes:Ft,_shared:R,_size:mr,_terrain3D:pe,_terrainArchive:Us,_terrainBaseY:Et,_terrainBounds:er,_terrainController:di,_terrainGrids:It,_terrainLoading:Dr,_terrainOriginElevation:Ke,_terrainPromise:tr,_terrainReady:Te,_terrainRequest:Vn,_terrainTiles:ot,_terrainZoom:ye,_tileZoom:cr,_tooltip:Re,_type:Xt,_visibleMeshes:jr,_wantedRasterTiles:sr,_zoomLevel:mi,_zoomTransitions:he,_zoomView:qe,camera:ee,container:Ae,control:_t,eventMap:ao,events:zr,group:cs,header:U,highlightedFeature:at,hoveredFeature:ke,kind:z,location:D,model:$e,modelUrl:We,raycaster:ne,ready:re,renderer:w,root:M,scene:oe,terrainSource:so,url:ae,walker:ps};L();var i0=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];var n0=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function a0(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.colorTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function s0(e,t){if(K.get(e)&&W(e,K.get(e).texture.texture),K.set(e,null),he.get(e)){let i;for(i of he.get(e).keys())i.play()}he.set(e,null),qe.set(e,null),se.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=w.get(e);r.canvas.remove(),a0(r,e),te.delete(t);let o;for(o of n0)Ks[o].delete(e)}function po(e,t){Le.set(e,Promise.withResolvers()),Ae.get(e)&&(li(e),d.DomEvent.off(Ae.get(e),Ar.get(e),e),Ae.set(e,null));let r,o,i,n;for(r of Y.get(e).values())ro(e,r);Y.get(e).clear(),Re.get(e)?.remove(),Re.set(e,null),(ae.get(e)||X.get(e))&&ls(e,!1);let a=R.get(e);if(a){if(q(M.get(e),null),F.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",Ki,e),t.off("zoomstart",Qi,e),t.off("zoomanim",en,e),t.off("zoomend",tn,e),$n(e),F.get(e).size){let s=F.get(e).values().next().value;for(o of i0)n=Ks[o],n.set(s,n.get(e)),n.delete(e);for(i of F.get(s))R.set(i,s);te.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",Ki,s),t.on("zoomstart",Qi,s),t.on("zoomanim",en,s),t.on("zoomend",tn,s),E(s)}else s0(e,t);else E(a);R.set(e,null),w.set(e,null),oe.set(e,null),ee.set(e,null)}}function m0(e,t){o0(e),pe.set(e,null),po(e,t)}L();function Qs(e,t){z.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},d.Util.setOptions(e,t),M.set(e,Oe()),Y.set(e,new Map),I.set(e,new Map),fe.set(e,0),Le.set(e,Promise.withResolvers()),ae.set(e,new URL(t.url,document.baseURI).href),Cr.set(e,new Map),re.set(e,Promise.resolve(e.options.archive||e).then(r0.bind(null,e)).catch(Js.bind(null,e)))}var f0=Object.freeze([]);function p0(e){z.get(e)==="raster"&&ui(e,null)}function c0(e,t){let r=Be.get(t);if(r?.layer===e){Be.delete(t),r.terrainController.abort(),r.terrainCache.clear(),t.fire("terrainchange"),po(e,t);return}di.get(e)?.abort(),Dr.set(e,!1),Te.set(e,!1),t.eachLayer(p0);let o,i,n,a;for(o of I.get(e).keys())So(e,o);me.get(t)===e&&me.delete(t);for(i of Object.values(t._layers))pi(i,null),ni(i);t.fire("terrainchange"),ot.get(e).clear(),Ke.set(e,0),tr.set(e,null),ge.get(e)&&ge.get(e).pipelineCache.clear(),ge.set(e,null),Ie.get(e)&&W(e,Ie.get(e).texture),Ie.set(e,null);for(n of It.get(e)?.values()||f0)for(a of Object.values(n))W(e,a.buffer);It.set(e,null),ct.set(e,null),Ge(e,mo.get(e)),mo.set(e,null),po(e,t)}function l0(e,t){if(t.getTile!==void 0&&typeof t.getTile!="function")throw new Error("Streamed terrain requires a getTile function");let r=t.url,o={...t};delete o.url,At(e,o),so.set(e,r),ot.set(e,new Map),I.set(e,new Map),Te.set(e,!1),t.getTile&&Gs.set(e,!0),z.set(e,"terrain")}L();var em=Object.freeze({});var rr=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];function u0(e){let t=rr[e%rr.length];return[[C(-.045,.045,-.85,-.25),.02,.62,Qt],[C(-.045,.045,.25,.85),.02,.62,Qt],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,Qt],[C(-.1,.1,.15,.4),.85,.92,Qt],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,yt],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,yt],[C(.15,.25,-.5,-.05),1,1.25,yt],[C(-.2,-.08,0,.32),.3,1,Kt],[C(.08,.2,-.25,.07),.3,1,Kt]]}function d0(e){let t=Ls.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],rr[e%rr.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Kt],[C(.02,.16,-.07,.07),.08,.9,Kt],[C(-.3,-.2,-.05,.05),.76,1.42,yt],[C(.2,.3,-.05,.05),.76,1.42,yt]),t}function xi(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var co=[.12,.15,.18];var Gt=[.92,.93,.92];var vi=[.05,.05,.05];var tm=[1.9,1.85,1.7];var rm=[1.7,.06,.05];function wi(e,t,r){let o=e-t/2,i=e+t/2;return[[C(-1.25,1.25,o,i),.45,1.25,r],[C(-1.2,1.2,o+.15,i-.15),1.25,2.65,co],[C(-1.25,1.25,o,i),2.65,3.1,Gt],[C(-1.15,-.85,o+1,o+2),0,.7,vi],[C(.85,1.15,i-2,i-1),0,.7,vi],[C(-.9,.9,o-.03,o),.8,1.05,tm],[C(-.9,.9,i,i+.03),.8,1.05,rm]]}function h0(e,t){return wi(0,12,xi(t))}function g0(e,t){let r=xi(t),o=[],i;for(i=0;i<5;i++)o.push(...wi((i-2)*6.5,6,r));return o}function y0(e,t){let r=xi(t),o=[],i;for(i=0;i<5;i++)o.push(...wi((i-2)*15,14,r));return o}function or(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}function x0(e){let t=rr[e%rr.length];return[...or(.7,.92,-1.68,-1.02,0,.64,vi),...or(.7,.92,1.02,1.68,0,.64,vi),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[C(-.84,.84,-.75,1.6),.82,1.38,co,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...or(.38,.8,-2.3,-2.16,.56,.76,tm),[C(-.78,.78,2.16,2.3),.6,.76,rm]]}var Wf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function v0(){let e=[],t;for(t=0;t<12;t++)e.push(...or(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function w0(){return[[Wf,0,.8,[.1,.16,.26]],[Wf,.8,1.4,Gt],[C(-5,5,-18,26),1.4,3.7,co,C(-4.6,4.6,-17.4,25.6)],...or(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[C(-4.8,4.8,-17.8,25.8),3.7,3.9,Gt],...v0(),...or(4.65,4.8,-13.6,25.8,3.9,4.8,Gt),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Gt],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Gt],[C(-2.2,2.2,-17.6,-14),4.7,5.5,co],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Gt],[C(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[C(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[C(-.1,.1,-15.9,-15.7),5.7,6.6,Gt],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var L0={bicycle:{side:.4,model:u0},pedestrian:{side:.3,model:d0},bus:{side:1.5,model:h0},tram:{side:0,model:g0},metro:{side:0,model:y0},car:{side:1.8,model:x0,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:w0,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var b0=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function M0({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
1
+ (()=>{var Gv=Object.defineProperty;var b=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var Uv=(e,t)=>{for(var r in t)Gv(e,r,{get:t[r],enumerable:!0})};var d,L=b(()=>{d=globalThis.L});var B,V=b(()=>{B=Math.PI/180});var ot,Lo=b(()=>{ot=180/Math.PI});var kn,xm=b(()=>{kn=new WeakMap});function _(e){return kn.get(e)??0}var J=b(()=>{xm()});var Sn,vm=b(()=>{Sn=new WeakMap});function S(e){return Sn.get(e)??0}var Z=b(()=>{vm()});var $o,La=b(()=>{$o=Object.freeze({})});var Je,Ma=b(()=>{Je=new WeakMap});function Ba(){let e=this.getSize().y,t=_(this)*B,r=e*this.options.pitchMaxDistance,o=e*1.5,i=e/2-r*Math.abs(Math.cos(t))*o/(o+Math.sin(t)*r);i>0&&!Je.get(this)&&(Je.set(this,d.DomUtil.create("div","leaflet-pitch-sky",this.getContainer())),Je.get(this).setAttribute("aria-hidden","true"),Je.get(this).style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),Je.get(this)&&(Je.get(this).style.inset=t>Math.PI/2?"auto 0 0":"0 0 auto",Je.get(this).style.height=`${Math.max(0,Math.ceil(i))}px`,Je.get(this).style.display=i>0?"":"none")}var Zm=b(()=>{Ma();L();V();J()});function $e(e,t,r){if(!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!Number.isFinite(e.options.maxPitch)||e.options.maxPitch<0||e.options.maxPitch>180)throw new TypeError("maxPitch must be between 0 and 180 degrees");let o=_(e),i=S(e);return kn.set(e,Math.max(0,Math.min(e.options.maxPitch,t))),Sn.set(e,(r%360+360)%360),e._loaded&&(Ba.call(e),i!==S(e)&&e.fire("rotate",{bearing:S(e)}),o!==_(e)&&e.fire("pitch",{pitch:_(e)})),e}var br=b(()=>{vm();xm();J();Z();Zm()});var Ht,Ta=b(()=>{Ht=new WeakMap});var Vo,Pa=b(()=>{Vo=new WeakMap});var Br,ka=b(()=>{Br=new Map});var kt,Sa=b(()=>{kt={value:null}});function Zo(e){Br.delete(e),Ht.set(e,null),Vo.set(e,null),!Br.size&&kt.value!==null&&(cancelAnimationFrame(kt.value),kt.value=null)}var Ca=b(()=>{Ta();Pa();ka();Sa()});var Yr,Ea=b(()=>{Yr=new WeakMap});var qo,qm=b(()=>{qo=new WeakMap});var Ni,Hm=b(()=>{Ni=new WeakMap});var Tr,Fi=b(()=>{Tr=new WeakMap});var Pr,ji=b(()=>{Pr=new WeakMap});var Xm,Su=b(()=>{Xm={value:void 0}});var Ym,Cu=b(()=>{Ym={value:void 0}});var Jm,_u=b(()=>{Jm={value:void 0}});var Km,Eu=b(()=>{Km={value:void 0}});var Oa,Ou=b(()=>{Oa={value:void 0}});var St,Ho=b(()=>{St=new WeakMap});var Jr,za=b(()=>{Jr=new Set});var Wi,Qm=b(()=>{Wi=Object.freeze({capture:!0,passive:!1})});function ef(){this._map.fire("cameratouchchange")}var zu=b(()=>{});var Xo,Aa=b(()=>{Xo=Object.freeze([.8,.5])});var Au,Ru=b(()=>{Au=Object.freeze([.8,0])});var Ra,tf=b(()=>{Ra=Object.freeze({preventScroll:!0})});var Ia,rf=b(()=>{Ia=Object.freeze({animate:!0})});function Iu(e){kt.value=null;let t=[...Br];Br.clear();let r,o,i,n,a;for([o,i]of t)if(Vo.set(o,null),Ht.get(o)===i){n=i.duration?Math.min(1,(e-i.start)/(i.duration*1e3)):1,a=1-(1-n)**3;try{$e(o,i.fromPitch+(Math.max(0,Math.min(o.options.maxPitch,i.pitch))-i.fromPitch)*a,i.fromBearing+i.delta*a),n<1&&Ht.get(o)===i?Da(o,i):Ht.get(o)===i&&Ht.set(o,null)}catch(s){r||=s}}if(r)throw r}var Du=b(()=>{Ta();Pa();Sa();ka();br();of()});function Da(e,t){Br.set(e,t),kt.value===null&&(kt.value=requestAnimationFrame(Iu)),Vo.set(e,kt.value)}var of=b(()=>{Pa();ka();Sa();Du()});function Yo(e,t,r,o=$o){if(Zo(e),!Number.isFinite(t)||!Number.isFinite(r))throw new TypeError("Camera angles must be finite numbers");if(!o.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return $e(e,t,r);let i=o.duration??.3;if(!Number.isFinite(i)||i<0)throw new TypeError("Camera duration must be nonnegative");let n=performance.now(),a=_(e),s=S(e),m=((r-s)%360+540)%360-180,f={duration:i,start:n,fromPitch:a,fromBearing:s,pitch:t,delta:m};return Ht.set(e,f),Da(e,f),e}var Ga=b(()=>{Ta();La();br();J();Z();Ca();of()});function Gu(e,t=Ia){return Yo(e,0,0,t)}var Uu=b(()=>{rf();Ga()});function ht(e,t,r){return Yo(e,_(e),t,r)}var Jo=b(()=>{Ga();J()});function Nu(e,t=Ia){return ht(e,0,t)}var Fu=b(()=>{rf();Jo()});function ju(e){let t=this._rotateControl,r=t._map;e.preventDefault(),t.options.visualizePitch?Gu(r):Nu(r),e.detail&&r.getContainer().focus(Ra)}var Wu=b(()=>{tf();Uu();Fu()});function Xt(e,t,r){return Yo(e,t,S(e),r)}var $i=b(()=>{Ga();Z()});function $u(e){let t=this._rotateControl,r=t._map,o=e.shiftKey?15:5;if(e.key==="ArrowLeft")ht(r,S(r)-o);else if(e.key==="ArrowRight")ht(r,S(r)+o);else if(e.key==="ArrowUp"&&t.options.visualizePitch)Xt(r,_(r)+o);else if(e.key==="ArrowDown"&&t.options.visualizePitch)Xt(r,_(r)-o);else if(e.key==="Home"||e.key===" ")this.click();else return;e.preventDefault(),e.stopPropagation()}var Vu=b(()=>{Jo();Z();$i();J()});function Ua(){let e=this._map,t=this.options.visualizePitch?_(e):0;this._arrow.style.transform=`scale(${1/Math.sqrt(Math.max(.01,Math.abs(Math.cos(t*B))))}) rotateX(${t}deg) rotate(${S(e)}deg)`,this._button.setAttribute("aria-description",`Bearing ${Math.round(S(e))} degrees, pitch ${Math.round(_(e))} degrees. Arrow keys adjust the camera; Home resets it.`),this._container.style.display=this.options.closeOnZeroBearing&&!S(e)&&!t&&!this._container.contains(document.activeElement)?"none":""}var nf=b(()=>{V();J();Z()});var Ve,kr=b(()=>{Ve={value:new WeakMap}});var Kr,Na=b(()=>{Kr={value:new Set}});function Fa(e){return e.closest?.('input,textarea,select,[contenteditable="true"]')}var af=b(()=>{});function ja(e){let t=Ve.value.get(this);if(t.drag||!t.accept(e)||Fa(e.target))return;e.preventDefault(),e.stopPropagation(),t.moved=!1;let r=t.map.getContainer().getBoundingClientRect();t.drag={id:e.pointerId,x:e.clientX,y:e.clientY,cursor:t.element.style.cursor,cx:r.left+r.width/2,cy:r.top+r.height/2,dragging:t.map.dragging?.enabled()},t.map.dragging?.disable(),t.element.focus?.(Ra),t.element.setPointerCapture(e.pointerId),t.element.style.cursor="grabbing"}var sf=b(()=>{kr();tf();af()});function Wa(e){return Zo(e),e}var mf=b(()=>{Ca()});function $a(e){let t=Ve.value.get(this);if(!t.drag||t.drag.id!==e.pointerId)return;let r=e.clientX-t.drag.x,o=e.clientY-t.drag.y;if(Math.hypot(r,o)<3&&!t.moved)return;Wa(t.map),t.moved=!0,e.preventDefault();let i=r*t.sensitivity[0];if(t.orbit)if(Math.abs(t.drag.cy-t.drag.y)>100){let n=Math.atan2(e.clientY-t.drag.cy,e.clientX-t.drag.cx)-Math.atan2(e.clientY-t.drag.cy,t.drag.x-t.drag.cx);i=Math.atan2(Math.sin(n),Math.cos(n))*ot}else i*=e.clientY<t.drag.cy?1:-1;$e(t.map,_(t.map)-o*t.sensitivity[1],S(t.map)+i),t.drag.x=e.clientX,t.drag.y=e.clientY}var ff=b(()=>{Lo();kr();mf();br();J();Z()});function Ko(e,t){if(!e?.drag||t?.pointerId!==void 0&&t.pointerId!==e.drag.id)return;let r=e.drag;e.drag=null,e.element.hasPointerCapture?.(r.id)&&e.element.releasePointerCapture(r.id),r.dragging&&e.map.getContainer()._leaflet_id&&e.map.dragging.enable(),e.element.style.cursor=r.cursor}var Va=b(()=>{});function Sr(e){Ko(Ve.value.get(this),e)}var pf=b(()=>{kr();Va()});function Za(e){let t=Ve.value.get(this);t.moved&&(e.preventDefault(),e.stopPropagation(),t.moved=!1)}var cf=b(()=>{kr()});function qa(e){let t=Ve.value.get(this);!t.drag&&!t.moved||(e.preventDefault(),e.stopPropagation())}var lf=b(()=>{kr()});function Ha(){let e;for(e of Kr.value)Ko(e)}var uf=b(()=>{Na();Va()});function Xa(e,t,r,o=Xo,i=!1){let n={map:e,element:t,accept:r,sensitivity:o,orbit:i,drag:null,moved:!1};return Ve.value.set(t,n),Kr.value.add(n),t.addEventListener("pointerdown",ja,!0),t.addEventListener("pointermove",$a),t.addEventListener("pointerup",Sr),t.addEventListener("pointercancel",Sr),t.addEventListener("lostpointercapture",Sr),t.addEventListener("click",Za,!0),t.addEventListener("contextmenu",qa),window.addEventListener("blur",Ha),n}var df=b(()=>{Aa();kr();Na();sf();ff();pf();cf();lf();uf()});function Zu(e){return e.button===0}var qu=b(()=>{});function Hu(){Ua.call(this._rotateControl)}var Xu=b(()=>{nf()});function Yu(e){let t=d.DomUtil.create("div","leaflet-control-rotate leaflet-bar"),r=d.DomUtil.create("a","leaflet-control-rotate-toggle",t);this._map=e,this._container=t,this._button=r,r._rotateControl=this,r.href="#",r.draggable=!1,r.setAttribute("role","button"),r.title=this.options.visualizePitch?"Reset bearing and pitch":"Reset bearing to north",r.setAttribute("aria-label",r.title),r.style.cssText="cursor:grab;touch-action:none";let o=d.DomUtil.create("span","leaflet-control-rotate-arrow",r);return this._arrow=o,o.setAttribute("aria-hidden","true"),o.style.cssText="display:block;width:100%;height:100%;pointer-events:none;background: no-repeat center / 29px 29px",o.style.backgroundImage='url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 29 29%27%3E%3Cpath fill=%27%23333%27 d=%27M10.5 14 14.5 6 18.5 14Z%27/%3E%3Cpath fill=%27%23ccc%27 d=%27M10.5 16 14.5 24 18.5 16Z%27/%3E%3C/svg%3E")',r.onclick=ju,r.onkeydown=$u,this._refresh=Ua,e.on("rotate pitch",this._refresh,this),this._refresh(),this._dragState=Xa(e,r,Zu,this.options.visualizePitch?Xo:Au),r.addEventListener("focusout",Hu),d.DomEvent.on(r,"dblclick contextmenu",d.DomEvent.stop),d.DomEvent.disableClickPropagation(t),d.DomEvent.disableScrollPropagation(t),t}var Ju=b(()=>{L();Aa();Ru();Wu();Vu();nf();df();qu();Xu()});function Ku(e){Ko(e);let{element:t}=e;t.removeEventListener("pointerdown",ja,!0),t.removeEventListener("pointermove",$a),t.removeEventListener("pointerup",Sr),t.removeEventListener("pointercancel",Sr),t.removeEventListener("lostpointercapture",Sr),t.removeEventListener("click",Za,!0),t.removeEventListener("contextmenu",qa),Ve.value.delete(t),Kr.value.delete(e),Kr.value.size||window.removeEventListener("blur",Ha)}var Qu=b(()=>{kr();Na();Va();sf();ff();pf();cf();lf();uf()});function Ya(){Ku(this._dragState)}var hf=b(()=>{Qu()});function ed(e){e.off("rotate pitch",this._refresh,this),Ya.call(this)}var td=b(()=>{hf()});function rd(e){return new d.Control.Rotate(e)}var od=b(()=>{L()});function id(e){let t=this._cameraShiftRotate;!e.shiftKey||Fa(e.target)||e.target.closest(".leaflet-control")||(e.preventDefault(),e.stopImmediatePropagation(),ht(t._map,S(t._map)+Math.sign(e.deltaY)*5))}var nd=b(()=>{Jo();Z();af()});function ad(){let e=this._map.getContainer();e._cameraShiftRotate=this,this._wheel=id,e.addEventListener("wheel",this._wheel,Wi)}var sd=b(()=>{Qm();nd()});function md(){let e=this._map.getContainer();e.removeEventListener("wheel",this._wheel,!0),delete e._cameraShiftRotate}var fd=b(()=>{});function pd(e){return!e.target.closest(".leaflet-control,.leaflet-marker-icon,.leaflet-popup")&&(e.button===2||e.button===0&&e.ctrlKey)}var cd=b(()=>{});function ld(){this._dragState=Xa(this._map,this._map.getContainer(),pd,Xo,!0)}var ud=b(()=>{Aa();df();cd()});function dd(e){let t=this.handler,r=Number.isFinite(e.webkitCompassHeading)?-e.webkitCompassHeading:e.alpha,o=e.absolute?0:screen.orientation?.angle??window.orientation??0;Number.isFinite(r)&&ht(t._map,r-o)}var hd=b(()=>{Jo()});function gf(e,t){e.disable(),e._map.fire("error",{error:t})}var gd=b(()=>{});function yd([e,t]){let{handler:r,generation:o}=e.value;if(!(!r.enabled()||r._generation!==o)){if(!window.DeviceOrientationEvent||t.status!=="fulfilled"||t.value!=="granted")return gf(r,t.status==="rejected"?t.reason:new Error("Device compass permission unavailable or denied"));try{window.addEventListener("deviceorientation",r._orientation),window.addEventListener("deviceorientationabsolute",r._orientation)}catch(i){gf(r,i)}}}var xd=b(()=>{gd()});function vd(){this._compassGeneration=this._generation=(this._generation||0)+1,this._orientation={handler:this,handleEvent:dd};let e=window.DeviceOrientationEvent?.requestPermission,t;try{t=e?e.call(window.DeviceOrientationEvent):"granted"}catch(r){t=Promise.reject(r)}Promise.allSettled([Promise.resolve({handler:this,generation:this._generation}),t]).then(yd)}var wd=b(()=>{hd();xd()});function Ld(){this._generation++,window.removeEventListener("deviceorientation",this._orientation),window.removeEventListener("deviceorientationabsolute",this._orientation)}var bd=b(()=>{});function Md(e){e[0]?.target._containerResizeMap.invalidateSize()}var Bd=b(()=>{});function Td(){let e=this._map.getContainer();e._containerResizeMap=this._map,this._observer=new ResizeObserver(Md),this._observer.observe(e)}var Pd=b(()=>{Bd()});function kd(){let e=this._map.getContainer();this._observer.disconnect(),delete e._containerResizeMap}var Sd=b(()=>{});function Ja(e){let t=St.get(this),{map:r,container:o}=t;if(t.touch||e.touches.length!==2||e.target.closest(".leaflet-control")||!Pr.get(r).enabled()&&!Tr.get(r).enabled())return;let[i,n]=e.touches;if(Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY)<1)return;Wa(r);let a=o.getBoundingClientRect(),s=new d.Point((i.clientX+n.clientX)/2-a.left,(i.clientY+n.clientY)/2-a.top);t.touch={angle:Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX),distance:Math.hypot(n.clientX-i.clientX,n.clientY-i.clientY),middle:s,anchor:r.containerPointToLatLng(s),zoom:r.getZoom(),bearing:S(r),pitch:_(r),zooming:r.touchZoom?.enabled(),dragging:r.dragging?.enabled(),currentMiddle:new d.Point(s.x,s.y)},r.dragging?.disable(),e.preventDefault(),e.stopImmediatePropagation(),t.nativeZoom!==void 0&&(t.touch.zooming=t.nativeZoom),t.touch.snap=r.options.zoomSnap,r.options.zoomSnap=0}var yf=b(()=>{Fi();ji();L();Ho();mf();Z();J()});function Ka(e){let t=St.get(this),{map:r,container:o,touch:i}=t;if(!i||e.touches.length!==2)return;let[n,a]=e.touches,s=Math.atan2(a.clientY-n.clientY,a.clientX-n.clientX),m=o.getBoundingClientRect(),f=i.currentMiddle;f.x=(n.clientX+a.clientX)/2-m.left,f.y=(n.clientY+a.clientY)/2-m.top;let p=Math.atan2(Math.sin(s-i.angle),Math.cos(s-i.angle))*ot;$e(r,Tr.get(r).enabled()?i.pitch-(f.y-i.middle.y)*.25:i.pitch,Pr.get(r).enabled()?i.bearing+p:i.bearing);let c=Math.hypot(a.clientX-n.clientX,a.clientY-n.clientY);if(c<1)return;let l=i.zooming?Math.max(r.getMinZoom(),Math.min(r.getMaxZoom(),i.zoom+Math.log2(c/i.distance))):i.zoom;if(r.setView(r.getCenter(),l,{animate:!1}),r.options.touchZoom!=="center"){let u=r.project(i.anchor).subtract(r.project(r.containerPointToLatLng(f)));r.setView(r.unproject(r.project(r.getCenter()).add(u)),r.getZoom(),{animate:!1})}e.preventDefault(),e.stopImmediatePropagation()}var xf=b(()=>{Fi();ji();Lo();Ho();br()});function Cr(e,t){if(!e.touch||t?.touches?.length>=2)return;let{map:r,container:o,touch:i}=e;i.dragging&&o._leaflet_id&&r.dragging.enable(),r.options.zoomSnap=i.snap,i.zooming&&i.snap&&o._leaflet_id&&r.setZoom(Math.round(r.getZoom()/i.snap)*i.snap,{animate:!1}),e.touch=null}var Vi=b(()=>{});function Qo(e){Cr(St.get(this),e)}var vf=b(()=>{Ho();Vi()});function Zi(){let e=Yr.get(this),{map:t,container:r}=e,o=Pr.get(t).enabled()||Tr.get(t).enabled();o&&e.nativeZoom===void 0?(e.nativeZoom=t.touchZoom?.enabled(),t.touchZoom?.disable()):!o&&e.nativeZoom!==void 0&&(Cr(e),e.nativeZoom&&r._leaflet_id&&t.touchZoom.enable(),e.nativeZoom=void 0)}var wf=b(()=>{Ea();Fi();ji();Vi()});function Qa(){let e;for(e of Jr)Cr(e)}var Lf=b(()=>{za();Vi()});function Cd(){let e=Yr.get(this);if(!e)return;let{container:t,map:r}=e;Cr(e),t.removeEventListener("touchstart",Ja,!0),t.removeEventListener("touchmove",Ka,!0),t.removeEventListener("touchend",Qo,!0),t.removeEventListener("touchcancel",Qo,!0),Jr.delete(e),Jr.size||window.removeEventListener("blur",Qa),r.off("cameratouchchange",Zi,r),Ni.get(r)?.remove(),St.delete(t),Yr.delete(r)}var _d=b(()=>{Ea();Hm();za();Ho();Vi();yf();xf();vf();Lf();wf()});function Qr(e,t,r){let o=qo.get(e);o||qo.set(e,o=new Map);let i=new r(e);o.set(t,i),e._handlers.push(i),e.options[t]&&i.enable()}var Ed=b(()=>{qm()});function gt(e){return d.version.startsWith("2.")?e:e.extend({})}var es=b(()=>{L()});var Od={};Uv(Od,{cameraControls:()=>Nv});function Nv(e){if(Qr(e,"trackContainerMutation",Ym.value),!e.options.rotate)return;Qr(e,"shiftKeyRotate",Km.value),Qr(e,"pitchDrag",Jm.value),Qr(e,"compassBearing",Xm.value),Qr(e,"touchRotate",Oa.value),Qr(e,"touchPitch",Oa.value),Pr.set(e,qo.get(e).get("touchRotate")),Tr.set(e,qo.get(e).get("touchPitch"));let t=e.getContainer(),r={map:e,container:t,touch:null,nativeZoom:void 0};Yr.set(e,r),St.set(t,r),Jr.add(r),t.addEventListener("touchstart",Ja,Wi),t.addEventListener("touchmove",Ka,Wi),t.addEventListener("touchend",Qo,!0),t.addEventListener("touchcancel",Qo,!0),window.addEventListener("blur",Qa),e.on("cameratouchchange",Zi,e),Zi.call(e),e.options.rotateControl&&(Ni.set(e,new d.Control.Rotate(typeof e.options.rotateControl=="object"?e.options.rotateControl:$o)),Ni.get(e).addTo(e)),e.once("unload",Cd,e)}var ts,rs,os,is,ns,ei,zd=b(()=>{Ea();qm();Hm();Fi();ji();L();Su();Cu();_u();Eu();Ou();Ho();za();Qm();La();zu();Ju();td();od();sd();fd();ud();hf();wd();bd();Pd();Sd();yf();xf();vf();wf();_d();Lf();Ed();es();ts=class extends gt(d.Handler){};Object.assign(ts.prototype,{addHooks:vd,removeHooks:Ld});Xm.value=ts;rs=class extends gt(d.Handler){};Object.assign(rs.prototype,{addHooks:Td,removeHooks:kd});Ym.value=rs;os=class extends gt(d.Handler){};Object.assign(os.prototype,{addHooks:ld,removeHooks:Ya});Jm.value=os;is=class extends gt(d.Handler){};Object.assign(is.prototype,{addHooks:ad,removeHooks:md});Km.value=is;ns=class extends gt(d.Handler){};Object.assign(ns.prototype,{addHooks:ef,removeHooks:ef});Oa.value=ns;ei=class extends gt(d.Control){static defaultOptions={position:"topleft",closeOnZeroBearing:!0,visualizePitch:!0}};Object.assign(ei.prototype,{onAdd:Yu,onRemove:ed});d.version.startsWith("1.")&&(ei.prototype.options=Object.assign(Object.create(d.Control.prototype.options),ei.defaultOptions));d.Control.Rotate=ei;d.control&&(d.control.rotate=rd)});L();var ft={value:void 0};var gn={value:void 0};L();var j={value:void 0};var rt={value:void 0};var yn={value:void 0};var xn={value:void 0};var vn={value:void 0};var wn={value:void 0};var Ln={value:void 0};var bn={value:void 0};var Mn={value:void 0};var he=new WeakMap;var te=new WeakMap;var xo=new WeakMap;var fr=new WeakMap;L();var R=new WeakMap;var wt=new WeakMap;function Pi(e){let t=wt.get(e.currentTarget);if(!t)return;let r;for(r of t)Ne(r)}function ki(e){let t=wt.get(e.currentTarget);if(!t)return;let r;for(r of t)r.source.fire("error",{error:new Error("Unable to load native layer image")})}function Bn(e,t){let r=wt.get(e);r&&(r.delete(t),r.size||wt.delete(e))}function Jf(e,t){let r=wt.get(e);r||wt.set(e,r=new Set),r.add(t)}var pt=new WeakMap;var Ft=new Set;var F=new WeakMap;var w=new WeakMap;var re=new WeakMap;var jt=new WeakMap;var pr=new WeakMap;var ct=new WeakMap;var Tn=[null];var vo=new WeakMap;var ge=new WeakMap;var Xe=new WeakMap;var Kf={subtree:!0};var ae=new WeakMap;L();function Pn(e){let t;for(t of Object.values(e._layers))t instanceof d.Marker?t.update():(t instanceof d.Popup||t instanceof d.Tooltip)&&t._updatePosition()}function Qf(e,t){let r=e._map,o=Xe.get(e),i,n;for(n of ge.get(e).keys())if(n.effect.target===r._proxy){i=n;break}let a=i?.effect.getComputedTiming().progress??Math.min(1,(t-o.start)/250),s=r.getZoomScale(o.targetZoom,o.zoom),m=1+(s-1)*a,f=r.project(o.from,o.zoom),p=r.project(o.to,o.zoom);ae.set(r,{zoom:r.getScaleZoom(m,o.zoom),center:r.unproject(f.add(p.subtract(f).multiplyBy(s*a/m)),o.zoom)}),Pn(r)}function ep(e,t){let r=e._map,o,i,n;if(r._animatingZoom){ge.get(e)||ge.set(e,new Map);for(o of r.getContainer().getAnimations(Kf))!(o instanceof CSSTransition)||o.transitionProperty!=="transform"||!o.effect.target.classList.contains("leaflet-zoom-animated")||ge.get(e).has(o)||(i=o.currentTime||0,o.pause(),ge.get(e).set(o,{start:t,time:i}));for([o,{start:n,time:i}]of ge.get(e))o.currentTime=Math.min(o.effect.getComputedTiming().endTime,i+t-n);Xe.get(e)&&Qf(e,t)}}var cr=new WeakMap;var Si={size:[null,null],format:"depth24plus",sampleCount:4,usage:null};var wo={size:[null,null],format:null,sampleCount:4,usage:null};async function tp(e,t,r){try{await r}catch(o){e.fire("error",{error:o})}t.destroy()}function W(e,t){tp(e,t,w.get(e).device.queue.onSubmittedWorkDone())}function rp(e,t){let r=w.get(e);(!cr.get(e)||!cr.get(e).equals(t))&&(r.width=t.x,r.height=t.y,r.canvas.width=Math.round(t.x*r.dpr),r.canvas.height=Math.round(t.y*r.dpr),r.canvas.style.width=`${t.x}px`,r.canvas.style.height=`${t.y}px`,r.depthTexture&&W(e,r.depthTexture),r.colorTexture?.destroy(),r.colorTexture=r.device.createTexture((wo.size[0]=r.canvas.width,wo.size[1]=r.canvas.height,wo.format=r.format,wo.usage=GPUTextureUsage.RENDER_ATTACHMENT,wo)),r.depthTexture=r.device.createTexture((Si.size[0]=r.canvas.width,Si.size[1]=r.canvas.height,Si.usage=GPUTextureUsage.RENDER_ATTACHMENT,Si)),cr.set(e,t))}var Q=new WeakMap;var oe=new WeakMap;V();Lo();var op=2*Math.atan(1/3)*ot;var it=2*Math.PI*6378137;var fe=new WeakMap;var Pe=new WeakMap;var lt=new WeakMap;var ke=new WeakMap;var nt=new WeakMap;var ve=new WeakMap;L();function ip(e,t){let r=t?.get(`${Math.floor(e.x/64)}/${Math.floor(e.y/64)}`);if(!r)return null;let o,i,n,a,s,m,f;for(o of r)if(!(e.x<o.min[0]||e.x>o.max[0]||e.y<o.min[1]||e.y>o.max[1])){for([i,n,a]of o.triangles)if(s=(n[1]-a[1])*(i[0]-a[0])+(a[0]-n[0])*(i[1]-a[1]),m=((n[1]-a[1])*(e.x-a[0])+(a[0]-n[0])*(e.y-a[1]))/s,f=((a[1]-i[1])*(e.x-a[0])+(i[0]-a[0])*(e.y-a[1]))/s,m>=0&&f>=0&&m+f<=1)return m*i[2]+f*n[2]+(1-m-f)*a[2]}return null}function Ci(e,t,r){let o=Math.floor(t/256),i=Math.floor(r/256),n=e.get(`${o}/${i}`);if(!n)return null;let a=n[(r-i*256)*256+t-o*256];return Number.isFinite(a)&&a>-1e3?a:null}function lr(e,t){let r=e.x-.5,o=e.y-.5,i=Math.floor(r),n=Math.floor(o),a=r-i,s=o-n,m=Ci(t,i,n),f=Ci(t,i+1,n),p=Ci(t,i,n+1),c=Ci(t,i+1,n+1);return!Number.isFinite(m)||!Number.isFinite(f)||!Number.isFinite(p)||!Number.isFinite(c)?Number.isFinite(m)?m:Number.isFinite(f)?f:Number.isFinite(p)?p:Number.isFinite(c)?c:null:(m*(1-a)+f*a)*(1-s)+(p*(1-a)+c*a)*s}function ur(e,t){if(!e._map||!ke.get(e))return null;let r=t instanceof d.Point?t:e._map.project(t,ve.get(e));return ip(r,lt.get(e))??lr(r,nt.get(e))}function np(e,t,r,o,i){let n,a,s,m,f=`${r}:${o}:${i}`;for(n of Object.values(e.map._layers))if(a=he.get(n),!(a?.disposed||a?.terrainStream!==e)&&(s=a.terrainRequests?.get(f),!(!s?.tiles||n._tiles[f]!==s.tile)&&(m=lr(t,s.tiles),Number.isFinite(m))))return m;return null}function ap(e,t){let r=Math.max(0,Math.min(24,Math.round(e.map.getZoom()))),o=new Map,i,n,a,s,m,f,p,c,l,u,h;for(;r>=0;r--){if(i=e.map.project(t,r),n=2**r,a=Math.floor(i.x/256),s=Math.floor(i.y/256),h=np(e,i,a,s,r),Number.isFinite(h))return h;for(o.clear(),m=0;m<9;m++)f=m%3-1,p=Math.floor(m/3)-1,c=((a+f)%n+n)%n,l=Math.max(0,Math.min(n-1,s+p)),u=e.terrainCache.get(`${r}/${c}/${l}`),u?.data&&o.set(`${a+f}/${s+p}`,u.data);if(h=lr(i,o),Number.isFinite(h))return h}return null}function we(e,t){let r=fe.get(e);if(r)return ur(r,t);let o=Pe.get(e);return o&&ap(o,t)}var Wt=new WeakMap;J();Z();var sp=Math.PI/360;function bo(e){e.x||=[0,0,0],e.y||=[0,0,0],e.z||=[0,0,0],e.viewTransform||=new DOMMatrix,e.projectionTransform||=new DOMMatrix,e.projectionViewTransform||=new DOMMatrix;let{position:t,target:r,up:o,x:i,y:n,z:a,viewMatrix:s,projectionMatrix:m,projectionViewMatrix:f}=e,p;a[0]=t[0]-r[0],a[1]=t[1]-r[1],a[2]=t[2]-r[2];let c=Math.hypot(a[0],a[1],a[2])||1;a[0]/=c,a[1]/=c,a[2]/=c,i[0]=o[1]*a[2]-o[2]*a[1],i[1]=o[2]*a[0]-o[0]*a[2],i[2]=o[0]*a[1]-o[1]*a[0];let l=Math.hypot(i[0],i[1],i[2])||1;i[0]/=l,i[1]/=l,i[2]/=l,n[0]=a[1]*i[2]-a[2]*i[1],n[1]=a[2]*i[0]-a[0]*i[2],n[2]=a[0]*i[1]-a[1]*i[0];let u=e.viewTransform;u.m11=i[0],u.m12=i[1],u.m13=i[2],u.m14=0,u.m21=n[0],u.m22=n[1],u.m23=n[2],u.m24=0,u.m31=a[0],u.m32=a[1],u.m33=a[2],u.m34=0,u.m41=t[0],u.m42=t[1],u.m43=t[2],u.m44=1,u.invertSelf(),s[0]=u.m11,s[1]=u.m12,s[2]=u.m13,s[3]=u.m14,s[4]=u.m21,s[5]=u.m22,s[6]=u.m23,s[7]=u.m24,s[8]=u.m31,s[9]=u.m32,s[10]=u.m33,s[11]=u.m34,s[12]=u.m41,s[13]=u.m42,s[14]=u.m43,s[15]=u.m44;for(p of s)if(!Number.isFinite(p))throw new Error("Singular 3D transform");let h=1/Math.tan(e.fov*sp),x=e.near,y=e.far;m[0]=h/e.aspect,m[1]=0,m[2]=0,m[3]=0,m[4]=0,m[5]=h,m[6]=0,m[7]=0,m[8]=0,m[9]=0,m[10]=y/(x-y),m[11]=-1,m[12]=0,m[13]=0,m[14]=y*x/(x-y),m[15]=0;let g=e.projectionTransform;g.m11=m[0],g.m12=m[1],g.m13=m[2],g.m14=m[3],g.m21=m[4],g.m22=m[5],g.m23=m[6],g.m24=m[7],g.m31=m[8],g.m32=m[9],g.m33=m[10],g.m34=m[11],g.m41=m[12],g.m42=m[13],g.m43=m[14],g.m44=m[15];let v=e.projectionViewTransform;v.m11=g.m11,v.m12=g.m12,v.m13=g.m13,v.m14=g.m14,v.m21=g.m21,v.m22=g.m22,v.m23=g.m23,v.m24=g.m24,v.m31=g.m31,v.m32=g.m32,v.m33=g.m33,v.m34=g.m34,v.m41=g.m41,v.m42=g.m42,v.m43=g.m43,v.m44=g.m44,v.multiplySelf(u),f[0]=v.m11,f[1]=v.m12,f[2]=v.m13,f[3]=v.m14,f[4]=v.m21,f[5]=v.m22,f[6]=v.m23,f[7]=v.m24,f[8]=v.m31,f[9]=v.m32,f[10]=v.m33,f[11]=v.m34,f[12]=v.m41,f[13]=v.m42,f[14]=v.m43,f[15]=v.m44}function at(e,t,r=!1){let o=ae.get(e);if(!o)return t;let i=e.getSize().divideBy(2),n=e.getZoomScale(o.zoom),a=e.project(e.getCenter(),o.zoom).subtract(e.project(o.center,o.zoom));return r?t.subtract(i).subtract(a).divideBy(n).add(i):t.subtract(i).multiplyBy(n).add(a).add(i)}function mp(e,t){let r=e._map,o=ae.get(r)?.zoom??r.getZoom(),i=r.options.crs.scale(o)/(it*Math.cos(oe.get(e).lat*B)),n=at(r,j.value.layerPointToContainerPoint.call(r,r.project(oe.get(e)).subtract(r.getPixelOrigin()))),a=t.y*1.5/i,s=(t.x/2-n.x)/i,m=Wt.get(r)?.control?._walk,f=(we(r,r.getCenter())??0)+(m?.saved?m.state.height:0),p=(t.y/2-n.y)/i,c=_(r)*B,l=S(r)*B,u=Math.sin(c),h=Math.cos(c),x=Math.sin(l),y=Math.cos(l),g=Q.get(e);g.fov=op,g.aspect=t.x/t.y,g.near=Math.max(.1,a/1e4),g.far=Math.max(1e4,a*10),g.position[0]=s+x*u*a,g.position[1]=f+h*a,g.position[2]=p+y*u*a,g.up[0]=-x*h,g.up[1]=u,g.up[2]=-y*h,g.target[0]=s,g.target[1]=f,g.target[2]=p,bo(g)}var Vr=new WeakMap;function fp(e,t){let r,o;if(e.matrix){let i=e._matrixState||=new Float64Array(16);for(r=0;r<16;r++)i[r]!==e.matrix[r]&&(t=!0),i[r]=e.matrix[r]}else{let i=e._transformState||=new Float64Array(9);for(r=0;r<9;r++)o=r<3?e.position[r]:r<6?e.rotation[r-3]:e.scale[r-6],i[r]!==o&&(t=!0),i[r]=o}return t}Lo();function pp(e){let t=e._localTransform||=new DOMMatrix;return t.m11=1,t.m12=0,t.m13=0,t.m14=0,t.m21=0,t.m22=1,t.m23=0,t.m24=0,t.m31=0,t.m32=0,t.m33=1,t.m34=0,t.m41=0,t.m42=0,t.m43=0,t.m44=1,t.translateSelf(e.position[0],e.position[1],e.position[2]),t.rotateAxisAngleSelf(0,1,0,e.rotation[1]*ot),t.rotateAxisAngleSelf(1,0,0,e.rotation[0]*ot),t.rotateAxisAngleSelf(0,0,1,e.rotation[2]*ot),t.scaleSelf(e.scale[0],e.scale[1],e.scale[2]),t}function Se(e){let t=e.parent,r=t?._worldMatrixVersion||0,o=!!e.matrix,i=e._worldParent!==t||e._parentWorldVersion!==r||e._worldMatrixMode!==o,n;if(i=fp(e,i),!i){for(n of e.children)Se(n);return}let a,s;e.matrix?a=e.matrix:a=pp(e),s=e._worldTransform||=new DOMMatrix,a instanceof DOMMatrix?(s.m11=a.m11,s.m12=a.m12,s.m13=a.m13,s.m14=a.m14,s.m21=a.m21,s.m22=a.m22,s.m23=a.m23,s.m24=a.m24,s.m31=a.m31,s.m32=a.m32,s.m33=a.m33,s.m34=a.m34,s.m41=a.m41,s.m42=a.m42,s.m43=a.m43,s.m44=a.m44):(s.m11=a[0],s.m12=a[1],s.m13=a[2],s.m14=a[3],s.m21=a[4],s.m22=a[5],s.m23=a[6],s.m24=a[7],s.m31=a[8],s.m32=a[9],s.m33=a[10],s.m34=a[11],s.m41=a[12],s.m42=a[13],s.m43=a[14],s.m44=a[15]),t&&s.preMultiplySelf(t._worldTransform),e.worldMatrix[0]=s.m11,e.worldMatrix[1]=s.m12,e.worldMatrix[2]=s.m13,e.worldMatrix[3]=s.m14,e.worldMatrix[4]=s.m21,e.worldMatrix[5]=s.m22,e.worldMatrix[6]=s.m23,e.worldMatrix[7]=s.m24,e.worldMatrix[8]=s.m31,e.worldMatrix[9]=s.m32,e.worldMatrix[10]=s.m33,e.worldMatrix[11]=s.m34,e.worldMatrix[12]=s.m41,e.worldMatrix[13]=s.m42,e.worldMatrix[14]=s.m43,e.worldMatrix[15]=s.m44,e._worldParent=t,e._parentWorldVersion=r,e._worldMatrixMode=o,e._worldMatrixVersion=(e._worldMatrixVersion||0)+1;for(n of e.children)Se(n)}function Oe(e){let t=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0],o=e.attributes.position.data,i,n,a,s;for(i=0;i<o.length;i+=3)n=o[i],a=o[i+1],s=o[i+2],t[0]=Math.min(t[0],n),r[0]=Math.max(r[0],n),t[1]=Math.min(t[1],a),r[1]=Math.max(r[1],a),t[2]=Math.min(t[2],s),r[2]=Math.max(r[2],s);let m=e.attributes.instanceOffset;if(m){let l,u,h,x;for(l=0;l<3;l++){for(h=1/0,x=-1/0,u=l;u<m.data.length;u+=m.size)h=Math.min(h,m.data[u]),x=Math.max(x,m.data[u]);t[l]=Math.fround(t[l]+h),r[l]=Math.fround(r[l]+x)}}let f=[(t[0]+r[0])/2,(t[1]+r[1])/2,(t[2]+r[2])/2],p=0;for(i=0;!m&&i<o.length;i+=3)n=o[i]-f[0],a=o[i+1]-f[1],s=o[i+2]-f[2],p=Math.max(p,n*n+a*a+s*s);let c=m?Math.hypot(r[0]-t[0],r[1]-t[1],r[2]-t[2])/2:Math.sqrt(p);if(!m&&(p===1/0||p<Number.MIN_VALUE/Number.EPSILON))for(c=0,i=0;i<o.length;i+=3)c=Math.max(c,Math.hypot(o[i]-f[0],o[i+1]-f[1],o[i+2]-f[2]));e.bounds={min:t,max:r,center:f,radius:c}}function cp(e){let t=e.program?.uniforms?.strokeScale?.value??1;return Math.max(0,t-1)*(e.geometry.nativeStrokeRadius||0)}function lp(e,t,r,o,i){e.geometry.bounds||Oe(e.geometry);let n=e.geometry.bounds,a=e.worldMatrix,s=e._cullingSphere;if(!s||s.bounds!==n||s.matrix!==a||s.version!==e._worldMatrixVersion||e._worldMatrixVersion===void 0){s||=e._cullingSphere={};let h=n.center;s.x=a[0]*h[0]+a[4]*h[1]+a[8]*h[2]+a[12],s.y=a[1]*h[0]+a[5]*h[1]+a[9]*h[2]+a[13],s.z=a[2]*h[0]+a[6]*h[1]+a[10]*h[2]+a[14],s.scale=Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10])),s.radius=n.radius*s.scale,s.bounds=n,s.matrix=a,s.version=e._worldMatrixVersion}let{x:m,y:f,z:p}=s,c=s.radius+cp(e)*s.scale,l=t[2]*m+t[6]*f+t[10]*p+t[14],u=t[3]*m+t[7]*f+t[11]*p+t[15];e._sortDepth=l/u,e._visibleInFrame=r[0][0]*m+r[0][1]*f+r[0][2]*p+r[0][3]>=-c*o[0]&&r[1][0]*m+r[1][1]*f+r[1][2]*p+r[1][3]>=-c*o[1]&&r[2][0]*m+r[2][1]*f+r[2][2]*p+r[2][3]>=-c*o[2]&&r[3][0]*m+r[3][1]*f+r[3][2]*p+r[3][3]>=-c*o[3]&&r[4][0]*m+r[4][1]*f+r[4][2]*p+r[4][3]>=-c*o[4]&&r[5][0]*m+r[5][1]*f+r[5][2]*p+r[5][3]>=-c*o[5],e._visibleInFrame&&i.push(e)}function wm(e,t,r,o,i,n,a){if(!e.visible)return;e.geometry&&(t?.altitude>=3&&!e.tile&&e._appearance!==0&&!e.program.nightLight&&e.program.depthTest!==!1&&a.push(e),lp(e,r,o,i,n));let s;for(s of e.children)wm(s,t,r,o,i,n,a)}function up(e,t,r){let i=Q.get(e).projectionViewMatrix,n=w.get(e),a=n.frustum||=[new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(4)],s=n.frustumLengths||=new Float64Array(6),m,f,p,c,l;for(m=0;m<6;m++){for(f=Math.floor(m/2),p=a[m],c=0;c<4;c++)l=c*4,p[c]=m===4?i[l+2]:m%2?i[l+3]-i[l+f]:i[l+3]+i[l+f];s[m]=Math.hypot(p[0],p[1],p[2])}let u=Vr.get(e);u||Vr.set(e,u=[]),u.length=0;let h=jt.get(e);h||jt.set(e,h=[]),h.length=0,r&&Se(re.get(e)),wm(re.get(e),t,i,a,s,u,h)}var A=new WeakMap;var I=new WeakMap;var K=new WeakMap;var _i=new WeakMap;var pe=new WeakMap;var ze=new WeakMap;L();var dp=[];V();var hp=[];var gp={x:0,y:0};var yp={x:1,y:1};var xp={code:"@group(0)@binding(0)var source:texture_2d<f32>;@group(0)@binding(1)var sourceSampler:sampler;@group(0)@binding(2)var<uniform> opacity:f32;struct Varyings{@builtin(position)position:vec4f,@location(0)uv:vec2f};@vertex fn vertexMain(@builtin(vertex_index)index:u32)-> Varyings{let uv = vec2f(f32(index & 1u),f32(index >> 1u));return Varyings(vec4f(uv.x * 2.0 - 1.0,1.0 - uv.y * 2.0,0.0,1.0),uv);}@fragment fn fragmentMain(input:Varyings)->@location(0)vec4f{let color = textureSample(source,sourceSampler,input.uv);return vec4f(color.rgb,color.a * opacity);}"};var Mo={layout:"auto",vertex:{module:null,entryPoint:"vertexMain"},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}};var vp={magFilter:"linear",minFilter:"linear"};function wp(e){let t=e.device;if(!e.roofBlit){let r=t.createShaderModule(xp);e.roofBlit={pipeline:t.createRenderPipeline((Mo.vertex.module=r,Mo.fragment.module=r,Mo)),sampler:t.createSampler(vp)},Mo.vertex.module=null,Mo.fragment.module=null}}var Cn={size:null,usage:null};var _n={colorAttachments:[{view:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]};var En={source:null};var On={texture:null};var zn=[null,null];function Lp(e,t){let r=t.texture;r.uploaded!==r.image&&(e.queue.copyExternalImageToTexture((En.source=t.image,En),(On.texture=r.texture,On),(zn[0]=r.texture.width,zn[1]=r.texture.height,zn)),En.source=null,On.texture=null,r.uploaded=r.image)}var ut={layout:null,entries:[{binding:0,resource:null},{binding:1,resource:null},{binding:2,resource:{buffer:null,offset:null,size:4}}]};var An=[null];var Rn={value:new Float32Array(64)};function bp(e,t){return(e.layer.options.zIndex||0)-(t.layer.options.zIndex||0)||e.tile.coords.z-t.tile.coords.z}function Mp(e,t,r,o,i,n,a){let s=w.get(e),m=s.device,f=e._map,p=Math.max(1,t.length)*64;Rn.value.length<p&&(Rn.value=new Float32Array(p));let c=Rn.value,l=m.createBuffer((Cn.size=c.byteLength,Cn.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,Cn)),u=m.createCommandEncoder(),h=u.beginRenderPass((_n.colorAttachments[0].view=K.get(e).texture.texture.createView(),_n));_n.colorAttachments[0].view=null,h.setPipeline(s.roofBlit.pipeline),t.sort(bp);let x,y,g,v,T,P,k,z;for([x,{tile:y,layer:g}]of t.entries())({coords:v}=y),T=y.texture,Lp(m,y),c[x*64]=g.options.opacity,P=256*f.getZoomScale(r,v.z),k=(v.x*P-o.x)*n/i.x,z=(v.y*P-o.y)*a/i.y,h.setViewport(k,z,Math.min(P*n/i.x,n-k),Math.min(P*a/i.y,a-z),0,1),h.setBindGroup(0,m.createBindGroup((ut.layout=s.roofBlit.pipeline.getBindGroupLayout(0),ut.entries[0].resource=T.texture.createView(),ut.entries[1].resource=s.roofBlit.sampler,ut.entries[2].resource.buffer=l,ut.entries[2].resource.offset=x*256,ut))),ut.layout=null,ut.entries[0].resource=null,ut.entries[1].resource=null,ut.entries[2].resource.buffer=null,h.draw(4);h.end(),m.queue.writeBuffer(l,0,c),m.queue.submit((An[0]=u.finish(),An)),An[0]=null,l.destroy()}function Bp(e,t){let r=-1/0,o,i;for(o of e)for(i of I.get(o).values())i.done&&!i.request.signal.aborted&&i.image&&(i._roofEntry||={tile:i,layer:o},t.push(i._roofEntry),r=Math.max(r,i.coords.z));return r}var Tp={size:[null,null],format:"rgba8unorm",usage:null};var Pp={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"};function kp(e,t,r,o){let i=w.get(e),n=Tp;n.size[0]=r,n.size[1]=o,n.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,t.texture&&(t.texture.width!==r||t.texture.height!==o)&&(W(e,t.texture.texture),t.texture.texture=i.device.createTexture(n),t.texture.width=r,t.texture.height=o),t.texture||={device:i.device,texture:i.device.createTexture(n),sampler:i.device.createSampler(Pp),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:r,height:o,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}}function Sp(e,t,r,o){let i=e._map,n=w.get(e),a=hp;a.length=0;let s=Bp(t,a),m=1/0,f=1/0,p=-1/0,c=-1/0,l,u;a.length||(s=i.getZoom());for({tile:{coords:l}}of a)u=256*i.getZoomScale(s,l.z),m=Math.min(m,l.x*u),f=Math.min(f,l.y*u),p=Math.max(p,(l.x+1)*u),c=Math.max(c,(l.y+1)*u);let h=i.project(oe.get(e),s),x=gp,y=yp;x.x=a.length?m:h.x,x.y=a.length?f:h.y,y.x=a.length?p-m:1,y.y=a.length?c-f:1;let g=Math.min(1,4096/Math.max(y.x,y.y)),v=Math.max(1,Math.ceil(y.x*g)),T=Math.max(1,Math.ceil(y.y*g)),P=i.options.crs.scale(s)/(it*Math.cos(oe.get(e).lat*B)),k={matrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],texture:K.get(e)?.texture};K.set(e,k),k.signature=r,k.updatedAt=o,k.matrix[0]=P/y.x,k.matrix[10]=P/y.y,k.matrix[12]=(h.x-x.x)/y.x,k.matrix[14]=(h.y-x.y)/y.y,kp(e,k,v,T),wp(n);try{Mp(e,a,s,x,y,v,T)}finally{a.length=0}}function Cp(e,t,r){let o=dp;o.length=0;let i=!1,n;for(n of t)o.push(`${d.Util.stamp(n)}:${ze.get(n)||0}:${n.options.opacity}:${n.options.zIndex}`),i||=!!pe.get(n);let a=o.join("|");o.length=0,(!K.get(e)||K.get(e).signature!==a&&(!i||r-K.get(e).updatedAt>=50))&&Sp(e,t,a,r)}function _p(e,t){let r=e._map,o=_i.get(e);o||_i.set(e,o=[]),o.length=0;let i=!1,n,a;for(n of F.get(e))if(n.options.roofTexture||n.options.wallTexture){i=!0;break}if(i){for(a of Object.values(r._layers))A.get(a)==="raster"&&I.get(a)&&a.options.opacity>0&&o.push(a);Cp(e,o,t)}else K.get(e)&&(W(e,K.get(e).texture.texture),K.set(e,null));return o}function Ep(e,t){return e.program.transparent?(e.renderOrder||0)-(t.renderOrder||0)||t._sortDepth-e._sortDepth||e.id-t.id:(e._sortDepth??0)-(t._sortDepth??0)||e.id-t.id}function Op(e,t){return+!!t.ground-+!!e.ground||(e.ground&&t.ground?(e.renderOrder||0)-(t.renderOrder||0)||e.tile.coords.z-t.tile.coords.z:0)||Number(e.program.transparent)-Number(t.program.transparent)||Ep(e,t)}var G=new WeakMap;var dr=new WeakMap;V();function zp(e,t,r){let o=t._map,i=e.geometry.bounds,n=e.worldMatrix,a=dr.get(r),s=o.project(oe.get(t),a),m=o.options.crs.scale(a)/(it*Math.cos(oe.get(t).lat*B)),f=1/0,p=1/0,c=-1/0,l=-1/0,u,h,x,y,g,v,T,P;for(u=0;u<8;u++)h=u&1?i.max[0]:i.min[0],x=u&2?i.max[1]:i.min[1],y=u&4?i.max[2]:i.min[2],g=s.x+(n[0]*h+n[4]*x+n[8]*y+n[12])*m,v=s.y+(n[2]*h+n[6]*x+n[10]*y+n[14])*m,f=Math.min(f,g),p=Math.min(p,v),c=Math.max(c,g),l=Math.max(l,v);return G.get(r).maxLat!==void 0&&G.get(r).minLon!==void 0&&G.get(r).minLat!==void 0&&G.get(r).maxLon!==void 0&&(T=o.project([G.get(r).maxLat,G.get(r).minLon],a),P=o.project([G.get(r).minLat,G.get(r).maxLon],a),f=Math.max(f,T.x),p=Math.max(p,T.y),c=Math.min(c,P.x),l=Math.min(l,P.y),f>=c||p>=l)?null:[f,p,c,l]}function Ap(e,t,r){let o=256*2**(r-t.coords.z),i=t.coords.x*o,n=t.coords.y*o,a=[],s,m,f,p,c,l,u,h;for([s,m,f,p]of e){if(c=Math.max(s,i),l=Math.max(m,n),u=Math.min(f,i+o),h=Math.min(p,n+o),c>=u||l>=h){a.push([s,m,f,p]);continue}m<l&&a.push([s,m,f,l]),h<p&&a.push([s,h,f,p]),s<c&&a.push([s,l,c,h]),u<f&&a.push([u,l,f,h])}return a}function Rp(e,t,r){let o=!1,i=!1,n,a,s,m;for(n of r){if(!G.get(n)){i=!0;continue}if(a=zp(e,t,n),!!a){o=!0,s=[a];for(m of I.get(n).values())if(!(!m.done&&!m.error)&&(s=Ap(s,m,dr.get(n)),!s.length))return!0}}return!o&&!i}function Ip(e,t,r,o){let i,n;if(t.program.uniforms.roofTexture&&!r.length&&(t._roofRevealed=!0),t.program.uniforms.roofTexture&&!t._roofRevealed&&r.length){Wt.get(e._map)?.control?._walk?.saved&&(t._roofRevealed=!0,t.fadeStart=o-(t.fadeDuration||0)),t._roofCoverageSignature!==K.get(e)?.signature&&(t._roofCoverageSignature=K.get(e)?.signature,t._roofCovered=Rp(t,e,r)),n=!1;for(i of r)if(!G.get(i)||pe.get(i)>0){n=!0;break}if(!t._roofRevealed&&!t._roofCovered&&n)return t._appearance=0,!1;t._roofRevealed=!0}return!0}function Dp(e,t,r,o){let i=Vr.get(e),n=jt.get(e),a=w.get(e),s=!1,m,f;for(m of i)Ip(e,m,t,r)&&(m.fadeDuration&&(m.fadeStart??=m.tile?.loadedAt??r,f=Math.min(1,(r-m.fadeStart)/m.fadeDuration),m._appearance=f*f*(3-2*f),s||=f<1),o.push(m));i.length=0,o.sort(Op);let p=1/0,c=-1/0;for(m of o)m.ground&&(p=Math.min(p,m.tile.coords.z),c=Math.max(c,m.tile.coords.z));a.groundOverlap=p!==c;let l=0;for(m of n)m.visible&&m._appearance!==0&&(n[l++]=m);return n.length=l,s}var In={size:null,usage:null};function Gp(e,t,r){let o=w.get(e);(!o.uniformBuffer||o.uniformBuffer.size<(t.length*2+r.length+1)*256)&&(o.uniformBuffer&&W(e,o.uniformBuffer),o.uniformBuffer=o.device.createBuffer((In.size=Math.max(64,t.length*4+r.length*2)*256,In.usage=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,In)),o.uniformData=new Float32Array(o.uniformBuffer.size/4))}var M=new WeakMap;var st={layout:null,entries:[{binding:0,resource:{buffer:null}},{binding:1,resource:null},{binding:2,resource:null},{binding:3,resource:{buffer:null}}]};function Dn(e){let t=w.get(e).sunlight;t.bindGroup=w.get(e).device.createBindGroup((st.layout=t.layout,st.entries[0].resource.buffer=t.buffer,st.entries[1].resource=t.texture.createView(),st.entries[2].resource=t.sampler,st.entries[3].resource.buffer=t.lights,st)),st.layout=null,st.entries[0].resource.buffer=null,st.entries[1].resource=null,st.entries[2].resource=null,st.entries[3].resource.buffer=null}function Up(e,t,r,o,i){let n,a;for(n=0,a=o[r]*4;n<8;n++)i[a+n]=e[t+n];o[r]+=2}function Np(e,t,r,o,i,n,a,s){let m=e[t+3],f=e[t]-r,p=e[t+2]-o,c,l,u;for(c=Math.floor((p-m)/i);c<=Math.floor((p+m)/i);c++)for(l=Math.floor((f-m)/i);l<=Math.floor((f+m)/i);l++)u=c*n+l,s?Up(e,t,u,a,s):a[u]++}function Lm(e,t,r,o,i,n,a){let s,m;for(s of e)for(m=0;m<s.length;m+=8)Np(s,m,t,r,o,i,n,a)}function Fp(e,t){let r=0,o,i,n,a;for(o of e)r+=o.length/8;let s=32,m;if(r){let f=1/0,p=1/0,c=-1/0,l=-1/0;for(o of e)for(i=0;i<o.length;i+=8)f=Math.min(f,o[i]-o[i+3]),c=Math.max(c,o[i]+o[i+3]),p=Math.min(p,o[i+2]-o[i+3]),l=Math.max(l,o[i+2]+o[i+3]);let u=Math.ceil((c-f)/s)+1,h=Math.ceil((l-p)/s)+1,x=new Uint32Array(u*h),y=new Uint32Array(u*h);Lm(e,f,p,s,u,x);let g=0;for(n of x)g+=n;let v=(2+u*h+g*2)*4;if(v*4>t)throw new Error("Streetlight grid exceeds GPU storage limit");m=new Float32Array(v),m[0]=f,m[1]=p,m[2]=s,m[3]=u,m[4]=h,m[5]=r;let T=2+u*h;for(a=0;a<x.length;a++)x[a]&&(m[(2+a)*4]=y[a]=T,m[(2+a)*4+1]=x[a],T+=x[a]*2);Lm(e,f,p,s,u,y,m)}else m=new Float32Array(8);return{data:m,count:r}}var jp=.03/(4*Math.PI);function Wp(e,t){let r=new Float32Array(e.length*8),o,i,n,a,s,m,f,p;for(o=0;o<e.length;o++)({position:[i,n,a],radius:s,color:m,flux:f}=e[o]),p=t[3]*i+t[7]*n+t[11]*a+t[15],r[o*8]=(t[0]*i+t[4]*n+t[8]*a+t[12])/p,r[o*8+1]=(t[1]*i+t[5]*n+t[9]*a+t[13])/p,r[o*8+2]=(t[2]*i+t[6]*n+t[10]*a+t[14])/p,r[o*8+3]=s,r[o*8+4]=m[0],r[o*8+5]=m[1],r[o*8+6]=m[2],r[o*8+7]=f*jp;return r}function bm(e,t,r){let o=t?.meshes.length===e.length,i,n,a,s,m,f,p;for(i=0;i<e.length;i++){for(n=e[i],a=n.worldMatrix,s=n.extras.lights,m=n._worldLights,f=!!m,p=0;p<a.length&&f;p++)f=a[p]===m.matrix[p];(!f||m.lights!==s)&&(m=n._worldLights={lights:s,matrix:[...a],data:Wp(s,a)}),o&&=t.meshes[i].mesh===n&&t.meshes[i].cache===m}if(o)return t;let c=new Array(e.length),l=new Array(e.length);for(i=0;i<e.length;i++)n=e[i],m=n._worldLights,c[i]=m.data,l[i]={mesh:n,cache:m};return{...Fp(c,r),meshes:l}}var hr=[];function Mm(e,t,r){if(!e.visible)return;e.extras?.lights&&(e.extras.dynamicLights?r:t).push(e);let o;for(o of e.children||hr)Mm(o,t,r)}function $p(e){let{device:t,sunlight:r}=w.get(e),o=[],i=[],n;for(n of F.get(e))!n.options.nightLight||!M.get(n).visible||Mm(M.get(n),o,i);let a=t.limits.maxStorageBufferBindingSize,s=bm(o,r.staticLightGrid,a),m=bm(i,r.dynamicLightGrid,a);if(s===r.staticLightGrid&&m===r.dynamicLightGrid)return;let f=s.data.byteLength+m.data.byteLength;if(f>a)throw new Error("Streetlight grid exceeds GPU storage limit");let p=s!==r.staticLightGrid;r.lights.size<f&&(W(e,r.lights),r.lights=t.createBuffer({size:f,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),Dn(e),p=!0),s.data[6]=s.data.length/4,p&&t.queue.writeBuffer(r.lights,0,s.data),t.queue.writeBuffer(r.lights,s.data.byteLength,m.data),r.lightCount=s.count+m.count,r.staticLightGrid=s,r.dynamicLightGrid=m}function Vp(e,t,r,o){let i=w.get(e),n=Q.get(e),a=n.viewMatrix,s=o?.direction,m=s?s[0]:-300,f=s?s[1]:500,p=s?s[2]:300,c=a[0]*m+a[4]*f+a[8]*p,l=a[1]*m+a[5]*f+a[9]*p,u=a[2]*m+a[6]*f+a[10]*p,h=Math.hypot(c,l,u)||1,x=Math.hypot(a[4],a[5],a[6])||1;Gp(e,t,r);let y=i.uniformData;y.set(n.viewMatrix,0),y.set(n.projectionMatrix,16),K.get(e)?.matrix?y.set(K.get(e).matrix,32):(y.fill(0,32,48),y[32]=y[37]=y[42]=y[47]=1),y[48]=c/h,y[49]=l/h,y[50]=u/h,y[51]=o&&o.altitude<=0?0:1,y[52]=a[4]/x,y[53]=a[5]/x,y[54]=a[6]/x;let g=o?Math.max(0,Math.min(1,(3-o.altitude)/9)):0;y[55]=g*g*(3-2*g);let v=o?.tint;y[56]=v?v[0]:1,y[57]=v?v[1]:1,y[58]=v?v[2]:1,y[59]=0,g>0&&$p(e),i.uniformSlot=1}var gr={colorAttachments:[{view:null,resolveTarget:null,clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var Bm=[null];var be={layout:null,vertex:{module:null,entryPoint:"vertexMain",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[{format:null,blend:null,writeMask:null}]},primitive:{topology:"triangle-list",cullMode:null,frontFace:null},multisample:{count:4},depthStencil:{format:"depth24plus",depthWriteEnabled:null,depthCompare:null}};var Zp={color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}};function qp(e,t,r,o){let{program:i}=t,n=i.depthTest===!1||t.ground&&e.groundOverlap?"always":"less-equal",a=`${r}:${o}:${n}`,s=i.pipelineCache.get(a);return s||(s=e.device.createRenderPipeline((be.layout=i.pipelineLayout,be.vertex.module=i.vertex,be.vertex.buffers=i.vertexBuffers,be.fragment.module=i.fragment,be.fragment.targets[0].format=e.format,be.fragment.targets[0].blend=i.transparent?Zp:void 0,be.fragment.targets[0].writeMask=GPUColorWrite.ALL,be.primitive.cullMode=r,be.primitive.frontFace=o,be.depthStencil.depthWriteEnabled=i.depthWrite,be.depthStencil.depthCompare=n,be)),be.layout=null,be.vertex.module=null,be.vertex.buffers=null,be.fragment.module=null,i.pipelineCache.set(a,s)),s}function Hp(e,t,r){let o=e.uniformData,i=(t._nativeSource||t._rasterSource)?.options.cutout;if(i&&(!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.radius)||i.radius<0))throw new Error("cutout requires finite x, y and a non-negative radius in CSS pixels");o[r+36]=(i?.x??0)*e.dpr,o[r+37]=(i?.y??0)*e.dpr,o[r+38]=(i?.radius??0)*e.dpr,o[r+39]=i?.outside?1:0}function Xp(e,t){let r=t.program.uniforms,o=e.uniformSlot++*256,i=e.uniformData,n=o/4;return i.set(t.worldMatrix,n),i.set(r.baseColor.value,n+16),i[n+19]=1,i[n+20]=r.metallic.value,i[n+21]=r.roughness.value,i[n+22]=r.opacity.value*(t.ground?t._appearance??1:1),i[n+23]=r.alphaCutoff.value,i.set(r.emissive.value,n+24),i[n+27]=r.occlusionStrength.value,i[n+28]=t.terrain?.[0]??0,i[n+29]=t.terrain?.[1]??0,i[n+30]=t.terrain?.[2]??0,i[n+31]=t.terrain?.[3]??0,i[n+32]=t.highlight?.[0]??0,i[n+33]=t.highlight?.[1]??0,i[n+34]=t.program.nightSparkle?i[55]:0,i[n+35]=t.ground?1:t._appearance??1,Hp(e,t,n),i[n+40]=r.strokeScale?.value??1,i[n+41]=i[n+42]=i[n+43]=0,o}var Zr={source:null,flipY:null};var Bo={texture:null};var To=[null,null];function Yp(e,t){t.uploaded!==t.image&&(e.queue.copyExternalImageToTexture((Zr.source=t.image,Zr.flipY=!!t.flipY,Zr),(Bo.texture=t.texture,Bo),(To[0]=t.image.width,To[1]=t.image.height,To)),Zr.source=null,Bo.texture=null,t.uploaded=t.image)}var Po={layout:null,entries:null};var Jp=[];var Gn={binding:0,resource:{buffer:null,size:176}};var Un={binding:1,resource:{buffer:null,size:240}};var Nn={binding:2,resource:null};var Ei=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];var Oi=[{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null},{binding:null,resource:null}];function Kp(e,t,r){let{program:o}=t,i=Jp;i.length=0,Gn.resource.buffer=e.uniformBuffer,Un.resource.buffer=e.uniformBuffer,i.push(Gn,Un),o.terrain&&(Nn.resource=o.terrain.texture.createView(),i.push(Nn)),t.boundBuffer=e.uniformBuffer;let n=t.boundTextures||=[];n.length=r.length;let a,s,m;for(a=0;a<r.length;a++)s=o.bindings[a],m=r[a],Ei[a].binding=s.texture,Ei[a].resource=m.texture.createView(),Oi[a].binding=s.sampler,Oi[a].resource=m.sampler,i.push(Ei[a],Oi[a]),n[a]||=[],n[a][0]=m.texture,n[a][1]=m.sampler;for(t.bindGroup=e.device.createBindGroup((Po.layout=o.bindGroupLayout,Po.entries=i,Po)),Po.layout=null,Po.entries=null,Gn.resource.buffer=null,Un.resource.buffer=null,Nn.resource=null,a=0;a<r.length;a++)Ei[a].resource=null,Oi[a].resource=null;i.length=0}function Qp(e,t){let{program:r}=t,{device:o}=e,i=t._textures||=[];i.length=0;let n,a,s;for(n of r.bindings){if(a=r.uniforms[n.name]?.value,!a)throw new Error(`Missing Layer3D texture: ${n.name}`);Yp(o,a),i.push(a)}let m=!t.bindGroup||t.boundBuffer!==e.uniformBuffer||i.length!==t.boundTextures.length;for(s=0;!m&&s<i.length;s++)(i[s].texture!==t.boundTextures[s][0]||i[s].sampler!==t.boundTextures[s][1])&&(m=!0);m&&Kp(e,t,i)}function Fn(e,t,r,o,i){let{geometry:n}=t,{attributes:a,drawRange:s}=n,m=w.get(e),{device:f}=m,p=qp(m,t,o,i),c=Xp(m,t);Qp(m,t),r.setPipeline(p),r.setBindGroup(0,t.bindGroup,(Bm[0]=c,Bm)),r.setVertexBuffer(0,a.position.buffer),r.setVertexBuffer(1,a.normal.buffer),a.color&&r.setVertexBuffer(2,a.color.buffer),a.uv&&r.setVertexBuffer(3,a.uv.buffer);let l=a.instanceOffset;l&&r.setVertexBuffer(4,l.buffer);let u,h;for(u in a)h=a[u],h.needsUpdate&&(f.queue.writeBuffer(h.buffer,0,h.data),h.needsUpdate=!1,(u==="position"||u==="instanceOffset")&&(n.bounds=null));let x=a.index;x?(r.setIndexBuffer(x.buffer,x.indexFormat),r.drawIndexed(s.count,l?.count??1,s.start,0,0)):r.draw(s.count,l?.count??1,s.start,0)}function ec(e,t,r){let o=w.get(e),i=t.beginRenderPass((gr.colorAttachments[0].view=o.colorTexture.createView(),gr.colorAttachments[0].resolveTarget=o.context.getCurrentTexture().createView(),gr.depthStencilAttachment.view=o.depthTexture.createView(),gr));gr.colorAttachments[0].view=null,gr.colorAttachments[0].resolveTarget=null,gr.depthStencilAttachment.view=null,i.setViewport(0,0,o.canvas.width,o.canvas.height,0,1),i.setBindGroup(1,o.sunlight.bindGroup);let n,a,s,m,f,p;for(n of r){if(a=n.worldMatrix,n.texture&&(n.program.uniforms.baseTexture.value=n.texture,n.program.uniforms.opacity.value=n.opacity),s=n.program.uniforms,s.roofTexture&&(s.roofTexture.value=K.get(e)?.texture||o.roofFallbackTexture),!n._frontFace||n._frontFaceWorldVersion!==n._worldMatrixVersion||n._worldMatrixVersion===void 0){if(m=a[0]*(a[5]*a[10]-a[6]*a[9])-a[4]*(a[1]*a[10]-a[2]*a[9])+a[8]*(a[1]*a[6]-a[2]*a[5]),!Number.isFinite(m)||m===0)throw new Error("Singular 3D transform");n._frontFace=m<0?"cw":"ccw",n._frontFaceWorldVersion=n._worldMatrixVersion}f=n._frontFace,p=n.program,p.transparent&&p._layerMaterial.doubleSided&&!n._nativeSource?(Fn(e,n,i,"front",f),Fn(e,n,i,"back",f)):Fn(e,n,i,p.cullMode,f)}i.end()}var tc=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0]);var rc=new Float32Array(20);function oc(e,t){let r=e.meshes.get(t),o=t.geometry.drawRange;if(!(r&&r.world===t._worldMatrixVersion&&r.geometry===t.geometry&&r.start===o.start&&r.count===o.count&&r.appearance===(t._appearance??1)))return!1;let i;for(i of Object.values(t.geometry.attributes))if(i.needsUpdate)return!1;return!0}function ic(e,t,r){let o=e.cache,i=e.enabled&&o?.meshes.size===t.length,n,a;if(i){for(n=0;n<r.direction.length;n++)if(r.direction[n]!==o.direction[n]){i=!1;break}}if(i){for(a of t)if(!oc(o,a)){i=!1;break}}return i}var nc={min:[0,0,0],max:[0,0,0]};var ac={position:[0,0,0],target:[0,0,0],up:[0,0,-1],x:[0,0,0],y:[0,0,0],z:[0,0,0],fov:45,aspect:1,near:1,far:500,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};var sc=[0,0,0];var mc=[0,0,0];function fc(e,t,r){let o=e._shadowBounds;if(!o||o.version!==e._worldMatrixVersion||o.bounds!==t){o||=e._shadowBounds={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]},o.version=e._worldMatrixVersion,o.bounds=t,o.min.fill(1/0),o.max.fill(-1/0);let i,n,a,s,m,f,p;for(i=0;i<8;i++)for(n=i&1?t.max[0]:t.min[0],a=i&2?t.max[1]:t.min[1],s=i&4?t.max[2]:t.min[2],m=r[3]*n+r[7]*a+r[11]*s+r[15],f=0;f<3;f++)p=(r[f]*n+r[f+4]*a+r[f+8]*s+r[f+12])/m,o.min[f]=Math.min(o.min[f],p),o.max[f]=Math.max(o.max[f],p)}return o}function pc(e,t={min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}){let{min:r,max:o}=t;r.fill(1/0),o.fill(-1/0);let i,n,a,s,m;for(i of e)for((!i.geometry.bounds||i.geometry.attributes.position.needsUpdate)&&Oe(i.geometry),n=i.geometry.bounds,a=i.worldMatrix,s=fc(i,n,a),m=0;m<3;m++)r[m]=Math.min(r[m],s.min[m]),o[m]=Math.max(o[m],s.max[m]);return r[1]=Math.min(0,r[1]),t}function cc(e,t){let{min:r,max:o}=pc(e,nc),i=ac;i.viewTransform||=new DOMMatrix,i.projectionTransform||=new DOMMatrix,i.projectionViewTransform||=new DOMMatrix;let n=sc,a=mc,s,m,f,p,c,l,u=Math.max(100,Math.hypot(o[0]-r[0],o[1]-r[1],o[2]-r[2]));for(s=0;s<3;s++)i.target[s]=(r[s]+o[s])/2,i.position[s]=i.target[s]+t.direction[s]*u*2;i.far=u*5,bo(i);let h=i.viewMatrix;for(n.fill(1/0),a.fill(-1/0),s=0;s<8;s++)for(f=s&1?o[0]:r[0],p=s&2?o[1]:r[1],c=s&4?o[2]:r[2],m=0;m<3;m++)l=h[m]*f+h[m+4]*p+h[m+8]*c+h[m+12],n[m]=Math.min(n[m],l-20),a[m]=Math.max(a[m],l+20);let x=2/(a[0]-n[0]),y=2/(a[1]-n[1]),g=-1/(a[2]-n[2]),v=new Float32Array(16);for(s=0;s<16;s+=4)v[s]=h[s]*x,v[s+1]=h[s+1]*y,v[s+2]=h[s+2]*g,v[s+3]=h[s+3];return v[12]-=(a[0]+n[0])/(a[0]-n[0]),v[13]-=(a[1]+n[1])/(a[1]-n[1]),v[14]+=a[2]/(a[2]-n[2]),v}var Tm={entries:[{binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}}]};var Pm={entries:[{binding:0,visibility:null,buffer:{type:"uniform"}}]};var ko={layout:null,entries:[{binding:0,resource:{buffer:null}}]};var jn={code:null};var Lt={layout:null,vertex:{module:null,entryPoint:"main",buffers:null},fragment:{module:null,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}};var So={bindGroupLayouts:[null,null]};var Co=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:0,offset:0,format:"float32x3"})])});var Wn=Object.freeze({arrayStride:16,stepMode:"instance",attributes:Object.freeze([Object.freeze({shaderLocation:4,offset:0,format:"float32x4"})])});var lc=[Co,Wn];var uc=[Co];function km(e,t,r=!1){let o=r?"instancePipeline":"pipeline";if(!t[o]){t.meshLayout||(t.meshLayout=e.createBindGroupLayout((Tm.entries[0].visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Tm)),t.depthLayout=e.createBindGroupLayout((Pm.entries[0].visibility=GPUShaderStage.VERTEX,Pm)),t.depthBindGroup=e.createBindGroup((ko.layout=t.depthLayout,ko.entries[0].resource.buffer=t.buffer,ko)),ko.layout=null,ko.entries[0].resource.buffer=null);let i=e.createShaderModule((jn.code=` struct Mesh{world:mat4x4<f32>,padding:array<vec4<f32>,4>,highlight:vec4<f32>};@group(0)@binding(0)var<uniform> mesh:Mesh;@group(1)@binding(0)var<uniform> matrix:mat4x4<f32>;@vertex fn main(@location(0)position:vec3<f32>${r?", @location(4) offset: vec4<f32>":""})->@builtin(position)vec4<f32>{return matrix * mesh.world * vec4<f32>(position${r?" + offset.xyz":""},1.0);}@fragment fn fragmentMain(@builtin(position)position:vec4<f32>){let noise = fract(52.9829189 * fract(dot(floor(position.xy),vec2<f32>(0.06711056,0.00583715))));if(mesh.highlight.w < 1.0 && noise >= mesh.highlight.w){discard;}}`,jn));jn.code=null;let n=r?lc:uc;t[o]=e.createRenderPipeline((Lt.layout=e.createPipelineLayout((So.bindGroupLayouts[0]=t.meshLayout,So.bindGroupLayouts[1]=t.depthLayout,So)),Lt.vertex.module=i,Lt.vertex.buffers=n,Lt.fragment.module=i,Lt)),So.bindGroupLayouts[0]=null,So.bindGroupLayouts[1]=null,Lt.layout=null,Lt.vertex.module=null,Lt.vertex.buffers=null,Lt.fragment.module=null}}var $n={colorAttachments:[],depthStencilAttachment:{view:null,depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}};var _o={layout:null,entries:[{binding:0,resource:{buffer:null,size:144}}]};var Sm=[null];function dc(e,t,r){let o=w.get(e),i=o.device,n=o.sunlight,a=t.beginRenderPass(($n.depthStencilAttachment.view=n.texture.createView(),$n));$n.depthStencilAttachment.view=null;let s=n.pipeline;a.setPipeline(s),a.setBindGroup(1,n.depthBindGroup);let m,f,p,c,l,u,h,x;for(m of r){f=m.geometry.attributes,p=f.instanceOffset,c=p?n.instancePipeline:n.pipeline,c!==s&&(s=c,a.setPipeline(s)),l=o.uniformSlot++*256,o.uniformData.set(m.worldMatrix,l/4),o.uniformData[l/4+35]=m._appearance??1,m._shadowBuffer!==o.uniformBuffer&&(m._shadowBuffer=o.uniformBuffer,m._shadowBindGroup=i.createBindGroup((_o.layout=n.meshLayout,_o.entries[0].resource.buffer=o.uniformBuffer,_o)),_o.layout=null,_o.entries[0].resource.buffer=null);for(u of Object.values(f))u.needsUpdate&&(i.queue.writeBuffer(u.buffer,0,u.data),u.needsUpdate=!1);a.setBindGroup(0,m._shadowBindGroup,(Sm[0]=l,Sm)),a.setVertexBuffer(0,f.position.buffer),p&&a.setVertexBuffer(1,p.buffer),h=f.index,x=m.geometry.drawRange,h?(a.setIndexBuffer(h.buffer,h.indexFormat),a.drawIndexed(x.count,p?.count??1,x.start,0,0)):a.draw(x.count,p?.count??1,x.start,0)}a.end()}var zi={size:[null,null],format:"depth32float",usage:null};function Vn(e,t){let r=w.get(e).device,o=w.get(e).sunlight;o.size!==t&&(o.texture&&W(e,o.texture),o.size=t,o.texture=r.createTexture((zi.size[0]=t,zi.size[1]=t,zi.usage=GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC,zi)),Dn(e))}function hc(e,t,r,o){let i=w.get(e),n=i.device,a=i.sunlight;if(!r.length||!o||o.altitude<3){if(!a.enabled)return;n.queue.writeBuffer(a.buffer,0,tc),a.enabled=!1,a.cache=null;return}if(ic(a,r,o))return;let s=rc;a.enabled=!0,Vn(e,Math.min(2048,n.limits.maxTextureDimension2D)),s.set(cc(r,o)),s[16]=1,n.queue.writeBuffer(a.buffer,0,s),km(n,a);let m;for(m of r)if(m.geometry.attributes.instanceOffset){km(n,a,!0);break}dc(e,t,r);let f=new Map,p;for(p of r)f.set(p,{world:p._worldMatrixVersion,geometry:p.geometry,start:p.geometry.drawRange.start,count:p.geometry.drawRange.count,appearance:p._appearance??1});a.cache={direction:[...o.direction],meshes:f}}function Zn(e){let t=pt.get(e);Ft.delete(e),pt.set(e,null),!Ft.size&&t!=null&&cancelAnimationFrame(t)}var $t=new WeakMap;var Ai=new WeakMap;var Ri=new WeakMap;var ce=new WeakMap;var qn=new WeakMap;function q(e,t){e.parent&&e.parent.children.splice(e.parent.children.indexOf(e),1),e.parent=t,t&&t.children.push(e)}function Eo(e,t){qn.get(e)?.abort();let r=I.get(e).get(t);r&&(q(r,null),E(e),r.texture!==t.texture&&W(e,r.texture.texture),I.get(e).delete(t))}function Oo(e,t){let r=`${t.coords.z}/${t.coords.x}/${t.coords.y}`;I.get(e).get(r)===t&&(I.get(e).delete(r),ze.set(e,(ze.get(e)||0)+1),t.request.abort(),ce.get(e)&&Eo(ce.get(e),t),t.mesh&&q(t.mesh,null),t.texture&&W(e,t.texture.texture),t.image?.close(),e.fire("tileunload",{tile:t,coords:t.coords}),E(e))}function zo(e){let t=pr.get(e),r=performance.now();if(Ai.get(e)===ze.get(e)&&Ri.get(e)===t&&r<$t.get(e))return Number.isFinite($t.get(e));Ai.set(e,ze.get(e)),Ri.set(e,t),$t.set(e,1/0);let o=[],i,n,a,s,m,f;for(i of t)n=I.get(e).get(i),n?.done&&r-n.loadedAt<250&&$t.set(e,Math.min($t.get(e),n.loadedAt+250)),(!n?.done||r-n.loadedAt<250)&&(a=i.split("/"),o.push({z:Number(a[0]),x:Number(a[1]),y:Number(a[2])}));for([i,n]of I.get(e))if(!t.has(i)){s=!1;for(m of o)if(f=Math.min(m.z,n.coords.z),Math.floor(m.x/2**(m.z-f))===Math.floor(n.coords.x/2**(n.coords.z-f))&&Math.floor(m.y/2**(m.z-f))===Math.floor(n.coords.y/2**(n.coords.z-f))){s=!0;break}s||Oo(e,n)}return Number.isFinite($t.get(e))}L();function Ao(e){return he.get(e.source)===e&&e.map.hasLayer(e.source)}function gc(e){let t=Pe.get(e.map);if(e.terrainStream!==t&&(e.terrainStream=t,e.terrainRequests=t?new Map:null),e.terrainRequests){let r;for(r of e.terrainRequests.keys())e.source._tiles[r]||e.terrainRequests.delete(r)}return t}L();var Vt=Object.freeze([1,1,1]);var qr=new WeakMap;L();function bt(e,t,r,o){let{source:i,marker:n,paneOrder:a,order:s}=e;t.program.uniforms.baseColor.value=r,t.program.uniforms.opacity.value=o,i instanceof d.GridLayer&&(t.opacity=o);let m=n?i._zIndex+(qr.get(i)||0):i.options.zIndex;t.renderOrder=a*1e6+(m||0)*1e3+s,t._nativeSource=i,t._nativeUsed=!0}var yc=Object.freeze([0,2,1,1,2,3]);var Cm=Object.freeze([0,0,1,0,0,1,1,1]);var xc=Object.freeze({minFilter:"linear",magFilter:"linear"});function Fe(e,t){if(!t)return;q(t,null),E(e);let r;for(r of Object.values(t.geometry.attributes))r.buffer.destroy()}async function wc(e,t,r,o,i,n,a){let s,m=o;try{if(o instanceof HTMLImageElement){let f=document.createElement("canvas");f.width=n,f.height=a;let p=f.getContext("2d");if(!p)throw new Error("Unable to rasterize SVG image");p.drawImage(o,0,0,n,a),m=f}if(s=await createImageBitmap(m),!Ao(e)||e.textures.get(t)!==r)return;i.queue.copyExternalImageToTexture({source:s},{texture:r.texture},[n,a]),r.uploaded=o,r.pending=!1,Ne(e)}catch(f){e.failed=!0,e.source.fire("error",{error:f})}finally{s?.close()}}function Lc(e,t,r,o,i,n,a){try{i.queue.copyExternalImageToTexture({source:o},{texture:r.texture},[n,a])}catch(s){throw r.texture.destroy(),e.textures.delete(t),s}r.uploaded=o}function Hn(e,t,r){if(!(r instanceof HTMLImageElement)&&!(r instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let{backend:o,textures:i,meshes:n}=e,a=i.get(t),s=r.currentSrc||r.src;if(!a||a.image!==r||a.url!==s){a&&(Fe(o,n.get(t)),n.delete(t),W(o,a.texture),i.delete(t));let m=r.naturalWidth||r.width,f=r.naturalHeight||r.height;if(!m||!f)return;let{device:p}=w.get(o);a={device:p,image:r,url:s,format:"rgba8unorm",uploaded:null,texture:p.createTexture({size:[m,f],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:p.createSampler(xc)},i.set(t,a),r instanceof HTMLCanvasElement||s.startsWith("data:image/svg+xml")?(a.pending=!0,wc(e,t,a,r,p,m,f)):Lc(e,t,a,r,p,m,f)}return a.used=!0,a.uploaded===r?a:void 0}L();L();var Ro=Object.freeze({});var Xn={size:null,usage:null};var Mt={value:0};function Ae(){return{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],highlightRange:[0,0],visible:!0}}var Yn={code:null};var Jn={code:null};var Io={bindGroupLayouts:[null,null]};var bc=" fn demSample(pixel:vec2<i32>)-> f32{if(any(pixel < vec2<i32>(0))|| any(pixel >= vec2<i32>(textureDimensions(dem)))){return -1e9;}return textureLoad(dem,pixel,0).r;}fn elevation(pixel:vec2<f32>,base:f32)-> f32{let p = pixel - vec2<f32>(0.5);let f = fract(p);let i = vec2<i32>(floor(p));let v00 = demSample(i);let v10 = demSample(i + vec2<i32>(1,0));let v01 = demSample(i + vec2<i32>(0,1));let v11 = demSample(i + vec2<i32>(1,1));if(v00 > -1000.0 && v10 > -1000.0 && v01 > -1000.0 && v11 > -1000.0){return mix(mix(v00,v10,f.x),mix(v01,v11,f.x),f.y);}if(v00 > -1000.0){return v00;}if(v10 > -1000.0){return v10;}if(v01 > -1000.0){return v01;}if(v11 > -1000.0){return v11;}return base;}";var Mc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:1,offset:0,format:"float32x3"})])});var Bc=Object.freeze({arrayStride:12,attributes:Object.freeze([Object.freeze({shaderLocation:2,offset:0,format:"float32x3"})])});var Tc=Object.freeze({arrayStride:8,attributes:Object.freeze([Object.freeze({shaderLocation:3,offset:0,format:"float32x2"})])});var Kn={entries:null};var Pc=[];var _m={binding:0,visibility:null,buffer:{type:"uniform",hasDynamicOffset:!0}};var Em={binding:1,visibility:null,buffer:{type:"uniform"}};var Om={binding:2,visibility:null,texture:{sampleType:"unfilterable-float",viewDimension:"2d"}};var kc=[{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}},{binding:null,visibility:null,texture:{sampleType:"float",viewDimension:"2d"}}];var Sc=[{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}},{binding:null,visibility:null,sampler:{type:"filtering"}}];function Cc(e,t){let r=Pc;r.length=0,_m.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,Em.visibility=GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,r.push(_m,Em),t.hasTerrain&&(Om.visibility=GPUShaderStage.VERTEX,r.push(Om));let o,i,n=0;for(o of t.bindings)i=kc[n],i.binding=o.texture,i.visibility=GPUShaderStage.FRAGMENT,r.push(i),i=Sc[n++],i.binding=o.sampler,i.visibility=GPUShaderStage.FRAGMENT,r.push(i);let a=e.createBindGroupLayout((Kn.entries=r,Kn));return Kn.entries=null,a}function Qn(e){let t={baseColor:{value:e.color||[1,1,1]},metallic:{value:e.metallic??0},roughness:{value:e.roughness??.85},opacity:{value:e.opacity??1},alphaCutoff:{value:e.alphaCutoff??.5},occlusionStrength:{value:e.occlusionStrength??1},emissive:{value:e.emissive||[0,0,0]}};return e.baseTexture&&(t.baseTexture={value:e.baseTexture}),e.metalTexture&&(t.metalTexture={value:e.metalTexture}),e.emissiveTexture&&(t.emissiveTexture={value:e.emissiveTexture}),e.occlusionTexture&&(t.occlusionTexture={value:e.occlusionTexture}),(e.roofTexture||e.wallTexture)&&(t.roofTexture={value:null}),e.nativeStroke&&(t.strokeScale={value:1}),t}function Do(e,t,r){if(!r)return"";let o=3+e.length*2;return e.push({name:t,texture:o,sampler:o+1}),`@group(0)@binding(${o})var ${t}:texture_2d<f32>;@group(0)@binding(${o+1})var ${t}Sampler:sampler;`}function _c(e){let t,r;for(t of["roofTexture","wallTexture"])if(r=e[t],r!==void 0&&typeof r!="boolean"&&(!Number.isFinite(r)||r<0||r>1))throw new Error(`${t} must be a boolean or a finite number between 0 and 1`)}function Ec(e){let t=Number(e.roofTexture??0);return` output.roofUv =(frame.roofMatrix * world).xz;output.roof = select(0.0,select(${Number(e.wallTexture??0).toFixed(8)},${t.toFixed(8)},input.normal.y >= 0.5),((${!!e.roofTexture} && input.normal.y >= 0.5)||(${!!e.wallTexture} && abs(input.normal.y)< 0.5))&& !highlighted);`}function Oc(e){return{position:e.nativeStroke?"position = input.normal + (input.position - input.normal) * u.nativeStroke.x;":"",normal:e.nativeStroke?"let sourceNormal = vec3<f32>(0.0, 1.0, 0.0);":"let sourceNormal = input.normal;"}}function zc(e,t,r,o,i,n){let a=e.instanced?" + input.instanceOffset.xyz":"",s=Oc(e);return` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>};struct VertexInput{@location(0)position:vec3<f32>,@location(1)normal:vec3<f32>,${e.instanced?"@location(4) instanceOffset: vec4<f32>,":""} ${e.vertexColors?"@location(2) color: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""}};struct VertexOutput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${i?"@location(3) uv: vec2<f32>,":""} ${n?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;${o?`@group(0)@binding(2)var dem:texture_2d<f32>;${r}`:""}@vertex fn vertexMain(input:VertexInput,@builtin(vertex_index)vertexIndex:u32)-> VertexOutput{var output:VertexOutput;var position = input.position${a};${s.position} ${o?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""} let featureVertex = f32(vertexIndex)${e.instanced?" + input.instanceOffset.w":""};let highlighted = featureVertex >= u.highlight.x && featureVertex < u.highlight.y;output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};let m = mat3x3<f32>(u.worldMatrix[0].xyz,u.worldMatrix[1].xyz,u.worldMatrix[2].xyz);${s.normal} let normal =(cross(m[1],m[2])* sourceNormal.x + cross(m[2],m[0])* sourceNormal.y + cross(m[0],m[1])* sourceNormal.z)/ determinant(m);output.normal =(frame.viewMatrix * vec4<f32>(normal,0.0)).xyz;let world = u.worldMatrix * vec4<f32>(position,1.0);output.shadowPosition = solar.matrix * world;output.worldPosition = world.xyz / world.w;${t?`output.localPosition = input.position${a};`:""} let viewPosition = frame.viewMatrix * world;output.viewPosition = viewPosition.xyz;${i?"output.uv = input.uv;":""} ${n?Ec(e):""} output.position = frame.projectionMatrix * viewPosition;return output;}`}function Ac(e,t,r){return` var normal = normalize(input.normal)* select(-1.0,1.0,frontFacing);let texel = ${t?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};let alpha = u.material.z * texel.a;${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""} ${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""} var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} * ${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};${r?" if(input.roof > 0.0 && all(input.roofUv >= vec2<f32>(0.0))&& all(input.roofUv <= vec2<f32>(1.0))){let roof = textureSampleLevel(roofTexture,roofTextureSampler,input.roofUv,0.0);base = mix(base,toLinear(roof.rgb),roof.a * input.roof);}":""}`}function Rc(e,t,r,o,i,n,a){return e.unlit?` let rasterTexel = ${r?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb)*(frame.atmosphereTint.rgb *(0.55 + 0.45 * sunlight)+ artificial)),${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});`:`${Ac(e,r,a)} let mr = ${o?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};let metal = clamp(u.material.x * mr.b,0.0,1.0);let rough = clamp(u.material.y * mr.g,0.08,1.0);let view = normalize(-input.viewPosition);let halfVector = normalize(view + frame.lightDirection.xyz);let nl = max(dot(normal,frame.lightDirection.xyz),0.0)* frame.lightDirection.w * sunlight;let nv = max(dot(normal,view),0.001);let nh = max(dot(normal,halfVector),0.0);let vh = max(dot(view,halfVector),0.0);let a2 = pow(rough,4.0);let d = a2 / max(PI * pow(nh * nh *(a2 - 1.0)+ 1.0,2.0),0.0001);let gv = nl * sqrt(nv * nv *(1.0 - a2)+ a2);let gl = nv * sqrt(nl * nl *(1.0 - a2)+ a2);let visibility = 0.5 / max(gv + gl,0.0001);let f0 = mix(vec3<f32>(0.04),base,metal);let fresnel = f0 +(1.0 - f0)* pow(1.0 - vh,5.0);let specular = d * visibility * fresnel;let diffuse =(1.0 - metal)* base / PI;let sky = dot(normal,frame.skyDirection.xyz)* 0.5 + 0.5;let ambient = mix(toLinear(vec3<f32>(0.455,0.412,0.322)),vec3<f32>(1.0),sky)*(2.0 / PI);let ao = ${n?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};${t?" let lattice =(fract(input.localPosition / 2.5)- 0.5)* 2.5;let pointGlow =(1.0 - smoothstep(0.16,0.42,length(lattice)))* u.highlight.z;":""} let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${i?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};var color = ambient * base *(1.0 - metal)* ao +(diffuse + specular)* nl * toLinear(vec3<f32>(1.0,0.937,0.835))* 3.0 + glow;${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""} color =(color - glow)* frame.atmosphereTint.rgb + base * artificial *(1.0 - metal * 0.5)+ glow;appearance(input.position.xy);return vec4<f32>(toSRGB(color),${e.alphaMode==="BLEND"?"alpha":"1.0"});`}function Ic(e=Ro,t=!1,r=""){let o=!!e.baseTexture,i=!!e.metalTexture,n=!!e.emissiveTexture,a=!!e.occlusionTexture,s=!!(e.roofTexture||e.wallTexture);_c(e);let m=!!e.terrain,f=o||i||n||a||e.nightLight,p=zc(e,t,r,m,f,s),c=[],l=Do(c,"baseTexture",o),u=Do(c,"metalTexture",i),h=Do(c,"emissiveTexture",n),x=Do(c,"occlusionTexture",a),y=Do(c,"roofTexture",s),g=` struct Mesh{worldMatrix:mat4x4<f32>,baseColor:vec4<f32>,material:vec4<f32>,emissive:vec4<f32>,terrain:vec4<f32>,highlight:vec4<f32>,cutout:vec4<f32>,nativeStroke:vec4<f32>,};struct Frame{viewMatrix:mat4x4<f32>,projectionMatrix:mat4x4<f32>,roofMatrix:mat4x4<f32>,lightDirection:vec4<f32>,skyDirection:vec4<f32>,atmosphereTint:vec4<f32>,};struct Solar{matrix:mat4x4<f32>,params:vec4<f32>,};@group(0)@binding(0)var<uniform> u:Mesh;@group(0)@binding(1)var<uniform> frame:Frame;@group(1)@binding(0)var<uniform> solar:Solar;@group(1)@binding(1)var shadowTexture:texture_depth_2d;@group(1)@binding(2)var shadowSampler:sampler_comparison;@group(1)@binding(3)var<storage,read> lightGrid:array<vec4<f32>>;${l}${u}${h}${x}${y} struct FragmentInput{@builtin(position)position:vec4<f32>,@location(0)color:vec3<f32>,@location(1)normal:vec3<f32>,@location(2)viewPosition:vec3<f32>,@location(6)shadowPosition:vec4<f32>,@location(7)worldPosition:vec3<f32>,${t?"@location(8) localPosition: vec3<f32>,":""} ${f?"@location(3) uv: vec2<f32>,":""} ${s?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}};const PI:f32 = 3.14159265;fn toLinear(c:vec3<f32>)-> vec3<f32>{return select(c / 12.92,pow((c + vec3<f32>(0.055))/ 1.055,vec3<f32>(2.4)),c >= vec3<f32>(0.04045));}fn toSRGB(c:vec3<f32>)-> vec3<f32>{return select(c * 12.92,1.055 * pow(max(c,vec3<f32>(0.0)),vec3<f32>(1.0 / 2.4))- vec3<f32>(0.055),c >= vec3<f32>(0.0031308));}fn sunVisibility(position:vec4<f32>)-> f32{let p = position.xyz / position.w;let uv = vec2<f32>(p.x * 0.5 + 0.5,0.5 - p.y * 0.5);if(solar.params.x < 0.5 || any(uv < vec2<f32>(0.0))|| any(uv > vec2<f32>(1.0))|| p.z < 0.0 || p.z > 1.0){return 1.0;}return textureSampleCompareLevel(shadowTexture,shadowSampler,uv,p.z - 0.0003);}fn gridLighting(position:vec3<f32>,normal:vec3<f32>,offset:u32)-> vec3<f32>{let grid = lightGrid[offset];if(grid.w < 1.0){return vec3<f32>(0.0);}let cell = vec2<i32>(floor((position.xz - grid.xy)/ grid.z));if(any(cell < vec2<i32>(0))|| cell.x >= i32(grid.w)|| cell.y >= i32(lightGrid[offset + 1u].x)){return vec3<f32>(0.0);}let header = lightGrid[offset + 2u + u32(cell.y)* u32(grid.w)+ u32(cell.x)];var light = vec3<f32>(0.0);for(var i = 0u;i < u32(header.y);i++){let source = lightGrid[offset + u32(header.x)+ i * 2u];let colour = lightGrid[offset + u32(header.x)+ i * 2u + 1u];let delta = source.xyz - position;let distance2 = max(dot(delta,delta),1.0);let falloff = max(0.0,1.0 - distance2 /(source.w * source.w));let lambert = max(0.0,dot(normal,delta / sqrt(distance2)));light += toLinear(colour.rgb)* colour.w * lambert * falloff * falloff / distance2;}return light;}fn localLighting(position:vec3<f32>,normal:vec3<f32>)-> vec3<f32>{if(frame.skyDirection.w <= 0.0){return vec3<f32>(0.0);}var light = gridLighting(position,normal,0u);let moving = u32(lightGrid[1].z);if(moving > 0u){light += gridLighting(position,normal,moving);}return light * frame.skyDirection.w;}fn appearance(position:vec2<f32>){let noise = fract(52.9829189 * fract(dot(floor(position),vec2<f32>(0.06711056,0.00583715))));if(u.highlight.w < 1.0 && noise >= u.highlight.w){discard;}}@fragment fn fragmentMain(input:FragmentInput,@builtin(front_facing)frontFacing:bool)->@location(0)vec4<f32>{let cutoutDistance = distance(input.position.xy,u.cutout.xy);if(select((cutoutDistance < u.cutout.z),(cutoutDistance >= u.cutout.z),u.cutout.w > 0.0)){discard;}${e.nightLight?" if(input.uv.x <= 2.0){let radial = max(0.0,1.0 - dot(input.uv,input.uv));let alpha = radial * radial * frame.skyDirection.w * 0.65;if(alpha < 0.005){discard;}appearance(input.position.xy);return vec4<f32>(input.color,alpha);}":""} let sunlight = sunVisibility(input.shadowPosition);let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz,frame.viewMatrix[1].xyz,frame.viewMatrix[2].xyz))* normalize(input.normal))* select(-1.0,1.0,frontFacing);let artificial = localLighting(input.worldPosition,worldNormal);${Rc(e,t,o,i,n,a,s)}}`;return{vertex:p,fragment:g,bindings:c,textured:f,hasTerrain:m}}async function Dc(e,t){let r,o;try{let i=await Promise.all(t),n="",a=0;for(r of i)for(o of r.messages)o.type==="error"&&(n+=`${a++?`
2
+ `:""}${o.message}`);a&&e.fire("error",{error:new Error(`Unable to compile Layer3D WGSL: ${n}`)})}catch(i){e.fire("error",{error:i})}}function je(e,t=Ro){let r=w.get(e),{device:o}=r,i=Ic(t,!!e.options.nightSparkle,t.terrain?bc:""),n=o.createShaderModule((Yn.code=i.vertex,Yn));Yn.code=null;let a=o.createShaderModule((Jn.code=i.fragment,Jn));Jn.code=null,Dc(e,[n.getCompilationInfo(),a.getCompilationInfo()]);let s=[Co,Mc,t.vertexColors?Bc:null,i.textured?Tc:null];t.instanced&&s.push(Wn);let m=Cc(o,i),f=o.createPipelineLayout((Io.bindGroupLayouts[0]=m,Io.bindGroupLayouts[1]=r.sunlight.layout,Io));Io.bindGroupLayouts[0]=null,Io.bindGroupLayouts[1]=null;let p=Qn(t);return{device:o,vertex:n,fragment:a,bindings:i.bindings,vertexBuffers:s,bindGroupLayout:m,pipelineLayout:f,pipelineCache:new Map,cullMode:t.doubleSided?"none":"back",transparent:t.alphaMode==="BLEND",depthWrite:t.depthWrite??t.alphaMode!=="BLEND",depthTest:t.depthTest!==!1,terrain:t.terrain,nightLight:!!t.nightLight,nightSparkle:!!e.options.nightSparkle,uniforms:p,_layerMaterial:t}}function yr(e,t,r=Ro,o=0,i){let{device:n}=w.get(e),a={},s,m,f,p,c;for([s,m]of Object.entries(t))f=new Float32Array(m),p=s==="uv"?2:3,c=n.createBuffer((Xn.size=Math.max(4,f.byteLength),Xn.usage=GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST|o,Xn)),n.queue.writeBuffer(c,0,f),a[s]={size:p,data:f,count:f.length/p,buffer:c};let l={...Ae(),device:n,geometry:{device:n,attributes:a,drawRange:{start:0,count:a.position.count}},program:i||je(e,{vertexColors:!0,doubleSided:!0,...r}),id:Mt.value++,renderOrder:0,extras:{}};return q(l,M.get(e)),E(e),l}var zm=new WeakMap;function Am(e,t){let r=w.get(e),o=zm.get(r);o||(o=new Map,zm.set(r,o));let i=`${!!t.baseTexture}:${!!t.nativeStroke}:${!!t.depthWrite}`,n=o.get(i);return n||(n=je(e,{doubleSided:!0,...t}),o.set(i,n)),{...n,uniforms:Qn(t),_layerMaterial:t}}function Uc(e,t,r,o,i,n,a,s,m){let{backend:f,source:p,meshes:c}=e,l=m?e.strokeAnchors:[],u,h=c.get(t);if(!m)for(u=0;u<r.length;u++)l.push(u%3===1?1:0);let x={position:r,normal:l};a&&(x.uv=a);let y={vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND",depthWrite:s,nativeStroke:m};return n&&(y.baseTexture=n),h&&Fe(f,h),h=yr(f,x,y,0,p instanceof d.GridLayer?(s?e.terrainRasterProgram:e.rasterProgram)||Am(f,y):Am(f,y)),p instanceof d.GridLayer&&(s?e.terrainRasterProgram||=h.program:e.rasterProgram||=h.program,h.texture=n),c.set(t,h),h}function Nc(e){let t=e.geometry.attributes,r=t.position.data,o=t.normal.data,i,n=0;for(i=0;i<r.length;i+=3)n=Math.max(n,Math.hypot(r[i]-o[i],r[i+1]-o[i+1],r[i+2]-o[i+2]));e.geometry.nativeStrokeRadius=n}function Go(e,t,r,o,i,n,a,s=!1){let{source:m,meshes:f}=e;if(!r.length)return;let p=t==="stroke"&&!!e.strokeCoordinates&&m.options.interactive===!1,c=f.get(t);if(!c||c.geometry.attributes.position.data.length!==r.length||m instanceof d.GridLayer&&c.program.depthWrite!==s||c.program.uniforms.baseTexture?.value!==n||!!c.program._layerMaterial.nativeStroke!==p)c=Uc(e,t,r,o,i,n,a,s,p);else{let l=c.geometry.attributes.position;l.data.set(r),l.needsUpdate=!0,c.geometry.bounds=null,p&&(c.geometry.attributes.normal.data.set(e.strokeAnchors),c.geometry.attributes.normal.needsUpdate=!0)}return p&&Nc(c),c.program.uniforms.strokeScale&&(c.program.uniforms.strokeScale.value=1),bt(e,c,o,i),c}function Uo(e,t,r,o,i){let n=Hn(e,t,r);if(!n)return;let a=yc,s=[],m=[],f;for(f of a)s.push(...o[f]),m.push(Cm[f*2],Cm[f*2+1]);return Go(e,t,s,Vt,i,n,m)}var D=new WeakMap;V();function Zt(e,t){let{map:r,backend:o}=e,i=r.options.crs,n=i.project(D.get(o)),a=i.project(t),s=Math.cos(D.get(o).lat*B);return[(a.x-n.x)*s,0,-(a.y-n.y)*s]}function ea(e,t){let r=[],o,i;for(o=0;o<4;o++)i=o===0?t.getNorthWest():o===1?t.getNorthEast():o===2?t.getSouthWest():t.getSouthEast(),r.push(Zt(e,i));return r}function Fc(e,t,r,o){let i=e.textures.get(t),n=e.meshes.get(t);if(n&&!n._terrainRequest&&i?.image===r.el&&i.url===(r.el.currentSrc||r.el.src))return i.used=!0,bt(e,n,Vt,o),n;let[a,s]=e.source._tileCoordsToNwSe(r.coords);return Uo(e,t,r.el,ea(e,new d.LatLngBounds(a,s)),o)}async function jc(e,t,r,o){let i=2**t;r=(r%i+i)%i,o=Math.max(0,Math.min(i-1,o));let n=`${t}/${r}/${o}`,a=e.terrainCache.get(n);a?(e.terrainCache.delete(n),e.terrainCache.set(n,a)):(a={promise:e.layer.options.getTile(t,r,o,e.terrainController.signal)},e.terrainCache.set(n,a));try{if(a.data||(a.data=await a.promise),!(a.data instanceof Float32Array)||a.data.length!==65536)throw new Error(`Invalid elevation tile ${n}: expected 256x256 Float32Array`);if(!a.range){let s=1/0,m=-1/0,f;for(f of a.data)!Number.isFinite(f)||f<=-1e3||(s=Math.min(s,f),m=Math.max(m,f));a.range=[s,m]}}catch(s){throw e.terrainCache.get(n)===a&&e.terrainCache.delete(n),s}for(;e.terrainCache.size>256;)e.terrainCache.delete(e.terrainCache.keys().next().value);return a.data}async function Wc(e,t,r,o){let{x:i,y:n,z:a}=r.coords,s=o.stream,m=[],f=new Map,p,c,l=0;try{for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)m.push(jc(s,a,i+p,n+c));let u=await Promise.all(m);if(e.disposed||s.terrainController.signal.aborted||e.source._tiles[t]!==r||e.terrainRequests.get(t)!==o)return;for(c=-1;c<=1;c++)for(p=-1;p<=1;p++)f.set(`${i+p}/${n+c}`,u[l++]);o.tiles=f,Ne(e),e.map.fire("terrainchange"),e.source._update()}catch(u){!e.disposed&&!s.terrainController.signal.aborted&&e.source._tiles[t]===r&&(o.error=u,s.layer.fire("error",{error:u,coords:r.coords}))}}function $c(e,t,r,o,i){let n=Hn(e,t,r.el);if(!n)return;let{x:a,y:s,z:m}=r.coords,f=32,p=Zt(e,e.map.unproject([a*256,s*256],m)),c=Zt(e,e.map.unproject([(a+1)*256,(s+1)*256],m)),l=[],u=[],h=[],x=M.get(e.backend).position[1],y,g,v,T,P,k,z,$,U,N;for(y=0;y<=f;y++)for(g=0;g<=f;g++){if(v=g/f,T=y/f,P=lr({x:(a+v)*256,y:(s+T)*256},o.tiles),!Number.isFinite(P))throw new Error(`Missing elevation sample in ${m}/${a}/${s}`);l.push([p[0]+(c[0]-p[0])*v,P-x,p[2]+(c[2]-p[2])*T,v,T])}for(y=0;y<f;y++)for(g=0;g<f;g++){k=y*(f+1)+g,z=k+1,$=k+f+1,U=$+1;for(N of[k,$,z,z,$,U])u.push(l[N][0],l[N][1],l[N][2]),h.push(l[N][3],l[N][4])}let se=Go(e,t,u,Vt,i,n,h,!0);return se._terrainRequest=o,se}function Vc(e,t,r,o){let i=e.textures.get(t),n=e.meshes.get(t),a=e.terrainRequests.get(t);return(!a||a.tile!==r)&&(a={tile:r,stream:e.terrainStream},e.terrainRequests.set(t,a),Wc(e,t,r,a)),a.tiles?n&&n._terrainRequest===a&&i?.image===r.el&&i.url===(r.el.currentSrc||r.el.src)?(i.used=!0,bt(e,n,Vt,o),n):$c(e,t,r,a,o):(n&&i?.image===r.el&&(i.used=!0,bt(e,n,Vt,o)),null)}function Zc(e){let t,r,o;for([t,r]of e.meshes)e.source._tiles[t]||!r._terrainRequest||(o=e.textures.get(t),o&&(o.used=!0,r._nativeUsed=!0))}function qc(e){let{source:t}=e,r=gc(e),o,i,n,a,s=!1;for(o in t._tiles)if(Object.hasOwn(t._tiles,o)){if(i=t._tiles[o],!i.loaded||i.el instanceof HTMLImageElement&&!i.el.naturalWidth){s=!!r;continue}n=(t.options.opacity??1)*(i._gpuOpacity??1),a=e.terrainRequests?Vc(e,o,i,n):Fc(e,o,i,n),e.terrainRequests&&!e.terrainRequests.get(o).tiles&&(s=!0),a&&(a.renderOrder+=i.coords.z/100)}r&&(s||!Object.keys(t._tiles).length)&&Zc(e)}function Hc(e){let{source:t}=e;t._image?.complete&&t._image.naturalWidth&&Uo(e,"image",t._image,ea(e,t.getBounds()),t.options.opacity??1)}var Xc=Object.freeze(["m11","m12","m13","m14","m21","m22","m23","m24","m31","m32","m33","m34","m41","m42","m43","m44"]);L();V();Z();function ta(e,t,r){let o=e.options.rotation+(e.options.rotateWithView?S(e._map)*B:0);e.options.keepUpright&&Math.cos(o)<0&&(o+=Math.PI);let i=e.options.scale;return new d.Point((t*Math.cos(o)-r*Math.sin(o))*i,(t*Math.sin(o)+r*Math.cos(o))*i)}function Ii(e,t,r,o,i,n){return e.x=t.m11*r+t.m21*o+t.m31*i+t.m41*n,e.y=t.m12*r+t.m22*o+t.m32*i+t.m42*n,e.z=t.m13*r+t.m23*o+t.m33*i+t.m43*n,e.w=t.m14*r+t.m24*o+t.m34*i+t.m44*n,e}function Yc(e,t,r){let o=e.source.options.icon.options,i=o[t==="shadow"?"shadowSize":"iconSize"],n=e.markerImageBounds||=[0,0,0,0];n[0]=i?i.x??i[0]:r.naturalWidth,n[1]=i?i.y??i[1]:r.naturalHeight;let a=t==="shadow"&&o.shadowAnchor||o.iconAnchor;return n[2]=a?a.x??a[0]:Math.floor(n[0]/2),n[3]=a?a.y??a[1]:Math.floor(n[1]/2),n}function Jc(e,t,r){let{source:o,map:i,backend:n}=e,a=Zt(e,o.getLatLng());if(Pe.get(i)){let Nt=M.get(n),mr=we(i,o.getLatLng());Number.isFinite(mr)&&(a[1]=(mr-Nt.position[1])/Nt.scale[1])}let s=i.getSize(),m=e.markerMatrices||={root:new DOMMatrix,camera:new DOMMatrix,point:{x:0,y:0,z:0,w:1}},f=m.root,p=m.camera,c=m.point,l=M.get(n).worldMatrix,u=Q.get(n).projectionViewMatrix,h,x;for(h=0;h<16;h++)x=Xc[h],f[x]=l[h],p[x]=u[h];Ii(c,f,a[0],a[1],a[2],1),Ii(c,p,c.x,c.y,c.z,c.w);let y=c.x,g=c.y,v=c.z,T=c.w;p.invertSelf(),f.invertSelf();let[P,k,z,$]=Yc(e,t,r),U=(y/T+1)*s.x/2,N=(1-g/T)*s.y/2,se=U-z,Ue=N-$,de=[],xe,me,Ee,Te,sr;for(h=0;h<4;h++)xe=se+(h%2?P:0),me=Ue+(h<2?0:k),Ee=ta(o,xe-U,me-N),Te=U+Ee.x,sr=N+Ee.y,Ii(c,p,Te/s.x*2-1,1-sr/s.y*2,v/T,1),Ii(c,f,c.x/c.w,c.y/c.w,c.z/c.w,1),de.push([c.x,c.y,c.z]);return de}function Kc(e){let{source:t}=e,r,o,i,n;for(r=0;r<2;r++)o=r?"icon":"shadow",i=r?t._icon:t._shadow,!(!(i instanceof HTMLImageElement)||!i.complete||!i.naturalWidth)&&(n=Uo(e,o,i,Jc(e,o,i),t.options.opacity??1),o==="shadow"&&n&&(n.renderOrder-=100*1e6))}function ra(e){return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function oa(e,t,r,o){let i=(e+t*12)%12;return r-o*Math.max(-1,Math.min(i-3,9-i,1))}function Bt(e){if(e&&typeof e=="object"&&"h"in e){let n=e.s*Math.min(e.l,1-e.l);return{r:ra(oa(0,e.h,e.l,n)),g:ra(oa(8,e.h,e.l,n)),b:ra(oa(4,e.h,e.l,n))}}if(e&&typeof e=="object"&&"r"in e)return e;if(typeof e=="number")return{r:(e>>16&255)/255,g:(e>>8&255)/255,b:(e&255)/255};if(typeof e!="string"||!CSS.supports("color",e))throw new Error("Invalid 3D color");let t=document.createElement("canvas").getContext("2d");t.fillStyle=e,t.fillRect(0,0,1,1);let[r,o,i]=t.getImageData(0,0,1,1).data;return{r:r/255,g:o/255,b:i/255}}function Qc(e){let{source:t,meshes:r,strokeCoordinates:o,strokeAnchors:i}=e,n=r.get("stroke"),a,s,m,f,p;if(n){let c=2**(e.strokeZoom-e.map.getZoom())*Number(t.options.weight)/e.strokeWeight,l=n.geometry.attributes.position;if(n.program.uniforms.strokeScale)n.program.uniforms.strokeScale.value=c;else{for(a=0;a<o.length;a++)l.data[a]=i[a]+(o[a]-i[a])*c;l.needsUpdate=!0,n.geometry.bounds=null}({r:s,g:m,b:f}=Bt(t.options.color)),bt(e,n,[s,m,f],t.options.opacity??1)}p=r.get("fill"),p&&({r:s,g:m,b:f}=Bt(t.options.fillColor||t.options.color),bt(e,p,[s,m,f],t.options.fillOpacity??1))}var No=[];L();L();L();function We(e,t,r,o,i,n,a,s){return t.push(...e(r,n),...e(o,a),...e(i,s))}var Di=2*Math.PI;L();function Rm(e,t,r,o,i){return new d.Point(e.x+t*Math.cos(i*Di/o),e.y+r*Math.sin(i*Di/o))}function Hr(e,t,r,o,i=r){if(!(r>0)||!(i>0))return;let n=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(r)))),a;for(a=0;a<n;a++)We(e,o,t,Rm(t,r,i,n,a),Rm(t,r,i,n,a+1),t,t,t)}function ia(e,t,r,o,i){let{options:n,width:a,stroke:s,point:m}=e,f=a/2,p=t,c=r,l=t.distanceTo(r);if(!l)return;let u=r.subtract(t).divideBy(l),h=new d.Point(-u.y*f,u.x*f);n.lineCap==="square"&&(o&&(t=t.subtract(u.multiplyBy(f))),i&&(r=r.add(u.multiplyBy(f)))),We(m,s,t.add(h),t.subtract(h),r.add(h),p,p,c),We(m,s,r.add(h),t.subtract(h),r.subtract(h),c,p,c),n.lineCap==="round"&&(o&&Hr(m,t,f,s),i&&Hr(m,r,f,s))}L();function el(e,t,r,o,i){let{options:n,width:a,point:s,stroke:m}=e,f=t[r],p=a/2;if(n.lineJoin==="round"){Hr(s,f,p,m);return}let c=f.subtract(t[(r+t.length-1)%t.length]),l=Math.hypot(c.x,c.y);if(!l||!i)return;let u=c.divideBy(l),h=o.subtract(f).divideBy(i),x=u.x*h.y-u.y*h.x>0?-1:1,y=new d.Point(-u.y*x,u.x*x),g=new d.Point(-h.y*x,h.x*x),v=f.add(y.multiplyBy(p)),T=f.add(g.multiplyBy(p)),P=1+y.x*g.x+y.y*g.y,k=P>0?y.add(g).multiplyBy(p/P):null;We(s,m,v,f,T,f,f,f),n.lineJoin==="miter"&&k&&Math.hypot(k.x,k.y)<=p*4&&We(s,m,v,f.add(k),T,f,f,f)}function tl(e,t,r,o,i,n){let a=e.dash,s=0,m=(i%n+n)%n,f=0,p,c,l=0;for(;f<a.length-1&&m>=a[f];)m-=a[f++];let u=Math.max(0,a[f]-m);for(;s<o;){if(p=Math.min(o,s+u),p>s&&f%2===0&&(c=r.subtract(t).divideBy(o),ia(e,t.add(c.multiplyBy(s)),t.add(c.multiplyBy(p)),!0,!0)),p<=s){if(++l>=a.length)throw new Error("Leaflet dashArray is too small for these coordinates")}else l=0;s=p,f=(f+1)%a.length,u=a[f]}}function na(e,t,r){let{options:o,width:i,dash:n}=e;if(!o.stroke||i<=0||t.length<2)return;let a=Number(o.dashOffset)||0,s=0,m,f,p,c,l;for(m of n)s+=m;for(f=0;f<t.length-(r?0:1);f++)p=t[f],c=t[(f+1)%t.length],l=p.distanceTo(c),n.length?tl(e,p,c,l,a,s):(ia(e,p,c,!r&&f===0,!r&&f===t.length-2),(r||f>0)&&el(e,t,f,c,l)),a+=l}function rl(e){let t=1/0,r;for(r of e)t=Math.min(t,r.x);return t}function ol(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||e[a].x<=e[s].x)?t[m]=e[a++]:t[m]=e[s++]}function il(e){if(e.length<2)return e;let t=new Array(e.length),r=[],o,i,n,a,s;for(o of e)r.push({ring:o,x:rl(o)});let m=r,f=t;for(i=1;i<r.length;i*=2){for(n=0;n<r.length;n+=i*2)ol(m,f,n,i);a=m,m=f,f=a}for(s=0;s<e.length;s++)e[s]=m[s].ring;return e}function Ce(e,t,r){return(t.x-e.x)*(r.y-e.y)-(t.y-e.y)*(r.x-e.x)}function dt(e,t){return e.x===t.x&&e.y===t.y}function nl(e){let t=!0,r,o,i,n;for(;t&&e.length>3;)for(t=!1,r=0;r<e.length;r++)if(o=e[(r+e.length-1)%e.length],i=e[r],n=e[(r+1)%e.length],dt(o,i)||Math.abs(Ce(o,i,n))<1e-10){e.splice(r,1),t=!0;break}if(e.length<3)throw new Error("Degenerate polygon ring");return e}function al(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return t<0}function sl(e,t){let r=[],o=0,i,n,a;for(i=0;i<e.length;i++)n=e[i],a=nl(t.slice(o,o+=n.length)),al(a)!==!!i&&a.reverse(),r.push(a);return r}function aa(e,t){let r=!1,o,i,n,a;for(o=0,i=t.length-1;o<t.length;i=o++)n=t[o],a=t[i],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(r=!r);return r}function ml(e,t){let r;for(r=1;r<t.length;r++)if(aa(e,t[r]))return!0;return!1}function Gi(e,t,r){return Math.min(e.x,t.x)<=r.x&&r.x<=Math.max(e.x,t.x)&&Math.min(e.y,t.y)<=r.y&&r.y<=Math.max(e.y,t.y)}function fl(e,t,r,o){if(dt(e,r)||dt(e,o)||dt(t,r)||dt(t,o))return!1;let i=Ce(e,t,r),n=Ce(e,t,o),a=Ce(r,o,e),s=Ce(r,o,t);return i*n<0&&a*s<0||i===0&&Gi(e,t,r)||n===0&&Gi(e,t,o)||a===0&&Gi(r,o,e)||s===0&&Gi(r,o,t)}function Im(e,t,r){let o;for(o=0;o<r.length;o++)if(fl(e,t,r[o],r[(o+1)%r.length]))return!0;return!1}function pl(e,t,r,o){if(Im(e,t,r))return!0;let i;for(i=1;i<o.length;i++)if(Im(e,t,o[i]))return!0;return!1}function cl(e,t,r,o){let i=-1,n=-1,a=1/0,s,m,f,p,c;for(s=0;s<t.length;s++)for(m=0;m<e.length;m++)f=t[s],p=e[m],c=(f.x-p.x)**2+(f.y-p.y)**2,!(c>=a)&&(o.x=(f.x+p.x)/2,o.y=(f.y+p.y)/2,!(!aa(o,r[0])||ml(o,r))&&(pl(f,p,e,r)||(i=s,n=m,a=c)));if(i<0)throw new Error("Unable to connect polygon hole");return[...e.slice(0,n+1),...t.slice(i),...t.slice(0,i+1),e[n],...e.slice(n+1)]}function ll(e,t,r,o){let i;for(i of e)if(!dt(i,t)&&!dt(i,r)&&!dt(i,o)&&Ce(t,r,i)>=0&&Ce(r,o,i)>=0&&Ce(o,t,i)>=0)return!0;return!1}function ul(e){let t=[],r,o,i,n,a,s;for(;e.length>3;){for(r=!1,o=0;o<e.length;o++)if(i=e[(o+e.length-1)%e.length],n=e[o],a=e[(o+1)%e.length],!(Ce(i,n,a)<=1e-10)&&!ll(e,i,n,a)){t.push([i.index,n.index,a.index]),e.splice(o,1),r=!0;break}if(!r)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}if(Ce(...e)>1e-10){let m=[];for(s of e)m.push(s.index);t.push(m)}return t}function Dm(e){let t=0,r,o,i;for(r=0;r<e.length;r++)o=e[r],i=e[(r+1)%e.length],t+=o.x*i.y-i.x*o.y;return Math.abs(t)/2}function dl(e,t,r){let o=0,i=0,n,a;for(n=1;n<e.length;n++)o+=Dm(e[n]);let s=Dm(e[0])-o;for(a of r)i+=Ce(t[a[0]],t[a[1]],t[a[2]])/2;if(s<=0||Math.abs(i-s)>Math.max(1e-7,s*1e-8))throw new Error("Polygon triangulation area mismatch")}function sa(e,t=hr){let r=[e,...t],o=r.flat(),i,n,a;for(i of o)if(!Number.isFinite(i.x)||!Number.isFinite(i.y))throw new Error("Invalid polygon coordinates");let s=[];for(n=0;n<o.length;n++)i=o[n],s.push({x:i.x-e[0].x,y:i.y-e[0].y,index:n});let m=sl(r,s),f=m[0].slice(),p=il(m.slice(1)),c=p.length?{x:0,y:0}:null;for(a of p)f=cl(f,a,m,c);let l=ul(f);return dl(m,s,l),l}function hl(e,t){let{options:r,fill:o,point:i}=e;if(r.triangulated){if(t.length!==1||t[0].length!==3)throw new Error("triangulated polygons require three vertices per polygon and no holes");We(i,o,t[0][0],t[0][1],t[0][2]);return}let n=[],a,s;for(a of t)a.length>=3&&n.push(a);let m=n.flat();for(s of sa(n[0],n.slice(1)))We(i,o,m[s[0]],m[s[1]],m[s[2]])}function Gm(e,t,r){let{options:o,map:i}=e,n=[],a,s,m;for(a of t){s=[];for(m of a)s.push(i.project(m));n.push(s)}r&&o.fill&&n[0]?.length>=3&&hl(e,n);for(a of n)na(e,a,r)}function Um(e,t,r){if(!t.length)return;let o;if(t[0]instanceof d.LatLng)Gm(e,[t],r);else if(r&&t[0][0]instanceof d.LatLng)Gm(e,t,r);else for(o of t)Um(e,o,r)}function gl(e){let t=Array.isArray(e.dashArray)?e.dashArray:String(e.dashArray||"").trim().split(/[ ,]+/),r=[],o,i=!0;for(o of t)r.push(Number(o));for(o of r){if(!Number.isFinite(o)||o<0)throw new Error("Invalid Leaflet dashArray");o!==0&&(i=!1)}return i&&(r.length=0),r.length%2&&r.push(...r),r}L();L();function xr(e,t,r,o,i,n=0){let a=i*Di/o;return new d.Point(e.x+Math.max(0,t+n)*Math.cos(a),e.y+Math.max(0,r+n)*Math.sin(a))}L();var Nm=new WeakMap;function Fo(e){if(!d.version.startsWith("2."))return e._project();let t=e._map,r=e._renderer,o=Nm.get(t);o||(o=Object.create(d.Renderer.prototype),o._map=t,Nm.set(t,o)),o._pathZoom=t.getZoom(),o._pathOrigin=t.getPixelOrigin(),e._renderer=o;try{e._project()}finally{r?e._renderer=r:delete e._renderer}}function yl(e,t){let{map:r,point:o,fill:i,stroke:n,options:a,dash:s,width:m}=t,f=r.project(e.getLatLng()),p=e.getRadius(),c=p,l,u;if(e instanceof d.Circle){Fo(e);let x=e._point.add(r.getPixelOrigin());f.x=x.x,f.y=x.y,p=e._pxRadius??e._radius,c=e._pxRadiusY??e._radiusY??p}a.fill&&Hr(o,f,p,i,c);let h=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(p,c)))));if(s.length){let x=[];for(l=0;l<h;l++)x.push(xr(f,p,c,h,l));na(t,x,!0)}else if(a.stroke&&m>0)for(u=0;u<h;u++)We(o,n,xr(f,p,c,h,u,m/2),xr(f,p,c,h,u,-m/2),xr(f,p,c,h,u+1,m/2)),We(o,n,xr(f,p,c,h,u+1,m/2),xr(f,p,c,h,u,-m/2),xr(f,p,c,h,u+1,-m/2))}function xl(e,t,r){let o=[],i=[],n=e.options,a=Number(n.weight)||0,s=gl(n),m={fill:o,stroke:i,options:n,width:a,dash:s,point:r,map:t};if(e instanceof d.CircleMarker)yl(e,m);else{let f=e instanceof d.Polygon;Um(m,e.getLatLngs(),f)}return{fill:o,stroke:i}}function Fm(e,t){if(e.pixelProjection){let{transformation:r,scale:o,origin:i,metres:n}=e.pixelProjection,a=r.untransform(t,o);return[(a.x-i.x)*n,0,-(a.y-i.y)*n]}return Zt(e,e.map.unproject(t))}function vl(e,t){let r=No[No.length-1];return t&&r.strokeAnchors&&r.strokeAnchors.push(...Fm(r,t)),Fm(r,e)}V();L();function wl(e){let{source:t}=e;e.strokeCoordinates=null,e.strokeAnchors=t instanceof d.Polyline&&!t.options.dashArray?[]:null;let r=e.map.options.crs,o=D.get(e.backend);e.pixelProjection={transformation:r.transformation,scale:r.scale(e.map.getZoom()),origin:r.project(o),metres:Math.cos(o.lat*B)},No.push(e);try{return xl(t,e.map,vl)}finally{No.pop()}}function Ll(e,t){let{source:r}=e;e.strokeAnchors?.length===t.length&&t.length?(r.options.interactive===!1?e.strokeCoordinates=t:(e.strokeCoordinates=new Float64Array(t),e.strokeAnchors=new Float64Array(e.strokeAnchors)),e.strokeZoom=e.map.getZoom(),e.strokeWeight=Number(r.options.weight)):e.strokeAnchors=null}function bl(e){let{source:t}=e;if(e.zoomOnly){Qc(e),e.zoomOnly=!1;return}let{fill:r,stroke:o}=wl(e);Ll(e,o);let i,n,a,s,m,f,p,c,l;for(i=0;i<2;i++)n=i?"stroke":"fill",a=i?o:r,s=i?t.options.color:t.options.fillColor||t.options.color,m=i?t.options.opacity:t.options.fillOpacity,a.length&&({r:f,g:p,b:c}=Bt(s),Go(e,n,a,[f,p,c],m??1),n==="stroke"&&t.options.interactive===!1&&e.strokeCoordinates&&(l=e.meshes.get(n).geometry.attributes,e.strokeCoordinates=l.position.data,e.strokeAnchors=l.normal.data))}function Ml(e){let{meshes:t,textures:r,backend:o}=e,i,n,a;for([a,i]of t)i._nativeUsed||(Fe(o,i),t.delete(a),n=r.get(a),n&&W(o,n.texture),r.delete(a));for([a,n]of r)n.used||(W(o,n.texture),r.delete(a))}function ma(e){let{source:t,meshes:r,textures:o}=e;if(!Ao(e)||!w.get(e.backend)||e.failed||!e.dirty&&(!e.marker||!e.viewDirty))return;e.dirty=!1,e.viewDirty=!1;let i,n;for(i of r.values())i._nativeUsed=!1;for(n of o.values())n.used=!1;t instanceof d.GridLayer?qc(e):t instanceof d.ImageOverlay?Hc(e):e.marker?Kc(e):bl(e),Ml(e)}function Bl(e){try{ma(e);let t=e.meshes.get("stroke")?.program.uniforms.strokeScale;if(t){let r=ae.get(e.map)?.zoom??e.map.getZoom();t.value=2**(e.strokeZoom-r)*Number(e.source.options.weight)/e.strokeWeight}}catch(t){e.failed=!0,e.source.fire("error",{error:t})}}function vr(e){if(Zn(e),R.get(e)!==e||!w.get(e))return;let t=e._map,r=performance.now(),o=t.getSize();if(!o.x||!o.y)return;ep(e,r),rp(e,o),mp(e,o),Se(re.get(e));let i=!1,n,a;for(n of F.get(e))a=vo.get(n),a&&(Bl(a),i=!0);let s=ct.get(t);up(e,s,i);let m=jt.get(e),f=w.get(e),p=_p(e,r),c=f.frameMeshes||=[];c.length=0;let l=Dp(e,p,r,c),u=f.device.createCommandEncoder();Vp(e,c,m,s),hc(e,u,m,s),ec(e,u,c),f.device.queue.writeBuffer(f.uniformBuffer,0,f.uniformData,0,f.uniformSlot*64),f.device.queue.submit((Tn[0]=u.finish(),Tn)),Tn[0]=null;for(n of F.get(e))pr.get(n)&&(l=zo(n)||l);(t._animatingZoom||l)&&E(e)}function Tl(){let e=[...Ft];Ft.clear();let t,r;for(r of e)if(pt.set(r,null),!(R.get(r)!==r||!w.get(r)))try{vr(r)}catch(o){t||=o}if(t)throw t}function E(e){let t=R.get(e);if(!t)return e;if(t!==e)return E(t),e;if(pt.get(e)!=null)return e;let r=Ft.values().next().value;return Ft.add(e),pt.set(e,r?pt.get(r):requestAnimationFrame(Tl)),e}L();function fa(e){let{source:t}=e,r=t instanceof d.Marker&&t.options.icon instanceof d.DivIcon,o=r?null:t._icon,i=r?null:t._shadow,n,a;for(a of e.hidden)a===o||a===i||(a.classList.remove("leaflet-webgpu-target"),e.hidden.delete(a));for(n=0;n<2;n++)a=n?i:o,!(!a||e.hidden.has(a))&&(a.classList.add("leaflet-webgpu-target"),e.hidden.add(a))}function Ne(e=this){e.zoomOnly=!1,e.dirty=!0,e.viewDirty=!0,e.failed=!1,fa(e);let t=e.source,r,o;for(o of e.images)o===t._icon||o===t._shadow||o===t._image||(o.removeEventListener("load",Pi),o.removeEventListener("error",ki),Bn(o,e),e.images.delete(o));for(r=0;r<3;r++)o=r===0?t._icon:r===1?t._shadow:t._image,!(!(o instanceof HTMLImageElement)||e.images.has(o))&&(e.images.add(o),Jf(o,e),o.addEventListener("load",Pi),o.addEventListener("error",ki));R.get(e.backend)&&E(e.backend)}L();var Pl=new Set(["color","opacity","weight","fillColor","fillOpacity"]);function kl(e,t,r){let{source:o}=t;if(e!=="setStyle"||o.options.interactive!==!1||t.dirty&&!t.zoomOnly)return!1;let i=t.strokeCoordinates&&t.meshes.get("stroke")?.program.uniforms.strokeScale,n=o instanceof d.Polygon&&!o.options.stroke&&t.meshes.has("fill");if(!i&&!n)return!1;let a;if(r[0]){for(a of Object.keys(r[0]))if(!Pl.has(a))return!1}return!0}L();function Sl(e,t){let{source:r}=e;if(!(r instanceof d.GridLayer)||t!=="bringToFront"&&t!=="bringToBack")return;let o=t==="bringToFront"?-1/0:1/0,i,n;for(i of Object.values(e.map._layers))i===r||!(i instanceof d.GridLayer)||i.getPane()!==r.getPane()||(n=i.options.zIndex||0,o=t==="bringToFront"?Math.max(o,n):Math.min(o,n));let a=t==="bringToFront"?o+1:o-1;Number.isFinite(a)&&r.setZIndex(a)}function H(e,t,r){let o=he.get(t),i=o.methods.get(e).original,n=kl(e,o,r),a=i.apply(t,r);return Sl(o,e),e==="bringToFront"&&(o.order=fr.get(o.map)+1,fr.set(o.map,o.order)),e==="bringToBack"&&(o.order=xo.get(o.map)-1,xo.set(o.map,o.order)),Ne(o),n&&(!t.options.stroke||Number(t.options.weight)>0)&&(o.zoomOnly=!0),a}function Cl(...e){return H("setLatLng",this,e)}function _l(...e){return H("setLatLngs",this,e)}function El(...e){return H("addLatLng",this,e)}function Ol(...e){return H("setRadius",this,e)}function zl(...e){return H("setStyle",this,e)}function Al(...e){return H("redraw",this,e)}function Rl(...e){return H("setIcon",this,e)}function Il(...e){return H("setUrl",this,e)}function Dl(...e){return H("setBounds",this,e)}function Gl(...e){return H("setOpacity",this,e)}function Ul(...e){return H("setZIndex",this,e)}function Nl(...e){return H("setZIndexOffset",this,e)}function Fl(...e){return H("bringToFront",this,e)}function jl(...e){return H("bringToBack",this,e)}var jm={setLatLng:Cl,setLatLngs:_l,addLatLng:El,setRadius:Ol,setStyle:zl,redraw:Al,setIcon:Rl,setUrl:Il,setBounds:Dl,setOpacity:Gl,setZIndex:Ul,setZIndexOffset:Nl,bringToFront:Fl,bringToBack:jl};L();var wr=Object.freeze({});function pa(e=wr){return new d.Layer(e)}L();var Xr=new WeakMap;var ie=new WeakMap;var Tt=new WeakMap;function Wl(e,t,r,o){let i=Math.min(r+o,e.length),n=Math.min(r+o*2,e.length),a=r,s=i,m;for(m=r;m<n;m++)a<i&&(s>=n||!(e[s].distance<e[a].distance))?t[m]=e[a++]:t[m]=e[s++]}function $l(e){if(e.length<2)return e;let t=new Array(e.length),r=e,o=t,i,n,a,s;for(i=1;i<e.length;i*=2){for(n=0;n<e.length;n+=i*2)Wl(r,o,n,i);a=r,r=o,o=a}if(r!==e)for(s=0;s<e.length;s++)e[s]=r[s];return e}function Vl(e,t,r,o){let n=new DOMMatrix(t.worldMatrix).invertSelf().toFloat64Array(),a,s,m,f,p;for(a of n)if(!Number.isFinite(a))throw new Error("Singular 3D transform");s=e.origin[0],m=e.origin[1],f=e.origin[2],p=n[3]*s+n[7]*m+n[11]*f+n[15],r[0]=(n[0]*s+n[4]*m+n[8]*f+n[12])/p,r[1]=(n[1]*s+n[5]*m+n[9]*f+n[13])/p,r[2]=(n[2]*s+n[6]*m+n[10]*f+n[14])/p,s=e.direction[0],m=e.direction[1],f=e.direction[2],o[0]=n[0]*s+n[4]*m+n[8]*f,o[1]=n[1]*s+n[5]*m+n[9]*f,o[2]=n[2]*s+n[6]*m+n[10]*f;let c=Math.hypot(...o)||1;o[0]/=c,o[1]/=c,o[2]/=c}function Zl(e,t,r){e.geometry.bounds||Oe(e.geometry);let o=0,i=1/0,n,a,s;for(n=0;n<3;n++)if(Math.abs(r[n])<1e-12){if(t[n]<e.geometry.bounds.min[n]||t[n]>e.geometry.bounds.max[n]){i=-1/0;break}}else a=(e.geometry.bounds.min[n]-t[n])/r[n],s=(e.geometry.bounds.max[n]-t[n])/r[n],o=Math.max(o,Math.min(a,s)),i=Math.min(i,Math.max(a,s));return!(i<o)}function ca(e,t){return t?.count??t?.data.length??e.count??e.data.length/(e.size??3)}function la(e,t,r,o,i){let{position:n,index:a,instanceOffset:s}=e.geometry.attributes,m=n.size??3,f=ca(n,a),p=s?t%f:t,c=s?Math.floor(t/f)*s.size:0,l=s?.data[c]??0,u=s?.data[c+1]??0,h=s?.data[c+2]??0,x=(a?a.data[p]:p)*m,y=(a?a.data[p+1]:p+1)*m,g=(a?a.data[p+2]:p+2)*m;r[0]=n.data[x],r[1]=n.data[x+1],r[2]=n.data[x+2],o[0]=n.data[y],o[1]=n.data[y+1],o[2]=n.data[y+2],i[0]=n.data[g],i[1]=n.data[g+1],i[2]=n.data[g+2],s&&(r[0]=Math.fround(r[0]+l),r[1]=Math.fround(r[1]+u),r[2]=Math.fround(r[2]+h),o[0]=Math.fround(o[0]+l),o[1]=Math.fround(o[1]+u),o[2]=Math.fround(o[2]+h),i[0]=Math.fround(i[0]+l),i[1]=Math.fround(i[1]+u),i[2]=Math.fround(i[2]+h))}function ql(e,t,r,o,i){if(!e.program.nightLight)return!1;let{index:n,uv:{data:a}}=e.geometry.attributes,s=n?n.data[t]:t,m=n?n.data[t+1]:t+1,f=n?n.data[t+2]:t+2,p=a[s*2]*(1-r-o)+a[m*2]*r+a[f*2]*o,c=a[s*2+1]*(1-r-o)+a[m*2+1]*r+a[f*2+1]*o;return p<=2&&(!i||p*p+c*c>.9)}function Hl(e,t,r,o,i,n,a,s){let m=o[0]-r[0],f=o[1]-r[1],p=o[2]-r[2],c=i[0]-r[0],l=i[1]-r[1],u=i[2]-r[2],h=a[1]*u-a[2]*l,x=a[2]*c-a[0]*u,y=a[0]*l-a[1]*c,g=m*h+f*x+p*y;if(e.program.cullMode==="none"||e.program.cullFace===null?Math.abs(g)<1e-9:g<1e-9)return 1/0;let v=n[0]-r[0],T=n[1]-r[1],P=n[2]-r[2],k=(v*h+T*x+P*y)/g;if(k<0||k>1)return 1/0;let z=T*p-P*f,$=P*m-v*p,U=v*f-T*m,N=(a[0]*z+a[1]*$+a[2]*U)/g;return N<0||k+N>1||ql(e,t,k,N,s)?1/0:(c*z+l*$+u*U)/g}function Xl(e,t,r,o,i,n){let a=o[0]*i+r[0],s=o[1]*i+r[1],m=o[2]*i+r[2],f=t.worldMatrix,p=f[3]*a+f[7]*s+f[11]*m+f[15],c=[(f[0]*a+f[4]*s+f[8]*m+f[12])/p,(f[1]*a+f[5]*s+f[9]*m+f[13])/p,(f[2]*a+f[6]*s+f[10]*m+f[14])/p];return{faceIndex:n,object:t,point:c,distance:Math.hypot(c[0]-e.origin[0],c[1]-e.origin[1],c[2]-e.origin[2])}}function ua(e,t,r=0){let o=[],i=[0,0,0],n=[0,0,0],a=[0,0,0],s=[0,0,0],m=[0,0,0],f,p,c,l,u,h,x,y,g;for(f of t)if(Vl(e,f,s,m),!!Zl(f,s,m)){for({position:p,index:c,instanceOffset:l}=f.geometry.attributes,u=c?.count||p.count,h=1/0,x=void 0,y=0;y<u*(l?.count??1);y+=3)la(f,y,i,n,a),g=Hl(f,y,i,n,a,s,m,r),g>0&&g<h&&(h=g,x=y/3);x!==void 0&&o.push(Xl(e,f,s,m,h,x))}return $l(o)}function qt(e,t,r){if(t(e,r))return;let o;for(o of e.children)qt(o,t,r)}function da(e,t){if(!e.visible)return!0;e.geometry&&e._appearance!==0&&t.push(e)}function Yl(e,t,r,o){let i=1,n=t.length-1,a;for(;i<n;)a=i+Math.floor((n-i)/2),t[a]<r?i=a+1:n=a;let s=e[i-1],m=e[i],f=t[i]-t[i-1]||1,p=(r-t[i-1])/f;return o||={},o.x=s[0]+(m[0]-s[0])*p,o.y=(s[2]??0)+((m[2]??0)-(s[2]??0))*p,o.z=s[1]+(m[1]-s[1])*p,o.dx=(m[0]-s[0])/f,o.dz=(m[1]-s[1])/f,o}function jo(e,t,r){let{points:o,lengths:i,length:n}=t.lane,a=t.distance+e.elapsed*t.speed;a-=n*Math.floor(a/n);let s=Yl(o,i,a,r);return s.x-=s.dz*e.side,s.z+=s.dx*e.side,s}function Jl(e){if(!e.mesh||!e.stale)return;e.stale=!1;let{position:t,normal:r}=e.mesh.geometry.attributes,o=e.position||={},i,n,a,s,m,f,p,c,l,u,h,x,y;for(i=0;i<e.trips.length;i++)for(n=e.trips[i],{x:a,y:s,z:m,dx:f,dz:p}=jo(e,n,o),c=0,l=i*e.stride;c<e.stride;c+=3,l+=3)u=e.template.position[c],h=e.template.position[c+2],x=e.template.normal[c],y=e.template.normal[c+2],t.data[l]=a-u*p-h*f,t.data[l+1]=s+e.template.position[c+1],t.data[l+2]=m+u*f-h*p,r.data[l]=-x*p-y*f,r.data[l+1]=e.template.normal[c+1],r.data[l+2]=x*f-y*p}function Kl(e){let t,r;for(t=1;t<=4;t++)for(r=1;r<=4;r++)if(!Number.isFinite(e[`m${t}${r}`]))throw new Error("Singular 3D transform")}function ha(e,t,r=M.get(e).children,o=!0){if(!w.get(e))return[];let i=Tt.get(e);i&&Jl(i);let n=e._map.getContainer().getBoundingClientRect();Se(re.get(e)),bo(Q.get(e));let a=ie.get(e).inverse,s=Q.get(e).projectionViewMatrix;a.m11=s[0],a.m12=s[1],a.m13=s[2],a.m14=s[3],a.m21=s[4],a.m22=s[5],a.m23=s[6],a.m24=s[7],a.m31=s[8],a.m32=s[9],a.m33=s[10],a.m34=s[11],a.m41=s[12],a.m42=s[13],a.m43=s[14],a.m44=s[15],a.invertSelf();let m=(t.clientX-n.left)/n.width*2-1,f=-((t.clientY-n.top)/n.height)*2+1,p=a.m11*m+a.m21*f+a.m41,c=a.m12*m+a.m22*f+a.m42,l=a.m13*m+a.m23*f+a.m43,u=a.m14*m+a.m24*f+a.m44,h;Kl(a),ie.get(e).origin[0]=Q.get(e).position[0],ie.get(e).origin[1]=Q.get(e).position[1],ie.get(e).origin[2]=Q.get(e).position[2],ie.get(e).direction[0]=p/u-ie.get(e).origin[0],ie.get(e).direction[1]=c/u-ie.get(e).origin[1],ie.get(e).direction[2]=l/u-ie.get(e).origin[2];let x=ie.get(e).direction,y=Math.hypot(x[0],x[1],x[2])||1;ie.get(e).direction[0]/=y,ie.get(e).direction[1]/=y,ie.get(e).direction[2]/=y;let g=ie.get(e).meshes;g.length=0;for(h of r)o?qt(h,da,g):h.geometry&&h.visible&&h._appearance!==0&&g.push(h);return ua(ie.get(e),g,w.get(e).uniformData?.[55])}function Ql(){let{map:e,descriptor:t,handle:r}=this;e._fireDOMEvent===r&&(t?Object.defineProperty(e,"_fireDOMEvent",t):delete e._fireDOMEvent)}var ee=new WeakMap;var eu=new Set(["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"]);L();function tu(e,t){return t.object.renderOrder-e.object.renderOrder||e.distance-t.distance}function ru(e,t,r){let o=[],i,n,a;if(r!==e.out)for(i of e.states)({source:n,backend:a}=i),!(n instanceof d.Marker||n.options.interactive===!1||!(n instanceof d.Path)&&!n.options.interactive)&&o.push(...ha(a,t,i.meshes.values(),!1));return o.sort(tu),o[0]?.object._nativeSource||null}function ga(e,t,r,o){t.hovered!==o&&(t.hovered&&t.fireDOMEvent.call(e,r,t.out,[t.hovered]),t.hovered=o,o&&t.fireDOMEvent.call(e,r,t.over,[o]),e.getContainer().style.cursor=o?"pointer":"")}function ou(e,t,r,o){let i=r.target,n=i instanceof Element&&i.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");return n&&t.hovered&&(o===t.move||o===t.out)&&ga(e,t,r,null),n||o===t.move&&(e.dragging?.moving()||e._animatingZoom)}function Wm(e,t=e.type,r){let o=this,i=Xr.get(o),n=i.fireDOMEvent,a=ee.get(o);if(!w.get(a)||r||!eu.has(t))return n.call(this,e,t,r);if(ou(o,i,e,t))return n.call(this,e,t,r);let s=ru(i,e,t);return(t==="click"||t==="preclick")&&s&&o._draggableMoved(s)&&(s=null),(t===i.move||t===i.out)&&ga(o,i,e,s),n.call(this,e,t,s?[s]:void 0)}function iu(e){let{map:t}=e,r=Xr.get(t);if(!r){r={map:t,states:new Set,hovered:null};let o=d.version.startsWith("2");r.move=o?"pointermove":"mousemove",r.out=o?"pointerout":"mouseout",r.over=o?"pointerover":"mouseover",r.descriptor=Object.getOwnPropertyDescriptor(t,"_fireDOMEvent"),r.fireDOMEvent=t._fireDOMEvent,r.handle=Wm,r.restore=Ql,Xr.set(t,r),t._fireDOMEvent=Wm}r.states.add(e),e._nativeEventContext=r}L();function Wo(e){if(!(e?.type==="zoomend"&&this.source instanceof d.Polyline&&(!this.source.options.stroke||!(Number(this.source.options.weight)>0)))){if(e?.type==="zoomend"&&this.strokeCoordinates&&(!this.dirty||this.zoomOnly)){this.zoomOnly=!0,this.dirty=!0,E(this.backend);return}e?.type==="terrainchange"&&this.marker&&this.source.update(),Ne(this)}}function ya(){this.viewDirty=!0,R.get(this.backend)&&E(this.backend)}function nu(e){let t=e._nativeEventContext;if(!t)return;let{map:r}=t;t.states.delete(e),t.hovered===e.source&&(t.hovered=null,r.getContainer().style.cursor=""),e._nativeEventContext=null,!t.states.size&&(t.restore(),Xr.delete(r))}function Ui(){let e=this;if(e.disposed)return;e.disposed=!0;let{source:t,map:r,backend:o,meshes:i,textures:n,images:a}=e;t.off("load tileload tileunload move drag",Wo,e),r.off("zoomend terrainchange",Wo,e),e.marker&&r.off("move zoom rotate pitch resize viewreset",ya,e),nu(e);let m,f,p,c,l;for([m,f]of e.methods)f.own?Object.defineProperty(t,m,f.own):delete t[m];for(p of i.values())Fe(o,p);i.clear();for(c of n.values())W(o,c.texture);n.clear();for(l of a)l.removeEventListener("load",Pi),l.removeEventListener("error",ki),Bn(l,e);vo.delete(o),o.remove()}function au(){this.ready.resolve()}function su({error:e}){this.ready.reject(e)}function mu({error:e}){this.source.fire("error",{error:e})}async function fu(e){let{source:t,map:r}=e,o=e.backend=pa({source:{type:"vector"}});e.meshes=new Map,e.textures=new Map,e.methods=new Map,e.images=new Set,fr.get(r)||fr.set(r,0),xo.get(r)||xo.set(r,0),e.dirty=!0,e.viewDirty=!0,e.failed=!1,e.order=fr.get(r)+1,fr.set(r,e.order),e.marker=t instanceof d.Marker,e.paneOrder=Number(getComputedStyle(t.getPane()).zIndex)||0,e.disposed=!1,t.on("load tileload tileunload move drag",Wo,e),r.on("zoomend terrainchange",Wo,e),e.marker&&r.on("move zoom rotate pitch resize viewreset",ya,e),iu(e);let n,a,s;for(n in jm)typeof t[n]=="function"&&(a=Object.getOwnPropertyDescriptor(t,n),s=t[n],e.methods.set(n,{own:a,original:s}),t[n]=jm[n]);let m=e.ready=Promise.withResolvers();o.once("ready",au,e),o.once("error",su,e),o.on("error",mu,e),Ne(e),o.addTo(r);try{await m.promise}catch(f){throw Ui.call(e),f}if(!Ao(e))return t;vo.set(o,e);try{ma(e)}catch(f){throw Ui.call(e),f}return E(e.backend),t}function pu(e){he.get(e.source)===e&&he.set(e.source,null),e.backend&&Ui.call(e);let t;for(t of e.hidden)t.classList.remove("leaflet-webgpu-target")}function cu(e){return he.get(e.source)!==e?e.source:fu(e)}function Ye(e,t){e.fire("error",{error:t})}function xa(e,t){if(he.get(e))return;if(!document.getElementById("leaflet-webgpu-targets")){let o=document.createElement("style");o.id="leaflet-webgpu-targets",o.textContent=".leaflet-webgpu-target{opacity:0!important}",document.head.append(o)}let r={source:e,map:t,hidden:new Set};he.set(e,r),fa(r),e.once("remove",pu.bind(null,r)),te.set(e,Promise.resolve().then(cu.bind(null,r))),te.get(e).catch(Ye.bind(null,e))}var va=[1,0,1,0];L();function le(e){return new d.Point(Array.isArray(e)?e[0]:e.x,Array.isArray(e)?e[1]:e.y)}V();Z();J();function wa(e,t){let r=S(e)*B,o=_(e)*B;return t||=[],t[0]=Math.cos(r),t[1]=Math.sin(r),t[2]=Math.cos(o),t[3]=Math.sin(o),t}function Re(e,t,r=!1,o=!1,i=0){let n=e.getSize(),a=n.x/2,s=n.y/2,m=n.y*1.5,f=le(t);if(!m)return f;let[p,c,l,u]=wa(e,va),h=f.x-a,x=f.y-s;if(r){let T=n.y*e.options.pitchMaxDistance,P=l*m+u*x,k=P*l>0?(x*(m-l*i)+m*u*i)/P:-T;o&&(k=Math.max(-T,Math.min(T,k)));let z=h*(m-u*k-l*i)/m;return f.x=p*z+c*k+a,f.y=-c*z+p*k+s,f}let y=p*h-c*x,g=c*h+p*x,v=m/(m-u*g-l*i);return f.x=y*v+a,f.y=(l*g-u*i)*v+s,f}function lu(e){return Re(this,at(this,j.value.layerPointToContainerPoint.call(this,e)))}function uu(e){return j.value.containerPointToLayerPoint.call(this,at(this,Re(this,e,!0),!0))}function du(){return j.value.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))}function hu(e,t){let r=this.getSize().divideBy(2),o=r.subtract(Re(this,r.subtract(le(e)),!0));return j.value.panBy.call(this,o,t)}L();J();Z();function gu(e,t,r){if(!_(this)&&!S(this))return j.value.setZoomAround.call(this,e,t,r);t=this._limitZoom(t);let o=this.getZoomScale(t),i=this.getSize().divideBy(2),n=e instanceof d.Point?e:this.latLngToContainerPoint(e),a=this.containerPointToLayerPoint(i),s=this.containerPointToLayerPoint(n),m=a.add(s.subtract(a).multiplyBy(1-1/o));return this.setView(this.layerPointToLatLng(m),t,{zoom:r})}var Pt=Object.freeze([0,0]);J();Z();function yu(e,t={}){if(!_(this)&&!S(this))return j.value.panInside.call(this,e,t);let r=le(t.paddingTopLeft||t.padding||Pt),o=this.getSize().subtract(le(t.paddingBottomRight||t.padding||Pt)),i=this.latLngToContainerPoint(e),n=r;if(n.x=Math.max(r.x,Math.min(o.x,i.x)),n.y=Math.max(r.y,Math.min(o.y,i.y)),n.equals(i))return this;let a=this.latLngToLayerPoint(e).subtract(this.containerPointToLayerPoint(n));return this.panTo(this.unproject(this.project(this.getCenter()).add(a)),t)}L();J();Z();L();function Lr(e,t=Pt,r=0){let o=le(t).divideBy(2),i=e.getSize().subtract(o),n=new d.Bounds,a=o.x,s=o.y,m;for(m=0;m<4;m++)o.x=m%2?i.x:a,o.y=m<2?s:i.y,n.extend(Re(e,o,!0,!0,r));return n}function xu(e,t,r){if(!r||!this._loaded||!_(this)&&!S(this))return j.value._limitCenter.call(this,e,t,r);let o=this.getSize().divideBy(2),i=Lr(this),n=this.project(e,t),a=new d.Bounds(n.add(i.min.subtract(o)),n.add(i.max.subtract(o))),s=this._getBoundsOffset(a,r,t);return Math.abs(s.x)<=1&&Math.abs(s.y)<=1?e:this.unproject(n.add(s),t)}J();Z();function vu(e,t){if(!t||!_(this)&&!S(this))return j.value._limitOffset.call(this,e,t);let r=this.getSize().divideBy(2),o=r.subtract(Re(this,r.subtract(e),!0)),i=this.project(this.getCenter()),n=this.project(this._limitCenter(this.unproject(i.add(o)),this.getZoom(),t));return r.subtract(Re(this,r.subtract(n.subtract(i))))}J();Z();L();La();function $m(e,t,r,o,i){return t*r+o*e>0?Math.max(-i,Math.min(i,e*r/(t*r+o*e))):-i}function ba(e,t,r=$o){t=t.getBounds?t.getBounds():t instanceof d.LatLngBounds?t:new d.LatLngBounds(t);let o=e.getZoom()??0,i=e.getSize().divideBy(2),n=e.getSize().y*1.5,a=le(r.paddingTopLeft||r.padding||Pt).subtract(i),s=i.subtract(le(r.paddingBottomRight||r.padding||Pt)),[m,f,p,c]=wa(e,va);if(p<0){let Dv=a.y;a.y=-s.y,s.y=-Dv}let l=e.getSize().y*e.options.pitchMaxDistance,u=$m(a.y,Math.abs(p),n,c,l),h=$m(s.y,Math.abs(p),n,c,l),x=e.project(t.getNorthWest(),o).add(e.project(t.getSouthEast(),o)).divideBy(2),y=1/0,g=-1/0,v=a.x*c/n,T=s.x*c/n,P=T-v,k=1/0,z=-1/0,$=[t.getNorthWest(),t.getNorthEast(),t.getSouthWest(),t.getSouthEast()],U,N,se,Ue,de;for(U=0;U<4;U++)N=$[U],se=e.project(N,o).subtract(x),Ue=m*se.x-f*se.y,de=f*se.x+m*se.y,y=Math.min(y,de),g=Math.max(g,de),k=Math.min(k,Ue+v*de),z=Math.max(z,Ue+T*de);let xe=Math.min((h-u)/(g-y),(s.x-a.x-P*u)/(z-k-P*y)),me=e.getScaleZoom(xe,o),Ee=e.options.zoomSnap;if(Ee&&(me=Math.floor(Math.round(me/(Ee/100))/100)*Ee),me=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),r.maxZoom??1/0,me)),!Number.isFinite(me))return{center:t.getCenter(),zoom:me};let Te=e.getZoomScale(me,o),sr=g*Te-h,Nt=y*Te-u,mr=Math.max(sr,P?(Te*(z-k)-s.x+a.x)/P:sr),yo=(Math.min(Nt,mr)+Nt)/2,Yf=(Te*(k+z)-a.x-s.x-(v+T)*yo)/2;return x.x+=(m*Yf+f*yo)/Te,x.y+=(-f*Yf+m*yo)/Te,{center:e.unproject(x,o),zoom:me}}function wu(e,t){return _(this)||S(this)?ba(this,e,t):j.value._getBoundsCenterZoom.call(this,e,t)}L();J();Z();function Lu(e,t,r){if(!_(this)&&!S(this))return j.value.getBoundsZoom.call(this,e,t,r);if(!t)return ba(this,e,{padding:le(r||Pt).divideBy(2)}).zoom;e=e instanceof d.LatLngBounds?e:new d.LatLngBounds(e);let o=Lr(this,r).getSize(),i=this.project(e.getSouthEast()).subtract(this.project(e.getNorthWest())),n=this.getScaleZoom(Math.max(o.x/i.x,o.y/i.y)),a=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),a?Math.ceil(n/a)*a:n))}function bu(e,t){let r=this._getCenterOffset(e)._trunc();return t?.animate!==!0&&!this.getSize().contains(r)?!1:((j.value._panBy||j.value.panBy).call(this,r,t),!0)}L();J();Z();function Mu(){if(!_(this)&&!S(this))return j.value.getBounds.call(this);let e=Lr(this),t=new d.LatLngBounds,r,o,i;for(r=0;r<2;r++)o=r?e.max:e.min,i=j.value.containerPointToLayerPoint.call(this,at(this,o,!0)),t.extend(this.layerPointToLatLng(i));return t}var Bu=new WeakSet;var Vm=new WeakMap;br();Zm();function Tu(){this.options.maxBounds&&this._panInsideMaxBounds()}var Mr=new WeakMap;Ma();Ca();J();Z();function _a(){let e=this,t=Mr.get(e);if(!_(e)&&!S(e))return;let r=e.getSize().divideBy(2),o=t._newPos.subtract(t._startPos),i=r.subtract(Re(e,r.subtract(o),!0));t._newPos=t._startPos.add(i)}function Pu(){Zo(this),Je.get(this)?.remove(),Mr.get(this)&&(Mr.get(this).off("predrag",_a,this),Mr.delete(this))}function ku(){let e=this.dragging?._draggable;e&&(Mr.set(this,e),e.on("predrag",_a,this))}async function Ad(e){try{let{cameraControls:t}=await Promise.resolve().then(()=>(zd(),Od));e._container?._leaflet_id&&t(e)}catch(t){throw e.fire("error",{error:t}),t}}function Ke(){}function Rd(){if(Bu.add(this),!document.getElementById("leaflet-camera-zoom-style")){let e=document.createElement("style");e.id="leaflet-camera-zoom-style",e.textContent=".leaflet-camera-zoom .leaflet-marker-icon,.leaflet-camera-zoom .leaflet-marker-shadow,.leaflet-camera-zoom .leaflet-popup,.leaflet-camera-zoom .leaflet-tooltip{transition:none!important}",document.head.append(e)}$e(this,this.options.pitch,this.options.bearing),this.on("load resize pitch",Ba),this.on("rotate pitch",Tu,this),this.once("unload",Pu,this),this.whenReady(ku,this),(this.options.rotate||this.options.trackContainerMutation)&&(Vm.set(this,Ad(this)),Vm.get(this).catch(Ke))}L();function Id(e){e instanceof d.DivIcon||(e.options.crossOrigin||=!0);let t=rt.value.setIcon.call(this,e);return this._map&&!(e instanceof d.DivIcon)&&xa(this,this._map),t}function Dd(){let e=rt.value.getEvents.call(this);return e.rotate=e.pitch=e.move=this.update,e}V();function ti(e,t,r){let o=ee.get(e),i=o&&oe.get(o);if(!Pe.get(e)||!i)return e.layerPointToContainerPoint(t).subtract(e._getMapPanePos());let n=we(e,r||e.layerPointToLatLng(t))??0,a=we(e,e.getCenter())??0,s=ae.get(e)?.zoom??e.getZoom(),m=(n-a)*e.options.crs.scale(s)/(it*Math.cos(i.lat*B)),f=at(e,j.value.layerPointToContainerPoint.call(e,t));return Re(e,f,!1,!1,m).subtract(e._getMapPanePos())}function Gd(e){rt.value._setPos.call(this,ti(this._map,e,this.getLatLng()));let t,r,o,i,n,a;for(t=0;t<2;t++)r=t?this._shadow:this._icon,o=t?"shadowAnchor":"iconAnchor",r&&(i=ta(this,1,0),n=this.options.icon.options,a=n[o]||n.iconAnchor,r.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",r.style.transform+=` rotate(${Math.atan2(i.y,i.x)}rad) scale(${this.options.scale})`)}function Ct(e=this){let t=he.get(e);t?.backend&&!t.disposed&&Ne(t)}function Ud(e){rt.value._updateZIndex.call(this,e);let t=qr.get(this)!==e;qr.set(this,e),t&&Ct(this)}var eo=new WeakMap;L();function Nd(e){let t=this._marker._map,r=d.DomUtil.getPosition(this._marker._icon).add(t._getMapPanePos()),o=t.containerPointToLayerPoint(r);d.DomUtil.setPosition(this._marker._icon,o),eo.get(this)._cameraOriginalOnDrag.call(this,e),this._marker._setPos(o)}L();J();Z();var qi=new Map;var ri={value:null};function Fd(){ri.value=null;let e=[...qi];qi.clear();let t,r;for([t,r]of e)t._panRequest=null,t._adjustPan(r)}function jd(e,t){qi.set(e,t),ri.value===null&&(ri.value=requestAnimationFrame(Fd)),e._panRequest=ri.value}function Wd(e){let t=this._marker,r=t._map;if(!_(r)&&!S(r))return eo.get(this)._cameraOriginalAdjustPan.call(this,e);let o=d.DomUtil.getPosition(t._icon).add(r._getMapPanePos()),i=r.getSize(),n=le(t.options.autoPanPadding),a=t.options.autoPanSpeed,s=o;if(s.x=(Math.max(0,o.x-i.x+n.x)-Math.max(0,n.x-o.x))/Math.max(1,n.x)*a,s.y=(Math.max(0,o.y-i.y+n.y)-Math.max(0,n.y-o.y))/Math.max(1,n.y)*a,!s.x&&!s.y)return;let m=r._getMapPanePos();r.panBy(s,{animate:!1});let f=m.subtract(r._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),d.DomUtil.setPosition(t._icon,this._draggable._newPos),this._onDrag(e),jd(this,e)}function $d(){if(!this.dragging||eo.has(this.dragging))return;let e=this.dragging,t=e._onDrag,r=e._adjustPan;eo.set(e,{_cameraOriginalOnDrag:t,_cameraOriginalAdjustPan:r}),e._onDrag=Nd,e._adjustPan=Wd,e.enabled()&&(e._draggable.off("drag",t,e),e._draggable.on("drag",e._onDrag,e))}function Vd(){let e=rt.value._initInteraction.call(this);return $d.call(this),e}function Zd(){let e=yn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}function qd(){let e=xn.value.call(this);return e.rotate=e.pitch=e.move=e.terrainchange=this._updatePosition,e}J();Z();function Hd(){let e=this._map;if(!_(e)&&!S(e))return wn.value.call(this);if(!this.options.autoPan)return;if(e._panAnim&&e._panAnim.stop(),this._autopanning){this._autopanning=!1;return}let t=this._container.getBoundingClientRect(),r=e.getContainer().getBoundingClientRect(),o=le(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),i=e.getSize().subtract(le(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),n=t.left-r.left,a=t.top-r.top,s=t.right-r.left,m=t.bottom-r.top,f=Math.min(0,n-o.x)||Math.max(0,s-i.x),p=Math.min(0,a-o.y)||Math.max(0,m-i.y);if(!f&&!p)return;this.options.keepInView&&(this._autopanning=!0);let c=e.latLngToContainerPoint(this._latlng);c.x-=f,c.y-=p;let l=e.latLngToLayerPoint(this._latlng).subtract(e.containerPointToLayerPoint(c));e.fire("autopanstart"),e.panTo(e.unproject(e.project(e.getCenter()).add(l)))}L();function Xd(){if(vn.value.call(this),!this._map)return;let e=this._map.latLngToLayerPoint(this._latlng),t=ti(this._map,e,this._latlng).subtract(e);this._zoomAnimated?d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t)):(this._container.style.left=`${this._containerLeft+t.x}px`,this._container.style.bottom=`${this._containerBottom-t.y}px`)}L();function Yd(e){Ln.value.call(this,e);let t=ti(this._map,e,this._latlng).subtract(e);d.DomUtil.setPosition(this._container,d.DomUtil.getPosition(this._container).add(t))}L();function Jd(){let e=Mn.value.call(this);return e.rotate=e.pitch=d.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),e}L();Z();J();V();function Kd(e,t,r,o){let i=e._map,n=1/0,a=-1/0,s,m;for([s,m]of r.terrainCache)!s.startsWith(`${e._tileZoom}/`)||!m.range||(n=Math.min(n,m.range[0]),a=Math.max(a,m.range[1]));if(!Number.isFinite(n)||!Number.isFinite(a))return t;let f=ae.get(i)?.zoom??i.getZoom(),p=i.options.crs.scale(f)/(it*Math.cos(o.lat*B)),c=we(i,i.getCenter())??0,l,u,h,x,y;for(l=0;l<2;l++)for(h=Lr(i,void 0,((l?a:n)-c)*p),u=0;u<2;u++)x=u?h.max:h.min,y=j.value.containerPointToLayerPoint.call(i,at(i,x,!0)),t.extend(i.project(i.layerPointToLatLng(y),e._tileZoom));return t}function Qd(e){let t=this._map,r=Pe.get(t);if(!r&&!S(t)&&!_(t))return bn.value.call(this,e);let o=t.getBounds(),i=new d.Bounds(t.project(o.getNorthWest(),this._tileZoom),t.project(o.getSouthEast(),this._tileZoom)),n=ee.get(t),a=n&&oe.get(n);return!r||!a?i:Kd(this,i,r,a)}j.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Map.prototype));d.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,maxPitch:85,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});Object.assign(d.Map.prototype,{layerPointToContainerPoint:lu,containerPointToLayerPoint:uu,_getCenterLayerPoint:du,panBy:hu,setZoomAround:gu,panInside:yu,_limitCenter:xu,_limitOffset:vu,_getBoundsCenterZoom:wu,getBoundsZoom:Lu,_tryAnimatedPan:bu,getBounds:Mu});d.Map.addInitHook(Rd);rt.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(d.Marker.prototype));d.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1});Object.assign(d.Marker.prototype,{setIcon:Id,getEvents:Dd,_setPos:Gd,_updateZIndex:Ud,_initInteraction:Vd});yn.value=d.Popup.prototype.getEvents;Object.assign(d.Popup.prototype,{getEvents:Zd});xn.value=d.Tooltip.prototype.getEvents;Object.assign(d.Tooltip.prototype,{getEvents:qd});vn.value=d.Popup.prototype._updatePosition;wn.value=d.Popup.prototype._adjustPan;Object.assign(d.Popup.prototype,{_adjustPan:Hd,_updatePosition:Xd});Ln.value=d.Tooltip.prototype._setPosition;Object.assign(d.Tooltip.prototype,{_setPosition:Yd});bn.value=d.GridLayer.prototype._getTiledPixelBounds;Mn.value=d.GridLayer.prototype.getEvents;Object.assign(d.GridLayer.prototype,{getEvents:Jd,_getTiledPixelBounds:Qd});L();var oi=new WeakMap;var Hi=new WeakMap;var Xi=new WeakMap;L();Ma();V();J();Z();function eh(e,t,r,o,i){let[n,a,s]=e,m=-n*Math.sin(o)*Math.sin(r)-a*Math.cos(r)-s*Math.cos(o)*Math.sin(r);return m>0?(i||={},i.left=t.x/2+t.y*1.5*(n*Math.cos(o)-s*Math.sin(o))/m,i.top=t.y/2-t.y*1.5*(-n*Math.sin(o)*Math.cos(r)+a*Math.sin(r)-s*Math.cos(o)*Math.cos(r))/m,i):null}function bf(e,t,r,o,i,n,a){if(e.hidden=!0,!r||!t||t.altitude<=0)return;e.parentNode!==r&&r.append(e);let s=eh(t.direction,o,i,n,a);if(!s)return;let{left:m,top:f}=s;e.hidden=m<0||m>o.x||f<0||f>r.clientHeight||r.style.display==="none",e.style.left=`${m}px`,e.style.top=`${f}px`}function Yt({map:e,originalSky:t,sunDisc:r,moonDisc:o,projection:i}){let n=ct.get(e),a=Je.get(e);n?e.getContainer().style.setProperty("--leaflet-sky-background",n.background):t?e.getContainer().style.setProperty("--leaflet-sky-background",t):e.getContainer().style.removeProperty("--leaflet-sky-background");let s=e.getSize(),m=_(e)*B,f=S(e)*B;bf(r,n,a,s,m,f,i),bf(o,n?.moon,a,s,m,f,i)}var th=[[-18,[3,7,20],[17,28,54],[.025,.04,.09]],[-6,[37,53,84],[182,106,86],[.12,.1,.14]],[0,[101,131,171],[246,170,115],[.38,.24,.18]],[10,[74,147,208],[197,221,237],[.8,.75,.68]],[25,[53,144,213],[223,238,250],[1,1,1]]];var Mf=[0,0,0];function as(e,t,r,o){o||=[],o.length=e.length;let i;for(i=0;i<e.length;i++)o[i]=e[i]+(t[i]-e[i])*r;return o}function Bf(e){let t="",r;for(r=0;r<e.length;r++)r&&(t+=", "),t+=Math.round(e[r]);return`rgb(${t})`}function rh(e){if(!Number.isFinite(e))throw new Error("Invalid solar altitude");let t=th,r=-1,o;for(o=0;o<t.length;o++)if(t[o][0]>=e){r=o;break}let i=t[r<0?t.length-1:r],n=t[Math.max(0,r-1)],a=n===i||r<0?1:(e-n[0])/(i[0]-n[0]);return{background:`linear-gradient(${Bf(as(n[1],i[1],a,Mf))}, ${Bf(as(n[2],i[2],a,Mf))})`,tint:as(n[3],i[3],a)}}function ss(e,t,r){let o=e instanceof Date?Date.prototype.getTime.call(e):typeof e=="string"?Date.parse(e):new Date(e).getTime();if(!Number.isFinite(o)||!Number.isFinite(t)||Math.abs(t)>90||!Number.isFinite(r)||Math.abs(r)>180)throw new Error("Invalid solar date or location");return o}V();function ms(e,t,r,o,i){let n=(280.16+360.9856235*e+r)*B-o,a=t*B,s=Math.asin(Math.sin(a)*Math.sin(i)+Math.cos(a)*Math.cos(i)*Math.cos(n)),f=(Math.atan2(Math.sin(n),Math.cos(n)*Math.sin(a)-Math.tan(i)*Math.cos(a))/B+180+360)%360;return{altitude:s/B,azimuth:f,direction:[Math.sin(f*B)*Math.cos(s),Math.sin(s),-Math.cos(f*B)*Math.cos(s)]}}V();V();var Yi=Math.sin(23.4397*B);V();var Ji=Math.cos(23.4397*B);function oh(e,t,r){let o=ss(e,t,r)/864e5-10957.5,i=(134.963+13.064993*o)*B,n=(218.316+13.176396*o+6.289*Math.sin(i))*B,a=5.128*Math.sin((93.272+13.22935*o)*B)*B,s=Math.cos(a)*Math.cos(n),m=Math.cos(a)*Math.sin(n)*Ji-Math.sin(a)*Yi,f=Math.cos(a)*Math.sin(n)*Yi+Math.sin(a)*Ji;return ms(o,t,r,Math.atan2(m,s),Math.asin(f))}V();function ih(e,t,r){let i=ss(e,t,r)/864e5-10957.5,n=(357.5291+.98560028*i)*B,a=n+(1.9148*Math.sin(n)+.02*Math.sin(2*n)+3e-4*Math.sin(3*n)+102.9372+180)*B,s=Math.asin(Math.sin(a)*Yi),m=Math.atan2(Math.sin(a)*Ji,Math.cos(a));return ms(i,t,r,m,s)}function to(e){let t=ee.get(e);t&&E(t)}function _r(e){let{control:t,map:r,date:o,slider:i,output:n,status:a}=e;try{t.live&&(t.time=new Date);let s=t.time.toISOString();o.value=s.slice(0,10),i.value=String(t.time.getUTCHours()*60+t.time.getUTCMinutes()),n.textContent=`${s.slice(11,16)} UTC${t.live?" \xB7 now":""}`;let m=r.getCenter(),f=ih(t.time,m.lat,m.lng);ct.set(r,f),Object.assign(f,rh(f.altitude)),f.moon=oh(t.time,m.lat,m.lng),a.textContent=f.altitude<=0?"Night \xB7 no direct sunlight":f.altitude<3?"Low sun \xB7 shadows paused":`Sun altitude ${f.altitude.toFixed(1)}\xB0`,r.fire("simulationtimechange",{time:new Date(t.time),live:t.live}),Yt(e),to(r)}catch(s){ct.delete(r),Yt(e),to(r),a.textContent=`Error: ${s.message}`,console.error("Solar simulation",s)}}function nh(e){e.control.live=!0,_r(e)}function ah(e){let{control:t,map:r,date:o,slider:i,status:n}=e;if(t.live=!1,!o.value||!o.validity.valid){t.time=new Date(NaN),r.fire("simulationtimechange",{time:null,live:!1}),ct.delete(r),Yt(e),to(r),n.textContent="Error: choose a valid solar date";return}t.time=new Date(`${o.value}T00:00:00Z`),t.time.setUTCMinutes(Number(i.value)),_r(e)}function sh(e){let t="position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);pointer-events:none;",r=d.DomUtil.create("div","sunlight-sun"),o=d.DomUtil.create("div","sunlight-moon");r.style.cssText=t+"background:#fff3bd;box-shadow:0 0 18px 7px #ffd27699;",o.style.cssText=t+"background:#dce5f2;box-shadow:0 0 10px 2px #cbdcff55;",r.setAttribute("role","img"),r.setAttribute("aria-label","Sun"),o.setAttribute("role","img"),o.setAttribute("aria-label","Moon");let i=d.DomUtil.create("div","sunlight-control");i.style.cssText="color:#222;width:min(200px,calc(100vw - 60px));font:12px/1.4 sans-serif;";let n=document.createElement("input");n.type="date",n.style.cssText="width:100%;box-sizing:border-box;",n.setAttribute("aria-label","Solar date (UTC)");let a=document.createElement("input");a.type="range",a.style.cssText="width:100%;box-sizing:border-box;margin:10px 0 4px;cursor:pointer;",a.min="0",a.max="1439",a.step="1",a.setAttribute("aria-label","Time of day (UTC)");let s=document.createElement("output");s.style.cssText="font-weight:bold;font-variant-numeric:tabular-nums;",s.setAttribute("aria-live","off");let m=document.createElement("button");m.type="button",m.textContent="Now";let f=document.createElement("div");f.className="sunlight-time",f.style.cssText="display:flex;justify-content:space-between;align-items:center;",f.append(s,m);let p=document.createElement("div");p.className="sunlight-status",p.style.marginTop="5px",p.setAttribute("role","status");let c=document.createElement("small");c.style.color="#555",i.append(n,a,f,p,c);let l={control:null,map:e,originalSky:"",container:i,sunDisc:r,moonDisc:o,date:n,slider:a,output:s,status:p,projection:{left:0,top:0}};return l.update=_r.bind(null,l),l.updateSky=Yt.bind(null,l),m.onclick=nh.bind(null,l),n.onchange=a.oninput=ah.bind(null,l),d.DomEvent.disableClickPropagation(i),d.DomEvent.disableScrollPropagation(i),l}function mh(e){e.control.live&&_r(e)}function fh(e,t){let r=Xi.get(t);if(r?.control&&r.control!==e)throw e._map=null,e.layer._map===t&&t.removeLayer(e.layer),new Error("Only one Time control can be active per map");return r||(r=sh(t),Xi.set(t,r)),r.control=e,r.originalSky=t.getContainer().style.getPropertyValue("--leaflet-sky-background"),oi.set(t,e),Hi.set(e,r),r.update(),r.timer=setInterval(mh,6e4,r),t.on("moveend",r.update),t.on("move rotate pitch resize",r.updateSky),r.container}L();L();function ph(e,t,r){let o=e.closest("label");if(r.classList.contains("layer-count"))e.hasAttribute("aria-label")||e.setAttribute("aria-label",o.textContent.trim()),r.id=`leaflet-layer-count-${d.Util.stamp(t)}`,e.setAttribute("aria-describedby",r.id),o.append(r);else if(r.classList.contains("traffic-status")){let i=o.nextElementSibling;i?.classList.contains("traffic-status-group")||(i=d.DomUtil.create("div","traffic-status-group"),i.style.cssText="display:flex;flex-wrap:wrap;gap:4px 8px;max-width:200px;margin:2px 0 6px 20px;",i.setAttribute("role","group"),i.setAttribute("aria-label","Traffic counts"),o.after(i)),i.append(r)}else o.after(r)}L();L();var Tf=d?.LayersControl?.prototype._addItem;Tf&&!d.Control.Layers&&(d.LayersControl.prototype._addItem=Fv);function Fv(e){let t=Tf.call(this,e);return t.querySelector(".leaflet-control-layers-selector").layerId=d.Util.stamp(e.layer),t}function ch(e,t,r){let o,i;for(o of e.getContainer().querySelectorAll(".leaflet-control-layers-selector"))if(i=e._layers[o.layerId],o.layerId===d.Util.stamp(t)||i instanceof d.LayerGroup&&i.hasLayer(t))return ph(o,t,r),!0;return!1}function fs(e){let t=ch(e.map,e.layer,e.element),r=e.onPlace;return r?.(t),t}var ps=[];function lh(){let e=ps.shift();e?.map.hasLayer(e.layer)&&fs(e)}function cs(){ps.push(this),queueMicrotask(lh)}function uh(){this.map.off("layeradd layerremove",cs,this);let e=this.element.parentElement;this.element.remove(),e?.classList.contains("traffic-status-group")&&!e.childElementCount&&e.remove()}function ii(e,t,r){let o={map:e._map,layer:e,element:t,onPlace:r};return o.map.on("layeradd layerremove",cs,o),e.once("remove",uh,o),fs(o)}var _t=new WeakMap;L();function dh(e){return _t.get(this).addTo(e)}L();function hh(){return d.Control.prototype.remove.call(_t.get(this))}function Pf(e){d.Util.setOptions(this,e),this.live=!0,this.layer=new d.Layer,_t.set(this.layer,this),A.set(this.layer,"time")}function gh(e){return fh(this,e)}L();function kf(e,t){e.classList.toggle("leaflet-control",!t),e.classList.toggle("leaflet-bar",!t),e.style.background=t?"":"#fff",e.style.padding=t?"2px 0 6px 20px":"8px",e.style.margin=t?"0":""}function yh(e){d.Control.prototype.addTo.call(this,e);let t=this.getContainer();return this.layer._map===e?ii(this.layer,t,kf.bind(null,t)):kf(t,!1),this}L();function xh(){return this._map?.hasLayer(this.layer)?(this._map.removeLayer(this.layer),this):d.Control.prototype.remove.call(this)}function vh(e){let{map:t,timer:r,sunDisc:o,moonDisc:i}=e,n=Xi.get(t);clearInterval(r),oi.delete(t),t.fire("simulationtimechange",{time:null,live:!1}),t.off("moveend",e.update),t.off("move rotate pitch resize",e.updateSky),ct.delete(t),Yt(e),o.remove(),i.remove(),to(t),n===e&&(n.control=null)}function wh(){let e=Hi.get(this);e&&(vh(e),Hi.delete(this))}es();var ro=class extends gt(d.Control){static initHooks=!0;static defaultOptions={position:"bottomright"};constructor(t){super(t),d.version.startsWith("2.")&&(Pf.call(this,t),this.callInitHooks())}};Object.assign(ro.prototype,{onAdd:gh,onRemove:wh,addTo:yh,remove:xh});d.version.startsWith("1.")&&(ro.prototype.options=Object.assign(Object.create(d.Control.prototype.options),ro.defaultOptions),ro.prototype.initialize=Pf);d.Control.Time=ro;L();L();var Jt=new WeakMap;var ls=new WeakMap;L();var Me=new WeakMap;var X=new WeakMap;var Er=new WeakMap;var Or=new WeakMap;var Y=new WeakMap;var Qe=new WeakMap;var Ze=new WeakMap;var zr=new WeakMap;var ne=new WeakMap;L();var us=new WeakMap;var Ki=new WeakMap;var Kt=new WeakSet;var Sf=["rootDirectoryOffset","rootDirectoryLength","jsonMetadataOffset","jsonMetadataLength","leafDirectoryOffset","leafDirectoryLength","tileDataOffset","tileDataLength","numAddressedTiles","numTileEntries","numTileContents"];var Cf=["clustered","internalCompression","tileCompression","tileType","minZoom","maxZoom"];var _f=["minLon","minLat","maxLon","maxLat"];function Lh(e){let t=e.byteLength>=127?new DataView(e):null;if(!t||t.getUint32(0,!0)!==1767132496||t.getUint32(4,!0)!==57894252)throw new Error("Expected a PMTiles v3 archive");let r={},o;for(o=0;o<Sf.length;o++)r[Sf[o]]=Number(t.getBigUint64(8+o*8,!0));for(o=0;o<Cf.length;o++)r[Cf[o]]=t.getUint8(96+o);for(o=0;o<_f.length;o++)r[_f[o]]=t.getInt32(102+o*4,!0)/1e7;return r.centerZoom=t.getUint8(118),r.centerLon=t.getInt32(119,!0)/1e7,r.centerLat=t.getInt32(123,!0)/1e7,r}var ni=new WeakMap;async function ai(e,t,r,o){if(o?.throwIfAborted(),!Number.isSafeInteger(t)||!Number.isSafeInteger(r)||t<0||r<=0||!Number.isSafeInteger(t+r))throw new Error("Invalid PMTiles byte range");let i=await fetch(ne.get(e),{headers:{Range:`bytes=${t}-${t+r-1}`},signal:o});if(!i.ok)throw new Error(`Unable to read PMTiles: HTTP ${i.status}`);let n=i.headers.get("ETag");if(ni.get(e)&&n!==ni.get(e))throw new Error("PMTiles archive changed; recreate the layer");n&&ni.set(e,n);let a=await i.arrayBuffer();if(i.status===200)a=a.slice(t,t+r);else if(i.status!==206||!i.headers.get("Content-Range")?.startsWith(`bytes ${t}-${t+r-1}/`))throw new Error("Invalid PMTiles range response");if(a.byteLength!==r)throw new Error("Truncated PMTiles range");return a}function oo(e){if(!Kt.has(e))return e.getHeader();if(e.options.archive&&e.options.archive!==e)return oo(e.options.archive);let t=Ki.get(e);return t||(t=ai(e,0,127).then(Lh),Ki.set(e,t)),t}var yt=new WeakMap;var Et=new WeakMap;V();function ds(e,t=!0){let r={enabled:t,loaded:0,skipped:0,pending:0,errors:[]},o;for(o of X.get(e).values())o.error?r.errors.push(o.error):o.done||r.pending++,r.loaded+=o.buildings??0,r.skipped+=o.skipped??0;e.fire("progress",r)}function bh(e){let{backend:t,area:r}=e;if(!e.positions.length){r.mesh=null,r.buildings=0,r.skipped=e.skipped,r.done=!0;return}let o=w.get(t).device,i=e.preparedGeometry,n={position:{size:3,data:i.positions},normal:{size:3,data:i.normals},color:{size:3,data:i.colors}};i.instanceOffsets&&(n.instanceOffset={size:4,data:i.instanceOffsets}),t.options.nightLight&&(n.uv={size:2,data:i.uvs});let a,s;for(a in n)s=n[a],s.count=s.data.length/s.size,s.buffer=o.createBuffer({size:Math.max(4,s.data.byteLength),usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),o.queue.writeBuffer(s.buffer,0,s.data);let m={device:o,bounds:i.bounds,attributes:n,drawRange:{start:0,count:n.position.count}};r.mesh={...Ae(),device:o,geometry:m,program:je(t,{instanced:!!i.instanceOffsets,vertexColors:!0,roofTexture:t.options.roofTexture,wallTexture:t.options.wallTexture,nightLight:!!t.options.nightLight,alphaMode:t.options.nightLight?"BLEND":void 0,doubleSided:!!t.options.nightLight}),id:Mt.value++,renderOrder:0,fadeDuration:250,extras:{featureFaces:e.featureFaces,lights:e.lights}},r.buildings=e.featureFaces.length,r.skipped=e.skipped,r.done=!0,q(r.mesh,M.get(t)),E(t)}var Mh=new TextDecoder;function Bh(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||e>26||t<0||r<0||t>=2**e||r>=2**e)throw new Error("Invalid PMTiles tile coordinates");let o=(4**e-1)/3,i=2**e,n,a,s,m;for(n=i/2;n>=1;n/=2)a=t&n?1:0,s=r&n?1:0,o+=n*n*(3*a^s),s||(a&&(t=i-1-t,r=i-1-r),m=t,t=r,r=m);return o}var Th={bytes:null,cursor:0};function si(e){let{bytes:t}=e,r=0,o,i;for(o=1;o<=2**49;o*=128){if(e.cursor>=t.length)throw new Error("Truncated PMTiles directory");if(i=t[e.cursor++],r+=(i&127)*o,!Number.isSafeInteger(r))throw new Error("Invalid PMTiles directory integer");if(i<128)return r}throw new Error("Invalid PMTiles directory integer")}function Ph(e){let t=Th,r=new Uint8Array(e);t.bytes=r,t.cursor=0;try{let o=si(t);if(o>(r.length-t.cursor)/4)throw new Error("Invalid PMTiles directory count");let i=new Array(o),n=0,a,s,m;for(a=0;a<o;a++){if(n+=si(t),!Number.isSafeInteger(n)||a&&n<=i[a-1].tileId)throw new Error("Invalid PMTiles directory tile IDs");i[a]={tileId:n,runLength:0,length:0,offset:0}}for(s of i)s.runLength=si(t);for(s of i)if(s.length=si(t),!s.length)throw new Error("Invalid PMTiles directory length");for(a=0;a<i.length;a++){if(s=i[a],m=si(t),!m&&!a)throw new Error("Invalid PMTiles directory offset");s.offset=m?m-1:i[a-1].offset+i[a-1].length}if(t.cursor!==r.length)throw new Error("Trailing PMTiles directory data");return i}finally{t.bytes=null,t.cursor=0}}async function hs(e,t){if(t===1)return e;if(t!==2)throw new Error(`Unsupported PMTiles compression: ${t}`);let r=new Blob([e]),o=new DecompressionStream("gzip");return new Response(r.stream().pipeThrough(o)).arrayBuffer()}async function kh(e,t,r,o){return Ph(await hs(await ai(e,t,r),o))}async function Sh(e,t,r,o){let i=Or.get(e),n=`${t}:${r}`;i.has(n)||(i.size>=32&&i.delete(i.keys().next().value),i.set(n,kh(e,t,r,o)));let a=i.get(n);try{return await a}catch(s){throw i.get(n)===a&&i.delete(n),s}}function Ch(e,t){let r=0,o=e.length-1,i;for(;r<=o;)i=r+o>>1,e[i].tileId<=t?r=i+1:o=i-1;return e[o]}async function _h(e,t,r,o,i){if(o-r.tileId>=r.runLength)return;if(r.offset+r.length>t.tileDataLength)throw new Error("PMTiles tile outside data section");let n=await hs(await ai(e,t.tileDataOffset+r.offset,r.length,i),t.tileCompression);return i?.throwIfAborted(),{data:n}}async function Eh(e,t,r,o){let i=t.rootDirectoryOffset,n=t.rootDirectoryLength,a=-1,s=-1,m=-1,f,p,c,l;for(f=0;f<4;f++){if(i===a||i===s||i===m)throw new Error("Cyclic PMTiles directory");if(f===0?a=i:f===1?s=i:f===2&&(m=i),p=await Sh(e,i,n,t.internalCompression),o?.throwIfAborted(),c=Ch(p,r),!c)return;if(c.runLength)return l=await _h(e,t,c,r,o),l;if(c.offset+c.length>t.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");i=t.leafDirectoryOffset+c.offset,n=c.length}throw new Error("PMTiles directory depth exceeds four levels")}async function io(e,t,r,o,i){if(!Kt.has(e))return e.getZxy(t,r,o,i);if(e.options.archive&&e.options.archive!==e)return io(e.options.archive,t,r,o,i);let n=Bh(t,r,o);i?.throwIfAborted();let a=await oo(e);if(i?.throwIfAborted(),!(t<a.minZoom||t>a.maxZoom))return Eh(e,a,n,i)}async function Oh(e,t){if(Y.get(e)){let{data:o,url:i}=e.options;if(o!==void 0&&i)throw new Error("GeoJSON source requires either data or url");if(o!==void 0)return o;if(!i)throw new Error("GeoJSON source requires either data or url");let n=new URL(i,document.baseURI),a=await fetch(n,{signal:t.request.signal});if(!a.ok)throw new Error(`Unable to load GeoJSON: HTTP ${a.status}`);return a.json()}let r=await io(e,t.coords.z,t.coords.x,t.coords.y,t.request.signal);return r?JSON.parse(Mh.decode(r.data)):{type:"FeatureCollection",features:[]}}V();function zh(e,t,r){let o=r.options.crs,i=o.project(D.get(e));return{backend:e,area:t,map:r,crs:o,origin:i,metres:Math.cos(D.get(e).lat*B),jobs:[],featureFaces:[],skipped:0}}var gs=new URL("leaflet-city-mapper-worker.js",document.currentScript?.src||document.baseURI).href;function Ah(e,t){if(t.type==="abort")e.reject(e.signal.reason);else if(t.type==="error")e.reject(new Error(`Geometry worker failed: ${t.message}`));else if(t.type==="messageerror")e.reject(new Error("Unable to receive geometry worker buffers"));else if(t.data?.error){let r=new Error(t.data.error.message);r.name=t.data.error.name,e.reject(r)}else e.resolve(t.data)}function Rh(e,t,r){if(e.resolve=t,e.reject=r,e.onEvent=Ah.bind(null,e),e.worker.addEventListener("message",e.onEvent),e.worker.addEventListener("error",e.onEvent),e.worker.addEventListener("messageerror",e.onEvent),e.signal.addEventListener("abort",e.onEvent,{once:!0}),e.signal.aborted){r(e.signal.reason);return}e.worker.postMessage(e.input)}var Ef=new WeakMap;function Ih(e){e.closed=!0;let t;for(t of e.entries)t.closed=!0,t.worker.terminate(),t.task&&t.task.reject(new DOMException("Map removed","AbortError"));e.entries.clear(),e.idle.length=0}function ys(e,t){if(typeof Worker>"u")throw new Error("Web Workers are required to prepare source geometry");let r=e,o,i;if(globalThis.location){let a=new URL(e,location.href);(a.protocol==="https:"||a.protocol==="http:")&&a.origin!==location.origin&&(o=URL.createObjectURL(new Blob([`import ${JSON.stringify(a.href)};`],{type:"text/javascript"})),r=o)}try{i=new Worker(r,{type:"module"})}finally{!i&&o&&URL.revokeObjectURL(o)}let n={url:e,pool:t,worker:i,blobUrl:o};return t&&t.entries.add(n),n}function Dh(e,t){let r=e&&Ef.get(e);e&&!r&&(r={entries:new Set,idle:[],closed:!1},Ef.set(e,r),e.once("unload",Ih.bind(null,r)));let o,i;if(r){if(r.closed)throw new DOMException("Map removed","AbortError");for(i=0;i<r.idle.length;i++)if(r.idle[i].url===t)return o=r.idle[i],r.idle.splice(i,1),o;o=r.idle.pop(),o&&(o.closed=!0,o.worker.terminate(),r.entries.delete(o))}return ys(t,r)}async function mi(e,t,r,o=new AbortController().signal){o.throwIfAborted();let i=Dh(e,t||gs),{worker:n,pool:a}=i,s={worker:n,signal:o,input:r};i.task=s;let m=!1;try{let f=await new Promise(Rh.bind(null,s));return m=!0,f}finally{n.removeEventListener("message",s.onEvent),n.removeEventListener("error",s.onEvent),n.removeEventListener("messageerror",s.onEvent),o.removeEventListener("abort",s.onEvent),i.task=null,m&&a&&!a.closed&&!o.aborted?a.idle.push(i):(i.closed||n.terminate(),a&&a.entries.delete(i)),i.blobUrl&&(URL.revokeObjectURL(i.blobUrl),i.blobUrl=null)}}async function Gh(e,t){try{let r=await mi(e.map||e.backend._map,e.backend.options.workerUrl,{jobs:e.jobs,nightLight:!!e.backend.options.nightLight},t),o;for(o=0;o<r.ranges.length;o++)Object.assign(e.featureFaces[o],r.ranges[o]);e.positions=r.positions,e.uvs=r.uvs,e.lights=r.lights,e.preparedGeometry=r}finally{e.jobs=null}}function Uh(e,t){let r=e?.geometry,o=r?.type==="Point";if(t&&!o)throw new Error("Night lights require Point geometry");if(r?.type!=="Polygon"&&r?.type!=="MultiPolygon"&&!o)throw new Error("Unsupported GeoJSON geometry");let i=o?r.coordinates:r.type==="Polygon"?r.coordinates[0]?.[0]:r.coordinates[0]?.[0]?.[0];if(!Number.isFinite(i?.[0])||!Number.isFinite(i?.[1]))throw new Error("Invalid GeoJSON coordinates");return i}function Nh(e,t){let r=e.options.style(t);if(r===null)return null;if(!r||typeof r!="object")throw new Error("style must return an extrusion style or null");let{top:o,bottom:i=0}=r;if(!Number.isFinite(o)||!Number.isFinite(i)||i<0||o<=i)throw new Error("Invalid extrusion heights: expected top > bottom >= 0");return r}L();function Fh(e,t,r){let{backend:o,crs:i,origin:n,metres:a,map:s}=e,m=new d.LatLng(r,t),f=i.project(m),p=we(s,m),c=M.get(o);return{x:(f.x-n.x)*a,y:(f.y-n.y)*a,ground:Number.isFinite(p)&&Number.isFinite(c.position[1])?p-c.position[1]:0}}L();function jh(e,t){let{backend:r,crs:o,origin:i,metres:n,map:a}=e;if(t.length<4)throw new Error("Invalid GeoJSON polygon ring");let s=[],m=M.get(r),f,p,c,l,u,h;for(f=0;f<t.length-1;f++){if(p=t[f][0],c=t[f][1],!Number.isFinite(p)||!Number.isFinite(c))throw new Error("Invalid GeoJSON coordinates");l=new d.LatLng(c,p),u=o.project(l),h=we(a,l),s.push({x:(u.x-i.x)*n,y:(u.y-i.y)*n,ground:Number.isFinite(h)&&Number.isFinite(m.position[1])?h-m.position[1]:0})}return s}function Wh(e,t){let r=t.type==="Polygon"?[t.coordinates]:t.type==="MultiPolygon"?t.coordinates:[],o=[],i,n,a;for(i of r){if(!i.length)throw new Error("Empty GeoJSON polygon");a=[];for(n of i)a.push(jh(e,n));o.push(a)}return o}function $h(e,t,r,o,i,n){let a=t.geometry,s=Wh(e,a),m=a.type==="Point"?Fh(e,r,o):null,f=e.backend.options.nightLight,p=m?Bt(i.color??(f?void 0:5210683)):n,c=m&&!f?Bt(i.trunkColor??7491898):null;e.jobs.push({point:m,polygons:s,baseColor:{r:n.r,g:n.g,b:n.b},support:t.properties?.cod_ouvrag||`${r},${o}`,style:{top:i.top,bottom:i.bottom??0,color:{r:p.r,g:p.g,b:p.b},trunkColor:c?{r:c.r,g:c.g,b:c.b}:void 0,trunkRadius:i.trunkRadius,crownRadius:i.crownRadius,crownBottom:i.crownBottom,crownShape:i.crownShape,poleRadius:i.poleRadius,lightRadius:i.lightRadius,lightFlux:i.lightFlux}})}L();function Vh(e,t,r,o){if(!t)return!0;let i=e.project(new d.LatLng(o,r),t.z);return Math.floor(i.x/256)===t.x&&Math.floor(i.y/256)===t.y}function Zh(e,t){let{backend:r,area:o,map:i}=e,n=o.coords,a=Uh(t,r.options.nightLight),s=t.geometry,m=a[0],f=a[1];if(!Vh(i,n,m,f))return;let p=Nh(r,t);if(p===null){e.skipped++;return}let{color:c=14267276}=p,l=Bt(c);$h(e,t,m,f,p,l),e.featureFaces.push({id:t.id??t.properties?.objectid??JSON.stringify(s),properties:t.properties,baseColor:l,polygon:s.type==="Polygon"||s.type==="MultiPolygon"})}async function qh(e,t,r){let o=performance.now()+4,i;for(i of r){if(t.request.signal.aborted)return;if(performance.now()>=o){if(await new Promise(requestAnimationFrame),t.request.signal.aborted)return;o=performance.now()+4}Zh(e,i)}}async function Hh(e,t,r){try{if(await new Promise(requestAnimationFrame),await ae.get(r),t.request.signal.aborted)return;let o=await Oh(e,t);if(t.request.signal.aborted)return;if(o?.type!=="FeatureCollection"||!Array.isArray(o.features))throw new Error("Invalid GeoJSON response");if(Y.get(e)&&typeof e.options.style!="function")throw new Error("style must be a function");if(e.options.worker===!1)throw new Error("worker: false is no longer supported; GeoJSON geometry requires Web Workers");let i=zh(e,t,r);if(await qh(i,t,o.features),t.request.signal.aborted||(await Gh(i,t.request.signal),t.request.signal.aborted))return;bh(i)}catch(o){t.request.signal.aborted||(t.error=o.message,e.fire("error",{error:o}))}finally{Qe.set(e,Qe.get(e)-1),Qi(e,r)}}function xs(e,t){return e.distance-t.distance}function Xh(e,t){let r=[],o,i,n;for(o of e)for(i of X.get(o).values())i.started||i.request.signal.aborted||(n=i.coords&&t.project(t.getCenter(),i.coords.z).divideBy(256),r.push({layer:o,area:i,distance:n?Math.hypot(i.coords.x+.5-n.x,i.coords.y+.5-n.y)/2**i.coords.z:0}));return r.sort(xs),r}function Qi(e,t=e._map){let r=t&&ee.get(t);if(!r||!F.has(r))return;let o=[],i,n,a;for(i of F.get(r))Number.isFinite(Qe.get(i))&&X.get(i)&&(ne.get(i)||Y.get(i))&&o.push(i);let s=Xh(o,t),m=0;for(i of o)m+=Qe.get(i);for({layer:a,area:n}of s){if(m>=4)break;Qe.get(a)>=2||(n.started=!0,Qe.set(a,Qe.get(a)+1),m++,Hh(a,n,t))}for(i of o)ds(i)}var mt=new WeakMap;var _e=new WeakMap;function Ot(e,t){t?.model&&(t=null),!(mt.get(e)?.mesh===t?.mesh&&mt.get(e)?.vertexStart===t?.vertexStart)&&(mt.get(e)&&(mt.get(e).mesh.highlight=null),mt.set(e,t),t&&(t.mesh.highlightRange[0]=t.vertexStart,t.mesh.highlightRange[1]=t.vertexEnd,t.mesh.highlight=t.mesh.highlightRange),E(e))}var Ie=new WeakMap;var Ar=new WeakMap;var De=new WeakMap;function zt(e,t,r){let o=De.get(e);if(!o)return;if(t){o.replaceChildren(e.options.tooltip(t)),o.hidden=!1;let a=Ie.get(e).getBoundingClientRect(),s=r.clientX-a.left,m=r.clientY-a.top;o.style.left=`${s+o.offsetWidth+16>a.width?s-o.offsetWidth-12:s+12}px`,o.style.top=`${m+o.offsetHeight+16>a.height?m-o.offsetHeight-12:m+12}px`}else o.hidden=!0;let i=R.get(e),n;if(i){let a=!1;for(n of F.get(i))if(De.get(n)&&!De.get(n).hidden){a=!0;break}a?(Ar.get(i)===void 0&&Ar.set(i,Ie.get(e).style.cursor),Ie.get(e).style.cursor="pointer"):Ar.get(i)!==void 0&&(Ie.get(e).style.cursor=Ar.get(i),Ar.delete(i))}}function no(e,t){t.request.abort();let r;if(t.mesh){mt.get(e)?.mesh===t.mesh&&(Ot(e,null),_e.set(e,null),zt(e,null)),q(t.mesh,null),E(e);let o=t.mesh.geometry;for(r of Object.values(o.attributes))r.buffer.destroy();t.mesh.program.pipelineCache.clear()}}function Yh(e,t){return e.distance-t.distance}function ao(e){if(!e._map||!R.get(e))return;if(Y.get(e)){X.get(e).has("geojson")||X.get(e).set("geojson",{request:new AbortController}),Qi(e);return}if(!G.get(e))return;let t=G.get(e).minZoom,r=e._map.project(e._map.getCenter(),t).divideBy(256).floor(),o=e._map.getBounds(),i=e._map.project(o.getNorthWest(),t).divideBy(256).floor(),n=e._map.project(o.getSouthEast(),t).divideBy(256).floor(),a=e._map.project([G.get(e).maxLat,G.get(e).minLon],t).divideBy(256).floor(),s=e._map.project([G.get(e).minLat,G.get(e).maxLon],t).divideBy(256).floor(),m=new Map,f,p,c,l,u;for(f=Math.max(0,i.x-1,a.x);f<=Math.min(2**t-1,n.x+1,s.x);f++)for(p=Math.max(0,i.y-1,a.y);p<=Math.min(2**t-1,n.y+1,s.y);p++)m.set(`${f}/${p}`,{z:t,x:f,y:p});for([c,l]of X.get(e))m.has(c)||(no(e,l),X.get(e).delete(c));let h=[];for([c,u]of m)u.distance=Math.hypot(u.x+.5-r.x,u.y+.5-r.y)/2**t,h.push(u);h.sort(Yh);for(u of h)c=`${u.x}/${u.y}`,X.get(e).has(c)||X.get(e).set(c,{coords:u,request:new AbortController});Qi(e)}function fi(e){if(!M.get(e)||!D.get(e))return;Et.get(e)==null&&Et.set(e,M.get(e).position[1]);let t=fe.get(e._map),r=t&&ur(t,D.get(e)),o=Number.isFinite(r)?e.options.terrainOffset??0:0;M.get(e).position[1]=Et.get(e)+(r??0)+o}function Jh(e,t){e.attributes.index?.data instanceof Uint8Array&&(e.attributes.index.data=new Uint16Array(e.attributes.index.data));let r,o,i;for(r in e.attributes)o=e.attributes[r],o.size||=1,o.count=o.data.length/o.size,o.indexFormat=o.data instanceof Uint32Array?"uint32":"uint16",i=o.buffer,o.buffer=t.createBuffer({size:Math.max(4,o.data.byteLength),usage:r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),t.queue.writeBuffer(o.buffer,0,o.data),i?.destroy();e.device=t,e.drawRange.count=e.attributes.index?.count||e.attributes.position.count}function Kh(e,t){let r,o;for(r in e)r!=="baseTexture"&&r!=="metalTexture"&&r!=="emissiveTexture"&&r!=="occlusionTexture"||(o=e[r],!(!o||o.device===t)&&(o.device=t,o.texture=t.createTexture({size:[o.image.width,o.image.height],format:o.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=t.createSampler(o.samplerOptions),o.uploaded=null))}function Qh(e,t){let r=R.get(t),o;if(e.geometry&&e.geometry.device!==w.get(r).device){let i=e.geometry,n=e.program._layerMaterial,a=w.get(r).device;Jh(i,a),e.bindGroup=null,e.boundTextures?e.boundTextures.length=0:e.boundTextures=[],Kh(n,a),e.program.pipelineCache.clear(),e.program=je(t,n),e.device=a}e.texture&&e.texture.device!==w.get(r).device&&(o=e.texture,o.device=w.get(r).device,o.texture=w.get(r).device.createTexture({size:[e.texture.image.width,e.texture.image.height],format:e.texture.format,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),o.sampler=w.get(r).device.createSampler(o.samplerOptions),o.uploaded=null)}var pi=new WeakMap;function eg(e){let t=e.getContainer();if(t.querySelector(".leaflet-webgpu-warning"))return;let r=document.createElement("div");r.className="leaflet-webgpu-warning",r.setAttribute("role","alert"),r.style.cssText="position:absolute;z-index:1000;top:50%;left:50%;transform:translate(-50%,-50%);max-width:calc(100% - 32px);box-sizing:border-box;padding:12px 16px;border:1px solid #c98b24;border-radius:6px;background:#fff8e6;box-shadow:0 3px 12px #0005;color:#30251d;font:14px/1.5 sans-serif;text-align:center;pointer-events:auto",r.append("WebGPU is not available in this browser or device. ");let o=document.createElement("a");o.href="https://developer.mozilla.org/en-US/docs/Web/API/WebGPU_API#browser_compatibility",o.target="_blank",o.rel="noopener noreferrer",o.textContent="Learn more",r.append(o),t.append(r)}function Rr(e,t,r){throw eg(r),yt.get(t).reject(e),ee.delete(r),e}async function tg(e,t){let r;try{r=await navigator.gpu.requestAdapter()}catch(o){Rr(o,e,t)}return r||Rr(new Error("Unable to acquire a WebGPU adapter"),e,t),r}async function rg(e,t,r){try{return await e.requestDevice()}catch(o){Rr(o,t,r)}}function og(e){let t=pi.get(e.currentTarget),r=ee.get(t);if(w.get(r)?.device!==e.currentTarget||!F.get(r))return;let o;for(o of F.get(r))o.fire("error",{error:e.error})}function ig([e,t]){let r=pi.get(t),o=ee.get(r);if(!o||w.get(o)?.device!==t)return;let i=new Error(`WebGPU device lost: ${e.message||e.reason}`),n;for(n of F.get(o))n.fire("error",{error:i})}function ng(){return{position:[0,0,0],up:[0,1,0],target:[0,0,0],x:[0,0,0],y:[0,0,0],z:[0,0,0],viewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],projectionViewMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],viewTransform:new DOMMatrix,projectionTransform:new DOMMatrix,projectionViewTransform:new DOMMatrix,fov:45,aspect:1,near:.1,far:1e4}}var ci=new Float32Array(20);ci[0]=ci[5]=ci[10]=ci[15]=1;function ag(e,t){let r=w.get(e),o=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"depth"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"comparison"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"read-only-storage"}}]}),i=t.createBuffer({size:80,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),n=t.createSampler({compare:"less-equal",minFilter:"linear",magFilter:"linear"}),a=t.createBuffer({size:32,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});r.sunlight={layout:o,buffer:i,sampler:n,lights:a,size:0},t.queue.writeBuffer(i,0,ci),Vn(e,1),r.roofFallbackTexture={device:t,texture:t.createTexture({size:[1,1],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:t.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),image:null,format:"rgba8unorm",srgb:!1,uploaded:null}}var so=new WeakMap;var vs=[];function sg(){let e=vs.shift();so.set(e,!1),!(R.get(e)!==e||!w.get(e))&&(e._map._animatingZoom?E(e):vr(e))}function en(){let e=this;so.get(e)||(so.set(e,!0),vs.push(e),queueMicrotask(sg))}var li=new WeakMap;function tn(){li.set(this,null)}var ws=[];function mg(){let e=ws.shift();R.get(e)===e&&w.get(e)&&vr(e)}function rn(e){let t=this._map;e&&!Xe.get(this)&&(Xe.set(this,{from:t.getCenter(),zoom:t.getZoom(),to:e.center,targetZoom:e.zoom,start:performance.now()}),t.getContainer().classList.add("leaflet-camera-zoom")),ws.push(this),queueMicrotask(mg)}function on(){let e=this,t;if(ge.get(e))for(t of ge.get(e).keys())t.finish();ge.set(e,null),Xe.set(e,null),ae.delete(e._map),e._map.getContainer().classList.remove("leaflet-camera-zoom"),Pn(e._map),li.set(e,null),E(e)}function fg(e,t,r){cr.set(e,null),r.className="leaflet-3d",r.style.cssText="position:absolute;top:0;left:0;z-index:1;pointer-events:none",r.setAttribute("role","img"),r.setAttribute("aria-label",e.options.ariaLabel??"3D scene"),t.getPane("mapPane").before(r),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",en,e),t.on("zoomstart",tn,e),t.on("zoomanim",rn,e),t.on("zoomend",on,e)}async function pg(e,t){let r=document.createElement("canvas");navigator.gpu||Rr(new Error("Layer3D requires WebGPU"),e,t);let o=await tg(e,t),i=await rg(o,e,t);pi.set(i,t),i.addEventListener("uncapturederror",og),Promise.all([i.lost,Promise.resolve(i)]).then(ig);let n=r.getContext("webgpu");n||(i.destroy(),Rr(new Error("Unable to create a WebGPU canvas context"),e,t));let a=navigator.gpu.getPreferredCanvasFormat();n.configure({device:i,format:a,alphaMode:"premultiplied"}),t.getContainer().querySelector(".leaflet-webgpu-warning")?.remove(),R.set(e,e),F.set(e,new Set),oe.set(e,D.get(e)),re.set(e,Ae()),Q.set(e,ng()),w.set(e,{device:i,context:n,format:a,canvas:r,dpr:Math.min(window.devicePixelRatio,2)}),ag(e,i),fg(e,t,r)}async function ui(e,t){let r=ee.get(t);yt.get(r)&&await yt.get(r).promise,r||(r=e,yt.set(e,Promise.withResolvers()),yt.get(e).promise.catch(Ke),ee.set(t,r),await pg(e,t),yt.get(e).resolve(),yt.delete(r),vr(r),ee.set(t,r));let o=t.options.crs.project(oe.get(r)),i=t.options.crs.project(D.get(e)),n=Math.cos(oe.get(r).lat*B);Et.get(e)==null&&Et.set(e,M.get(e).position[1]),M.get(e).position[0]=(i.x-o.x)*n,M.get(e).position[1]=Et.get(e),M.get(e).position[2]=-(i.y-o.y)*n,fi(e),M.get(e).scale.fill(n/Math.cos(D.get(e).lat*B)),R.set(e,r),w.set(e,w.get(r)),re.set(e,re.get(r)),Q.set(e,Q.get(r)),F.get(r).add(e),q(M.get(e),re.get(r)),qt(M.get(e),Qh,e),E(r),(G.get(e)&&A.get(e)!=="raster"||Y.get(e))&&ao(e)}var qe=new WeakMap;V();L();function cg(e,t){let r=new Float32Array(e.length),o,i,n,a,s,m,f,p,c,l,u,h,x,y,g,v;for(o=0;o<(t?.length||e.length/3);o+=3)for(i=t?t[o]:o,n=t?t[o+1]:o+1,a=t?t[o+2]:o+2,s=e[n*3]-e[i*3],m=e[n*3+1]-e[i*3+1],f=e[n*3+2]-e[i*3+2],p=e[a*3]-e[i*3],c=e[a*3+1]-e[i*3+1],l=e[a*3+2]-e[i*3+2],h=m*l-f*c,x=f*p-s*l,y=s*c-m*p,u=0;u<3;u++)g=u===0?i:u===1?n:a,r[g*3]+=h,r[g*3+1]+=x,r[g*3+2]+=y;for(o=0;o<r.length;o+=3)for(v=Math.hypot(r[o],r[o+1],r[o+2])||1,u=0;u<3;u++)r[o+u]/=v;return r}function Of(e,t){e.geometry?.attributes.position&&t.push(e);let r;for(r of e.children)Of(r,t)}function di(e,t){if(!qe.get(e))return;let r=[];Of(qe.get(e),r);let o,i,n,a,s,m,f,p,c,l,u,h,x,y,g,v,T,P,k,z;if(!ke.get(t)||!e.options.terrainConform){for(o of r)i=o.geometry._terrainBasePositions,i&&(n=o.geometry,a=n.attributes.position,a.data.set(i),o.device.queue.writeBuffer(a.buffer,0,i),s=n._terrainBaseNormals,s&&(n.attributes.normal.data.set(s),o.device.queue.writeBuffer(n.attributes.normal.buffer,0,s)),Oe(n));return}Se(M.get(e));let $=e._map,U=$.options.crs,N=U.project(oe.get(R.get(e))),se=Math.cos(oe.get(R.get(e)).lat*B),Ue=U.scale(ve.get(t));for(o of r){for(n=o.geometry,m=n.attributes.position,n._terrainBasePositions||=m.data.slice(),f=n.attributes.normal,n._terrainBaseNormals||=f.data.slice(),m.data.set(n._terrainBasePositions),p=o.worldMatrix,c=new DOMMatrix(p).inverse().toFloat64Array(),l=0;l<m.data.length;l+=3)u=m.data[l],h=m.data[l+1],x=m.data[l+2],y=p[1]*u+p[5]*h+p[9]*x+p[13],g=Math.max(0,Math.min(1,1-(y-M.get(e).position[1])/8)),g&&(v=p[0]*u+p[4]*h+p[8]*x+p[12],T=p[2]*u+p[6]*h+p[10]*x+p[14],P=U.transformation.transform(new d.Point(N.x+v/se,N.y-T/se),Ue),k=ur(t,P),Number.isFinite(k)&&(z=(k-y)*g,m.data[l]+=c[4]*z,m.data[l+1]+=c[5]*z,m.data[l+2]+=c[6]*z));o.device.queue.writeBuffer(m.buffer,0,m.data),f.data.set(cg(m.data,n.attributes.index?.data)),o.device.queue.writeBuffer(f.buffer,0,f.data),Oe(n)}E(e)}function lg(e){return{addressModeU:e?.wrapS===33071?"clamp-to-edge":e?.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e?.wrapT===33071?"clamp-to-edge":e?.wrapT===33648?"mirror-repeat":"repeat",magFilter:e?.magFilter===9728?"nearest":"linear",minFilter:e?.minFilter===9728||e?.minFilter===9984||e?.minFilter===9986?"nearest":"linear"}}function nn(e,t,r=!1){let{backend:o,description:i,images:n,textures:a}=e;if(!t)return null;if((t.texCoord||0)!==0||t.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");let s=w.get(o).device,m=`${t.index}:${r}`;if(!a.has(m)){let f=i.textures[t.index],p=i.samplers?.[f.sampler],c=n[f.source],l=r?"rgba8unorm-srgb":"rgba8unorm",u=lg(p);a.set(m,{device:s,texture:s.createTexture({size:[c.width,c.height],format:l,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(u),samplerOptions:u,format:l,srgb:r,image:c,flipY:!1,uploaded:null})}return a.get(m)}function ug(e,t){let{backend:r}=e,o=t.pbrMetallicRoughness;return{color:o?.baseColorFactor?o.baseColorFactor.slice(0,3):[1,1,1],opacity:o?.baseColorFactor?.[3]??1,metallic:o?.metallicFactor??1,roughness:o?.roughnessFactor??1,baseTexture:nn(e,o?.baseColorTexture,!0),metalTexture:nn(e,o?.metallicRoughnessTexture),emissiveTexture:nn(e,t.emissiveTexture,!0),occlusionTexture:nn(e,t.occlusionTexture),emissive:t.emissiveFactor||[0,0,0],occlusionStrength:t.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||t.alphaMode||"OPAQUE",alphaCutoff:t.alphaCutoff??.5,doubleSided:t.doubleSided}}function dg(e,t,r){let o={backend:e,description:t,images:r,textures:new Map,materials:[],active:new Set,resources:[]},i;for(i of t.materials||hr)o.materials.push(ug(o,i));return o}var hg=[0,0,0,1];var gg=[1,1,1];var yg=[0,0,0];function xg(e){if(e.matrix)return Array.from(e.matrix);let[t,r,o,i]=e.rotation||hg,[n,a,s]=e.scale||gg;return[(1-2*(r*r+o*o))*n,2*(t*r+o*i)*n,2*(t*o-r*i)*n,0,2*(t*r-o*i)*a,(1-2*(t*t+o*o))*a,2*(r*o+t*i)*a,0,2*(t*o+r*i)*s,2*(r*o-t*i)*s,(1-2*(t*t+r*r))*s,0,...e.translation||yg,1]}function vg(e,t,r){let o=e.materials[t.material]||{color:[1,1,1],metallic:1};if((o.baseTexture||o.metalTexture||o.emissiveTexture||o.occlusionTexture)&&!r.uv)throw new Error("Textured model mesh requires UV coordinates");let i=je(e.backend,o);e.resources.push(i);let n=w.get(e.backend).device,a,s;for([a,s]of Object.entries(r))s.size||=1,s.count=s.data.length/s.size,s.indexFormat=s.data instanceof Uint32Array?"uint32":"uint16",s.buffer=n.createBuffer({size:Math.max(4,s.data.byteLength),usage:a==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),n.queue.writeBuffer(s.buffer,0,s.data);let m={device:n,attributes:r,drawRange:{start:0,count:r.index?.count||r.position.count}};return e.resources.push(m),{device:n,geometry:m,program:i}}function zf(e,t){let{backend:r,description:o,active:i}=e;if(i.has(t))throw new Error("Cyclic glTF nodes");let n=o.nodes[t];if(!n)throw new Error("Invalid glTF node");i.add(t);let a={...Ae(),name:n.name};a.matrix=xg(n);let s,m,f,p,c;if(n.mesh!==void 0)for(s of o.meshes[n.mesh].primitives)m=structuredClone(s.preparedAttributes),f=vg(e,s,m),p={...Ae(),device:f.device,geometry:f.geometry,program:f.program,fadeDuration:250,id:Mt.value++,renderOrder:0},p.name=o.meshes[n.mesh].name,p.extras=n.extras||{},q(p,a);for(c of n.children||hr)q(zf(e,c),a);return i.delete(t),a}function wg(e){let t,r;for(t of e.resources)if(t.attributes)for(r of Object.values(t.attributes))r.buffer.destroy();else t.pipelineCache.clear()}function Lg(e,t){let r=[],o;try{for(o of t.nodes)r.push(zf(e,o))}catch(i){throw wg(e),i}return r}function bg(e){let t=qe.get(e);if(e.options.rotation){let[r,o=r,i=r]=e.options.rotation;t.rotation[0]=r,t.rotation[1]=o,t.rotation[2]=i}if(e.options.scale){let[r,o=r,i=r]=e.options.scale;t.scale[0]=r,t.scale[1]=o,t.scale[2]=i}}async function Mg(e){await Me.get(e).promise;let t=new URL(Ze.get(e),document.baseURI).href,{description:r,images:o}=await mi(e._map,e.options.workerUrl,{type:"model",url:t});await Me.get(e).promise,await ae.get(e._map);let i=dg(e,r,o),n=r.scenes?.[r.scene||0];if(!n)throw new Error("Missing glTF scene");let a=Lg(i,n),s={...Ae(),id:t,extras:r.extras||{}};if(!a.length)throw new Error("Expected a glTF model with a non-empty scene");let m;for(m of a)q(m,s);qe.set(e,s),bg(e),q(qe.get(e),M.get(e)),di(e,fe.get(e._map))}async function Bg(e){try{return M.set(e,Ae()),ie.set(e,{origin:[0,0,0],direction:[0,0,0],inverse:new DOMMatrix,meshes:[]}),(ne.get(e)||Y.get(e))&&(us.set(e,M.get(e)),ne.get(e)&&G.set(e,await oo(e))),e._map&&(await ui(e,e._map),Me.get(e).resolve()),Ze.get(e)&&await Mg(e),R.get(e)&&E(e),e.fire("ready"),e}catch(t){throw e.fire("error",{error:t}),t}}function Tg(e,t,r,o){return o?`Unable to load: ${typeof o=="string"?o:o.message}`:`${t} loaded ${Ze.get(e)?"models":"elements"} in the current area${r?`; ${r} blocks loading`:""}`}function Pg(e,t,r,o){let i=Er.get(e),n=Ze.get(e),a=qe.get(e);n&&(t=a?1:0);let s=r||(n?!a:!G.get(e)&&!Y.get(e)),m=t.toLocaleString("en-US"),f=o?"Error":`${m}${s?"\u2026":""}`,p=Tg(e,m,r,o);i.textContent!==f&&(i.textContent=f),i.title!==p&&(i.title=p),o&&i.getAttribute("role")!=="alert"?i.setAttribute("role","alert"):!o&&i.hasAttribute("role")&&i.removeAttribute("role")}function Af(e){let t=e.target,r=Er.get(t);if(!t._map)return;e.type==="add"&&ii(t,r);let o=0,i=0,n=e.error,a;if(Number.isFinite(e.loaded))o=e.loaded,i=e.pending??0,n||=e.errors?.[0];else for(a of X.get(t).values())o+=a.buildings??0,!a.done&&!a.error&&i++,n||=a.error;Pg(t,o,i,n)}function At(e,t=wr){zr.set(e,!0),d.Util.setOptions(e,{ariaLabel:"3D scene",...t}),A.set(e,"3d");let r=!Y.get(e)&&/\.(glb|gltf)(?:[?#]|$)/i.test(e.options.url);if(Ze.set(e,r?e.options.url:null),ne.set(e,e.options.url&&!r&&!Y.get(e)?new URL(e.options.url,document.baseURI).href:null),Or.set(e,new Map),e.options.center&&D.set(e,new d.LatLng(e.options.center[0],e.options.center[1])),X.set(e,new Map),Qe.set(e,0),ne.get(e)||Y.get(e)||r){let o=d.DomUtil.create("small","layer-count");o.style.cssText="float:right;margin-left:12px;color:#555;font-variant-numeric:tabular-nums",Er.set(e,o),e.on("add error",Af),e.on("ready progress",d.Util.throttle(Af,250,e))}Me.set(e,Promise.withResolvers()),te.set(e,Promise.resolve().then(Bg.bind(null,e))),te.get(e).catch(Ke)}function kg(){this.keys.clear()}var an={KeyW:[1,0],ArrowUp:[1,0],KeyS:[-1,0],ArrowDown:[-1,0],KeyD:[0,1],ArrowRight:[0,1],KeyA:[0,-1],ArrowLeft:[0,-1]};L();$i();br();J();Z();function Sg(e){let t=this.layer._map;if(e.type==="pointerdown"){if(e.button!==0||e.target.closest(".leaflet-control"))return;this.dragX=e.clientX,this.dragY=e.clientY,this.dragging=!0,t.getContainer().setPointerCapture(e.pointerId)}else this.dragging&&e.type==="pointermove"?($e(t,Math.max(20,Math.min(85,_(t)-(e.clientY-this.dragY)*.2)),S(t)-(e.clientX-this.dragX)*.25),this.dragX=e.clientX,this.dragY=e.clientY):this.dragging=!1}var sn=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];V();function Rt(e){let{layer:t,state:r}=this,o=t._map,i=o.options.crs,n=D.get(t),a=M.get(t),s=i.project(n),m=Math.cos(n.lat*B),f=i.project(r.latlng),p=we(o,r.latlng)||0;return e[0]=(f.x-s.x)*m,e[1]=p+(r.height??0)-a.position[1],e[2]=-(f.y-s.y)*m,e}function Ls(){let[e,t,r]=Rt.call(this,this.local),o=-this.state.heading,i=Math.cos(o),n=Math.sin(o),a,s,m,f,p;for(a=0;a<sn.length;a++)[,s,m,f]=sn[a],p=this.meshes[a],p.position[0]=e+s*i,p.position[1]=t+m,p.position[2]=r-s*n,p.rotation[0]=f*this.swing*Math.sin(this.state.phase),p.rotation[1]=o;E(this.layer)}function Cg(){this.meshes&&Ls.call(this)}function bs(){let e=this.layer._map;cancelAnimationFrame(this.frame),this.keys.clear(),this.dragging=!1,this.state.height=this.verticalSpeed=0,d.DomEvent.off(document,"keydown keyup",this.onKey),d.DomEvent.off(window,"blur",this.onBlur);let t,r;if(this.meshes)for(t of this.meshes)Fe(this.layer,t);if(this.meshes=null,this.button.setAttribute("aria-pressed","false"),this.button.style.background="#fff",this.hint.style.display="none",!(!e||!this.saved)){d.DomEvent.off(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.off("terrainchange",this.onTerrain),e.options.scrollWheelZoom=this.saved.scrollWheelZoom;for(r of this.saved.handlers)e[r].enable();e.setView(this.state.latlng,this.saved.zoom,{animate:!1}),Xt(e,this.saved.pitch),this.saved=null}}function _g(e){if(e.type==="keyup"&&e.code==="Space"&&this.keys.delete("Space"),!(e.target.closest?.("input:not([type=checkbox], [type=radio]), select, textarea, [contenteditable]")||e.ctrlKey||e.altKey||e.metaKey)){if(e.type==="keydown"&&e.code==="Escape"){this.stop();return}!an[e.code]&&e.code!=="Space"||(e.preventDefault(),e.type==="keydown"?this.keys.add(e.code):this.keys.delete(e.code))}}V();L();var Eg=["dragging","keyboard","doubleClickZoom","boxZoom"];J();Z();$i();function C(e,t,r,o){return[[e,r],[t,r],[t,o],[e,o]]}var Qt=[.16,.2,.32];var Rf=[.75,.2,.15];var xt=[.85,.64,.5];var er=[.08,.07,.06];var Ms={body:[[C(-.17,.17,-.1,.1),.82,.95,Qt],[C(-.19,.19,-.11,.11),.95,1.44,Rf],[C(-.05,.05,-.05,.05),1.44,1.5,xt],[C(-.1,.1,-.11,.1),1.5,1.72,xt],[C(-.105,.105,-.06,.115),1.58,1.77,er],[C(-.105,.105,-.115,-.06),1.7,1.77,er]],leg:[[C(-.07,.07,-.07,.07),-.82,0,Qt],[C(-.07,.07,-.17,.07),-.9,-.82,er]],arm:[[C(-.05,.05,-.05,.05),-.55,0,Rf],[C(-.045,.045,-.045,.045),-.66,-.55,xt]]};function mn(e,t,r,o,i,n,a){let s=i[0]-o[0],m=i[1]-o[1],f=i[2]-o[2],p=n[0]-o[0],c=n[1]-o[1],l=n[2]-o[2],u=m*l-f*c,h=f*p-s*l,x=s*c-m*p,y=Math.hypot(u,h,x),g,v;for(g=0;g<3;g++)v=g===0?o:g===1?i:n,e.push(...v),t.push(u/y,h/y,x/y),r.push(...a)}function hi(e){let t=[],r=[],o=[],i=[],n=[],a,s,m,f,p,c,l,u,h;for([a,s,m,f,p=a]of e){i.length=n.length=0;for([c,l]of a)i.push([c,s,l]);for([c,l]of p)n.push([c,m,l]);for(u=0;u<a.length;u++)h=(u+1)%a.length,mn(t,r,o,i[u],i[h],n[h],f),mn(t,r,o,i[u],n[h],n[u],f);for(u=1;u<a.length-1;u++)mn(t,r,o,n[0],n[u],n[u+1],f),mn(t,r,o,i[0],i[u+1],i[u],f)}return{position:t,normal:r,color:o}}function Og(e){return this.keys.has("Space")?(this.verticalSpeed=6,this.state.height+=this.verticalSpeed*e,!0):!this.verticalSpeed&&!this.state.height?!1:(this.state.height=Math.max(0,this.state.height+this.verticalSpeed*e-9.81*e*e/2),this.verticalSpeed=this.state.height>0?this.verticalSpeed-9.81*e:0,!0)}L();var Bs=new WeakMap;function zg(e,t,r){for(;e&&t<e.length&&r>=e[t].faceEnd;)t++;return t}function Ag(e){let t=Bs.get(e),r=e.worldMatrix;if(!t||t.geometry!==e.geometry)return;let o;for(o=0;o<12;o++)if(o%4!==3&&t.matrix[o]!==r[o])return;return t}function Rg(e,t,r,o,i){return(e[0]*t[r]+e[4]*t[r+1]+e[8]*t[r+2])*o+(e[2]*t[r]+e[6]*t[r+1]+e[10]*t[r+2])*i<0}function Ig(e,t,r){let o,i,n;for(o=Math.floor(Math.min(t[0],t[3],t[6])/8);o<=Math.floor(Math.max(t[0],t[3],t[6])/8);o++)for(i=Math.floor(Math.min(t[2],t[5],t[8])/8);i<=Math.floor(Math.max(t[2],t[5],t[8])/8);i++)n=o+","+i,e.has(n)||e.set(n,[]),e.get(n).push(r)}function Dg(e,t,r,o,i){let n,a;for(n=0;n<3;n++)a=n===0?t:n===1?r:o,e[n*3]=i[0]*a[0]+i[4]*a[1]+i[8]*a[2]+i[12],e[n*3+1]=i[1]*a[0]+i[5]*a[1]+i[9]*a[2]+i[13],e[n*3+2]=i[2]*a[0]+i[6]*a[1]+i[10]*a[2]+i[14]}function Ts(e){let t=e.worldMatrix,r=Ag(e);if(r)return r;let{position:o,index:i,normal:n,uv:a,instanceOffset:s}=e.geometry.attributes,m=ca(o,i),f=m*(s?.count??1),p=[],c=[],l=[],u=new Map,h=[0,0,0],x=[0,0,0],y=[0,0,0],g=[],v=e.extras?.featureFaces,T,P,k,z,$,U,N,se,Ue,de,xe,me,Ee,Te,sr,Nt=0,mr=-1/0;for(T=0;T<f;T+=3)Nt=zg(v,Nt,T/3),P=i?i.data[T%m]:T%m,!(e.program.nightLight&&a&&a.data[P*2]<=2)&&(la(e,T,h,x,y),Dg(g,h,x,y,t),z=g[3]-g[0],$=g[4]-g[1],U=g[5]-g[2],N=g[6]-g[0],se=g[7]-g[1],Ue=g[8]-g[2],de=$*Ue-U*se,xe=z*se-$*N,me=U*N-z*Ue,Ee=Math.hypot(de,me,xe),!(!Ee||Math.abs(me)>.9*Ee)&&(n&&(k=P*3,Rg(t,n.data,k,de,xe)&&(de=-de,xe=-xe)),Te=Math.hypot(de,xe),sr=c.length/2,p.push(...g),mr=Math.max(mr,g[0],g[3],g[6]),c.push(de/Te,xe/Te),l.push(v?Nt:s?Math.floor(T/m):0),Ig(u,g,sr)));let yo={tri:Float32Array.from(p),nrm:Float32Array.from(c),features:Uint32Array.from(l),ranges:v,cells:u,maxX:mr,geometry:e.geometry,matrix:Array.from(t),origin:[t[12],t[13],t[14]]};return Bs.set(e,yo),yo}function Ps(e,t,r,o,i,n,a){let s=t*9,m=e[s+3]-e[s],f=e[s+4]-e[s+1],p=e[s+5]-e[s+2],c=e[s+6]-e[s],l=e[s+7]-e[s+1],u=e[s+8]-e[s+2],h=-a*l,x=a*c-n*u,y=n*l,g=m*h+f*x+p*y;if(Math.abs(g)<1e-9)return-1;let v=r-e[s],T=o-e[s+1],P=i-e[s+2],k=(v*h+T*x+P*y)/g;if(k<0||k>1)return-1;let z=T*p-P*f,$=P*m-v*p,U=v*f-T*m,N=(n*z+a*U)/g;return N<0||k+N>1?-1:(c*z+l*$+u*U)/g}function Gg(e,t,r,o,i,n,a,s){let{tri:m,features:f,ranges:p}=e,c,l,u,h,x,y,g,v,T,P,k,z,$,U,N;for(c=Math.floor(t/8);c<=a;c++)if(l=e.cells.get(`${c},${s}`),!!l)for(u of l)i.has(u)||(i.add(u),x=f[u],h=Ps(m,u,t,r,o,1,0),h>1e-4&&n.push(x*2,h),p?.[x]?.polygon&&(y=u*9,g=m[y],v=m[y+2],T=m[y+3],P=m[y+5],k=m[y+6],z=m[y+8],$=(g-T)**2+(v-P)**2,U=(g-k)**2+(v-z)**2,N=(T-k)**2+(P-z)**2,U>$&&U>=N?(T=k,P=z):N>$&&N>U&&(g=T,v=P,T=k,P=z),v>o!=P>o&&(h=g+(o-v)*(T-g)/(P-v)-t,h>1e-4&&n.push(x*2+1,h))))}function Ug(e,t,r,o){return!!(e&&(!r?.[o]?.polygon||t))}function Ng(e){let t,r,o,i;for(t=2;t<e.length;t+=2){for(o=e[t],i=e[t+1],r=t-2;r>=0&&(e[r]>o||e[r]===o&&e[r+1]>i);)e[r+2]=e[r],e[r+3]=e[r+1],r-=2;e[r+2]=o,e[r+3]=i}}function Fg(e,t){Ng(e);let r=0,o=0,i=-1/0,n=-1,a=-1,s=0,m=0,f,p,c,l;for(f=0;f<=e.length&&(p=f<e.length?e[f]:-1,c=Math.floor(p/2),p!==n&&n>=0&&(n%2?m=r%2:s=r%2),p!==n&&n>=0&&c!==a&&(o+=Number(Ug(s,m,t,a)),s=0,m=0),p!==n&&(r=0,i=-1/0,n=p,a=c),f!==e.length);f+=2)l=e[f+1],l-i>(p%2?.001:1e-4)&&r++,i=l;return o}function If(e,t,r,o,i,n){let a=e.geometry;if(!e.visible||!a?.attributes?.position?.data||e.program?.depthTest===!1)return!1;a.bounds||Oe(a);let s=a.bounds,m=e.worldMatrix,f=s.center,p=m[0]*f[0]+m[4]*f[1]+m[8]*f[2]+m[12],c=m[1]*f[0]+m[5]*f[1]+m[9]*f[2]+m[13],l=m[2]*f[0]+m[6]*f[1]+m[10]*f[2]+m[14],u=s.radius*Math.max(Math.hypot(m[0],m[1],m[2]),Math.hypot(m[4],m[5],m[6]),Math.hypot(m[8],m[9],m[10]));if(Math.hypot(p-t,c-r,l-o)>u)return!1;let h=Ts(e);t+=h.origin[0]-m[12],r+=h.origin[1]-m[13],o+=h.origin[2]-m[14];let x=Math.floor(h.maxX/8);if(t>=h.maxX)return!1;let y=Math.floor(o/8),g=n;return g.length=0,i.clear(),Gg(h,t,r,o,i,g,x,y),Fg(g,h.ranges)>0}function jg(e,t,r,o,i,n,a,s,m){if(e>=0){m[0]=t?-Math.sign(i):0,m[1]=t?0:-Math.sign(n);return}let f=r-(a.minX-s);m[0]=-1,m[1]=0,a.maxX+s-r<f&&(f=a.maxX+s-r,m[0]=1),o-(a.minZ-s)<f&&(f=o-(a.minZ-s),m[0]=0,m[1]=-1),a.maxZ+s-o<f&&(m[0]=0,m[1]=1)}function Wg(e,t,r,o,i,n,a,s,m){let f=(r-e.position[0])/e.scale[0]-a,p=(o-e.position[2])/e.scale[2]-s;m[0]=-f*t.dz+p*t.dx,m[1]=-f*t.dx-p*t.dz,m[2]=-i/e.scale[0]*t.dz+n/e.scale[2]*t.dx,m[3]=-i/e.scale[0]*t.dx-n/e.scale[2]*t.dz}function $g(e,t,r,o){return e>t||t<0||e>r||r&&Math.max(0,e)>=o}function fn(e,t,r,o,i){return t?((t>0?r:o)-e)/t:i}function Df(e,t,r,o,i){return!t&&(e<=r-i||e>=o+i)}function Vg(e,t,r,o,i,n,a,s,m,f,p){let c=e.position||={},l=e.ray||=[0,0,0,0],u=e.localNormal||=[0,0],h=Math.max(r.scale[0],r.scale[1],r.scale[2]),x=.35/h,{x:y,y:g,z:v}=jo(e,t,c),T=r.position[1]+(g+o.minY)*r.scale[1],P=r.position[1]+(c.y+o.maxY)*r.scale[1];if(T>n+1.7*h||P<n+.2*h)return;Wg(r,c,i,a,s,m,y,v,l);let k=l[0],z=l[1],$=l[2],U=l[3];if(Df(k,$,o.minX,o.maxX,x)||Df(z,U,o.minZ,o.maxZ,x))return;let N=fn(k,$,o.minX-x,o.maxX+x,-1/0),se=fn(k,$,o.maxX+x,o.minX-x,1/0),Ue=fn(z,U,o.minZ-x,o.maxZ+x,-1/0),de=fn(z,U,o.maxZ+x,o.minZ-x,1/0),xe=Math.max(N,Ue);if($g(xe,Math.min(se,de),f,p.best))return;if(!f){p.found=!0;return}jg(xe,N>Ue,k,z,$,U,o,x,u);let me=(-u[0]*c.dz-u[1]*c.dx)/r.scale[0],Ee=(u[0]*c.dx-u[1]*c.dz)/r.scale[2];if(xe<0&&s*me+m*Ee>=0)return;let Te=Math.hypot(me,Ee);p.best=Math.max(0,xe),p.found=!0,p.normal[0]=me/Te,p.normal[1]=Ee/Te}function Zg(e){if(e.collisionBounds)return e.collisionBounds;let t=e.collisionBounds={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0,minZ:1/0,maxZ:-1/0},r=e.template.position,o;for(o=0;o<r.length;o+=3)t.minX=Math.min(t.minX,r[o]),t.maxX=Math.max(t.maxX,r[o]),t.minY=Math.min(t.minY,r[o+1]),t.maxY=Math.max(t.maxY,r[o+1]),t.minZ=Math.min(t.minZ,r[o+2]),t.maxZ=Math.max(t.maxZ,r[o+2]);return t}function ks(e,t,r,o,i,n,a,s){let m=Tt.get(e);if(!m?.mesh||!m.trips.length)return!1;let f=M.get(e),p=Zg(m),c;for(c of m.trips)if(Vg(m,c,f,p,t,r,o,i,n,a,s),!a&&s.found)break;return s.found}function Gf(e){let{layer:t,local:r,hitData:o}=e,i=R.get(t);if(!i||!F.get(i))return!1;Se(re.get(t));let n=M.get(t),a=Rt.call(e,r),s=n.position[0]+a[0]*n.scale[0],m=n.position[1]+a[1]*n.scale[1],f=n.position[2]+a[2]*n.scale[2],p=F.get(i),c,l,u,h;for(c of p)if(!(c===t||A.get(c)==="terrain")){if(A.get(c)==="traffic"){if(o.best=0,o.found=!1,ks(c,s,m,f,0,0,0,o))return!0;continue}for(h=o.nodes,h.length=0,M.get(c)&&h.push(M.get(c));h.length;)if(l=h.pop(),!!l.visible){if(l.geometry&&(If(l,s,m+.45*n.scale[1],f,o.seen,o.intersections)||If(l,s,m+1.35*n.scale[1],f,o.seen,o.intersections)))return!0;for(u of l.children)h.push(u)}}return!1}function Ss(){if(!this.saved||!Gf(this))return!1;let e=this.layer._map,t=this.state.latlng,r=this.state.height,o,i,n;for(o=.5;o<=20;o+=.5)for(i=0;i<Math.PI*2;i+=Math.PI/4)if(n=new d.LatLng(t.lat+Math.cos(i)*o/111320,t.lng+Math.sin(i)*o/(111320*Math.cos(t.lat*Math.PI/180))),this.state.latlng=n,this.state.height=0,!Gf(this))return this.verticalSpeed=0,e.setView(n,e.getZoom(),{animate:!1}),!0;return this.state.latlng=t,this.state.height=r,!1}function Cs(e){return Math.atan2(Math.sin(e),Math.cos(e))}function qg(e,t){return e===t||Jt.get(e)==="terrain"||Jt.get(e)==="traffic"}function Hg(e){let t=ie.get(this.layer),r=Rt.call(this,this.local),o=M.get(this.layer),i=o.position[0]+r[0]*o.scale[0],n=o.position[1]+r[1]*o.scale[1],a=o.position[2]+r[2]*o.scale[2];if(n>e||this.verticalSpeed>0)return;Se(re.get(this.layer)),t.origin[0]=i,t.origin[1]=e+.01,t.origin[2]=a,t.direction[0]=0,t.direction[1]=-1,t.direction[2]=0,t.meshes.length=0;let s,m;for(s of F.get(R.get(this.layer)))qg(s,this.layer)||A.get(s)==="raster"||s.options.nightLight||qt(M.get(s),da,t.meshes);for(m of ua(t,t.meshes)){if(m.point[1]<n-.001)break;this.state.height+=(m.point[1]-n)/o.scale[1],this.verticalSpeed=0;break}t.meshes.length=0}L();V();function Xg(e,t,r,o,i,n){let{dx:a,dz:s,seen:m}=r,f,p,c;for(f of e)if(!(m.has(f)||a*t.nrm[f*2]+s*t.nrm[f*2+1]>=0))for(m.add(f),p=.4;p<2;p+=1.1)c=Ps(t.tri,f,o,i+p,n,a,s),c>=0&&c<r.best&&(r.best=c,r.found=!0,r.normal[0]=t.nrm[f*2],r.normal[1]=t.nrm[f*2+1])}function Yg(e,t){if(!e.visible)return!0;if(!e.geometry?.attributes?.position?.data||e.program?.depthTest===!1)return;e.geometry.bounds||Oe(e.geometry);let r=e.worldMatrix,{center:o,radius:i}=e.geometry.bounds,{x:n,y:a,z:s,dx:m,dz:f,reach:p}=t;if(Math.hypot(r[0]*o[0]+r[4]*o[1]+r[8]*o[2]+r[12]-n,r[2]*o[0]+r[6]*o[1]+r[10]*o[2]+r[14]-s)>i*Math.hypot(r[0],r[1],r[2])+p)return;let c=Ts(e),l=n-r[12]+c.origin[0],u=a-r[13]+c.origin[1],h=s-r[14]+c.origin[2];t.seen.clear();let y,g,v;for(y=Math.floor(Math.min(l,l+m*p)/8);y<=Math.floor(Math.max(l,l+m*p)/8);y++)for(g=Math.floor(Math.min(h,h+f*p)/8);g<=Math.floor(Math.max(h,h+f*p)/8);g++)v=c.cells.get(y+","+g),v&&Xg(v,c,t,l,u,h)}function Jg(e,t,r,o,i,n,a,s){Se(re.get(e)),s.x=t,s.y=r,s.z=o,s.dx=i,s.dz=n,s.reach=a,s.best=a,s.found=!1;let m;for(m of F.get(R.get(e)))if(!(m===e||A.get(m)==="terrain")){if(A.get(m)==="traffic"){ks(m,t,r,o,i,n,a,s);continue}qt(M.get(m),Yg,s)}return s.found?s.normal:null}function Uf(e,t,r){let o=Math.hypot(e,t);return o>1e-6&&Jg(this.layer,r[0],r[1],r[2],e/o,-t/o,o+.3,this.hitData)}function Kg(e,t){let r=e*this.speed*t,{lat:o,lng:i}=this.state.latlng,{position:n,scale:a}=M.get(this.layer),s=Math.sin(this.state.heading)*r,m=Math.cos(this.state.heading)*r,f=Rt.call(this,this.local),p;for(p=0;p<f.length;p++)f[p]=n[p]+a[p]*f[p];let c=Uf.call(this,s,m,f);if(c){let l=Math.max(0,Math.min(1,(this.hitData.best-.3)/Math.hypot(s,m))),u=s*l,h=m*l;f[0]+=u,f[2]-=h,s-=u,m-=h;let x=Math.min(0,s*c[0]-m*c[1]);if(s-=x*c[0],m+=x*c[1],Uf.call(this,s,m,f)){let y=Math.max(0,Math.min(1,(this.hitData.best-.3)/Math.hypot(s,m)));s*=y,m*=y}s+=u,m+=h}this.state.latlng=new d.LatLng(o+m/111320,i+s/(111320*Math.cos(o*B))),this.state.phase+=Math.hypot(s,m)/1.6*Math.PI}Lo();V();Z();br();J();function Qg(e,t,r){let o=this.layer._map;if(e||t){let n=S(o)*B,a=Cs(-this.state.heading-n);Math.abs(a)>.001&&$e(o,_(o),(n+a*Math.min(1,r*4))*ot),o.setView(this.state.latlng,o.getZoom(),{animate:!1})}let i=e?.9:0;return Math.abs(this.swing-i)>.001?(this.swing+=(i-this.swing)*Math.min(1,r*10),!0):!1}function ey(e,t,r,o,i,n){o&&(e.state.heading=Cs(e.state.heading+o*2.5*i),n=!0),r&&(Kg.call(e,r,i),n=!0),n&&Hg.call(e,t),Qg.call(e,r,o,i)&&(n=!0),n&&Ls.call(e)}function ty(e){let t=this.layer;this.frame=requestAnimationFrame(this.step);let r=Math.min(.1,(e-(this.last??e))/1e3);if(this.last=e,!w.get(t))return;let o=!1,i,n;if(e>=this.nextClearanceCheck&&(this.nextClearanceCheck=e+250,Ss.call(this)&&(o=!0)),!this.meshes){this.meshes=[];for([i]of sn)this.meshes.push(yr(t,hi(Ms[i])));o=!0}let a=M.get(t).position[1]+Rt.call(this,this.local)[1]*M.get(t).scale[1];Og.call(this,r)&&(o=!0);let s=0,m=0;for(n of this.keys)s+=an[n]?.[0]||0,m+=an[n]?.[1]||0;s=Math.sign(s),m=Math.sign(m),ey(this,a,s,m,r,o)}function _s(){let e=this.layer._map;if(this.saved||!e)return;this.state.latlng=e.getCenter(),this.state.height=this.verticalSpeed=0;let t=e.getSize().y*1.5/this.distance,r=Math.min(e.getMaxZoom(),Math.log2(t*it*Math.cos(this.state.latlng.lat*B)/256)),o;this.saved={zoom:e.getZoom(),pitch:_(e),scrollWheelZoom:e.options.scrollWheelZoom,handlers:[]};for(o of Eg)e[o]?.enabled()&&this.saved.handlers.push(o);for(o of this.saved.handlers)e[o].disable();e.options.scrollWheelZoom=this.saved.scrollWheelZoom&&"center",this.state.heading=-S(e)*B,e.setView(this.state.latlng,r,{animate:!1}),Xt(e,75),Ss.call(this),d.DomEvent.on(document,"keydown keyup",this.onKey),d.DomEvent.on(window,"blur",this.onBlur),d.DomEvent.on(e.getContainer(),"pointerdown pointermove pointerup pointercancel",this.onPointer),e.on("terrainchange",this.onTerrain),this.button.setAttribute("aria-pressed","true"),this.button.style.background="#e4e4e4",this.hint.style.display="",this.last=void 0,this.nextClearanceCheck=0,this.frame=requestAnimationFrame(this.step)}function ry(){this.saved?bs.call(this):_s.call(this)}function oy(e,{speed:t,distance:r,...o}){let i=new d.Layer;Jt.set(i,"walk"),At(i,o);let n=new Set,a=d.DomUtil.create("div","leaflet-bar leaflet-control");a.style.cssText="display:flex;align-items:center;background:#fff;";let s=d.DomUtil.create("button","",a);s.type="button",s.title="Walk",s.setAttribute("aria-label","Walk"),s.setAttribute("aria-pressed","false"),s.textContent="\u{1F6B6}",s.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";let m=d.DomUtil.create("small","",a);m.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",m.textContent="W/S: run \xB7 A/D: turn \xB7 hold Space: ascend \xB7 drag: look around \xB7 Esc: exit",d.DomEvent.disableClickPropagation(a);let f={layer:i,speed:t,distance:r,keys:n,container:a,button:s,hint:m,meshes:null,frame:null,last:void 0,nextClearanceCheck:0,swing:0,verticalSpeed:0,saved:null,hitData:null,local:null,state:e.walker={latlng:null,heading:0,phase:0,height:0}};ls.set(i,f.state),f.step=ty.bind(f),f.onKey=_g.bind(f),f.onBlur=kg.bind(f),f.onPointer=Sg.bind(f),f.onTerrain=Cg.bind(f),f.start=_s.bind(f),f.stop=bs.bind(f),f.toggle=ry.bind(f),e._walk=f,d.DomEvent.on(s,"click",f.toggle)}function Nf(e){d.Util.setOptions(this,e),oy(this,this.options)}function iy(e){let t=Wt.get(e);if(t?.control&&t.control!==this)throw this._map=null,new Error("Only one Walk control can be active per map");return t||(t={control:null,hitData:{x:0,y:0,z:0,dx:0,dz:0,reach:0,best:0,found:!1,seen:new Set,intersections:[],nodes:[],normal:[0,0]},local:[0,0,0]},Wt.set(e,t)),t.control=this,t.local.fill(0),t.hitData.seen.clear(),t.hitData.normal.fill(0),this._walk.hitData=t.hitData,this._walk.local=t.local,this._walk.layer.addTo(e),this._walk.container}function ny(e){let t=Wt.get(e);t?.control===this&&(this._walk.stop(),this._walk.layer.remove(),t.control=null,t.hitData.seen.clear(),this._walk.hitData=null,this._walk.local=null)}es();var mo=class extends gt(d.Control){static initHooks=!0;static defaultOptions={position:"bottomright",speed:70,distance:20};constructor(t){super(t),d.version.startsWith("2.")&&(Nf.call(this,t),this.callInitHooks())}};Object.assign(mo.prototype,{onAdd:iy,onRemove:ny});d.version.startsWith("1.")&&(mo.prototype.options=Object.assign(Object.create(d.Control.prototype.options),mo.defaultOptions),mo.prototype.initialize=Nf);d.Control.Walk=mo;var fo=new WeakMap;var Ir=new WeakMap;L();function ay(){fo.get(this).off(Ir.get(this),this),fo.set(this,null),Ir.set(this,null)}var Dr=new WeakMap;L();function Es(e,t){let r=qe.get(e);if(!M.get(e)||!Q.get(e))return null;let o,i,n,a,s,m,f;for(o of ha(e,t,M.get(e).children,!!r)){if(r){for(i=o.object;i&&i!==r;)i=i.parent;if(i===r)return{id:r.id,properties:r.extras,model:r,mesh:o.object,point:o.point}}if(n=o.object.extras?.featureFaces,!!n)for(a=0,s=n.length-1;a<=s;)if(m=a+s>>1,f=n[m],o.faceIndex<f.faceStart)s=m-1;else if(o.faceIndex>=f.faceEnd)a=m+1;else return{...f,mesh:o.object,point:o.point}}return null}function gi(e){_e.set(e,null),Ot(e,null),zt(e,null),e.fire("featurehover",{feature:null})}function my(e,t){if(t.buttons||e._map.dragging?.moving()||e._map._animatingZoom){_e.get(e)&&gi(e);return}_e.set(e,Es(e,t)),Ot(e,_e.get(e)),zt(e,_e.get(e),t),e.fire("featurehover",{feature:_e.get(e),originalEvent:t})}function fy(e){my(this,e)}function py(e,t){let r=Es(e,t);_e.set(e,r),Ot(e,r),zt(e,r,t),e.fire("featureclick",{feature:r,originalEvent:t})}function cy(e){py(this,e)}function ly(){gi(this)}async function uy(e,t){try{await ui(e,t),Me.get(e).resolve()}catch(r){e.fire("error",{error:r})}}function pn(e,t){if(!D.get(e)){let r=t.getCenter();D.set(e,new d.LatLng(r.lat,r.lng))}(ne.get(e)||Y.get(e)||e.options.tooltip||Ze.get(e))&&(Ie.set(e,t.getContainer()),Dr.get(e)||Dr.set(e,{mousemove:fy,click:cy,mouseleave:ly}),e.options.tooltip&&(De.set(e,d.DomUtil.create("div","leaflet-3d-tooltip",Ie.get(e))),De.get(e).hidden=!0,De.get(e).setAttribute("role","tooltip"),De.get(e).setAttribute("aria-live","polite"),De.get(e).style.cssText="position:absolute;z-index:600;max-width:220px;padding:10px 12px;border:1px solid #6b5140;border-radius:6px;background:#fffaf0;box-shadow:0 3px 12px #0005;color:#30251d;font:13px/1.45 sans-serif;pointer-events:none"),d.DomEvent.on(Ie.get(e),Dr.get(e),e)),M.get(e)&&uy(e,t)}var tr=new WeakMap;var et=new WeakMap;var rr=new WeakMap;V();var Os={x:0,y:0};var Ge=new WeakMap;var ye=new WeakMap;var It=new WeakMap;var cn={size:[null,null],format:"r32float",usage:null};var zs={texture:null};var Ff={bytesPerRow:null};var As=[null,null];function dy(e,t,r,o){let i,n,a;for(i=0;i<256;i++)for(n=0;n<256;n++)a=t[i*256+n],!(!Number.isFinite(a)||a<=-1e3)&&(e.elevations[r+i*o*256+n]=a,e.low=Math.min(e.low,a),e.high=Math.max(e.high,a))}function hy(e,t){let r=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,n={elevations:new Float32Array(r*o*65536).fill(-1e9),low:1/0,high:-1/0},a,s,m,f,p,c;for([a,s]of e)m=a.split("/"),f=Number(m[0]),p=Number(m[1]),c=(p-t.min.y)*256*r*256+(f-t.min.x)*256,dy(n,s,c,r);return n}function gy(e,t){let r=w.get(e).device;if(ye.get(e)?.device===r)return ye.get(e);let o=tr.get(e),i=o.max.x-o.min.x+1,n=o.max.y-o.min.y+1,{elevations:a,low:s,high:m}=hy(nt.get(e),o);return Ge.get(e)&&W(e,Ge.get(e).texture),Ge.set(e,{texture:r.createTexture((cn.size[0]=i*256,cn.size[1]=n*256,cn.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,cn)),low:Number.isFinite(s)?s:et.get(e),high:Number.isFinite(m)?m:et.get(e)}),r.queue.writeTexture((zs.texture=Ge.get(e).texture,zs),a,(Ff.bytesPerRow=i*1024,Ff),(As[0]=i*256,As[1]=n*256,As)),zs.texture=null,It.set(e,new Map),ye.set(e,je(e,{baseTexture:t,unlit:!0,terrain:Ge.get(e),alphaMode:"BLEND",depthWrite:!0,doubleSided:e.options.doubleSided})),ye.get(e)}var Rs={size:null,usage:null};function yy(e){let t=(e+1)**2,r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t*2),n=new Uint16Array(e*e*6),a,s,m,f,p,c,l=0,u=0;for(a=0;a<=e;a++)for(s=0;s<=e;s++)r[l*3]=s/e,r[l*3+2]=a/e,o[l*3+1]=1,i[l*2]=s/e,i[l*2+1]=a/e,l++,a<e&&s<e&&(m=a*(e+1)+s,f=m+1,p=m+e+1,c=p+1,n[u++]=m,n[u++]=p,n[u++]=f,n[u++]=f,n[u++]=p,n[u++]=c);return{position:{size:3,data:r},normal:{size:3,data:o},uv:{size:2,data:i},index:{data:n}}}function xy(e,t){let r=w.get(e).device,o=It.get(e).get(t);if(!o){o=yy(t);let i,n;for([i,n]of Object.entries(o))n.size||=1,n.count=n.data.length/n.size,n.indexFormat="uint16",n.buffer=r.createBuffer((Rs.size=Math.max(4,n.data.byteLength),Rs.usage=i==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,Rs)),r.queue.writeBuffer(n.buffer,0,n.data);It.get(e).set(t,o)}return o}function vy(e,t,r,o){let i=et.get(e),n=Math.min(Ge.get(e).low,i)-i,a=Math.max(Ge.get(e).high,i)-i;return{device:w.get(e).device,attributes:t,drawRange:{start:0,count:t.index.count},bounds:{min:[0,n,0],max:[1,a,1],center:[.5,(n+a)/2,.5],radius:Math.hypot(r,a-n,o)/2/Math.max(r,1,o)}}}async function wy(e,t,r,o){if(!await rr.get(e)||!e._map||fe.get(e._map)!==e||ce.get(t)!==e||o.request.signal.aborted||!I.get(t).has(`${r.z}/${r.x}/${r.y}`)||I.get(e).has(o))return;let n=Math.max(1,Math.min(64,256/2**(r.z-ve.get(e)))),a=e._map,s=a.options.crs,m=s.project(D.get(e)),f=Math.cos(D.get(e).lat*B),p=s.scale(r.z),c=2**(ve.get(e)-r.z),l=Os;l.x=r.x*256,l.y=r.y*256;let u=s.transformation.untransform(l,p);l.x=(r.x+1)*256,l.y=(r.y+1)*256;let h=s.transformation.untransform(l,p),x=w.get(e).device,y=o.texture,g=gy(e,y),v=xy(e,n),T=et.get(e),P=(h.x-u.x)*f,k=-(h.y-u.y)*f,z=vy(e,v,P,k),$={position:[(u.x-m.x)*f,0,-(u.y-m.y)*f],rotation:[0,0,0],scale:[P,1,k],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:x,geometry:z,program:g,texture:y,terrain:[r.x*256*c-tr.get(e).min.x*256,r.y*256*c-tr.get(e).min.y*256,256*c,T],tile:o,opacity:t.options.opacity??1,id:Mt.value++,renderOrder:t.options.zIndex||0,fadeDuration:250,fadeStart:o.loadedAt,ground:!0,_rasterSource:t};o.mesh.visible=!1,q($,M.get(e)),E(e),I.get(e).set(o,$)}async function Is(e,t,r){if(ce.get(e)&&r.done&&!r.request.signal.aborted&&I.get(e).get(`${t.z}/${t.x}/${t.y}`)===r)try{await wy(ce.get(e),e,t,r)}catch(o){e.fire("tileerror",{tile:r,coords:t,error:o})}}function yi(e,t){if(!I.get(e)||ce.get(e)===t)return;let r;for(r of I.get(e).values())ce.get(e)&&Eo(ce.get(e),r),r.mesh&&(r.mesh.visible=!0,q(r.mesh,M.get(e)));if(ce.set(e,t||null),t)for(r of I.get(e).values())r.done&&Is(e,r.coords,r)}async function Ly(e,t,r){try{await r,Me.get(e).resolve(),yi(e,fe.get(t))}catch(o){e.fire("error",{error:o})}}var by=new Map;var My=new Map;function By(e,t){return e.tile.coords.z-t.tile.coords.z||e.distance-t.distance}var ln=[null];var Dt=new WeakMap;V();var un={size:[null,null],format:"rgba8unorm",usage:null};var Ty={addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",magFilter:"linear",minFilter:"linear"};var Ds={size:null,usage:null};var Py=[0,0,0,1,0,0,0,0,1,1,0,1];var ky=[0,1,0,0,1,0,0,1,0,0,1,0];var Sy=[0,0,1,0,0,1,1,1];var Cy=[0,2,1,1,2,3];function _y(e){let t={position:{size:3,data:new Float32Array(Py)},normal:{size:3,data:new Float32Array(ky)},uv:{size:2,data:new Float32Array(Sy)},index:{data:new Uint16Array(Cy)}},r,o;for([r,o]of Object.entries(t))o.count=o.data.length/(o.size||1),o.indexFormat="uint16",o.buffer=e.createBuffer((Ds.size=o.data.byteLength,Ds.usage=r==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST,Ds)),e.queue.writeBuffer(o.buffer,0,o.data);return{device:e,attributes:t,drawRange:{start:0,count:t.index.count}}}function Ey(e,t){let r=w.get(e).device,o={device:r,texture:r.createTexture((un.size[0]=t.image.width,un.size[1]=t.image.height,un.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT,un)),sampler:r.createSampler(Ty),image:t.image,format:"rgba8unorm",srgb:!1,uploaded:null},i=Zr,n=Bo,a=To;i.source=t.image,i.flipY=!1,n.texture=o.texture,a[0]=t.image.width,a[1]=t.image.height,r.queue.copyExternalImageToTexture(i,n,a),i.source=null,n.texture=null,o.uploaded=t.image,ye.get(e)||ye.set(e,je(e,{baseTexture:o,unlit:!0,alphaMode:"BLEND",doubleSided:e.options.doubleSided})),Dt.get(e)||Dt.set(e,_y(r));let{coords:s}=t,m=e._map.options.crs,f=m.project(D.get(e)),p=Math.cos(D.get(e).lat*B),c=m.scale(s.z),l=Os;l.x=s.x*256,l.y=s.y*256;let u=m.transformation.untransform(l,c);l.x=(s.x+1)*256,l.y=(s.y+1)*256;let h=m.transformation.untransform(l,c),x=(h.x-u.x)*p,y=-(h.y-u.y)*p;t.texture=o,t.mesh={position:[(u.x-f.x)*p,0,-(u.y-f.y)*p],rotation:[0,0,0],scale:[x,1,y],worldMatrix:[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],children:[],visible:!0,device:r,geometry:Dt.get(e),program:ye.get(e),texture:o,opacity:e.options.opacity,id:Mt.value++,renderOrder:e.options.zIndex||0,tile:t,fadeDuration:250,ground:!0,_rasterSource:e},q(t.mesh,M.get(e))}async function Oy(e,t){try{await te.get(e);let r=await io(e.options.archive,t.coords.z,t.coords.x,t.coords.y,t.request.signal);if(t.request.signal.aborted){r?.image?.close();return}if(!r)throw new Error(`Tile ${t.coords.z}/${t.coords.x}/${t.coords.y} is not in the offline archive`);try{if(r.image)t.image=r.image;else{ln[0]=r.data;let o=new Blob(ln);ln[0]=null,t.image=await createImageBitmap(o)}}catch{throw ln[0]=null,new Error(`Unable to decode tile ${t.coords.z}/${t.coords.x}/${t.coords.y}`)}if(t.request.signal.aborted){t.image.close(),t.image=null;return}Ey(e,t),t.loadedAt=performance.now(),t.done=!0,ze.set(e,(ze.get(e)||0)+1),Is(e,t.coords,t),e.fire("tileload",{tile:t,coords:t.coords}),E(e)}catch(r){if(t.request.signal.aborted)return;t.error=r.message,ze.set(e,(ze.get(e)||0)+1),e.fire("tileerror",{tile:t,coords:t.coords,error:r}),e.fire("error",{error:r,coords:t.coords})}finally{pe.set(e,pe.get(e)-1),e._map&&(Gs(e),zo(e),pe.get(e)||e.fire("load"),E(e))}}function zy(e,t){t.started=!0;let r=pe.get(e)===0;return pe.set(e,pe.get(e)+1),e.fire("tileloadstart",{tile:t,coords:t.coords}),r&&e.fire("loading"),Oy(e,t)}function Gs(e){let t=e._map;if(!t)return;let r=t.project(t.getCenter(),0).divideBy(256),o=[],i,n;for(i of I.get(e).values())i.started||i.request.signal.aborted||({coords:n}=i,o.push({tile:i,distance:Math.hypot((n.x+.5)/2**n.z-r.x,(n.y+.5)/2**n.z-r.y)}));o.sort(By);for({tile:i}of o){if(pe.get(e)>=4)break;zy(e,i)}}function Ay(e,t){let r=I.get(e),o,i,n;for([o,i]of r)!t.has(o)&&!i.done&&Oo(e,i);for([o,n]of t)r.has(o)||(i={coords:n,request:new AbortController,done:!1},r.set(o,i))}var Gr=[0,0];var Ur=[0,0];function Ry(e,t,r){let o=e.getBounds(),i=e.project(o.getNorthWest(),r).divideBy(256).floor(),n=e.project(o.getSouthEast(),r).divideBy(256).floor();Gr[0]=t.maxLat,Gr[1]=t.minLon,Ur[0]=t.minLat,Ur[1]=t.maxLon;let a=t.maxLat===void 0||t.minLon===void 0?null:e.project(Gr,r).divideBy(256).floor(),s=t.minLat===void 0||t.maxLon===void 0?null:e.project(Ur,r).divideBy(256).floor(),m=e.project(e.getCenter(),r).divideBy(256).floor();return{minX:Math.max(0,i.x,a?.x??0,m.x-6),maxX:Math.min(2**r-1,n.x,s?.x??2**r-1,m.x+6),minY:Math.max(0,i.y,a?.y??0,m.y-6),maxY:Math.min(2**r-1,n.y,s?.y??2**r-1,m.y+6)}}function Ns(e){let t=e._map;if(!t||!R.get(e)||!G.get(e))return;let r=Math.max(G.get(e).minZoom??0,Math.min(Math.round(t.getZoom()),e.options.maxZoom,e.options.maxNativeZoom));dr.set(e,r);let o=Ry(t,G.get(e),r),i=by;i.clear();let n,a,s,m,f;for(n=o.minX;n<=o.maxX;n++)for(a=o.minY;a<=o.maxY;a++)i.set(`${r}/${n}/${a}`,{z:r,x:n,y:a});pr.set(e,new Set(i.keys()));let p=My;p.clear();let c=Math.max(G.get(e).minZoom??0,r-2),l=2**(r-c);if(c<r)for([s,m]of i)I.get(e).get(s)?.done||(f={z:c,x:Math.floor(m.x/l),y:Math.floor(m.y/l)},p.set(`${f.z}/${f.x}/${f.y}`,f));let u=new Map(p);for([s,m]of i)u.set(s,m);i.clear(),p.clear(),Ay(e,u),Gs(e),zo(e)}async function Iy(e,t,r){try{await Promise.all([r,te.get(e)]),e._map===t&&t.hasLayer(e)&&Ns(e)}catch(o){e.fire("error",{error:o})}}function Dy(e,t){D.get(e)||D.set(e,t.getCenter());let r=ui(e,t);Ly(e,t,r),Iy(e,t,r)}var Fs=new WeakMap;var js=new WeakMap;var xi=new WeakMap;var Nr=new WeakMap;var po=new WeakMap;var Ws=new WeakMap;async function Gy(e){let{backend:t,archive:r,controller:o,tiles:i}=e,n,a;for(;e.next<i.length;){if(o.signal.throwIfAborted(),n=i[e.next++],a=await io(r,n.z,n.x,n.y,o.signal),!a||a.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${n.z}/${n.x}/${n.y}`);nt.get(t).set(`${n.x}/${n.y}`,new Float32Array(a.data))}}function Uy(e){if(!e.ok)throw new Error(`Bridges: HTTP ${e.status}`);return e.json()}L();function Ny(e,t){let r=e._map;ve.set(e,t.maxZoom),Gr[0]=t.maxLat,Gr[1]=t.minLon;let o=r.project(Gr,ve.get(e)).divideBy(256).floor();Ur[0]=t.minLat,Ur[1]=t.maxLon;let i=r.project(Ur,ve.get(e)).divideBy(256).floor();tr.set(e,new d.Bounds(o,i));let n=[],a=r.project(r.getCenter(),ve.get(e)).divideBy(256),s,m;for(s=o.x;s<=i.x;s++)for(m=o.y;m<=i.y;m++)n.push({z:ve.get(e),x:s,y:m,distance:Math.hypot(s+.5-a.x,m+.5-a.y)});return n.sort(xs),n}var co=new WeakMap;V();L();function Fy([e,t,r],o,i,n,a){let s=o.project(new d.LatLng(t,e));return[(s.x-i.x)*n,r-a,-(s.y-i.y)*n]}function jy(e,t){let r=[],o=0,i,n,a;for(i of e){for(n=[],a=0;a<i.length;a++)n.push({x:t[o+a][0],y:t[o+a][1]});r.push(n),o+=i.length}return r}function Wy(e,t,r){let o=[],i=1/0,n=1/0,a=-1/0,s=-1/0,m,f,p,c,l,u,h,x;for(m of r){f=[];for(p of m)f.push(t[p]);o.push(f)}for(c of t)i=Math.min(i,c[0]),n=Math.min(n,c[1]),a=Math.max(a,c[0]),s=Math.max(s,c[1]);let y={triangles:o,min:[i,n],max:[a,s]};for(l=Math.floor(y.min[0]/64);l<=Math.floor(y.max[0]/64);l++)for(u=Math.floor(y.min[1]/64);u<=Math.floor(y.max[1]/64);u++)h=`${l}/${u}`,x=lt.get(e).get(h),x||lt.get(e).set(h,x=[]),x.push(y)}function $y(e,t,r){let{position:o,normal:i,color:n}=e,a,s,m,f,p,c,l,u,h;for([a,s,m]of r)for(f=t[a],p=t[s],c=t[m],(p[2]-f[2])*(c[0]-f[0])-(p[0]-f[0])*(c[2]-f[2])<0&&(l=s,s=m,m=l),u=0;u<6;u++)l=u===0||u===3?a:u===1||u===5?s:m,h=t[l],o.push(h[0],h[1]-(u>=3?1.2:0),h[2]),i.push(0,u>=3?-1:1,0),n.push(.6,.58,.54)}function Vy(e,t,r){let{position:o,normal:i,color:n}=e,a=Math.hypot(r[0]-t[0],r[2]-t[2])||1,s=(r[2]-t[2])/a,m=-(r[0]-t[0])/a,f,p;for(f=0;f<6;f++)p=f===0||f===3||f===5?t:r,o.push(p[0],p[1]-(f===2||f>=4?1.2:0),p[2]),i.push(s,0,m),n.push(.6,.58,.54)}function Zy(e,t,r){let o=0,i,n;for(i of r){for(n=0;n<i.length;n++)Vy(e,t[o+n],t[o+(n+1)%i.length]);o+=i.length}}function qy(e,t){let{backend:r,map:o,zoom:i,crs:n,origin:a,metres:s,base:m}=e,f=[],p,c,l,u,h,x,y,g,v,T,P;for(p of t)c=p.slice(0,-1),c.length>=3&&f.push(c);if(!f.length)return;let k=[],z=[];for(p of f)for([l,u,h]of p)x=o.project([u,l],i),k.push([x.x,x.y,h]);for(p of f)for(y of p)z.push(Fy(y,n,a,s,m));try{g=jy(f,k),[v,...T]=g,P=sa(v,T)}catch{return}Wy(r,k,P),$y(e,z,P),Zy(e,z,f)}function Hy(e,t){let r=e._map,o=r.options.crs,i=ve.get(e),n=o.project(D.get(e)),a=Math.cos(D.get(e).lat*B),s=M.get(e).position[1],m=[],f=[],p=[];lt.set(e,new Map);let c={backend:e,map:r,crs:o,zoom:i,origin:n,metres:a,base:s,position:m,normal:f,color:p},l,u,h;for({geometry:l}of t.features)if(!(l.type!=="Polygon"&&l.type!=="MultiPolygon"))for(u=l.coordinates,h=0;h<(l.type==="Polygon"?1:u.length);h++)qy(c,l.type==="Polygon"?u:u[h]);m.length&&co.set(e,yr(e,{position:m,normal:f,color:p}))}function Xy(e,t,r){ke.set(e,!0),et.set(e,ur(e,D.get(e))??0);let o;for(o of Object.values(t._layers))fi(o),di(o,e);r&&Hy(e,r),t.fire("terrainchange"),E(e),e.fire("terrainready")}async function $s(e){if(Nr.get(e)||!e._map)return;Nr.set(e,!0),ke.set(e,!1);let t=new AbortController;xi.set(e,t);let r;try{if(!po.get(e))throw new Error("Terrain layer requires a PMTiles or COG elevation archive");let o=pa({source:{type:"raster",url:po.get(e),archive:e.options.archive,asset:e.options.asset,workerUrl:e.options.workerUrl}});Ws.set(o,e._map),js.set(e,o),await te.get(o);let i=G.get(o);if(i.tileType!==0||i.minZoom!==i.maxZoom)throw new Error("Expected a single-zoom Float32 terrain archive");let n=e._map,a=Ny(e,i),s={backend:e,archive:o,controller:t,tiles:a,next:0},m=[];for(r=0;r<Math.min(4,a.length);r++)m.push(Gy(s));await Promise.all(m);let f=e.options.bridges&&await fetch(e.options.bridges,{signal:t.signal}).then(Uy);return t.signal.aborted||e._map!==n?void 0:(Xy(e,n,f),!0)}catch(o){return t.signal.aborted||e.fire("error",{error:o}),!1}finally{Nr.set(e,!1)}}function Yy(){$s(this.backend).then(this.resolve,this.reject)}function Jy(e){A.get(e)==="raster"&&yi(e,this)}function Ky(e,t){if(Pe.get(t)||fe.get(t)&&fe.get(t)!==e)throw new Error("Only one terrain layer can be active per map");if(Fs.get(e)){Pe.set(t,{layer:e,map:t,terrainCache:new Map,terrainController:new AbortController}),pn(e,t),t.fire("terrainchange");return}if(fe.set(t,e),pn(e,t),M.get(e))rr.set(e,$s(e));else{let r=Promise.withResolvers();rr.set(e,r.promise),e.once("ready",Yy,{backend:e,...r})}t.eachLayer(Jy,e),t.fire("terrainchange")}var Vs=[];function Qy(){Vs.shift()?.fire("load")}function ex(){this._image||this._initImage(),this._image.complete&&this._image.naturalWidth&&(Vs.push(this),queueMicrotask(Qy))}function tx(e,t){switch(A.get(e)){case"3d":return pn(e,t);case"raster":return Dy(e,t);case"terrain":return Ky(e,t);case"image":return ex.call(e,t);case"time":return dh.call(e,t)}}function rx(e){if(!e._map)return;let t;for(t of X.get(e).values())no(e,t);X.get(e).clear(),ao(e)}function ox(e){let t={};return ne.get(e)&&(t.moveend=t.zoomend=t.rotate=t.pitch=t.resize=ao.bind(null,e)),(Y.get(e)||ne.get(e))&&(t.terrainchange=rx.bind(null,e)),t}function ix(e){let t=Ns.bind(null,e);return{moveend:t,zoomend:t,rotate:t,pitch:t,resize:t}}function nx(){return{}}L();function ax(e){return!zr.get(e)&&(e instanceof d.GridLayer||e instanceof d.Polyline||e instanceof d.CircleMarker||e instanceof d.Marker&&!(e.options.icon instanceof d.DivIcon)||e instanceof d.ImageOverlay&&!(e instanceof d.VideoOverlay)&&!(e instanceof d.SVGOverlay))}function sx(e){let t=ax(this);t&&((this instanceof d.GridLayer||this instanceof d.ImageOverlay)&&(this.options.crossOrigin||=!0),this instanceof d.Marker&&(this.options.icon.options.crossOrigin||=!0));let r=e.target;r.hasLayer(this)&&(A.get(this)?(this._map=r,this._zoomAnimated=r._zoomAnimated,A.get(this)!=="pending"&&A.get(this)!=="time"&&(Ir.set(this,A.get(this)==="raster"?ix(this):zr.get(this)?ox(this):nx()),fo.set(this,r),r.on(Ir.get(this),this),this.once("remove",ay,this)),tx(this,r),this.fire("add"),r.fire("layeradd",{layer:this})):ft.value._layerAdd.call(this,e),!(!t||!e.target.hasLayer(this))&&xa(this,e.target))}L();var Zs=[];var qs={value:Promise.resolve()};function mx(e,t){Y.set(e,!0),At(e,t)}function fx(e){return e.data===void 0&&(e.tileJSON!==void 0||typeof e.url=="string"&&/\{[zxy]\}|%7B[zxy]%7D/i.test(e.url))}L();var Be=new WeakMap;async function px(e){let t=new URL(e.tileJSON,document.baseURI).href,r=await fetch(t);if(!r.ok)throw new Error(`TileJSON: HTTP ${r.status}`);let o=await r.json();if(!o||!Array.isArray(o.tiles)||!o.tiles.length||typeof o.tiles[0]!="string")throw new Error("TileJSON requires a tile URL template");return{...e,url:new URL(o.tiles[0],t).href,minNativeZoom:e.minNativeZoom??o.minzoom,maxNativeZoom:e.maxNativeZoom??o.maxzoom,attribution:e.attribution??o.attribution}}function cx(e){let t="",r=!1,o=!1,i=0,n="";for(i=0;i<e.length;i++)n=e[i],!(!r&&n===","&&/^\s*[\]}]/.test(e.slice(i+1)))&&(t+=n,o?o=!1:r&&n==="\\"?o=!0:n==='"'&&(r=!r));return t}function lx(e,t){if(t.quoted)return t.escaped?(t.escaped=!1,e==="'"?e:"\\"+e):e==="\\"?(t.escaped=!0,""):e===t.quoted?(t.quoted="",'"'):e==='"'?'\\"':e;if(e==='"'||e==="'")return t.quoted=e,'"'}function ux(e,t,r){if(r==="/"){for(;t<e.length&&e[t]!==`
3
+ `;)t++;return t}let o=e.indexOf("*/",t+2);if(o<0)throw new Error("Unterminated style comment");return o+1}function dx(e){let t="",r=0,o="",i="",n,a={quoted:"",escaped:!1};for(r=0;r<e.length;r++){if(o=e[r],i=e[r+1],n=lx(o,a),n!==void 0){t+=n;continue}o==="/"&&(i==="/"||i==="*")?(r=ux(e,r,i),t+=i==="/"?`
4
+ `:" "):t+=o}return t}function hx(e){let t=0,r=null;if(!Array.isArray(e))throw new Error("Invalid vector style layers");for(t=0;t<e.length;t++)if(r=e[t],!r||typeof r.id!="string"||typeof r.type!="string")throw new Error("Invalid vector style layers")}function gx(e){let t=/^\s*(?:const|let|var)\s+otm_layers\s*=\s*/.exec(e);t&&(e=e.slice(t[0].length));let r=cx(dx(e).trim().replace(/;$/,"")),o=JSON.parse(r),i=o.layers??o;return hx(i),i}async function yx(e){if(typeof e=="string"){let r=await fetch(e);if(!r.ok)throw new Error(`Vector style: HTTP ${r.status}`);e=gx(await r.text())}else e=e?.layers??e;if(!Array.isArray(e))throw new Error("Invalid vector style layers");let t;for(t of e)if(!t||typeof t.id!="string"||typeof t.type!="string")throw new Error("Invalid vector style layers");return e}function xx(e,t,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(r)||e<0||t<e||r<t||r>24)throw new Error("Invalid vector tile zoom range")}async function vx(e){if(!e||typeof e!="object")throw new TypeError("Vector tiles require source options");e.tileJSON&&(e=await px(e));let{url:t,style:r,minNativeZoom:o=0,maxNativeZoom:i=14,maxZoom:n=19}=e,a;typeof t=="string"&&(t=t.replaceAll(/%7B([zxy])%7D/gi,"{$1}"));for(a of["{z}","{x}","{y}"])if(typeof t!="string"||!t.includes(a))throw new Error("Vector tiles require an XYZ URL template");return xx(o,i,n),r=await yx(r),{...e,url:t,style:r,minNativeZoom:o,maxNativeZoom:i,maxZoom:n}}async function wx(e){let t=await fetch(`${e}.json`);if(!t.ok)throw new Error(`Sprite ${e}.json: HTTP ${t.status}`);return{url:`${e}.png`,index:await t.json()}}var Hs="move zoom rotate pitch resize viewreset";function Lx(e,t,r,o,i){let n=0;if(e==="all"){for(n=0;n<t.length;n++)if(!O(t[n],r,o,i))return!1;return!0}if(e==="any"){for(n=0;n<t.length;n++)if(O(t[n],r,o,i))return!0;return!1}throw new Error(`Unsupported vector style expression: ${e}`)}function bx(e,t,r,o,i){let n=0,a=null;if(e==="coalesce"){for(n=0;n<t.length;n++)if(a=O(t[n],r,o),a!=null)return a;return null}if(e==="case"){for(n=0;n<t.length-1;n+=2)if(O(t[n],r,o))return O(t[n+1],r,o);return O(t[t.length-1],r,o)}throw new Error(`Unsupported vector style expression: ${e}`)}function Fr(e,t,r,o){return o&&typeof e=="string"?t[e]:O(e,t,r)}function Mx(e,t,r,o,i){let n=Fr(t[0],r,o,i),a=O(t[1],r,o);switch(e){case"==":return n===a;case"!=":return n!==a;case"<=":return n<=a;case">=":return n>=a;case"<":return n<a;case">":return n>a;default:throw new Error(`Unsupported vector style expression: ${e}`)}}var jf={black:[0,0,0,1],white:[255,255,255,1],gray:[128,128,128,1],blue:[0,0,255,1],red:[255,0,0,1],green:[0,128,0,1]};function Bx(e){let t=/^rgba?\(([^)]+)\)$/.exec(e);if(t){let r=t[1].split(","),o=0,i=!0;for(o=0;o<r.length;o++)r[o]=Number(r[o]);for(r.length===3&&r.push(1),o=0;o<r.length;o++)Number.isFinite(r[o])||(i=!1);if(r.length===4&&i)return r}throw new Error(`Unsupported interpolated style color: ${e}`)}function Tx(e){let t=0,r=0;e.length===4&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let o=[];for(t=1;t<6;t+=2)r=parseInt(e.slice(t,t+2),16),o.push(r);return o.push(1),o}function jr(e){return Object.hasOwn(jf,e)?jf[e]:/^#[0-9a-f]{3}$/i.test(e)||/^#[0-9a-f]{6}$/i.test(e)?Tx(e):Bx(e)}function Px(e,t,r){let o=O(e[1],t,r),i=e[0][0]==="exponential"?e[0][1]:1,n=0,a=0,s=0,m=0,f=null,p=null,c=0,l="";if(o<=e[2])return O(e[3],t,r);for(n=4;n<e.length;n+=2)if(!(o>e[n])){if(a=e[n-2],s=e[n],m=i===1?(o-a)/(s-a):(i**(o-a)-1)/(i**(s-a)-1),f=O(e[n-1],t,r),p=O(e[n+1],t,r),typeof f=="number"&&typeof p=="number")return f+(p-f)*m;for(f=jr(f),p=jr(p),c=0;c<3;c++)c&&(l+=","),l+=Math.round(f[c]+(p[c]-f[c])*m);return`rgba(${l},${f[3]+(p[3]-f[3])*m})`}return O(e.at(-1),t,r)}function Wf(e,t,r,o){let i=0,n=null;for(i=t;i<r;i++)if(n=e[i],n===o||n!==n&&o!==o)return!0;return!1}function Xs(e,t,r,o,i){let n=null;if(e==="!in")return n=Fr(t[0],r,o,i),!Wf(t,1,t.length,n);if(i)return n=Fr(t[0],r,o,!0),Wf(t,1,t.length,n);let a=O(t[1],r,o);return n=Fr(t[0],r,o,!1),a.includes(n)}function kx(e,t,r,o,i){if(e==="in")return Xs(e,t,r,o,i);if(e==="interpolate")return Px(t,r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function Sx(e,t,r,o){let i=0,n=0;if(e==="+"){for(i=0;i<t.length;i++)n+=O(t[i],r,o);return n}if(e==="-")return t.length===1?-O(t[0],r,o):O(t[0],r,o)-O(t[1],r,o);throw new Error(`Unsupported vector style expression: ${e}`)}function Cx(e,t,r){let o=O(e[0],t,r),i=0,n=!1;for(i=1;i<e.length-1;i+=2)if(Array.isArray(e[i])?n=e[i].includes(o):n=e[i]===o,n)return O(e[i+1],t,r);return O(e[e.length-1],t,r)}function _x(e,t,r,o,i){if(e==="!")return!O(t[0],r,o,i);if(e==="!=")return Fr(t[0],r,o,i)!==O(t[1],r,o);if(e==="!in")return Xs(e,t,r,o,i);throw new Error(`Unsupported vector style expression: ${e}`)}function Ex(e,t,r,o){switch(e){case"literal":return t[0];case"get":return r[t[0]];case"has":return Object.hasOwn(r,t[0]);case"zoom":return o;default:throw new Error(`Unsupported vector style expression: ${e}`)}}function Ox(e,t,r){let o=O(e[0],t,r),i=e[1],n=0;for(n=2;n<e.length&&!(o<e[n]);n+=2)i=e[n+1];return O(i,t,r)}function zx(e,t,r,o){if(e==="to-boolean")return!!O(t[0],r,o);if(e==="to-number"){let i=0,n=0;for(i=0;i<t.length;i++)if(n=Number(O(t[i],r,o)),Number.isFinite(n))return n;throw new Error("Invalid numeric style expression")}throw new Error(`Unsupported vector style expression: ${e}`)}function O(e,t,r,o=!1){if(!Array.isArray(e))return e;let i=e[0],n=e.slice(1),a=String(i);if(/^(?:literal|get|has|zoom)$/.test(a))return Ex(i,n,t,r);switch(a[0]){case"a":return Lx(i,n,t,r,o);case"!":return _x(i,n,t,r,o);case"=":case"<":case">":return Mx(i,n,t,r,o);case"i":return kx(i,n,t,r,o);case"t":return zx(i,n,t,r,o);case"c":return bx(i,n,t,r,o);case"m":return Cx(n,t,r);case"s":return Ox(n,t,r);default:return Sx(i,n,t,r)}}function tt(e){return e._map.getZoom()+(Be.get(e).styleZoomOffset??0)}function Ax(){clearTimeout(this.timer),this.changedAt=performance.now(),this.timer=setTimeout(this.update.bind(this),180)}V();function Ys(e,t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return e.options.rotation=t,e.update(),Ct(e),e}function dn(e,t,r){if(!r.along)return;let o=e.latLngToContainerPoint(r.along[0]),i=e.latLngToContainerPoint(r.along[1]),n=Math.atan2(i.y-o.y,i.x-o.x)/B;n>90?n-=180:n<-90&&(n+=180),t.options.rotation!==n*B&&Ys(t,n*B)}function Rx(){let e;for(e of this.labels.values())e._mvtLabel&&dn(this._map,e,e._mvtLabel)}var vi=new WeakMap;function wi(e){let t=vi.get(e);t?.blobUrl&&(URL.revokeObjectURL(t.blobUrl),t.blobUrl=null)}function Ix({data:e}){wi(this);let t=this.waiting.get(e.id);t&&(this.waiting.delete(e.id),e.error?t.reject(new Error(e.error)):t.resolve(e))}function Dx(e){wi(this);let t=new Error(`Worker MVT: ${e.message}`),r;for(r of this.waiting.values())r.reject(t);this.waiting.clear(),Ye(this,t)}function Gx(e){let{style:t,pane:r}=Be.get(this),o,i;for([o]of t.entries())(e.getPane(`${r}-${o}`)||e.createPane(`${r}-${o}`)).style.zIndex=200+o;for(i of t)if(i.type==="background"){e.getContainer().style.background=O(i.paint["background-color"],{},tt(this));break}this.session={},this.tiles=new Map,this.labels=new Map,this.waiting=new Map,this.retiring=new Set,this.inflight=0,this.sequence=0,this.changedAt=0,this.paintZoom=null;let n=ys(this.options.workerUrl||gs);vi.set(this,n),this.worker=n.worker,this.worker.onmessage=Ix.bind(this),this.worker.onerror=Dx.bind(this),this.refresh=Ax.bind(this),this.rotateLabels=Rx.bind(this),e.on(Hs,this.refresh),e.on("move rotate pitch",this.rotateLabels),this.update()}function Ux(e){e.off(Hs,this.refresh),e.off("move rotate pitch",this.rotateLabels),clearTimeout(this.timer),this.session=null,this.worker.terminate(),wi(this),vi.delete(this);let t,r,o,i;for(t of this.waiting.values())t.reject(new DOMException("Layer removed","AbortError"));this.waiting.clear();for(r of this.tiles.values())r.controller.abort(),r.group?.remove();for(o of this.retiring)o.remove();for(i of this.labels.values())i.remove();this.tiles.clear(),this.labels.clear(),this.retiring.clear()}function Nx(){if(!this.session)return;let{minNativeZoom:e,maxNativeZoom:t}=Be.get(this),r=Math.max(e,Math.min(t,Math.floor(tt(this)))),o=this._map.getBounds(),i=2**r,n=this._map.project(o.getNorthWest(),r).divideBy(256),a=this._map.project(o.getSouthEast(),r).divideBy(256),s,m,f,p;for(s of this.tiles.values())s.needed=!1;for(m=Math.floor(n.x);m<=Math.floor(a.x);m++)for(f=Math.max(0,Math.floor(n.y));f<=Math.min(i-1,Math.floor(a.y));f++)p=`${r}/${m}/${f}`,s=this.tiles.get(p),s||(s={key:p,coords:{z:r,x:m,y:f},controller:new AbortController},this.tiles.set(p,s)),s.needed=!0;this.prune(),this.pump(),this.updatePaint().catch(Ye.bind(null,this)),this.updateLabels().catch(Ye.bind(null,this))}function Wr(e,t,r,o,i){return e[t]===void 0?r:O(e[t],o,i)}function Fx(e,t,r){let o=jr(Wr(e,"fill-color","#000",t,r)),i=Wr(e,"fill-outline-color",null,t,r),n=i===null?null:jr(i),a=Wr(e,"fill-opacity",1,t,r)*o[3],s={r:o[0]/255,g:o[1]/255,b:o[2]/255},m=n?{r:n[0]/255,g:n[1]/255,b:n[2]/255}:null;return{fillColor:s,fillOpacity:a,color:m,weight:.5}}function jx(e,t,r,o){if(!e)return;let i=e,n=0,a="";if(typeof e[0]!="number"&&(i=O(e,r,o)),!Array.isArray(i))throw new TypeError("Style dash array must be an array");for(n=0;n<i.length;n++)n&&(a+=" "),a+=i[n]*t;return a}function Wx(e,t,r,o){let i=Wr(t,"line-width",1,r,o),n=jr(Wr(t,"line-color","#000",r,o)),a=Wr(t,"line-opacity",1,r,o)*n[3],s=jx(t["line-dasharray"],i,r,o),m=e.layout?.["line-cap"]||"butt",f=e.layout?.["line-join"]||"miter";return{color:{r:n[0]/255,g:n[1]/255,b:n[2]/255},opacity:a,weight:i,dashArray:s,lineCap:m,lineJoin:f}}function $x(e,t,r){let o=e.paint||{};return e.type==="fill"?Fx(o,t,r):Wx(e,o,t,r)}function Js(e,t,r){return r>=(e.minzoom??0)&&r<(e.maxzoom??1/0)&&e.layout?.visibility!=="none"&&(!e.filter||O(e.filter,t,r,!0))}function Ks(e,t){let r=$x(e.entry,e.properties,t);return Js(e.entry,e.properties,t)||(r.opacity=0,r.fillOpacity=0),r}function Vx(e,t){let r=Ks(e,t),{layer:o}=e;e.kind==="line"?r.dashArray!==o.options.dashArray?o.setStyle(r):o.setStyle({color:r.color,opacity:r.opacity,weight:r.weight}):(JSON.stringify(r.fillColor)!==JSON.stringify(o.options.fillColor)||r.fillOpacity!==o.options.fillOpacity)&&o.setStyle({fillColor:r.fillColor,fillOpacity:r.fillOpacity})}function lo(e,t){return e.session===t&&performance.now()-(e.changedAt||0)>=180}function vt(e=0){let t=Promise.withResolvers();return setTimeout(t.resolve,e),t.promise}async function Zx(){let e=tt(this),t=this.session;if(this.paintZoom===e)return;let r=this.paintRevision=(this.paintRevision||0)+1,o=0,i,n;for(i of this.tiles.values())if(i.rendered)for(n of i.rendered){if(!lo(this,t)||this.paintRevision!==r||tt(this)!==e)return;Vx(n,e),++o%32===0&&await vt()}this.paintZoom=e}function qx(e,t){return e.priority-t.priority}function Hx(e){let t=[],r,o;for(r of e.tiles.values())if(!(!r.needed||!r.labelCandidates))for(o of r.labelCandidates)t.push(o);return t.sort(qx)}function Xx(e,t){e.size=O(e.entry.layout?.["text-size"]??12,e.properties,t),e.color=O(e.entry.paint?.["text-color"]??"#000",e.properties,t),e.halo=O(e.entry.paint?.["text-halo-color"]??"#fff",e.properties,t),e.haloWidth=O(e.entry.paint?.["text-halo-width"]??0,e.properties,t)}function Yx(e,t,r){let o=e._map,i=tt(e);if(!Js(t.entry,t.properties,i)||(Xx(t,i),!(t.size>0))||t.icon&&!Be.get(e).spriteSheet?.index[t.icon]||t.along&&t.pixelBase*2**o.getZoom()<t.text.length*t.size*.6)return null;let n=o.latLngToContainerPoint(t.latlng);if(n.x<0||n.y<0||n.x>r.x||n.y>r.y)return null;let a=t.text.length*t.size*.65+16,s=[],m,f;for(m=Math.floor((n.x-a/2)/32);m<=Math.floor((n.x+a/2)/32);m++)for(f=Math.floor((n.y-t.size)/24);f<=Math.floor((n.y+t.size)/24);f++)s.push(`${m}:${f}`);return s}function Jx(e,t){let r;for(r of e)if(t.has(r))return!1;for(r of e)t.add(r);return!0}L();L();L();function Kx(e,t){let{x:r,y:o,width:i,height:n}=t.index[e.icon],[a,s]=e.iconOffset;return new d.DivIcon({className:"",html:`<div style="width:${i}px;height:${n}px;background:url(${t.url}) -${r}px -${o}px"></div>`,iconSize:[i,n],iconAnchor:[i/2-a,n/2-s]})}function Qx(e){let t=Math.floor(19.23076923076923),r=[],o="",i;for(i of e.split(" "))o&&Array.from(`${o} ${i}`).length>t?(r.push(o),o=i):o=o?`${o} ${i}`:i;return r.push(o),r}function $f(e,t){if(e.icon)return Kx(e,t);let r=document.createElementNS("http://www.w3.org/2000/svg","svg"),o=e.along?[e.text]:Qx(e.text),i=0,n,a,s,m;for(n of o)i=Math.max(i,Array.from(n).length);let f=Math.max(40,i*e.size*.65+12),p=e.size*1.2,c=o.length*p+12;r.setAttribute("width",f),r.setAttribute("height",c);let l={x:f/2,"text-anchor":"middle","font-family":"sans-serif","font-size":e.size,fill:e.color,stroke:e.halo,"stroke-width":e.haloWidth*2,"paint-order":"stroke"};for(m=0;m<o.length;m++){s=document.createElementNS(r.namespaceURI,"text");for(a of Object.keys(l))s.setAttribute(a,l[a]);s.setAttribute("y",c/2+(m-(o.length-1)/2)*p+e.size*.35),s.textContent=o[m],r.append(s)}return new d.Icon({iconUrl:`data:image/svg+xml;charset=utf-8,${encodeURIComponent(new XMLSerializer().serializeToString(r))}`,iconSize:[f,c],iconAnchor:[f/2,c/2]})}function Qs({error:e}){Ye(this,e)}function e0(e,t,r){let o=JSON.stringify([t.size,t.color,t.halo,t.haloWidth,t.icon]),i=Be.get(e).spriteSheet,n=e.labels.get(r);if(n){if(n._mvtLabel=t,n._mvtLabelStyle===o)return dn(e._map,n,t),!1;n.setIcon($f(t,i))}else{let{pane:a}=Be.get(e);n=new d.Marker(t.latlng,{icon:$f(t,i),pane:`${a}-${t.order}`,title:t.text,alt:t.text,interactive:!1,keyboard:!1,rotateWithView:!1}).on("error",Qs,e).addTo(e._map),e.labels.set(r,n)}return n._mvtLabelStyle=o,n._mvtLabel=t,dn(e._map,n,t),!0}async function t0(){let e=this.session,t=this.labelRevision=(this.labelRevision||0)+1;this.labelsReady=!1;let r=Hx(this),o=this._map.getSize(),i=new Set,n=new Set,a=0,s,m,f,p;for(s of r){if(++a%128===0&&await vt(),!lo(this,e)||this.labelRevision!==t)return;f=Yx(this,s,o),!(!f||!s.allowOverlap&&!Jx(f,i))&&(m=`${s.text}${s.icon||""}:${s.latlng.join(":")}`,n.add(m),e0(this,s,m)&&await vt())}for([m,p]of this.labels){if(!lo(this,e)||this.labelRevision!==t)return;n.has(m)||(p.remove(),this.labels.delete(m),await vt())}this.labelsReady=!0}function r0(e,t){let r=e.z-t.z;return r>=0?e.x>>r===t.x&&e.y>>r===t.y:t.x>>-r===e.x&&t.y>>-r===e.y}function o0(e,t){let r;for(r of e.tiles.values())if(r.needed&&!r.group&&r0(r.coords,t.coords))return!0;return!1}function i0(){let e,t;for([t,e]of this.tiles)e.needed||e.group&&o0(this,e)||(e.controller.abort(),this.tiles.delete(t),e.group&&this.retire(e.group).catch(Ye.bind(null,this)))}async function n0(e){let t=this.session;this.retiring.add(e);let r=0,o;for(o of e.getLayers()){if(this.session!==t)return;e.removeLayer(o),++r%8===0&&await vt()}e.remove(),this.retiring.delete(e)}function a0(e,t){return e.distance-t.distance}function s0(){if(!this.session)return;let e=this._map.getCenter(),t=[],r,o;for(r of this.tiles.values())!r.needed||r.started||(o=this._map.project(e,r.coords.z).divideBy(256),r.distance=(r.coords.x-o.x)**2+(r.coords.y-o.y)**2,t.push(r));t.sort(a0);for(r of t){if(this.inflight>=4)break;r.started=!0,this.inflight++,this.load(r)}}L();L();function m0(e,t,r,o){let{pane:i}=Be.get(e),a={...Ks(o,tt(e)),pane:`${i}-${o.order}`,interactive:!1,smoothFactor:0},s=o.kind==="fill"?new d.Polygon(o.paths,{...a,stroke:!1,triangulated:!0}):new d.Polyline(o.paths,a);s.on("error",Qs,e),t.rendered.push({layer:s,kind:o.kind,entry:o.entry,properties:o.properties}),r.addLayer(s)}async function f0(e,t,r,o,i){let n,a=performance.now();for(n of o){for(;!lo(e,i)&&e.session===i&&!t.controller.signal.aborted;)await vt(50);if(t.controller.signal.aborted||e.session!==i)return!1;m0(e,t,r,n),performance.now()-a>8&&(await vt(),a=performance.now())}return!0}async function p0(e){let{coords:t,controller:r}=e,o=this.session,{url:i,style:n,sourceId:a,maxZoom:s,maxNativeZoom:m}=Be.get(this),f=2**t.z,p=(t.x%f+f)%f,c;try{let l=d.Util.template(i,{z:t.z,x:p,y:t.y}),u=await fetch(l,{signal:r.signal});if(!u.ok)throw new Error(`Tile ${e.key}: HTTP ${u.status}`);let h=await u.arrayBuffer();if(r.signal.aborted)return;let x=++this.sequence,y=Promise.withResolvers();this.waiting.set(x,y),this.worker.postMessage({type:"vector",id:x,buffer:h,coords:t,style:n,source:a,maxZoom:s,zoom:tt(this),mapZoom:t.z>=m?s:this._map.getZoom()},[h]);let g=await y.promise;if(r.signal.aborted||this.session!==o)return;if(c=new d.LayerGroup().addTo(this._map),e.rendered=[],!await f0(this,e,c,g.batches,o)){c.remove();return}e.group=c,e.labelCandidates=g.labels,this.fire("tileload",{coords:t,group:c}),this.prune(),this.refresh()}catch(l){c?.remove(),!r.signal.aborted&&this.session===o&&this.fire("error",{error:l})}finally{this.session===o&&(this.inflight--,this.pump())}}async function c0(e,t){let r=await vx(t);typeof r.sprite=="string"&&(r.spriteSheet=await wx(r.sprite));let{url:o,tileJSON:i,style:n,sourceId:a,minNativeZoom:s,maxNativeZoom:m,maxZoom:f,...p}=r;return d.Util.setOptions(e,p),r.pane=`mvt-${d.Util.stamp(e)}`,Be.set(e,r),Object.assign(e,{onAdd:Gx,onRemove:Ux,update:Nx,updatePaint:Zx,updateLabels:t0,prune:i0,retire:n0,pump:s0,load:p0}),e}function l0(e){let t=e._map;return t?.removeLayer(e),A.delete(e),t?.addLayer(e),e.fire("ready"),e}function em(e,t){throw e.fire("error",{error:t}),t}function u0(e,t){A.set(e,"pending");let r=c0(e,t).then(l0.bind(null,e)).catch(em.bind(null,e));te.set(e,r),r.catch(Ke)}L();async function d0(e,t){let r=await oo(t);return e.options.archive=t,G.set(e,r),e.options.maxNativeZoom===void 0&&(e.options.maxNativeZoom=r.maxZoom),e.options.maxZoom=Math.max(e.options.minZoom||0,e.options.maxZoom),e.fire("ready"),e}function h0(e){let t,r;for(t of I.get(e).values())Oo(e,t);if(ye.get(e)?.pipelineCache.clear(),ye.set(e,null),Dt.get(e)){for(r of Object.values(Dt.get(e).attributes))W(e,r.buffer);Dt.set(e,null)}}var $r=new WeakMap;var Li=new WeakMap;var tm={_3d:zr,_added:Me,_areas:X,_bridgeMesh:co,_bridges:lt,_cameraZIndexOffset:qr,_countStatus:Er,_cursor:Ar,_dem:Ge,_directories:Or,_etag:ni,_fadeFrame:$r,_fadeVersion:Li,_frame:pt,_geojson:Y,_header:Ki,_inflight:Qe,_layers:F,_loadingTiles:pe,_nativeGPU:he,_pointerEvents:Dr,_pruneAfter:$t,_pruneVersion:Ai,_pruneWanted:Ri,_queued:so,_rasterGeometry:Dt,_rasterProgram:ye,_rasterTiles:I,_rasterVersion:ze,_rendererReady:yt,_roofRaster:K,_roofRasters:_i,_sceneOrigin:oe,_shadowMeshes:jt,_shared:R,_size:cr,_terrain3D:ce,_terrainArchive:js,_terrainBaseY:Et,_terrainBounds:tr,_terrainController:xi,_terrainGrids:It,_terrainLoading:Nr,_terrainOriginElevation:et,_terrainPromise:rr,_terrainReady:ke,_terrainRequest:qn,_terrainTiles:nt,_terrainZoom:ve,_tileZoom:dr,_tooltip:De,_type:Jt,_visibleMeshes:Vr,_wantedRasterTiles:pr,_zoomLevel:li,_zoomTransitions:ge,_zoomView:Xe,camera:Q,container:Ie,control:_t,eventMap:fo,events:Ir,group:us,header:G,highlightedFeature:mt,hoveredFeature:_e,kind:A,location:D,model:qe,modelUrl:Ze,raycaster:ie,ready:te,renderer:w,root:M,scene:re,terrainSource:po,url:ne,walker:ls};L();var g0=["_layers","_sceneOrigin","_size","_zoomLevel","_zoomTransitions","_zoomView","_cursor","_roofRaster"];var y0=["_layers","_sceneOrigin","_size","_zoomLevel","_cursor"];async function x0(e,t){try{await e.device.queue.onSubmittedWorkDone(),e.depthTexture?.destroy(),e.colorTexture?.destroy(),e.roofFallbackTexture?.texture?.destroy(),e.uniformBuffer?.destroy(),e.sunlight?.texture?.destroy(),e.sunlight?.buffer?.destroy(),e.sunlight?.lights?.destroy()}catch(r){t.fire("error",{error:r})}e.device.destroy()}function v0(e,t){if(K.get(e)&&W(e,K.get(e).texture.texture),K.set(e,null),ge.get(e)){let i;for(i of ge.get(e).keys())i.play()}ge.set(e,null),Xe.set(e,null),ae.delete(t),t.getContainer().classList.remove("leaflet-camera-zoom");let r=w.get(e);r.canvas.remove(),x0(r,e),ee.delete(t);let o;for(o of y0)tm[o].delete(e)}function uo(e,t){Me.set(e,Promise.withResolvers()),Ie.get(e)&&(gi(e),d.DomEvent.off(Ie.get(e),Dr.get(e),e),Ie.set(e,null));let r,o,i,n;for(r of X.get(e).values())no(e,r);X.get(e).clear(),De.get(e)?.remove(),De.set(e,null),(ne.get(e)||Y.get(e))&&ds(e,!1);let a=R.get(e);if(a){if(q(M.get(e),null),F.get(a).delete(e),a===e)if(t.off("move zoom rotate pitch resize viewreset layeradd layerremove",en,e),t.off("zoomstart",tn,e),t.off("zoomanim",rn,e),t.off("zoomend",on,e),Zn(e),F.get(e).size){let s=F.get(e).values().next().value;for(o of g0)n=tm[o],n.set(s,n.get(e)),n.delete(e);for(i of F.get(s))R.set(i,s);ee.set(t,s),t.on("move zoom rotate pitch resize viewreset layeradd layerremove",en,s),t.on("zoomstart",tn,s),t.on("zoomanim",rn,s),t.on("zoomend",on,s),E(s)}else v0(e,t);else E(a);R.set(e,null),w.set(e,null),re.set(e,null),Q.set(e,null)}}function w0(e,t){h0(e),ce.set(e,null),uo(e,t)}L();function rm(e,t){A.set(e,"raster"),t={ariaLabel:"PMTiles raster",maxZoom:18,opacity:1,zIndex:0,...t},d.Util.setOptions(e,t),M.set(e,Ae()),X.set(e,new Map),I.set(e,new Map),pe.set(e,0),Me.set(e,Promise.withResolvers()),ne.set(e,new URL(t.url,document.baseURI).href),Or.set(e,new Map),te.set(e,Promise.resolve(e.options.archive||e).then(d0.bind(null,e)).catch(em.bind(null,e)))}var L0=Object.freeze([]);function b0(e){A.get(e)==="raster"&&yi(e,null)}function M0(e,t){let r=Pe.get(t);if(r?.layer===e){Pe.delete(t),r.terrainController.abort(),r.terrainCache.clear(),t.fire("terrainchange"),uo(e,t);return}xi.get(e)?.abort(),Nr.set(e,!1),ke.set(e,!1),t.eachLayer(b0);let o,i,n,a;for(o of I.get(e).keys())Eo(e,o);fe.get(t)===e&&fe.delete(t);for(i of Object.values(t._layers))di(i,null),fi(i);t.fire("terrainchange"),nt.get(e).clear(),et.set(e,0),rr.set(e,null),ye.get(e)&&ye.get(e).pipelineCache.clear(),ye.set(e,null),Ge.get(e)&&W(e,Ge.get(e).texture),Ge.set(e,null);for(n of It.get(e)?.values()||L0)for(a of Object.values(n))W(e,a.buffer);It.set(e,null),lt.set(e,null),Fe(e,co.get(e)),co.set(e,null),uo(e,t)}function B0(e,t){if(t.getTile!==void 0&&typeof t.getTile!="function")throw new Error("Streamed terrain requires a getTile function");let r=t.url,o={...t};delete o.url,At(e,o),po.set(e,r),nt.set(e,new Map),I.set(e,new Map),ke.set(e,!1),t.getTile&&Fs.set(e,!0),A.set(e,"terrain")}L();var om=Object.freeze({});var or=[[.86,.86,.88],[.1,.1,.12],[.5,.53,.57],[.65,.1,.08],[.12,.25,.55],[.85,.7,.15]];function T0(e){let t=or[e%or.length];return[[C(-.045,.045,-.85,-.25),.02,.62,er],[C(-.045,.045,.25,.85),.02,.62,er],[C(-.06,.06,-.5,.5),.4,.65,t],[C(-.32,.32,-.58,-.5),.95,1.02,er],[C(-.1,.1,.15,.4),.85,.92,er],[C(-.18,.18,-.12,.28),1,1.5,t],[C(-.11,.11,-.22,0),1.5,1.72,xt],[C(-.13,.13,-.23,.01),1.72,1.8,t],[C(-.25,-.15,-.5,-.05),1,1.25,xt],[C(.15,.25,-.5,-.05),1,1.25,xt],[C(-.2,-.08,0,.32),.3,1,Qt],[C(.08,.2,-.25,.07),.3,1,Qt]]}function P0(e){let t=Ms.body.slice();return t[1]=[t[1][0],t[1][1],t[1][2],or[e%or.length]],t.push([C(-.16,-.02,-.07,.07),.08,.9,Qt],[C(.02,.16,-.07,.07),.08,.9,Qt],[C(-.3,-.2,-.05,.05),.76,1.42,xt],[C(.2,.3,-.05,.05),.76,1.42,xt]),t}function bi(e){let t=e?.route_color;if(!/^[\da-f]{6}$/i.test(t))return[.1,.55,.65];let r=Number.parseInt(t,16);return[(r>>16&255)/255,(r>>8&255)/255,(r&255)/255]}var ho=[.12,.15,.18];var Gt=[.92,.93,.92];var Mi=[.05,.05,.05];var im=[1.9,1.85,1.7];var nm=[1.7,.06,.05];function Bi(e,t,r){let o=e-t/2,i=e+t/2;return[[C(-1.25,1.25,o,i),.45,1.25,r],[C(-1.2,1.2,o+.15,i-.15),1.25,2.65,ho],[C(-1.25,1.25,o,i),2.65,3.1,Gt],[C(-1.15,-.85,o+1,o+2),0,.7,Mi],[C(.85,1.15,i-2,i-1),0,.7,Mi],[C(-.9,.9,o-.03,o),.8,1.05,im],[C(-.9,.9,i,i+.03),.8,1.05,nm]]}function k0(e,t){return Bi(0,12,bi(t))}function S0(e,t){let r=bi(t),o=[],i;for(i=0;i<5;i++)o.push(...Bi((i-2)*6.5,6,r));return o}function C0(e,t){let r=bi(t),o=[],i;for(i=0;i<5;i++)o.push(...Bi((i-2)*15,14,r));return o}function ir(e,t,r,o,...i){return[[C(e,t,r,o),...i],[C(-t,-e,r,o),...i]]}function _0(e){let t=or[e%or.length];return[...ir(.7,.92,-1.68,-1.02,0,.64,Mi),...ir(.7,.92,1.02,1.68,0,.64,Mi),[[[-.9,-1.95],[-.72,-2.25],[.72,-2.25],[.9,-1.95],[.9,2.05],[.76,2.25],[-.76,2.25],[-.9,2.05]],.28,.82,t],[C(-.84,.84,-.75,1.6),.82,1.38,ho,C(-.7,.7,-.05,1.3)],[C(-.71,.71,-.06,1.31),1.38,1.46,t],...ir(.38,.8,-2.3,-2.16,.56,.76,im),[C(-.78,.78,2.16,2.3),.6,.76,nm]]}var Vf=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];function E0(){let e=[],t;for(t=0;t<12;t++)e.push(...ir(.5,3.8,-12+t*3,-11.3+t*3,3.9,4.4,[.62,.1,.1]));return e}function O0(){return[[Vf,0,.8,[.1,.16,.26]],[Vf,.8,1.4,Gt],[C(-5,5,-18,26),1.4,3.7,ho,C(-4.6,4.6,-17.4,25.6)],...ir(4.64,4.74,-17,25,3.25,3.45,[1.6,1.25,.8]),[C(-4.8,4.8,-17.8,25.8),3.7,3.9,Gt],...E0(),...ir(4.65,4.8,-13.6,25.8,3.9,4.8,Gt),[C(-4.8,4.8,25.65,25.8),3.9,4.8,Gt],[C(-2.2,2.2,-17.6,-14),3.9,4.7,Gt],[C(-2.2,2.2,-17.6,-14),4.7,5.5,ho],[C(-2.5,2.5,-18,-13.6),5.5,5.7,Gt],[C(-2.45,-2.2,-16.2,-15.8),5,5.3,[2,.15,.1]],[C(2.2,2.45,-16.2,-15.8),5,5.3,[.1,2,.4]],[C(-.1,.1,-15.9,-15.7),5.7,6.6,Gt],[C(-.15,.15,-15.95,-15.65),6.6,6.8,[2,2,1.9]]]}var z0={bicycle:{side:.4,model:T0},pedestrian:{side:.3,model:P0},bus:{side:1.5,model:k0},tram:{side:0,model:S0},metro:{side:0,model:C0},car:{side:1.8,model:_0,lights:[{position:[0,1.2,-6],radius:10,color:[1,.94,.82],flux:800}]},boat:{side:0,model:O0,lights:[{position:[0,8,4],radius:30,color:[1,.8,.55],flux:2e4}]}};var A0=" struct Params{seconds:f32,side:f32,vertices:u32,total:u32}struct Vehicle{start:u32,count:u32,base:f32,speed:f32}@group(0)@binding(0)var<uniform> params:Params;@group(0)@binding(1)var<storage,read> model:array<f32>;@group(0)@binding(2)var<storage,read> points:array<vec4f>;@group(0)@binding(3)var<storage,read> vehicles:array<Vehicle>;@group(0)@binding(4)var<storage,read_write> position:array<f32>;@group(0)@binding(5)var<storage,read_write> normal:array<f32>;var<workgroup> center:vec3f;var<workgroup> heading:vec2f;@compute@workgroup_size(64)fn main(@builtin(workgroup_id)group:vec3u,@builtin(local_invocation_index)thread:u32){let vehicleIndex = group.x;if(thread == 0u){let vehicle = vehicles[vehicleIndex];let last = vehicle.start + vehicle.count - 1u;let length = points[last].w;var s = vehicle.base + params.seconds * vehicle.speed;s -= length * floor(s / length);var i = vehicle.start + 1u;var end = last;while(i < end){let middle = i +(end - i)/ 2u;if(points[middle].w < s){i = middle + 1u;}else{end = middle;}}let a = points[i - 1u];let b = points[i];let d = select(b.w - a.w,1.0,b.w == a.w);let t =(s - a.w)/ d;heading =(b.xy - a.xy)/ d;center = vec3f(a.x +(b.x - a.x)* t - heading.y * params.side,a.z +(b.z - a.z)* t,a.y +(b.y - a.y)* t + heading.x * params.side);}workgroupBarrier();for(var vertex = thread;vertex < params.vertices;vertex += 64u){let k = vertex * 3u;let n = params.vertices * 3u + k;let o =(vehicleIndex * params.vertices + vertex)* 3u;position[o]= center.x - model[k]* heading.y - model[k + 2u]* heading.x;position[o + 1u]= center.y + model[k + 1u];position[o + 2u]= center.z + model[k]* heading.x - model[k + 2u]* heading.y;normal[o]= -model[n]* heading.y - model[n + 2u]* heading.x;normal[o + 1u]= model[n + 1u];normal[o + 2u]= model[n]* heading.x - model[n + 2u]* heading.y;}}";function R0({properties:e}){let t=document.createElement("div");t.style.whiteSpace="pre-line";let r=e.name?String(e.name):"";return e.departure&&(r+=`${r?`
5
5
  `:""}Departure ${e.departure} ${e.timetable.timeZone}`),e.description&&(r+=`${r?`
6
- `:""}${e.description}`),t.textContent=r,t}function om(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),ei(e.layer,e.status),e.update()}function B0(e){Tt.set(e.layer,e),e.ready&&om(e)}function ir(e,t){t&&(at.get(e.layer)?.mesh===t&&(Ot(e.layer,null),ke.set(e.layer,null),zt(e.layer,null)),Ge(e.layer,t))}function im(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function T0(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),ir(e,e.mesh),ir(e,e.route),e.mesh=e.route=null,Tt.delete(e.layer),im(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function P0(e){e.ready=!0,e.layer._map&&om(e)}function nm(e){let t=Qo.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function S0(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var Li=new Map;function Vf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function k0(e,t){return e-t}function C0(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=Li.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),Li.size>=32&&Li.delete(Li.keys().next().value),Li.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let h=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,x=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,g=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(x)===!1))for(u=Vf(m);u<=Vf(f);u+=p)g.push(u);g.sort(k0);let y=[];for(u of g)h>=u&&h<u+r&&y.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(h-u)/r});return y}function _0(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of C0(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=S0(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function am(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var E0=Object.freeze({unlit:!0});function O0(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let h=o[0]+n*f,x=o[1]+a*f,g=o[2]+(i[2]-o[2])*f+.4,y=o[0]+n*p,v=o[1]+a*p,S=o[2]+(i[2]-o[2])*p+.4,T;for(T=0;T<6;T++)T===0||T===3?e.push(h-s,g,x-m):T===1?e.push(h+s,g,x+m):T===5?e.push(y-s,S,v-m):e.push(y+s,S,v+m),t.push(0,1,0),r.push(c,l,u)}function z0(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let h=-l/u*2.5,x=c/u*2.5,g,y,v;for(g=Math.floor(i[n-1]/30)*30;g<i[n];g+=30)y=Math.max(0,(g-i[n-1])/u),v=Math.min(1,(g+18-i[n-1])/u),!(v<=y)&&O0(e,t,r,f,p,c,l,h,x,y,v,a,s,m)}function A0(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)z0(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function sm(e,t,r,o,i=0){let n=dr(e.layer,t,o,i);return n.extras.featureFaces=r,n}function R0(e){e.route=sm(e,A0(e.lanes),[],E0)}function mm(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};_e(f),e.mesh.geometry.bounds=f.bounds}function I0(e){let{trips:t,model:r,vertices:o}=e;if(ir(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of ci(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=sm(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,em,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,mm(e)}function ln(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function D0(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=ln(t,a),e.lanesDirty=!1}function G0(e){let{device:t}=w.get(e.layer);if(e.gpu?.device!==t){im(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:ln(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&D0(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=ln(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function U0(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function N0(e,t,r,o){let i;try{o?e.trips=_0(t,e.lanes,e.velocity):e.trips.length=0,i=U0(e,o)}catch(f){am(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&R0(e),n!==e.tripsKey&&(I0(e),e.tripsKey=n),e.mesh&&G0(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function F0(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function j0(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=Go(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function W0(e,t,r){e.mesh&&(F0(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&j0(e))}function $0(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!w.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=nm(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=N0(e,r,o,i),n===void 0)||(W0(e,o,t),(e.mesh||n)&&E(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function V0(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var Z0=Object.freeze([]);function q0({features:e=Z0}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}$();L();function H0(e){let t=me.get(e);return Te.get(t)&&t}function fm(e){let{layer:t,lanes:r}=e,o=H0(t._map),i=M.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??xe(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function Y0(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(D.get(t)),n=Math.cos(D.get(t).lat*B),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new d.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}fm(e),ir(e,e.route),e.route=null,e.tripsKey=null}function X0(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=q0(r),Y0(e),e.frame||e.tick()}}function J0(e,t,r){!t.aborted&&r.name!=="AbortError"&&am(e,r)}function K0(e){let{time:t}=nm(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;V0(e,t,r).then(X0.bind(null,e,r),J0.bind(null,e,r))}function Q0(e,t){t?.layer&&!_t.get(t.layer)?.time||(cancelAnimationFrame(e.frame),K0(e),e.tick())}function ev(e){e.lanes.length&&(fm(e),ir(e,e.route),e.route=null,e.mesh&&mm(e),e.frame||e.tick())}function tv(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=em){let{model:s,lights:m,side:f}=L0[r];o??=f,At(e,{tooltip:M0,nightLight:!!m,...a});let p=d.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=ci(s(0)),l=c.position.length,u=l/3,h=new ArrayBuffer(16),x=new Float32Array(h),g=new Uint32Array(h),y={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:h,paramFloats:x,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};y.shader=b0,y.tick=$0.bind(null,y),y.update=Q0.bind(null,y),y.terrain=ev.bind(null,y),Tt.set(e,y),e.on("ready",P0.bind(null,y)),e.on("add",B0.bind(null,y)),e.on("remove",T0.bind(null,y))}function rv(e){return e.header}function Zf(e,t,r,o,i){return ii(e.layer._map||Ns.get(e.layer),e.workerUrl,{type:"cog",url:e.url,asset:e.asset,z:t,x:r,y:o},i)}async function ov(e,t){let r={layer:e,url:new URL(t.url,document.baseURI).href,asset:t.asset,workerUrl:t.workerUrl},o=await Zf(r);return{getHeader:rv.bind(null,{header:o}),getZxy:Zf.bind(null,r)}}function iv(e,t){Qs(e,{ariaLabel:"COG raster",...t,archive:t.archive||ov(e,t)})}function nv(e,t=yr){switch(e){case"raster":return t.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(t.url)?iv:Qs;case"terrain":return l0;case"traffic":return tv;default:return null}}function av(){let e=Ws.shift();return e.initialize=nv(e.type,e.settings),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function sv(e){let{layer:t,ready:r}=e;if(e.error)return He(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),z.delete(t),e.initialize(t,e.settings),o?.addLayer(t),re.get(t)===r?t:re.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function pm(e=yr){if(Jt.has(this)||Jt.add(this),Object.getPrototypeOf(this)!==d.Layer.prototype||!e?.source){if(mt.value.initialize)return mt.value.initialize.apply(this,arguments);d.Util.setOptions(this,e);return}let{source:{type:t=/\.pmtiles(?:[?#]|$)|\.tiff?(?:[?#]|$)/i.test(e.source.url)?"raster":"vector",...r},...o}=e,i={...r,...o};if(d.Util.setOptions(this,o),Xt.set(this,t),t==="vector"){Jy(i)?t0(this,i):i.data!==void 0||i.style!==void 0&&!i.url||i.url&&!/\.(?:pmtiles|glb|gltf)(?:[?#]|$)/i.test(i.url)?Xy(this,i):At(this,i);return}z.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Ws.push(n),$s.value=$s.value.catch(Xe).then(av);let a=$s.value.then(sv);re.set(this,a),n.ready=a,a.catch(Xe)}L();function mv(e,t){switch(z.get(e)){case"3d":return po(e,t);case"raster":return m0(e,t);case"terrain":return c0(e,t);case"time":return uh.call(e,t)}}function fv(e){let t=d.Util.stamp(e);return this._layers[t]?z.get(e)?(this._loaded&&mv(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):dn.value.call(this,e):this}J();function pv(){return _(this)}Z();function cv(){return k(this)}ji();function lv(e,t){return Ht(this,e,t)}qo();function uv(e,t){return dt(this,e,t)}function dv(e){return qs(this,e)}L();L();var cm=new WeakMap;var lm=new WeakMap;var um=new WeakMap;function hv(e){return Do(this),this._parts=this._rings,cm.get(this).call(this,e)}function gv(){return this._map&&Do(this),lm.get(this).call(this)}function yv(){um.get(this).call(this),this._container.remove()}var nr=new Map;var Ut={value:null};function xv(e){nr.delete(e),Fr.set(e,null),!nr.size&&Ut.value!==null&&(cancelAnimationFrame(Ut.value),Ut.value=null)}function vv(){Ut.value=null;let e=[...nr],t,r;for([t,r]of e)nr.get(t)===r&&(nr.delete(t),Fr.set(t,null),dm.call(t))}function wv(e){yi.set(e,(yi.get(e)||0)+1),nr.set(e,yi.get(e)),Ut.value===null&&(Ut.value=requestAnimationFrame(vv)),Fr.set(e,Ut.value)}function dm(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),Ct(this),xv(e),r&&wv(e)}function Lv(){return Ct(this),this}function bv(){this instanceof d.Polyline||this instanceof d.CircleMarker?(this.beforeAdd=this._updateBounds=Xe,this.redraw=Lv,z.set(this,"path"),this instanceof d.Polyline&&(cm.set(this,this.closestLayerPoint),this.closestLayerPoint=hv),this instanceof d.Circle&&(lm.set(this,this.getBounds),this.getBounds=gv)):this instanceof d.GridLayer?(um.set(this,this._initContainer),this._initContainer=yv,this._updateOpacity=dm):this instanceof d.ImageOverlay&&!(this instanceof d.VideoOverlay)&&!(this instanceof d.SVGOverlay)&&(z.set(this,"image"),this._reset=Ct)}function qf(){let e=this._initHooksCalled;d.version.startsWith("2.")||mt.value.callInitHooks.call(this),(d.version.startsWith("2.")||!e)&&(Jt.add(this),bv.call(this))}L();var le=d?.Layer;function lo(e){let t=Reflect.construct(le,[],new.target);return pm.call(t,e),t.callInitHooks(),t}L();function Mv(){return le.addInitHook.apply(this===d.Layer?le:this,arguments),this}L();function Bv(e){return le.mergeOptions.call(this===d.Layer?le:this,e),this}mt.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(le.prototype));mt.value._layerAdd=le.prototype._layerAdd;mt.value.callInitHooks=le.prototype.callInitHooks;d.version.startsWith("2.")?(Object.setPrototypeOf(lo,le),lo.prototype=le.prototype,lo.initHooks=!0,lo.addInitHook=Mv,lo.mergeOptions=Bv,d.Layer=lo,le.prototype.constructor=d.Layer,le.addInitHook(qf)):(le.prototype.initialize=pm,le.prototype.callInitHooks=qf);Object.assign(le.prototype,{_layerAdd:Yy});dn.value=d.Map.prototype.removeLayer;Object.assign(d.Map.prototype,{removeLayer:fv,getPitch:pv,getBearing:cv,setPitch:lv,setBearing:uv});Object.assign(d.Marker.prototype,{setRotation:dv});})();
6
+ `:""}${e.description}`),t.textContent=r,t}function am(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),ii(e.layer,e.status),e.update()}function I0(e){Tt.set(e.layer,e),e.ready&&am(e)}function nr(e,t){t&&(mt.get(e.layer)?.mesh===t&&(Ot(e.layer,null),_e.set(e.layer,null),zt(e.layer,null)),Fe(e.layer,t))}function sm(e){e.gpu?.params?.destroy(),e.gpu?.template?.destroy(),e.gpu?.points?.destroy(),e.gpu?.vehicles?.destroy(),e.gpu=null}function D0(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),nr(e,e.mesh),nr(e,e.route),e.mesh=e.route=null,Tt.delete(e.layer),sm(e),e.lanes.length=0,e.trips.length=0,e.tripsKey=e.loaded=null}function G0(e){e.ready=!0,e.layer._map&&am(e)}function mm(e){let t=oi.get(e.layer._map),r=t?t.live:!0;return{live:r,time:r?new Date:t.time}}function U0(e,t,r=8){let o=Math.round(e*t/3600/r),i=Array.from({length:o}),n;for(n=0;n<i.length;n++)i[n]=(n+.5)*e/o;return i}var Ti=new Map;function qf(e){let t=e.split(":");return Number(t[0])*60+Number(t[1])}function N0(e,t){return e-t}function F0(e,{timeZone:t,duration:r,services:o}){let i=e instanceof Date?e:new Date(e);if(!Number.isFinite(i.getTime()))throw new Error("Invalid date");let n=Ti.get(t);n||(n=new Intl.DateTimeFormat("en-GB",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),Ti.size>=32&&Ti.delete(Ti.keys().next().value),Ti.set(t,n));let a={},s,m,f,p,c,l,u;for(s of n.formatToParts(i))s.type!=="literal"&&(a[s.type]=Number(s.value));let h=a.hour*60+a.minute+(a.second+i.getUTCMilliseconds()/1e3)/60,x=((Math.floor(Date.UTC(a.year,a.month-1,a.day)/864e5)+4)%7+7)%7,y=[];for({from:m,to:f,every:p=1/0,months:c,weekdays:l}of o)if(!(c?.includes(a.month)===!1||l?.includes(x)===!1))for(u=qf(m);u<=qf(f);u+=p)y.push(u);y.sort(N0);let g=[];for(u of y)h>=u&&h<u+r&&g.push({id:`${a.year}-${a.month}-${a.day}-${u}`,departure:`${String(Math.floor(u/60)).padStart(2,"0")}:${String(u%60).padStart(2,"0")}`,progress:(h-u)/r});return g}function j0(e,t,r){let o=[],i,n,a,s,m,f,p,c;for(i=0;i<t.length;i++)if(n=t[i],{timetable:a,flow:s=0}=n.properties,!!n.length)if(a)for(m of F0(e,a))o.push({id:`${i}-${m.id}`,lane:n,distance:m.progress*n.length,speed:n.length/(a.duration*60),properties:{...n.properties,departure:m.departure}});else for(f=e/1e3*r,p=n.offsets||=U0(n.length,s,r),c=0;c<p.length;c++)o.push({id:`${i}-${c}`,lane:n,distance:(p[c]+f)%n.length,speed:r,properties:n.properties});return o}function fm(e,t){e.error=t,e.status.textContent=`${e.vehicle}: Error: ${t.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",t)}var W0=Object.freeze({unlit:!0});function $0(e,t,r,o,i,n,a,s,m,f,p,c,l,u){let h=o[0]+n*f,x=o[1]+a*f,y=o[2]+(i[2]-o[2])*f+.4,g=o[0]+n*p,v=o[1]+a*p,T=o[2]+(i[2]-o[2])*p+.4,P;for(P=0;P<6;P++)P===0||P===3?e.push(h-s,y,x-m):P===1?e.push(h+s,y,x+m):P===5?e.push(g-s,T,v-m):e.push(g+s,T,v+m),t.push(0,1,0),r.push(c,l,u)}function V0(e,t,r,o,i,n,a,s,m){let f=o[n-1],p=o[n],c=p[0]-f[0],l=p[1]-f[1],u=i[n]-i[n-1];if(!u)return;let h=-l/u*2.5,x=c/u*2.5,y,g,v;for(y=Math.floor(i[n-1]/30)*30;y<i[n];y+=30)g=Math.max(0,(y-i[n-1])/u),v=Math.min(1,(y+18-i[n-1])/u),!(v<=g)&&$0(e,t,r,f,p,c,l,h,x,g,v,a,s,m)}function Z0(e){let t=[],r=[],o=[],i,n,a,s,m,f,p,c,l;for({points:i,lengths:n,properties:a}of e)for(s=a?.route_color,m=/^[\da-f]{6}$/i.test(s)?Number.parseInt(s,16):null,f=m===null?.08:(m>>16&255)/255,p=m===null?.7:(m>>8&255)/255,c=m===null?.85:(m&255)/255,l=1;l<i.length;l++)V0(t,r,o,i,n,l,f,p,c);return{position:t,normal:r,color:o}}function pm(e,t,r,o,i=0){let n=yr(e.layer,t,o,i);return n.extras.featureFaces=r,n}function q0(e){e.route=pm(e,Z0(e.lanes),[],W0)}function cm(e){let t=20,r=5,o,i,n,a,s;for(o=0;o<e.template.position.length;o+=3)t=Math.max(t,Math.hypot(e.template.position[o],e.template.position[o+2])+Math.abs(e.side)),r=Math.max(r,e.template.position[o+1]);let m=[];for(i of e.lanes)for([n,a,s]of i.points)m.push(n-t,s,a-t,n+t,s+r,a+t);let f={attributes:{position:{data:m}}};Oe(f),e.mesh.geometry.bounds=f.bounds}function H0(e){let{trips:t,model:r,vertices:o}=e;if(nr(e,e.mesh),e.mesh=null,!t.length)return;let i=[],n=[],a,s,m;for(a=0;a<t.length;a++){s=t[a];for(m of hi(r(a,s.properties)).color)i.push(m);n.push({id:s.id,properties:s.properties,faceStart:a*o/3,faceEnd:(a+1)*o/3,vertexStart:a*o,vertexEnd:(a+1)*o})}let f=i.length/3;e.mesh=pm(e,{position:new Array(i.length).fill(0),normal:new Array(i.length).fill(0),color:i},n,om,GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=f,e.mesh.extras.dynamicLights=!0,cm(e)}function hn(e,t){let r=e.createBuffer({size:Math.max(16,t.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(r,0,t),r}function X0(e,t){let r,o,i,n=0;for(r of e.lanes)n+=r.points.length;let a=new Float32Array(n*4),s=0;for(r of e.lanes)for(r.start=s/4,o=0;o<r.points.length;o++)i=r.points[o],a[s++]=i[0],a[s++]=i[1],a[s++]=i[2],a[s++]=r.lengths[o];e.gpu.points?.destroy(),e.gpu.points=hn(t,a),e.lanesDirty=!1}function Y0(e){let{device:t}=w.get(e.layer);if(e.gpu?.device!==t){sm(e);let c=new Float32Array(e.template.position.length+e.template.normal.length);c.set(e.template.position),c.set(e.template.normal,e.template.position.length),e.gpu={device:t,pipeline:t.createComputePipeline({layout:"auto",compute:{module:t.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:t.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:hn(t,c)},e.lanesDirty=!0}let r,o,i;e.lanesDirty&&X0(e,t);let n=new Float32Array(e.trips.length*4),a=new Uint32Array(n.buffer);for(r=0;r<e.trips.length;r++)o=e.trips[r],a[r*4]=o.lane.start,a[r*4+1]=o.lane.points.length,n[r*4+2]=o.distance,n[r*4+3]=o.speed,e.mesh.extras.featureFaces[r].properties=o.properties;e.gpu.vehicles?.size>=n.byteLength?t.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=hn(t,n));let{position:s,normal:m}=e.mesh.geometry.attributes,f=[],p;for(i=0;i<6;i++)p=i===0?e.gpu.params:i===1?e.gpu.template:i===2?e.gpu.points:i===3?e.gpu.vehicles:i===4?s.buffer:m.buffer,f.push({binding:i,resource:{buffer:p}});e.gpu.bindGroup=t.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:f})}function J0(e,t){return t?e.loaded?`${e.trips.length} ${e.vehicle==="boat"?"boats":e.vehicle}`:`${e.vehicle}: loading\u2026`:`${e.vehicle}: select a valid simulation date`}function K0(e,t,r,o){let i;try{o?e.trips=j0(t,e.lanes,e.velocity):e.trips.length=0,i=J0(e,o)}catch(f){fm(e,f);return}e.rebasedAt=r,e.nextCheck=r+1e3;let n="",a;for(a of e.trips)n+=`${n?",":""}${a.id}`;let s=e.outline&&!e.route&&e.lanes.length,m=n!==e.tripsKey||!!s;return s&&q0(e),n!==e.tripsKey&&(H0(e),e.tripsKey=n),e.mesh&&Y0(e),e.error||(e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")),m}function Q0(e,t){let{device:r}=e.gpu;e.paramFloats[0]=e.elapsed=t,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,r.queue.writeBuffer(e.gpu.params,0,e.params);let o=r.createCommandEncoder(),i=o.beginComputePass();i.setPipeline(e.gpu.pipeline),i.setBindGroup(0,e.gpu.bindGroup),i.dispatchWorkgroups(e.trips.length),i.end(),r.queue.submit([o.finish()]),e.stale=!0}function ev(e){e.litAt=performance.now();let t=[],r=e.position||={},o,i,n,a,s,m,f,p,c,l;for(o of e.trips){({x:i,y:n,z:a,dx:s,dz:m}=jo(e,o,r));for(l of e.lights)[f,p,c]=l.position,t.push({...l,position:[i-f*m-c*s,n+p,a+f*s-c*m]})}e.mesh.extras.lights=t}function tv(e,t,r){e.mesh&&(Q0(e,(t-e.rebasedAt)/1e3),e.lights&&(!r||!(performance.now()-e.litAt<100))&&ev(e))}function rv(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!w.get(e.layer)){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);let{live:t,time:r}=mm(e),o=r?.getTime(),i=Number.isFinite(o),n=!1;(!t||!i||!(o>=e.rebasedAt&&o<e.nextCheck))&&(n=K0(e,r,o,i),n===void 0)||(tv(e,o,t),(e.mesh||n)&&E(e.layer),t&&i&&(e.frame=requestAnimationFrame(e.tick)))}async function ov(e,t,r){let o=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(o)).default(t,e.layer,r);if(!e.file){let i=await fetch(o,{signal:r});if(!i.ok)throw new Error(`HTTP ${i.status}`);e.file=await i.json()}return e.file}var iv=Object.freeze([]);function nv({features:e=iv}){let t=[],r,o,i,n,a,s,m,f;for({geometry:r,properties:o}of e)if(!(r?.type!=="LineString"&&r?.type!=="MultiLineString"))for(i=r.type==="MultiLineString"?r.coordinates:null,f=0;f<(i?i.length:1);f++){n=i?i[f]:r.coordinates,a=[];for([s,m]of n)a.push([m,s]);t.push({latlngs:a,properties:o??{},elevation:o?.elevation})}return t}V();L();function av(e){let t=fe.get(e);return ke.get(t)&&t}function lm(e){let{layer:t,lanes:r}=e,o=av(t._map),i=M.get(t).position[1],n,a,s;for(n of r)for(a=0;a<n.points.length;a++)s=o&&(n.elevation??we(t._map,n.latlngs[a])),n.points[a][2]=Number.isFinite(s)&&Number.isFinite(i)?s-i:0;e.lanesDirty=!0,e.nextCheck=-1/0}function sv(e){let{layer:t,lanes:r}=e,o=t._map.options.crs,i=o.project(D.get(t)),n=Math.cos(D.get(t).lat*B),a,s,m,f,p;for(a of r){a.points=[];for([s,m]of a.latlngs)f=o.project(new d.LatLng(s,m)),a.points.push([(f.x-i.x)*n,-(f.y-i.y)*n,0]);for(a.lengths=[0],p=1;p<a.points.length;p++)a.lengths.push(a.lengths[p-1]+Math.hypot(a.points[p][0]-a.points[p-1][0],a.points[p][1]-a.points[p-1][1]));a.length=a.lengths.at(-1)}lm(e),nr(e,e.route),e.route=null,e.tripsKey=null}function mv(e,t,r){if(!(t.aborted||!e.layer._map)){if(e.error=null,r===e.loaded){e.nextCheck=-1/0,e.frame||e.tick();return}e.loaded=r,e.lanes=nv(r),sv(e),e.frame||e.tick()}}function fv(e,t,r){!t.aborted&&r.name!=="AbortError"&&fm(e,r)}function pv(e){let{time:t}=mm(e);if(!Number.isFinite(t?.getTime()))return;e.request?.abort();let{signal:r}=e.request=new AbortController;ov(e,t,r).then(mv.bind(null,e,r),fv.bind(null,e,r))}function cv(e,t){t?.layer&&!_t.get(t.layer)?.time||(cancelAnimationFrame(e.frame),pv(e),e.tick())}function lv(e){e.lanes.length&&(lm(e),nr(e,e.route),e.route=null,e.mesh&&cm(e),e.frame||e.tick())}function uv(e,{url:t,vehicle:r="car",side:o,outline:i,speed:n=8,...a}=om){let{model:s,lights:m,side:f}=z0[r];o??=f,At(e,{tooltip:R0,nightLight:!!m,...a});let p=d.DomUtil.create("small","traffic-status");p.style.cssText="flex:0 1 auto;padding:1px 5px;border-radius:3px;background:#00000008;color:#555;",p.title=r,p.textContent=`${r}: loading\u2026`;let c=hi(s(0)),l=c.position.length,u=l/3,h=new ArrayBuffer(16),x=new Float32Array(h),y=new Uint32Array(h),g={layer:e,url:t,model:s,lights:m,side:o,outline:i,velocity:n,vehicle:r,status:p,template:c,stride:l,vertices:u,params:h,paramFloats:x,paramInts:y,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0};g.shader=A0,g.tick=rv.bind(null,g),g.update=cv.bind(null,g),g.terrain=lv.bind(null,g),Tt.set(e,g),e.on("ready",G0.bind(null,g)),e.on("add",I0.bind(null,g)),e.on("remove",D0.bind(null,g))}function dv(e){return e.header}function Hf(e,t,r,o,i){return mi(e.layer._map||Ws.get(e.layer),e.workerUrl,{type:"cog",url:e.url,asset:e.asset,z:t,x:r,y:o},i)}async function hv(e,t){let r={layer:e,url:new URL(t.url,document.baseURI).href,asset:t.asset,workerUrl:t.workerUrl},o=await Hf(r);return{getHeader:dv.bind(null,{header:o}),getZxy:Hf.bind(null,r)}}function gv(e,t){rm(e,{ariaLabel:"COG raster",...t,archive:t.archive||hv(e,t)})}function yv(e,t=wr){switch(e){case"raster":return t.asset!==void 0||/\.tiff?(?:[?#]|$)/i.test(t.url)?gv:rm;case"terrain":return B0;case"traffic":return uv;default:return null}}function xv(){let e=Zs.shift();return e.initialize=yv(e.type,e.settings),e.initialize||(e.error=new Error(`Unknown layer type: ${e.type}`)),e}function vv(e){let{layer:t,ready:r}=e;if(e.error)return Ye(t,e.error),Promise.reject(e.error);try{let o=t._map;return o?.removeLayer(t),A.delete(t),e.initialize(t,e.settings),o?.addLayer(t),te.get(t)===r?t:te.get(t)}catch(o){throw t.fire("error",{error:o}),o}}function um(e=wr){if(Kt.has(this)||Kt.add(this),Object.getPrototypeOf(this)!==d.Layer.prototype||!e?.source){if(ft.value.initialize)return ft.value.initialize.apply(this,arguments);d.Util.setOptions(this,e);return}let{source:{type:t=/\.pmtiles(?:[?#]|$)|\.tiff?(?:[?#]|$)/i.test(e.source.url)?"raster":"vector",...r},...o}=e,i={...r,...o};if(d.Util.setOptions(this,o),Jt.set(this,t),t==="vector"){fx(i)?u0(this,i):i.data!==void 0||i.style!==void 0&&!i.url||i.url&&!/\.(?:pmtiles|glb|gltf)(?:[?#]|$)/i.test(i.url)?mx(this,i):At(this,i);return}A.set(this,"pending");let n={layer:this,type:t,settings:i,ready:null};Zs.push(n),qs.value=qs.value.catch(Ke).then(xv);let a=qs.value.then(vv);te.set(this,a),n.ready=a,a.catch(Ke)}L();function wv(e,t){switch(A.get(e)){case"3d":return uo(e,t);case"raster":return w0(e,t);case"terrain":return M0(e,t);case"time":return hh.call(e,t)}}function Lv(e){let t=d.Util.stamp(e);return this._layers[t]?A.get(e)?(this._loaded&&wv(e,this),delete this._layers[t],this._loaded&&(this.fire("layerremove",{layer:e}),e.fire("remove")),e._map=e._mapToAdd=null,this):gn.value.call(this,e):this}J();function bv(){return _(this)}Z();function Mv(){return S(this)}$i();function Bv(e,t){return Xt(this,e,t)}Jo();function Tv(e,t){return ht(this,e,t)}function Pv(e){return Ys(this,e)}L();L();var dm=new WeakMap;var hm=new WeakMap;var gm=new WeakMap;function kv(e){return Fo(this),this._parts=this._rings,dm.get(this).call(this,e)}function Sv(){return this._map&&Fo(this),hm.get(this).call(this)}function Cv(){gm.get(this).call(this),this._container.remove()}var ar=new Map;var Ut={value:null};function _v(e){ar.delete(e),$r.set(e,null),!ar.size&&Ut.value!==null&&(cancelAnimationFrame(Ut.value),Ut.value=null)}function Ev(){Ut.value=null;let e=[...ar],t,r;for([t,r]of e)ar.get(t)===r&&(ar.delete(t),$r.set(t,null),ym.call(t))}function Ov(e){Li.set(e,(Li.get(e)||0)+1),ar.set(e,Li.get(e)),Ut.value===null&&(Ut.value=requestAnimationFrame(Ev)),$r.set(e,Ut.value)}function ym(){if(!this._map)return;let e=this,t=Date.now(),r=!1,o=!1,i,n;for(i in this._tiles)Object.hasOwn(this._tiles,i)&&(n=this._tiles[i],!(!n.current||!n.loaded)&&(n._gpuOpacity=this._map._fadeAnimated?Math.min(1,(t-n.loaded)/200):1,n._gpuOpacity<1?r=!0:n.active||(this._onOpaqueTile(n),n.active=!0,o=!0)));o&&!this._noPrune&&this._pruneTiles(),Ct(this),_v(e),r&&Ov(e)}function zv(){return Ct(this),this}function Av(){this instanceof d.Polyline||this instanceof d.CircleMarker?(this.beforeAdd=this._updateBounds=Ke,this.redraw=zv,A.set(this,"path"),this instanceof d.Polyline&&(dm.set(this,this.closestLayerPoint),this.closestLayerPoint=kv),this instanceof d.Circle&&(hm.set(this,this.getBounds),this.getBounds=Sv)):this instanceof d.GridLayer?(gm.set(this,this._initContainer),this._initContainer=Cv,this._updateOpacity=ym):this instanceof d.ImageOverlay&&!(this instanceof d.VideoOverlay)&&!(this instanceof d.SVGOverlay)&&(A.set(this,"image"),this._reset=Ct)}function Xf(){let e=this._initHooksCalled;d.version.startsWith("2.")||ft.value.callInitHooks.call(this),(d.version.startsWith("2.")||!e)&&(Kt.add(this),Av.call(this))}L();var ue=d?.Layer;function go(e){let t=Reflect.construct(ue,[],new.target);return um.call(t,e),t.callInitHooks(),t}L();function Rv(){return ue.addInitHook.apply(this===d.Layer?ue:this,arguments),this}L();function Iv(e){return ue.mergeOptions.call(this===d.Layer?ue:this,e),this}ft.value=Object.defineProperties({},Object.getOwnPropertyDescriptors(ue.prototype));ft.value._layerAdd=ue.prototype._layerAdd;ft.value.callInitHooks=ue.prototype.callInitHooks;d.version.startsWith("2.")?(Object.setPrototypeOf(go,ue),go.prototype=ue.prototype,go.initHooks=!0,go.addInitHook=Rv,go.mergeOptions=Iv,d.Layer=go,ue.prototype.constructor=d.Layer,ue.addInitHook(Xf)):(ue.prototype.initialize=um,ue.prototype.callInitHooks=Xf);Object.assign(ue.prototype,{_layerAdd:sx});gn.value=d.Map.prototype.removeLayer;Object.assign(d.Map.prototype,{removeLayer:Lv,getPitch:bv,getBearing:Mv,setPitch:Bv,setBearing:Tv});Object.assign(d.Marker.prototype,{setRotation:Pv});})();
7
7
  //# sourceMappingURL=leaflet-city-mapper.js.map