leaflet-polydraw 1.3.3 → 2.0.0-alpha.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.
- package/dist/icons/icon-grip-vertical.svg +8 -0
- package/dist/icons/icon-layer-toggle.svg +6 -0
- package/dist/leaflet-polydraw.css +1 -1
- package/dist/polydraw.es.js +4242 -1162
- package/dist/polydraw.es.js.map +1 -1
- package/dist/polydraw.umd.min.js +1 -1
- package/dist/polydraw.umd.min.js.map +1 -1
- package/dist/styles/polydraw.css +357 -0
- package/dist/types/buttons.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/guards/config-deprecation-guard.d.ts +3 -0
- package/dist/types/guards/config-deprecation-guard.d.ts.map +1 -0
- package/dist/types/guards/config-runtime-fallback-guard.d.ts +3 -0
- package/dist/types/guards/config-runtime-fallback-guard.d.ts.map +1 -0
- package/dist/types/managers/event-manager.d.ts +45 -0
- package/dist/types/managers/event-manager.d.ts.map +1 -1
- package/dist/types/managers/history-manager.d.ts +16 -3
- package/dist/types/managers/history-manager.d.ts.map +1 -1
- package/dist/types/managers/layer-manager.d.ts +79 -0
- package/dist/types/managers/layer-manager.d.ts.map +1 -0
- package/dist/types/managers/polygon-draw-manager.d.ts.map +1 -1
- package/dist/types/managers/polygon-interaction-manager.d.ts +19 -0
- package/dist/types/managers/polygon-interaction-manager.d.ts.map +1 -1
- package/dist/types/managers/polygon-mutation-manager.d.ts +32 -2
- package/dist/types/managers/polygon-mutation-manager.d.ts.map +1 -1
- package/dist/types/polydraw.d.ts +146 -7
- package/dist/types/polydraw.d.ts.map +1 -1
- package/dist/types/turf-helper.d.ts +5 -2
- package/dist/types/turf-helper.d.ts.map +1 -1
- package/dist/types/types/polydraw-interfaces.d.ts +224 -111
- package/dist/types/types/polydraw-interfaces.d.ts.map +1 -1
- package/dist/types/ui/layer-panel.d.ts +13 -0
- package/dist/types/ui/layer-panel.d.ts.map +1 -0
- package/package.json +9 -3
package/dist/polydraw.umd.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("leaflet")):"function"==typeof define&&define.amd?define(["exports","leaflet"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).LeafletPolydraw={},t.L)}(this,function(t,e){"use strict";var n,r,o=Object.defineProperty,i=(t,e,n)=>((t,e,n)=>e in t?o(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n)(t,"symbol"!=typeof e?e+"":e,n);function s(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const n in t)if("default"!==n){const r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:()=>t[n]})}return e.default=t,Object.freeze(e)}const a=s(e);var l=(t=>(t.V1="1.x",t.V2="2.x",t))(l||{}),c=(t=>(t[t.Off=0]="Off",t[t.Add=1]="Add",t[t.Edit=2]="Edit",t[t.Subtract=4]="Subtract",t[t.AppendMarker=8]="AppendMarker",t[t.LoadPredefined=16]="LoadPredefined",t[t.PointToPoint=32]="PointToPoint",t[t.PointToPointSubtract=64]="PointToPointSubtract",t[t.Clone=128]="Clone",t))(c||{}),h=(t=>(t[t.SouthWest=0]="SouthWest",t[t.South=1]="South",t[t.SouthEast=2]="SouthEast",t[t.East=3]="East",t[t.NorthEast=4]="NorthEast",t[t.North=5]="North",t[t.NorthWest=6]="NorthWest",t[t.West=7]="West",t[t.Hole=8]="Hole",t))(h||{});const u={mergePolygons:!0,kinks:!1,modes:{draw:!0,subtract:!0,deleteAll:!0,p2p:!0,p2pSubtract:!0,clonePolygons:!0,attachElbow:!0,dragElbow:!0,dragPolygons:!0,edgeDeletion:!0},defaultMode:c.Off,modifierSubtractMode:!0,dragPolygons:{opacity:.7,dragCursor:"move",hoverCursor:"grab",markerBehavior:"hide",markerAnimationDuration:200,modifierSubtract:{keys:{windows:"ctrlKey",mac:"metaKey",linux:"ctrlKey"},hideMarkersOnDrag:!0}},edgeDeletion:{keys:{windows:"ctrlKey",mac:"metaKey",linux:"ctrlKey"},minVertices:3},markers:{deleteMarker:!0,infoMarker:!0,menuMarker:!0,coordsTitle:!0,zIndexOffset:0,markerIcon:{styleClasses:["polygon-marker"],zIndexOffset:null},holeIcon:{styleClasses:["polygon-marker","hole"],zIndexOffset:null},markerInfoIcon:{position:3,showArea:!0,showPerimeter:!0,useMetrics:!0,usePerimeterMinValue:!1,areaLabel:"Area",perimeterLabel:"Perimeter",values:{min:{metric:"50",imperial:"100"},unknown:{metric:"-",imperial:"-"}},units:{unknownUnit:"",metric:{onlyMetrics:!0,perimeter:{m:"m",km:"km"},area:{m2:"m²",km2:"km²",daa:"daa",ha:"ha"}},imperial:{perimeter:{feet:"ft",yards:"yd",miles:"mi"},area:{feet2:"ft²",yards2:"yd²",acres:"ac",miles2:"mi²"}}},styleClasses:["polygon-marker","info"],zIndexOffset:1e4},markerMenuIcon:{position:1,styleClasses:["polygon-marker","menu"],zIndexOffset:1e4},markerDeleteIcon:{position:5,styleClasses:["polygon-marker","delete"],zIndexOffset:1e4},holeMarkers:{menuMarker:!1,deleteMarker:!0,infoMarker:!1},visualOptimization:{toleranceMin:5e-6,toleranceMax:.005,curve:1.35,sharpAngleThreshold:30,thresholdBoundingBox:.05,thresholdDistance:.05,useDistance:!0,useBoundingBox:!1,useAngles:!0}},polyLineOptions:{opacity:1,weight:2},subtractLineOptions:{opacity:1,weight:2},polygonOptions:{weight:2,opacity:1,fillOpacity:.2,smoothFactor:.3,noClip:!0},holeOptions:{weight:2,opacity:1,fillOpacity:.5},polygonCreation:{method:"concaveman",simplification:{mode:"simple",tolerance:.001,highQuality:!1}},simplification:{mode:"simple",simple:{tolerance:1e-4,highQuality:!1},dynamic:{baseTolerance:1e-4,highQuality:!1,fractionGuard:.9,multiplier:2}},menuOperations:{simplify:{enabled:!0,processHoles:!0},doubleElbows:{enabled:!0,processHoles:!0},bbox:{enabled:!0,processHoles:!0},bezier:{enabled:!0},scale:{enabled:!0},rotate:{enabled:!0},visualOptimizationToggle:{enabled:!0}},boundingBox:{addMidPointMarkers:!0},bezier:{resolution:1e4,sharpness:.75,resampleMultiplier:10,maxNodes:1e3,visualOptimizationLevel:10,ghostMarkers:!1},colors:{dragPolygons:{subtract:"#D9460F"},p2p:{closingMarker:"#4CAF50"},edgeHover:"#7a9441",edgeDeletion:{hover:"#D9460F"},polyline:"#50622b",subtractLine:"#D9460F",polygon:{border:"#50622b",fill:"#b4cd8a"},hole:{border:"#aa0000",fill:"#ffcccc"},styles:{controlButton:{backgroundColor:"#fff",color:"#000"},controlButtonHover:{backgroundColor:"#f4f4f4"},controlButtonActive:{backgroundColor:"rgb(128, 218, 255)",color:"#fff"},indicatorActive:{backgroundColor:"#ffcc00"},p2pMarker:{backgroundColor:"#fff",borderColor:"#50622b"}}},history:{capture:{freehand:!0,pointToPoint:!0,addPredefinedPolygon:!0,eraseAll:!0,markerDrag:!0,polygonDrag:!0,polygonClone:!0,addVertex:!0,removeVertex:!0,removeHole:!0,modifierSubtract:!0,deletePolygon:!0,polygonActions:{simplify:!0,doubleElbows:!0,bbox:!0,bezier:!0,scale:!0,rotate:!0,toggleOptimization:!0}}},maxHistorySize:50},g=6371e3,p=6371,d=3959,f=Math.PI/180,m=180/Math.PI;Math.PI;function y(t,e={}){return{type:"Feature",geometry:{type:"Point",coordinates:t},properties:e}}function v(t,e={}){return{type:"Feature",geometry:{type:"LineString",coordinates:t},properties:e}}function M(t,e={}){return{type:"Feature",geometry:{type:"Polygon",coordinates:t},properties:e}}function w(t,e={}){return{type:"Feature",geometry:{type:"MultiPolygon",coordinates:t},properties:e}}function P(t){return{type:"FeatureCollection",features:t}}function b(t){if("Polygon"===t.geometry.type)return[t.geometry.coordinates];if("MultiPolygon"===t.geometry.type)return t.geometry.coordinates;throw new Error("Feature must be a Polygon or MultiPolygon")}function x(t){let e=1/0,n=1/0,r=-1/0,o=-1/0;const i=t=>{if(Array.isArray(t[0]))t.forEach(t=>i(t));else{const[i,s]=t;e=Math.min(e,i),n=Math.min(n,s),r=Math.max(r,i),o=Math.max(o,s)}},s=t=>{if("GeometryCollection"===t.type){return void t.geometries.forEach(s)}i(t.coordinates)};return s(t.geometry),[e,n,r,o]}function k(t,e,n="kilometers"){const r=Array.isArray(t)?t:t.geometry.coordinates,o=Array.isArray(e)?e:e.geometry.coordinates,[i,s]=r,[a,l]=o,c="miles"===n?d:"meters"===n?g:p,h=D(l-s),u=D(a-i),f=Math.sin(h/2)*Math.sin(h/2)+Math.cos(D(s))*Math.cos(D(l))*Math.sin(u/2)*Math.sin(u/2);return c*(2*Math.atan2(Math.sqrt(f),Math.sqrt(1-f)))}function E(t,e){const n=Array.isArray(t)?t:t.geometry.coordinates,r=Array.isArray(e)?e:e.geometry.coordinates,[o,i]=n,[s,a]=r;return y([(o+s)/2,(i+a)/2])}function L(t){const e=b(t);let n=0,r=0,o=0;for(const i of e)for(const t of i)for(const e of t)n+=e[0],r+=e[1],o++;return y([n/o,r/o])}function D(t){return t*f}var S=6371008.8,C={centimeters:637100880,centimetres:637100880,degrees:360/(2*Math.PI),feet:20902260.511392,inches:39.37*S,kilometers:6371.0088,kilometres:6371.0088,meters:S,metres:S,miles:3958.761333810546,millimeters:6371008800,millimetres:6371008800,nauticalmiles:S/1852,radians:1,yards:6967335.223679999};function A(t,e,n={}){const r={type:"Feature"};return(0===n.id||n.id)&&(r.id=n.id),n.bbox&&(r.bbox=n.bbox),r.properties=e||{},r.geometry=t,r}function T(t,e,n={}){if(!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!H(t[0])||!H(t[1]))throw new Error("coordinates must contain numbers");return A({type:"Point",coordinates:t},e,n)}function I(t,e,n={}){for(const r of t){if(r.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(r[r.length-1].length!==r[0].length)throw new Error("First and last Position are not equivalent.");for(let t=0;t<r[r.length-1].length;t++)if(r[r.length-1][t]!==r[0][t])throw new Error("First and last Position are not equivalent.")}return A({type:"Polygon",coordinates:t},e,n)}function O(t,e,n={}){if(t.length<2)throw new Error("coordinates must be an array of two or more positions");return A({type:"LineString",coordinates:t},e,n)}function _(t,e={}){const n={type:"FeatureCollection"};return e.id&&(n.id=e.id),e.bbox&&(n.bbox=e.bbox),n.features=t,n}function F(t,e,n={}){return A({type:"MultiPolygon",coordinates:t},e,n)}function B(t){return t%360*Math.PI/180}function H(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}function z(t,e,n){if(null!==t)for(var r,o,i,s,a,l,c,h,u=0,g=0,p=t.type,d="FeatureCollection"===p,f="Feature"===p,m=d?t.features.length:1,y=0;y<m;y++){a=(h=!!(c=d?t.features[y].geometry:f?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var v=0;v<a;v++){var M=0,w=0;if(null!==(s=h?c.geometries[v]:c)){l=s.coordinates;var P=s.type;switch(u=!n||"Polygon"!==P&&"MultiPolygon"!==P?0:1,P){case null:break;case"Point":if(!1===e(l,g,y,M,w))return!1;g++,M++;break;case"LineString":case"MultiPoint":for(r=0;r<l.length;r++){if(!1===e(l[r],g,y,M,w))return!1;g++,"MultiPoint"===P&&M++}"LineString"===P&&M++;break;case"Polygon":case"MultiLineString":for(r=0;r<l.length;r++){for(o=0;o<l[r].length-u;o++){if(!1===e(l[r][o],g,y,M,w))return!1;g++}"MultiLineString"===P&&M++,"Polygon"===P&&w++}"Polygon"===P&&M++;break;case"MultiPolygon":for(r=0;r<l.length;r++){for(w=0,o=0;o<l[r].length;o++){for(i=0;i<l[r][o].length-u;i++){if(!1===e(l[r][o][i],g,y,M,w))return!1;g++}w++}M++}break;case"GeometryCollection":for(r=0;r<s.geometries.length;r++)if(!1===z(s.geometries[r],e,n))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function G(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var n=0;n<t.features.length&&!1!==e(t.features[n],n);n++);}function N(t,e){var n,r,o,i,s,a,l,c,h,u,g=0,p="FeatureCollection"===t.type,d="Feature"===t.type,f=p?t.features.length:1;for(n=0;n<f;n++){for(a=p?t.features[n].geometry:d?t.geometry:t,c=p?t.features[n].properties:d?t.properties:{},h=p?t.features[n].bbox:d?t.bbox:void 0,u=p?t.features[n].id:d?t.id:void 0,s=(l=!!a&&"GeometryCollection"===a.type)?a.geometries.length:1,o=0;o<s;o++)if(null!==(i=l?a.geometries[o]:a))switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(i,g,c,h,u))return!1;break;case"GeometryCollection":for(r=0;r<i.geometries.length;r++)if(!1===e(i.geometries[r],g,c,h,u))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,g,c,h,u))return!1;g++}}function U(t,e){N(t,function(t,n,r,o,i){var s,a=null===t?null:t.type;switch(a){case null:case"Point":case"LineString":case"Polygon":return!1!==e(A(t,r,{bbox:o,id:i}),n,0)&&void 0}switch(a){case"MultiPoint":s="Point";break;case"MultiLineString":s="LineString";break;case"MultiPolygon":s="Polygon"}for(var l=0;l<t.coordinates.length;l++){var c=t.coordinates[l];if(!1===e(A({type:s,coordinates:c},r),n,l))return!1}})}function R(t,e,n){var r=n,o=!1;return function(t,e){U(t,function(t,n,r){var o=0;if(t.geometry){var i=t.geometry.type;if("Point"!==i&&"MultiPoint"!==i){var s,a=0,l=0,c=0;return!1!==z(t,function(i,h,u,g,p){if(void 0===s||n>a||g>l||p>c)return s=i,a=n,l=g,c=p,void(o=0);var d=O([s,i],t.properties);if(!1===e(d,n,r,p,o))return!1;o++,s=i})&&void 0}}})}(t,function(t,i,s,a,l){r=!1===o&&void 0===n?t:e(r,t,i,s,a,l),o=!0}),r}function X(t){return function(t,e,n){var r=n;return N(t,function(t,n,o,i,s){r=e(r,t,n,o,i,s)}),r}(t,(t,e)=>t+function(t){let e,n=0;switch(t.type){case"Polygon":return Y(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)n+=Y(t.coordinates[e]);return n;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e),0)}function Y(t){let e=0;if(t&&t.length>0){e+=Math.abs(q(t[0]));for(let n=1;n<t.length;n++)e-=Math.abs(q(t[n]))}return e}var V=20294876564838.72,K=Math.PI/180;function q(t){const e=t.length-1;if(e<=2)return 0;let n=0,r=0;for(;r<e;){const o=t[r],i=t[r+1===e?0:r+1],s=t[r+2>=e?(r+2)%e:r+2],a=o[0]*K,l=i[1]*K;n+=(s[0]*K-a)*Math.sin(l),r++}return n*V}var j=X;function W(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function $(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var e=t.default;if("function"==typeof e){var n=function t(){return this instanceof t?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};n.prototype=e.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var r=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(n,e,r.get?r:{enumerable:!0,get:function(){return t[e]}})}),n}var J,Z={exports:{}},Q={exports:{}};function tt(){return J||(J=1,Q.exports=function(){function t(t,r,o,i,s){!function t(n,r,o,i,s){for(;i>o;){if(i-o>600){var a=i-o+1,l=r-o+1,c=Math.log(a),h=.5*Math.exp(2*c/3),u=.5*Math.sqrt(c*h*(a-h)/a)*(l-a/2<0?-1:1);t(n,r,Math.max(o,Math.floor(r-l*h/a+u)),Math.min(i,Math.floor(r+(a-l)*h/a+u)),s)}var g=n[r],p=o,d=i;for(e(n,o,r),s(n[i],g)>0&&e(n,o,i);p<d;){for(e(n,p,d),p++,d--;s(n[p],g)<0;)p++;for(;s(n[d],g)>0;)d--}0===s(n[o],g)?e(n,o,d):e(n,++d,i),d<=r&&(o=d+1),r<=d&&(i=d-1)}}(t,r,o||0,i||t.length-1,s||n)}function e(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function n(t,e){return t<e?-1:t>e?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function o(t,e,n){if(!n)return e.indexOf(t);for(var r=0;r<e.length;r++)if(n(t,e[r]))return r;return-1}function i(t,e){s(t,0,t.children.length,e,t)}function s(t,e,n,r,o){o||(o=d(null)),o.minX=1/0,o.minY=1/0,o.maxX=-1/0,o.maxY=-1/0;for(var i=e;i<n;i++){var s=t.children[i];a(o,t.leaf?r(s):s)}return o}function a(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function l(t,e){return t.minX-e.minX}function c(t,e){return t.minY-e.minY}function h(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function u(t){return t.maxX-t.minX+(t.maxY-t.minY)}function g(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function p(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function d(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function f(e,n,r,o,i){for(var s=[n,r];s.length;)if(!((r=s.pop())-(n=s.pop())<=o)){var a=n+Math.ceil((r-n)/o/2)*o;t(e,a,n,r,i),s.push(n,a,a,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var e=this.data,n=[];if(!p(t,e))return n;for(var r=this.toBBox,o=[];e;){for(var i=0;i<e.children.length;i++){var s=e.children[i],a=e.leaf?r(s):s;p(t,a)&&(e.leaf?n.push(s):g(t,a)?this._all(s,n):o.push(s))}e=o.pop()}return n},r.prototype.collides=function(t){var e=this.data;if(!p(t,e))return!1;for(var n=[];e;){for(var r=0;r<e.children.length;r++){var o=e.children[r],i=e.leaf?this.toBBox(o):o;if(p(t,i)){if(e.leaf||g(t,i))return!0;n.push(o)}}e=n.pop()}return!1},r.prototype.load=function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var e=0;e<t.length;e++)this.insert(t[e]);return this}var n=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var r=this.data;this.data=n,n=r}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},r.prototype.insert=function(t){return t&&this._insert(t,this.data.height-1),this},r.prototype.clear=function(){return this.data=d([]),this},r.prototype.remove=function(t,e){if(!t)return this;for(var n,r,i,s=this.data,a=this.toBBox(t),l=[],c=[];s||l.length;){if(s||(s=l.pop(),r=l[l.length-1],n=c.pop(),i=!0),s.leaf){var h=o(t,s.children,e);if(-1!==h)return s.children.splice(h,1),l.push(s),this._condense(l),this}i||s.leaf||!g(s,a)?r?(n++,s=r.children[n],i=!1):s=null:(l.push(s),c.push(n),n=0,r=s,s=s.children[0])}return this},r.prototype.toBBox=function(t){return t},r.prototype.compareMinX=function(t,e){return t.minX-e.minX},r.prototype.compareMinY=function(t,e){return t.minY-e.minY},r.prototype.toJSON=function(){return this.data},r.prototype.fromJSON=function(t){return this.data=t,this},r.prototype._all=function(t,e){for(var n=[];t;)t.leaf?e.push.apply(e,t.children):n.push.apply(n,t.children),t=n.pop();return e},r.prototype._build=function(t,e,n,r){var o,s=n-e+1,a=this._maxEntries;if(s<=a)return i(o=d(t.slice(e,n+1)),this.toBBox),o;r||(r=Math.ceil(Math.log(s)/Math.log(a)),a=Math.ceil(s/Math.pow(a,r-1))),(o=d([])).leaf=!1,o.height=r;var l=Math.ceil(s/a),c=l*Math.ceil(Math.sqrt(a));f(t,e,n,c,this.compareMinX);for(var h=e;h<=n;h+=c){var u=Math.min(h+c-1,n);f(t,h,u,l,this.compareMinY);for(var g=h;g<=u;g+=l){var p=Math.min(g+l-1,u);o.children.push(this._build(t,g,p,r-1))}}return i(o,this.toBBox),o},r.prototype._chooseSubtree=function(t,e,n,r){for(;r.push(e),!e.leaf&&r.length-1!==n;){for(var o=1/0,i=1/0,s=void 0,a=0;a<e.children.length;a++){var l=e.children[a],c=h(l),u=(g=t,p=l,(Math.max(p.maxX,g.maxX)-Math.min(p.minX,g.minX))*(Math.max(p.maxY,g.maxY)-Math.min(p.minY,g.minY))-c);u<i?(i=u,o=c<o?c:o,s=l):u===i&&c<o&&(o=c,s=l)}e=s||e.children[0]}var g,p;return e},r.prototype._insert=function(t,e,n){var r=n?t:this.toBBox(t),o=[],i=this._chooseSubtree(r,this.data,e,o);for(i.children.push(t),a(i,r);e>=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},r.prototype._split=function(t,e){var n=t[e],r=n.children.length,o=this._minEntries;this._chooseSplitAxis(n,o,r);var s=this._chooseSplitIndex(n,o,r),a=d(n.children.splice(s,n.children.length-s));a.height=n.height,a.leaf=n.leaf,i(n,this.toBBox),i(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(n,a)},r.prototype._splitRoot=function(t,e){this.data=d([t,e]),this.data.height=t.height+1,this.data.leaf=!1,i(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,e,n){for(var r,o,i,a,l,c,u,g=1/0,p=1/0,d=e;d<=n-e;d++){var f=s(t,0,d,this.toBBox),m=s(t,d,n,this.toBBox),y=(o=f,i=m,a=void 0,l=void 0,c=void 0,u=void 0,a=Math.max(o.minX,i.minX),l=Math.max(o.minY,i.minY),c=Math.min(o.maxX,i.maxX),u=Math.min(o.maxY,i.maxY),Math.max(0,c-a)*Math.max(0,u-l)),v=h(f)+h(m);y<g?(g=y,r=d,p=v<p?v:p):y===g&&v<p&&(p=v,r=d)}return r||n-e},r.prototype._chooseSplitAxis=function(t,e,n){var r=t.leaf?this.compareMinX:l,o=t.leaf?this.compareMinY:c;this._allDistMargin(t,e,n,r)<this._allDistMargin(t,e,n,o)&&t.children.sort(r)},r.prototype._allDistMargin=function(t,e,n,r){t.children.sort(r);for(var o=this.toBBox,i=s(t,0,e,o),l=s(t,n-e,n,o),c=u(i)+u(l),h=e;h<n-e;h++){var g=t.children[h];a(i,t.leaf?o(g):g),c+=u(i)}for(var p=n-e-1;p>=e;p--){var d=t.children[p];a(l,t.leaf?o(d):d),c+=u(l)}return c},r.prototype._adjustParentBBoxes=function(t,e,n){for(var r=n;r>=0;r--)a(e[r],t)},r.prototype._condense=function(t){for(var e=t.length-1,n=void 0;e>=0;e--)0===t[e].children.length?e>0?(n=t[e-1].children).splice(n.indexOf(t[e]),1):this.clear():i(t[e],this.toBBox)},r}()),Q.exports}function et(t,e){return t<e?-1:t>e?1:0}const nt=$(Object.freeze(Object.defineProperty({__proto__:null,default:class{constructor(t=[],e=et){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let n=(this.length>>1)-1;n>=0;n--)this._down(n)}push(t){this.data.push(t),this.length++,this._up(this.length-1)}pop(){if(0===this.length)return;const t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){const{data:e,compare:n}=this,r=e[t];for(;t>0;){const o=t-1>>1,i=e[o];if(n(r,i)>=0)break;e[t]=i,t=o}e[t]=r}_down(t){const{data:e,compare:n}=this,r=this.length>>1,o=e[t];for(;t<r;){let r=1+(t<<1),i=e[r];const s=r+1;if(s<this.length&&n(e[s],i)<0&&(r=s,i=e[s]),n(i,o)>=0)break;e[t]=i,t=r}e[t]=o}}},Symbol.toStringTag,{value:"Module"})));var rt,ot,it,st,at,lt={exports:{}};function ct(){if(at)return lt.exports;at=1;var t=ot?rt:(ot=1,rt=function(t,e,n,r){var o=t[0],i=t[1],s=!1;void 0===n&&(n=0),void 0===r&&(r=e.length);for(var a=(r-n)/2,l=0,c=a-1;l<a;c=l++){var h=e[n+2*l+0],u=e[n+2*l+1],g=e[n+2*c+0],p=e[n+2*c+1];u>i!=p>i&&o<(g-h)*(i-u)/(p-u)+h&&(s=!s)}return s}),e=st?it:(st=1,it=function(t,e,n,r){var o=t[0],i=t[1],s=!1;void 0===n&&(n=0),void 0===r&&(r=e.length);for(var a=r-n,l=0,c=a-1;l<a;c=l++){var h=e[l+n][0],u=e[l+n][1],g=e[c+n][0],p=e[c+n][1];u>i!=p>i&&o<(g-h)*(i-u)/(p-u)+h&&(s=!s)}return s});return lt.exports=function(n,r,o,i){return r.length>0&&Array.isArray(r[0])?e(n,r,o,i):t(n,r,o,i)},lt.exports.nested=e,lt.exports.flat=t,lt.exports}var ht,ut,gt={exports:{}};function pt(){return ht||(ht=1,function(t){const e=134217729,n=33306690738754706e-32;function r(t,e,n,r,o){let i,s,a,l,c=e[0],h=r[0],u=0,g=0;h>c==h>-c?(i=c,c=e[++u]):(i=h,h=r[++g]);let p=0;if(u<t&&g<n)for(h>c==h>-c?(a=i-((s=c+i)-c),c=e[++u]):(a=i-((s=h+i)-h),h=r[++g]),i=s,0!==a&&(o[p++]=a);u<t&&g<n;)h>c==h>-c?(a=i-((s=i+c)-(l=s-i))+(c-l),c=e[++u]):(a=i-((s=i+h)-(l=s-i))+(h-l),h=r[++g]),i=s,0!==a&&(o[p++]=a);for(;u<t;)a=i-((s=i+c)-(l=s-i))+(c-l),c=e[++u],i=s,0!==a&&(o[p++]=a);for(;g<n;)a=i-((s=i+h)-(l=s-i))+(h-l),h=r[++g],i=s,0!==a&&(o[p++]=a);return 0===i&&0!==p||(o[p++]=i),p}function o(t){return new Float64Array(t)}const i=33306690738754716e-32,s=22204460492503146e-32,a=11093356479670487e-47,l=o(4),c=o(8),h=o(12),u=o(16),g=o(4);t.orient2d=function(t,o,p,d,f,m){const y=(o-m)*(p-f),v=(t-f)*(d-m),M=y-v;if(0===y||0===v||y>0!=v>0)return M;const w=Math.abs(y+v);return Math.abs(M)>=i*w?M:-function(t,o,i,p,d,f,m){let y,v,M,w,P,b,x,k,E,L,D,S,C,A,T,I,O,_;const F=t-d,B=i-d,H=o-f,z=p-f;P=(T=(k=F-(x=(b=e*F)-(b-F)))*(L=z-(E=(b=e*z)-(b-z)))-((A=F*z)-x*E-k*E-x*L))-(D=T-(O=(k=H-(x=(b=e*H)-(b-H)))*(L=B-(E=(b=e*B)-(b-B)))-((I=H*B)-x*E-k*E-x*L))),l[0]=T-(D+P)+(P-O),P=(C=A-((S=A+D)-(P=S-A))+(D-P))-(D=C-I),l[1]=C-(D+P)+(P-I),P=(_=S+D)-S,l[2]=S-(_-P)+(D-P),l[3]=_;let G=function(t,e){let n=e[0];for(let r=1;r<t;r++)n+=e[r];return n}(4,l),N=s*m;if(G>=N||-G>=N)return G;if(y=t-(F+(P=t-F))+(P-d),M=i-(B+(P=i-B))+(P-d),v=o-(H+(P=o-H))+(P-f),w=p-(z+(P=p-z))+(P-f),0===y&&0===v&&0===M&&0===w)return G;if(N=a*m+n*Math.abs(G),(G+=F*w+z*y-(H*M+B*v))>=N||-G>=N)return G;P=(T=(k=y-(x=(b=e*y)-(b-y)))*(L=z-(E=(b=e*z)-(b-z)))-((A=y*z)-x*E-k*E-x*L))-(D=T-(O=(k=v-(x=(b=e*v)-(b-v)))*(L=B-(E=(b=e*B)-(b-B)))-((I=v*B)-x*E-k*E-x*L))),g[0]=T-(D+P)+(P-O),P=(C=A-((S=A+D)-(P=S-A))+(D-P))-(D=C-I),g[1]=C-(D+P)+(P-I),P=(_=S+D)-S,g[2]=S-(_-P)+(D-P),g[3]=_;const U=r(4,l,4,g,c);P=(T=(k=F-(x=(b=e*F)-(b-F)))*(L=w-(E=(b=e*w)-(b-w)))-((A=F*w)-x*E-k*E-x*L))-(D=T-(O=(k=H-(x=(b=e*H)-(b-H)))*(L=M-(E=(b=e*M)-(b-M)))-((I=H*M)-x*E-k*E-x*L))),g[0]=T-(D+P)+(P-O),P=(C=A-((S=A+D)-(P=S-A))+(D-P))-(D=C-I),g[1]=C-(D+P)+(P-I),P=(_=S+D)-S,g[2]=S-(_-P)+(D-P),g[3]=_;const R=r(U,c,4,g,h);P=(T=(k=y-(x=(b=e*y)-(b-y)))*(L=w-(E=(b=e*w)-(b-w)))-((A=y*w)-x*E-k*E-x*L))-(D=T-(O=(k=v-(x=(b=e*v)-(b-v)))*(L=M-(E=(b=e*M)-(b-M)))-((I=v*M)-x*E-k*E-x*L))),g[0]=T-(D+P)+(P-O),P=(C=A-((S=A+D)-(P=S-A))+(D-P))-(D=C-I),g[1]=C-(D+P)+(P-I),P=(_=S+D)-S,g[2]=S-(_-P)+(D-P),g[3]=_;const X=r(R,h,4,g,u);return u[X-1]}(t,o,p,d,f,m,w)},t.orient2dfast=function(t,e,n,r,o,i){return(e-i)*(n-o)-(t-o)*(r-i)},Object.defineProperty(t,"__esModule",{value:!0})}(gt.exports)),gt.exports}const dt=W(function(){if(ut)return Z.exports;ut=1;var t=tt(),e=nt,n=ct(),r=pt().orient2d;function o(e,r,o){r=Math.max(0,void 0===r?2:r),o=o||0;var s=function(t){for(var e=t[0],r=t[0],o=t[0],i=t[0],s=0;s<t.length;s++){var a=t[s];a[0]<e[0]&&(e=a),a[0]>o[0]&&(o=a),a[1]<r[1]&&(r=a),a[1]>i[1]&&(i=a)}var l=[e,r,o,i],c=l.slice();for(s=0;s<t.length;s++)n(t[s],l)||c.push(t[s]);return function(t){t.sort(y);for(var e=[],n=0;n<t.length;n++){for(;e.length>=2&&h(e[e.length-2],e[e.length-1],t[n])<=0;)e.pop();e.push(t[n])}for(var r=[],o=t.length-1;o>=0;o--){for(;r.length>=2&&h(r[r.length-2],r[r.length-1],t[o])<=0;)r.pop();r.push(t[o])}return r.pop(),e.pop(),e.concat(r)}(c)}(e),a=new t(16);a.toBBox=function(t){return{minX:t[0],minY:t[1],maxX:t[0],maxY:t[1]}},a.compareMinX=function(t,e){return t[0]-e[0]},a.compareMinY=function(t,e){return t[1]-e[1]},a.load(e);for(var l,c=[],u=0;u<s.length;u++){var f=s[u];a.remove(f),l=p(f,l),c.push(l)}var m=new t(16);for(u=0;u<c.length;u++)m.insert(g(c[u]));for(var v=r*r,M=o*o;c.length;){var w=c.shift(),P=w.p,b=w.next.p,x=d(P,b);if(!(x<M)){var k=x/v;(f=i(a,w.prev.p,P,b,w.next.next.p,k,m))&&Math.min(d(f,P),d(f,b))<=k&&(c.push(w),c.push(p(f,w)),a.remove(f),m.remove(w),m.insert(g(w)),m.insert(g(w.next)))}}w=l;var E=[];do{E.push(w.p),w=w.next}while(w!==l);return E.push(w.p),E}function i(t,n,r,o,i,l,h){for(var u=new e([],s),g=t.data;g;){for(var p=0;p<g.children.length;p++){var d=g.children[p],m=g.leaf?f(d,r,o):a(r,o,d);m>l||u.push({node:d,dist:m})}for(;u.length&&!u.peek().node.children;){var y=u.pop(),v=y.node,M=f(v,n,r),w=f(v,o,i);if(y.dist<M&&y.dist<w&&c(r,v,h)&&c(o,v,h))return v}(g=u.pop())&&(g=g.node)}return null}function s(t,e){return t.dist-e.dist}function a(t,e,n){if(l(t,n)||l(e,n))return 0;var r=m(t[0],t[1],e[0],e[1],n.minX,n.minY,n.maxX,n.minY);if(0===r)return 0;var o=m(t[0],t[1],e[0],e[1],n.minX,n.minY,n.minX,n.maxY);if(0===o)return 0;var i=m(t[0],t[1],e[0],e[1],n.maxX,n.minY,n.maxX,n.maxY);if(0===i)return 0;var s=m(t[0],t[1],e[0],e[1],n.minX,n.maxY,n.maxX,n.maxY);return 0===s?0:Math.min(r,o,i,s)}function l(t,e){return t[0]>=e.minX&&t[0]<=e.maxX&&t[1]>=e.minY&&t[1]<=e.maxY}function c(t,e,n){for(var r=Math.min(t[0],e[0]),o=Math.min(t[1],e[1]),i=Math.max(t[0],e[0]),s=Math.max(t[1],e[1]),a=n.search({minX:r,minY:o,maxX:i,maxY:s}),l=0;l<a.length;l++)if(u(a[l].p,a[l].next.p,t,e))return!1;return!0}function h(t,e,n){return r(t[0],t[1],e[0],e[1],n[0],n[1])}function u(t,e,n,r){return t!==r&&e!==n&&h(t,e,n)>0!=h(t,e,r)>0&&h(n,r,t)>0!=h(n,r,e)>0}function g(t){var e=t.p,n=t.next.p;return t.minX=Math.min(e[0],n[0]),t.minY=Math.min(e[1],n[1]),t.maxX=Math.max(e[0],n[0]),t.maxY=Math.max(e[1],n[1]),t}function p(t,e){var n={p:t,prev:null,next:null,minX:0,minY:0,maxX:0,maxY:0};return e?(n.next=e.next,n.prev=e,e.next.prev=n,e.next=n):(n.prev=n,n.next=n),n}function d(t,e){var n=t[0]-e[0],r=t[1]-e[1];return n*n+r*r}function f(t,e,n){var r=e[0],o=e[1],i=n[0]-r,s=n[1]-o;if(0!==i||0!==s){var a=((t[0]-r)*i+(t[1]-o)*s)/(i*i+s*s);a>1?(r=n[0],o=n[1]):a>0&&(r+=i*a,o+=s*a)}return(i=t[0]-r)*i+(s=t[1]-o)*s}function m(t,e,n,r,o,i,s,a){var l,c,h,u,g=n-t,p=r-e,d=s-o,f=a-i,m=t-o,y=e-i,v=g*g+p*p,M=g*d+p*f,w=d*d+f*f,P=g*m+p*y,b=d*m+f*y,x=v*w-M*M,k=x,E=x;0===x?(c=0,k=1,u=b,E=w):(u=v*b-M*P,(c=M*b-w*P)<0?(c=0,u=b,E=w):c>k&&(c=k,u=b+M,E=w)),u<0?(u=0,-P<0?c=0:-P>v?c=k:(c=-P,k=v)):u>E&&(u=E,-P+M<0?c=0:-P+M>v?c=k:(c=-P+M,k=v));var L=(1-(h=0===u?0:u/E))*o+h*s-((1-(l=0===c?0:c/k))*t+l*n),D=(1-h)*i+h*a-((1-l)*e+l*r);return L*L+D*D}function y(t,e){return t[0]===e[0]?t[1]-e[1]:t[0]-e[0]}return e.default&&(e=e.default),Z.exports=o,Z.exports.default=o,Z.exports}());function ft(t,e={}){e.concavity=e.concavity||1/0;const n=[];if(z(t,t=>{n.push([t[0],t[1]])}),!n.length)return null;const r=dt(n,e.concavity);return r.length>3?I([r]):null}var mt=ft;function yt(t,e={}){let n=0,r=0,o=0;return z(t,function(t){n+=t[0],r+=t[1],o++},!0),T([n/o,r/o],e.properties)}function vt(t){if(!t)throw new Error("coord is required");if(!Array.isArray(t)){if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return[...t.geometry.coordinates];if("Point"===t.type)return[...t.coordinates]}if(Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1]))return[...t];throw new Error("coord must be GeoJSON Point or an Array of numbers")}function Mt(t){if(Array.isArray(t))return t;if("Feature"===t.type){if(null!==t.geometry)return t.geometry.coordinates}else if(t.coordinates)return t.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}function wt(t){return"Feature"===t.type?t.geometry:t}function Pt(t,e){return"FeatureCollection"===t.type?"FeatureCollection":"GeometryCollection"===t.type?"GeometryCollection":"Feature"===t.type&&null!==t.geometry?t.geometry.type:t.type}var bt=function t(e,n={}){switch(Pt(e)){case"Point":return T(vt(e),n.properties);case"Polygon":var r=[];z(e,function(t){r.push(t)});var o,i,s,a,l,c,h,u,g=yt(e,{properties:n.properties}),p=g.geometry.coordinates,d=0,f=0,m=0,y=r.map(function(t){return[t[0]-p[0],t[1]-p[1]]});for(o=0;o<r.length-1;o++)a=(i=y[o])[0],c=i[1],l=(s=y[o+1])[0],m+=u=a*(h=s[1])-l*c,d+=(a+l)*u,f+=(c+h)*u;if(0===m)return g;var v=1/(6*(.5*m));return T([p[0]+v*d,p[1]+v*f],n.properties);default:var M=ft(e);return M?t(M,{properties:n.properties}):yt(e,{properties:n.properties})}};let xt=class{constructor(t=[],e=kt){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let n=(this.length>>1)-1;n>=0;n--)this._down(n)}push(t){this.data.push(t),this.length++,this._up(this.length-1)}pop(){if(0===this.length)return;const t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){const{data:e,compare:n}=this,r=e[t];for(;t>0;){const o=t-1>>1,i=e[o];if(n(r,i)>=0)break;e[t]=i,t=o}e[t]=r}_down(t){const{data:e,compare:n}=this,r=this.length>>1,o=e[t];for(;t<r;){let r=1+(t<<1),i=e[r];const s=r+1;if(s<this.length&&n(e[s],i)<0&&(r=s,i=e[s]),n(i,o)>=0)break;e[t]=i,t=r}e[t]=o}};function kt(t,e){return t<e?-1:t>e?1:0}function Et(t,e){return t.p.x>e.p.x?1:t.p.x<e.p.x?-1:t.p.y!==e.p.y?t.p.y>e.p.y?1:-1:1}function Lt(t,e){return t.rightSweepEvent.p.x>e.rightSweepEvent.p.x?1:t.rightSweepEvent.p.x<e.rightSweepEvent.p.x?-1:t.rightSweepEvent.p.y!==e.rightSweepEvent.p.y?t.rightSweepEvent.p.y<e.rightSweepEvent.p.y?1:-1:1}let Dt=class{constructor(t,e,n,r){this.p={x:t[0],y:t[1]},this.featureId=e,this.ringId=n,this.eventId=r,this.otherEvent=null,this.isLeftEndpoint=null}isSamePoint(t){return this.p.x===t.p.x&&this.p.y===t.p.y}};let St=0,Ct=0,At=0;function Tt(t,e){const n="Feature"===t.type?t.geometry:t;let r=n.coordinates;"Polygon"!==n.type&&"MultiLineString"!==n.type||(r=[r]),"LineString"===n.type&&(r=[[r]]);for(let o=0;o<r.length;o++)for(let t=0;t<r[o].length;t++){let n=r[o][t][0],i=null;Ct+=1;for(let s=0;s<r[o][t].length-1;s++){i=r[o][t][s+1];const a=new Dt(n,St,Ct,At),l=new Dt(i,St,Ct,At+1);a.otherEvent=l,l.otherEvent=a,Et(a,l)>0?(l.isLeftEndpoint=!0,a.isLeftEndpoint=!1):(a.isLeftEndpoint=!0,l.isLeftEndpoint=!1),e.push(a),e.push(l),n=i,At+=1}}St+=1}let It=class{constructor(t){this.leftSweepEvent=t,this.rightSweepEvent=t.otherEvent}};function Ot(t,e){if(null===t||null===e)return!1;if(t.leftSweepEvent.ringId===e.leftSweepEvent.ringId&&(t.rightSweepEvent.isSamePoint(e.leftSweepEvent)||t.rightSweepEvent.isSamePoint(e.leftSweepEvent)||t.rightSweepEvent.isSamePoint(e.rightSweepEvent)||t.leftSweepEvent.isSamePoint(e.leftSweepEvent)||t.leftSweepEvent.isSamePoint(e.rightSweepEvent)))return!1;const n=t.leftSweepEvent.p.x,r=t.leftSweepEvent.p.y,o=t.rightSweepEvent.p.x,i=t.rightSweepEvent.p.y,s=e.leftSweepEvent.p.x,a=e.leftSweepEvent.p.y,l=e.rightSweepEvent.p.x,c=e.rightSweepEvent.p.y,h=(c-a)*(o-n)-(l-s)*(i-r),u=(l-s)*(r-a)-(c-a)*(n-s),g=(o-n)*(r-a)-(i-r)*(n-s);if(0===h)return!1;const p=u/h,d=g/h;if(p>=0&&p<=1&&d>=0&&d<=1){return[n+p*(o-n),r+p*(i-r)]}return!1}var _t=function(t,e){const n=new xt([],Et);return function(t,e){if("FeatureCollection"===t.type){const n=t.features;for(let t=0;t<n.length;t++)Tt(n[t],e)}else Tt(t,e)}(t,n),function(t,e){e=e||!1;const n=[],r=new xt([],Lt);for(;t.length;){const o=t.pop();if(o.isLeftEndpoint){const t=new It(o);for(let i=0;i<r.data.length;i++){const s=r.data[i];if(e&&s.leftSweepEvent.featureId===o.featureId)continue;const a=Ot(t,s);!1!==a&&n.push(a)}r.push(t)}else!1===o.isLeftEndpoint&&r.pop()}return n}(n,e)};var Ft=function(t,e,n={}){const{removeDuplicates:r=!0,ignoreSelfIntersections:o=!0}=n;let i=[];"FeatureCollection"===t.type?i=i.concat(t.features):"Feature"===t.type?i.push(t):"LineString"!==t.type&&"Polygon"!==t.type&&"MultiLineString"!==t.type&&"MultiPolygon"!==t.type||i.push(A(t)),"FeatureCollection"===e.type?i=i.concat(e.features):"Feature"===e.type?i.push(e):"LineString"!==e.type&&"Polygon"!==e.type&&"MultiLineString"!==e.type&&"MultiPolygon"!==e.type||i.push(A(e));const s=_t(_(i),o);let a=[];if(r){const t={};s.forEach(e=>{const n=e.join(",");t[n]||(t[n]=!0,a.push(e))})}else a=s;return _(a.map(t=>T(t)))},Bt=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,Ht=Math.ceil,zt=Math.floor,Gt="[BigNumber Error] ",Nt=Gt+"Number primitive has more than 15 significant digits: ",Ut=1e14,Rt=14,Xt=9007199254740991,Yt=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],Vt=1e7,Kt=1e9;function qt(t){var e=0|t;return t>0||t===e?e:e-1}function jt(t){for(var e,n,r=1,o=t.length,i=t[0]+"";r<o;){for(e=t[r++]+"",n=Rt-e.length;n--;e="0"+e);i+=e}for(o=i.length;48===i.charCodeAt(--o););return i.slice(0,o+1||1)}function Wt(t,e){var n,r,o=t.c,i=e.c,s=t.s,a=e.s,l=t.e,c=e.e;if(!s||!a)return null;if(n=o&&!o[0],r=i&&!i[0],n||r)return n?r?0:-a:s;if(s!=a)return s;if(n=s<0,r=l==c,!o||!i)return r?0:!o^n?1:-1;if(!r)return l>c^n?1:-1;for(a=(l=o.length)<(c=i.length)?l:c,s=0;s<a;s++)if(o[s]!=i[s])return o[s]>i[s]^n?1:-1;return l==c?0:l>c^n?1:-1}function $t(t,e,n,r){if(t<e||t>n||t!==zt(t))throw Error(Gt+(r||"Argument")+("number"==typeof t?t<e||t>n?" out of range: ":" not an integer: ":" not a primitive number: ")+String(t))}function Jt(t){var e=t.c.length-1;return qt(t.e/Rt)==e&&t.c[e]%2!=0}function Zt(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(e<0?"e":"e+")+e}function Qt(t,e,n){var r,o;if(e<0){for(o=n+".";++e;o+=n);t=o+t}else if(++e>(r=t.length)){for(o=n,e-=r;--e;o+=n);t+=o}else e<r&&(t=t.slice(0,e)+"."+t.slice(e));return t}var te=function t(e){var n,r,o,i,s,a=P.prototype={constructor:P,toString:null,valueOf:null},l=new P(1),c=20,h=4,u=-7,g=21,p=-1e7,d=1e7,f=!1,m=1,y=0,v={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},M="0123456789abcdefghijklmnopqrstuvwxyz",w=!0;function P(t,e){var n,i,s,a,l,u,g,f,m=this;if(!(m instanceof P))return new P(t,e);if(null==e){if(t&&!0===t._isBigNumber)return m.s=t.s,void(!t.c||t.e>d?m.c=m.e=null:t.e<p?m.c=[m.e=0]:(m.e=t.e,m.c=t.c.slice()));if((u="number"==typeof t)&&0*t==0){if(m.s=1/t<0?(t=-t,-1):1,t===~~t){for(a=0,l=t;l>=10;l/=10,a++);return void(a>d?m.c=m.e=null:(m.e=a,m.c=[t]))}f=String(t)}else{if(!Bt.test(f=String(t)))return o(m,f,u);m.s=45==f.charCodeAt(0)?(f=f.slice(1),-1):1}(a=f.indexOf("."))>-1&&(f=f.replace(".","")),(l=f.search(/e/i))>0?(a<0&&(a=l),a+=+f.slice(l+1),f=f.substring(0,l)):a<0&&(a=f.length)}else{if($t(e,2,M.length,"Base"),10==e&&w)return E(m=new P(t),c+m.e+1,h);if(f=String(t),u="number"==typeof t){if(0*t!=0)return o(m,f,u,e);if(m.s=1/t<0?(f=f.slice(1),-1):1,P.DEBUG&&f.replace(/^0\.0*|\./,"").length>15)throw Error(Nt+t)}else m.s=45===f.charCodeAt(0)?(f=f.slice(1),-1):1;for(n=M.slice(0,e),a=l=0,g=f.length;l<g;l++)if(n.indexOf(i=f.charAt(l))<0){if("."==i){if(l>a){a=g;continue}}else if(!s&&(f==f.toUpperCase()&&(f=f.toLowerCase())||f==f.toLowerCase()&&(f=f.toUpperCase()))){s=!0,l=-1,a=0;continue}return o(m,String(t),u,e)}u=!1,(a=(f=r(f,e,10,m.s)).indexOf("."))>-1?f=f.replace(".",""):a=f.length}for(l=0;48===f.charCodeAt(l);l++);for(g=f.length;48===f.charCodeAt(--g););if(f=f.slice(l,++g)){if(g-=l,u&&P.DEBUG&&g>15&&(t>Xt||t!==zt(t)))throw Error(Nt+m.s*t);if((a=a-l-1)>d)m.c=m.e=null;else if(a<p)m.c=[m.e=0];else{if(m.e=a,m.c=[],l=(a+1)%Rt,a<0&&(l+=Rt),l<g){for(l&&m.c.push(+f.slice(0,l)),g-=Rt;l<g;)m.c.push(+f.slice(l,l+=Rt));l=Rt-(f=f.slice(l)).length}else l-=g;for(;l--;f+="0");m.c.push(+f)}}else m.c=[m.e=0]}function b(t,e,n,r){var o,i,s,a,l;if(null==n?n=h:$t(n,0,8),!t.c)return t.toString();if(o=t.c[0],s=t.e,null==e)l=jt(t.c),l=1==r||2==r&&(s<=u||s>=g)?Zt(l,s):Qt(l,s,"0");else if(i=(t=E(new P(t),e,n)).e,a=(l=jt(t.c)).length,1==r||2==r&&(e<=i||i<=u)){for(;a<e;l+="0",a++);l=Zt(l,i)}else if(e-=s+(2===r&&i>s),l=Qt(l,i,"0"),i+1>a){if(--e>0)for(l+=".";e--;l+="0");}else if((e+=i-a)>0)for(i+1==a&&(l+=".");e--;l+="0");return t.s<0&&o?"-"+l:l}function x(t,e){for(var n,r,o=1,i=new P(t[0]);o<t.length;o++)(!(r=new P(t[o])).s||(n=Wt(i,r))===e||0===n&&i.s===e)&&(i=r);return i}function k(t,e,n){for(var r=1,o=e.length;!e[--o];e.pop());for(o=e[0];o>=10;o/=10,r++);return(n=r+n*Rt-1)>d?t.c=t.e=null:n<p?t.c=[t.e=0]:(t.e=n,t.c=e),t}function E(t,e,n,r){var o,i,s,a,l,c,h,u=t.c,g=Yt;if(u){t:{for(o=1,a=u[0];a>=10;a/=10,o++);if((i=e-o)<0)i+=Rt,s=e,l=u[c=0],h=zt(l/g[o-s-1]%10);else if((c=Ht((i+1)/Rt))>=u.length){if(!r)break t;for(;u.length<=c;u.push(0));l=h=0,o=1,s=(i%=Rt)-Rt+1}else{for(l=a=u[c],o=1;a>=10;a/=10,o++);h=(s=(i%=Rt)-Rt+o)<0?0:zt(l/g[o-s-1]%10)}if(r=r||e<0||null!=u[c+1]||(s<0?l:l%g[o-s-1]),r=n<4?(h||r)&&(0==n||n==(t.s<0?3:2)):h>5||5==h&&(4==n||r||6==n&&(i>0?s>0?l/g[o-s]:0:u[c-1])%10&1||n==(t.s<0?8:7)),e<1||!u[0])return u.length=0,r?(e-=t.e+1,u[0]=g[(Rt-e%Rt)%Rt],t.e=-e||0):u[0]=t.e=0,t;if(0==i?(u.length=c,a=1,c--):(u.length=c+1,a=g[Rt-i],u[c]=s>0?zt(l/g[o-s]%g[s])*a:0),r)for(;;){if(0==c){for(i=1,s=u[0];s>=10;s/=10,i++);for(s=u[0]+=a,a=1;s>=10;s/=10,a++);i!=a&&(t.e++,u[0]==Ut&&(u[0]=1));break}if(u[c]+=a,u[c]!=Ut)break;u[c--]=0,a=1}for(i=u.length;0===u[--i];u.pop());}t.e>d?t.c=t.e=null:t.e<p&&(t.c=[t.e=0])}return t}function L(t){var e,n=t.e;return null===n?t.toString():(e=jt(t.c),e=n<=u||n>=g?Zt(e,n):Qt(e,n,"0"),t.s<0?"-"+e:e)}return P.clone=t,P.ROUND_UP=0,P.ROUND_DOWN=1,P.ROUND_CEIL=2,P.ROUND_FLOOR=3,P.ROUND_HALF_UP=4,P.ROUND_HALF_DOWN=5,P.ROUND_HALF_EVEN=6,P.ROUND_HALF_CEIL=7,P.ROUND_HALF_FLOOR=8,P.EUCLID=9,P.config=P.set=function(t){var e,n;if(null!=t){if("object"!=typeof t)throw Error(Gt+"Object expected: "+t);if(t.hasOwnProperty(e="DECIMAL_PLACES")&&($t(n=t[e],0,Kt,e),c=n),t.hasOwnProperty(e="ROUNDING_MODE")&&($t(n=t[e],0,8,e),h=n),t.hasOwnProperty(e="EXPONENTIAL_AT")&&((n=t[e])&&n.pop?($t(n[0],-Kt,0,e),$t(n[1],0,Kt,e),u=n[0],g=n[1]):($t(n,-Kt,Kt,e),u=-(g=n<0?-n:n))),t.hasOwnProperty(e="RANGE"))if((n=t[e])&&n.pop)$t(n[0],-Kt,-1,e),$t(n[1],1,Kt,e),p=n[0],d=n[1];else{if($t(n,-Kt,Kt,e),!n)throw Error(Gt+e+" cannot be zero: "+n);p=-(d=n<0?-n:n)}if(t.hasOwnProperty(e="CRYPTO")){if((n=t[e])!==!!n)throw Error(Gt+e+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw f=!n,Error(Gt+"crypto unavailable");f=n}else f=n}if(t.hasOwnProperty(e="MODULO_MODE")&&($t(n=t[e],0,9,e),m=n),t.hasOwnProperty(e="POW_PRECISION")&&($t(n=t[e],0,Kt,e),y=n),t.hasOwnProperty(e="FORMAT")){if("object"!=typeof(n=t[e]))throw Error(Gt+e+" not an object: "+n);v=n}if(t.hasOwnProperty(e="ALPHABET")){if("string"!=typeof(n=t[e])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(Gt+e+" invalid: "+n);w="0123456789"==n.slice(0,10),M=n}}return{DECIMAL_PLACES:c,ROUNDING_MODE:h,EXPONENTIAL_AT:[u,g],RANGE:[p,d],CRYPTO:f,MODULO_MODE:m,POW_PRECISION:y,FORMAT:v,ALPHABET:M}},P.isBigNumber=function(t){if(!t||!0!==t._isBigNumber)return!1;if(!P.DEBUG)return!0;var e,n,r=t.c,o=t.e,i=t.s;t:if("[object Array]"=={}.toString.call(r)){if((1===i||-1===i)&&o>=-Kt&&o<=Kt&&o===zt(o)){if(0===r[0]){if(0===o&&1===r.length)return!0;break t}if((e=(o+1)%Rt)<1&&(e+=Rt),String(r[0]).length==e){for(e=0;e<r.length;e++)if((n=r[e])<0||n>=Ut||n!==zt(n))break t;if(0!==n)return!0}}}else if(null===r&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(Gt+"Invalid BigNumber: "+t)},P.maximum=P.max=function(){return x(arguments,-1)},P.minimum=P.min=function(){return x(arguments,1)},P.random=(i=9007199254740992,s=Math.random()*i&2097151?function(){return zt(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(t){var e,n,r,o,i,a=0,h=[],u=new P(l);if(null==t?t=c:$t(t,0,Kt),o=Ht(t/Rt),f)if(crypto.getRandomValues){for(e=crypto.getRandomValues(new Uint32Array(o*=2));a<o;)(i=131072*e[a]+(e[a+1]>>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),e[a]=n[0],e[a+1]=n[1]):(h.push(i%1e14),a+=2);a=o/2}else{if(!crypto.randomBytes)throw f=!1,Error(Gt+"crypto unavailable");for(e=crypto.randomBytes(o*=7);a<o;)(i=281474976710656*(31&e[a])+1099511627776*e[a+1]+4294967296*e[a+2]+16777216*e[a+3]+(e[a+4]<<16)+(e[a+5]<<8)+e[a+6])>=9e15?crypto.randomBytes(7).copy(e,a):(h.push(i%1e14),a+=7);a=o/7}if(!f)for(;a<o;)(i=s())<9e15&&(h[a++]=i%1e14);for(o=h[--a],t%=Rt,o&&t&&(i=Yt[Rt-t],h[a]=zt(o/i)*i);0===h[a];h.pop(),a--);if(a<0)h=[r=0];else{for(r=-1;0===h[0];h.splice(0,1),r-=Rt);for(a=1,i=h[0];i>=10;i/=10,a++);a<Rt&&(r-=Rt-a)}return u.e=r,u.c=h,u}),P.sum=function(){for(var t=1,e=arguments,n=new P(e[0]);t<e.length;)n=n.plus(e[t++]);return n},r=function(){var t="0123456789";function e(t,e,n,r){for(var o,i,s=[0],a=0,l=t.length;a<l;){for(i=s.length;i--;s[i]*=e);for(s[0]+=r.indexOf(t.charAt(a++)),o=0;o<s.length;o++)s[o]>n-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(r,o,i,s,a){var l,u,g,p,d,f,m,v,w=r.indexOf("."),b=c,x=h;for(w>=0&&(p=y,y=0,r=r.replace(".",""),f=(v=new P(o)).pow(r.length-w),y=p,v.c=e(Qt(jt(f.c),f.e,"0"),10,i,t),v.e=v.c.length),g=p=(m=e(r,o,i,a?(l=M,t):(l=t,M))).length;0==m[--p];m.pop());if(!m[0])return l.charAt(0);if(w<0?--g:(f.c=m,f.e=g,f.s=s,m=(f=n(f,v,b,x,i)).c,d=f.r,g=f.e),w=m[u=g+b+1],p=i/2,d=d||u<0||null!=m[u+1],d=x<4?(null!=w||d)&&(0==x||x==(f.s<0?3:2)):w>p||w==p&&(4==x||d||6==x&&1&m[u-1]||x==(f.s<0?8:7)),u<1||!m[0])r=d?Qt(l.charAt(1),-b,l.charAt(0)):l.charAt(0);else{if(m.length=u,d)for(--i;++m[--u]>i;)m[u]=0,u||(++g,m=[1].concat(m));for(p=m.length;!m[--p];);for(w=0,r="";w<=p;r+=l.charAt(m[w++]));r=Qt(r,g,l.charAt(0))}return r}}(),n=function(){function t(t,e,n){var r,o,i,s,a=0,l=t.length,c=e%Vt,h=e/Vt|0;for(t=t.slice();l--;)a=((o=c*(i=t[l]%Vt)+(r=h*i+(s=t[l]/Vt|0)*c)%Vt*Vt+a)/n|0)+(r/Vt|0)+h*s,t[l]=o%n;return a&&(t=[a].concat(t)),t}function e(t,e,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;o<n;o++)if(t[o]!=e[o]){i=t[o]>e[o]?1:-1;break}return i}function n(t,e,n,r){for(var o=0;n--;)t[n]-=o,o=t[n]<e[n]?1:0,t[n]=o*r+t[n]-e[n];for(;!t[0]&&t.length>1;t.splice(0,1));}return function(r,o,i,s,a){var l,c,h,u,g,p,d,f,m,y,v,M,w,b,x,k,L,D=r.s==o.s?1:-1,S=r.c,C=o.c;if(!(S&&S[0]&&C&&C[0]))return new P(r.s&&o.s&&(S?!C||S[0]!=C[0]:C)?S&&0==S[0]||!C?0*D:D/0:NaN);for(m=(f=new P(D)).c=[],D=i+(c=r.e-o.e)+1,a||(a=Ut,c=qt(r.e/Rt)-qt(o.e/Rt),D=D/Rt|0),h=0;C[h]==(S[h]||0);h++);if(C[h]>(S[h]||0)&&c--,D<0)m.push(1),u=!0;else{for(b=S.length,k=C.length,h=0,D+=2,(g=zt(a/(C[0]+1)))>1&&(C=t(C,g,a),S=t(S,g,a),k=C.length,b=S.length),w=k,v=(y=S.slice(0,k)).length;v<k;y[v++]=0);L=C.slice(),L=[0].concat(L),x=C[0],C[1]>=a/2&&x++;do{if(g=0,(l=e(C,y,k,v))<0){if(M=y[0],k!=v&&(M=M*a+(y[1]||0)),(g=zt(M/x))>1)for(g>=a&&(g=a-1),d=(p=t(C,g,a)).length,v=y.length;1==e(p,y,d,v);)g--,n(p,k<d?L:C,d,a),d=p.length,l=1;else 0==g&&(l=g=1),d=(p=C.slice()).length;if(d<v&&(p=[0].concat(p)),n(y,p,v,a),v=y.length,-1==l)for(;e(C,y,k,v)<1;)g++,n(y,k<v?L:C,v,a),v=y.length}else 0===l&&(g++,y=[0]);m[h++]=g,y[0]?y[v++]=S[w]||0:(y=[S[w]],v=1)}while((w++<b||null!=y[0])&&D--);u=null!=y[0],m[0]||m.splice(0,1)}if(a==Ut){for(h=1,D=m[0];D>=10;D/=10,h++);E(f,i+(f.e=h+c*Rt-1)+1,s,u)}else f.e=c,f.r=+u;return f}}(),o=function(){var t=/^(-?)0([xbo])(?=\w[\w.]*$)/i,e=/^([^.]+)\.$/,n=/^\.([^.]+)$/,r=/^-?(Infinity|NaN)$/,o=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(i,s,a,l){var c,h=a?s:s.replace(o,"");if(r.test(h))i.s=isNaN(h)?null:h<0?-1:1;else{if(!a&&(h=h.replace(t,function(t,e,n){return c="x"==(n=n.toLowerCase())?16:"b"==n?2:8,l&&l!=c?t:e}),l&&(c=l,h=h.replace(e,"$1").replace(n,"0.$1")),s!=h))return new P(h,c);if(P.DEBUG)throw Error(Gt+"Not a"+(l?" base "+l:"")+" number: "+s);i.s=null}i.c=i.e=null}}(),a.absoluteValue=a.abs=function(){var t=new P(this);return t.s<0&&(t.s=1),t},a.comparedTo=function(t,e){return Wt(this,new P(t,e))},a.decimalPlaces=a.dp=function(t,e){var n,r,o,i=this;if(null!=t)return $t(t,0,Kt),null==e?e=h:$t(e,0,8),E(new P(i),t+i.e+1,e);if(!(n=i.c))return null;if(r=((o=n.length-1)-qt(this.e/Rt))*Rt,o=n[o])for(;o%10==0;o/=10,r--);return r<0&&(r=0),r},a.dividedBy=a.div=function(t,e){return n(this,new P(t,e),c,h)},a.dividedToIntegerBy=a.idiv=function(t,e){return n(this,new P(t,e),0,1)},a.exponentiatedBy=a.pow=function(t,e){var n,r,o,i,s,a,c,u,g=this;if((t=new P(t)).c&&!t.isInteger())throw Error(Gt+"Exponent not an integer: "+L(t));if(null!=e&&(e=new P(e)),s=t.e>14,!g.c||!g.c[0]||1==g.c[0]&&!g.e&&1==g.c.length||!t.c||!t.c[0])return u=new P(Math.pow(+L(g),s?t.s*(2-Jt(t)):+L(t))),e?u.mod(e):u;if(a=t.s<0,e){if(e.c?!e.c[0]:!e.s)return new P(NaN);(r=!a&&g.isInteger()&&e.isInteger())&&(g=g.mod(e))}else{if(t.e>9&&(g.e>0||g.e<-1||(0==g.e?g.c[0]>1||s&&g.c[1]>=24e7:g.c[0]<8e13||s&&g.c[0]<=9999975e7)))return i=g.s<0&&Jt(t)?-0:0,g.e>-1&&(i=1/i),new P(a?1/i:i);y&&(i=Ht(y/Rt+2))}for(s?(n=new P(.5),a&&(t.s=1),c=Jt(t)):c=(o=Math.abs(+L(t)))%2,u=new P(l);;){if(c){if(!(u=u.times(g)).c)break;i?u.c.length>i&&(u.c.length=i):r&&(u=u.mod(e))}if(o){if(0===(o=zt(o/2)))break;c=o%2}else if(E(t=t.times(n),t.e+1,1),t.e>14)c=Jt(t);else{if(0===(o=+L(t)))break;c=o%2}g=g.times(g),i?g.c&&g.c.length>i&&(g.c.length=i):r&&(g=g.mod(e))}return r?u:(a&&(u=l.div(u)),e?u.mod(e):i?E(u,y,h,undefined):u)},a.integerValue=function(t){var e=new P(this);return null==t?t=h:$t(t,0,8),E(e,e.e+1,t)},a.isEqualTo=a.eq=function(t,e){return 0===Wt(this,new P(t,e))},a.isFinite=function(){return!!this.c},a.isGreaterThan=a.gt=function(t,e){return Wt(this,new P(t,e))>0},a.isGreaterThanOrEqualTo=a.gte=function(t,e){return 1===(e=Wt(this,new P(t,e)))||0===e},a.isInteger=function(){return!!this.c&&qt(this.e/Rt)>this.c.length-2},a.isLessThan=a.lt=function(t,e){return Wt(this,new P(t,e))<0},a.isLessThanOrEqualTo=a.lte=function(t,e){return-1===(e=Wt(this,new P(t,e)))||0===e},a.isNaN=function(){return!this.s},a.isNegative=function(){return this.s<0},a.isPositive=function(){return this.s>0},a.isZero=function(){return!!this.c&&0==this.c[0]},a.minus=function(t,e){var n,r,o,i,s=this,a=s.s;if(e=(t=new P(t,e)).s,!a||!e)return new P(NaN);if(a!=e)return t.s=-e,s.plus(t);var l=s.e/Rt,c=t.e/Rt,u=s.c,g=t.c;if(!l||!c){if(!u||!g)return u?(t.s=-e,t):new P(g?s:NaN);if(!u[0]||!g[0])return g[0]?(t.s=-e,t):new P(u[0]?s:3==h?-0:0)}if(l=qt(l),c=qt(c),u=u.slice(),a=l-c){for((i=a<0)?(a=-a,o=u):(c=l,o=g),o.reverse(),e=a;e--;o.push(0));o.reverse()}else for(r=(i=(a=u.length)<(e=g.length))?a:e,a=e=0;e<r;e++)if(u[e]!=g[e]){i=u[e]<g[e];break}if(i&&(o=u,u=g,g=o,t.s=-t.s),(e=(r=g.length)-(n=u.length))>0)for(;e--;u[n++]=0);for(e=Ut-1;r>a;){if(u[--r]<g[r]){for(n=r;n&&!u[--n];u[n]=e);--u[n],u[r]+=Ut}u[r]-=g[r]}for(;0==u[0];u.splice(0,1),--c);return u[0]?k(t,u,c):(t.s=3==h?-1:1,t.c=[t.e=0],t)},a.modulo=a.mod=function(t,e){var r,o,i=this;return t=new P(t,e),!i.c||!t.s||t.c&&!t.c[0]?new P(NaN):!t.c||i.c&&!i.c[0]?new P(i):(9==m?(o=t.s,t.s=1,r=n(i,t,0,3),t.s=o,r.s*=o):r=n(i,t,0,m),(t=i.minus(r.times(t))).c[0]||1!=m||(t.s=i.s),t)},a.multipliedBy=a.times=function(t,e){var n,r,o,i,s,a,l,c,h,u,g,p,d,f,m,y=this,v=y.c,M=(t=new P(t,e)).c;if(!(v&&M&&v[0]&&M[0]))return!y.s||!t.s||v&&!v[0]&&!M||M&&!M[0]&&!v?t.c=t.e=t.s=null:(t.s*=y.s,v&&M?(t.c=[0],t.e=0):t.c=t.e=null),t;for(r=qt(y.e/Rt)+qt(t.e/Rt),t.s*=y.s,(l=v.length)<(u=M.length)&&(d=v,v=M,M=d,o=l,l=u,u=o),o=l+u,d=[];o--;d.push(0));for(f=Ut,m=Vt,o=u;--o>=0;){for(n=0,g=M[o]%m,p=M[o]/m|0,i=o+(s=l);i>o;)n=((c=g*(c=v[--s]%m)+(a=p*c+(h=v[s]/m|0)*g)%m*m+d[i]+n)/f|0)+(a/m|0)+p*h,d[i--]=c%f;d[i]=n}return n?++r:d.splice(0,1),k(t,d,r)},a.negated=function(){var t=new P(this);return t.s=-t.s||null,t},a.plus=function(t,e){var n,r=this,o=r.s;if(e=(t=new P(t,e)).s,!o||!e)return new P(NaN);if(o!=e)return t.s=-e,r.minus(t);var i=r.e/Rt,s=t.e/Rt,a=r.c,l=t.c;if(!i||!s){if(!a||!l)return new P(o/0);if(!a[0]||!l[0])return l[0]?t:new P(a[0]?r:0*o)}if(i=qt(i),s=qt(s),a=a.slice(),o=i-s){for(o>0?(s=i,n=l):(o=-o,n=a),n.reverse();o--;n.push(0));n.reverse()}for((o=a.length)-(e=l.length)<0&&(n=l,l=a,a=n,e=o),o=0;e;)o=(a[--e]=a[e]+l[e]+o)/Ut|0,a[e]=Ut===a[e]?0:a[e]%Ut;return o&&(a=[o].concat(a),++s),k(t,a,s)},a.precision=a.sd=function(t,e){var n,r,o,i=this;if(null!=t&&t!==!!t)return $t(t,1,Kt),null==e?e=h:$t(e,0,8),E(new P(i),t,e);if(!(n=i.c))return null;if(r=(o=n.length-1)*Rt+1,o=n[o]){for(;o%10==0;o/=10,r--);for(o=n[0];o>=10;o/=10,r++);}return t&&i.e+1>r&&(r=i.e+1),r},a.shiftedBy=function(t){return $t(t,-9007199254740991,Xt),this.times("1e"+t)},a.squareRoot=a.sqrt=function(){var t,e,r,o,i,s=this,a=s.c,l=s.s,u=s.e,g=c+4,p=new P("0.5");if(1!==l||!a||!a[0])return new P(!l||l<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(l=Math.sqrt(+L(s)))||l==1/0?(((e=jt(a)).length+u)%2==0&&(e+="0"),l=Math.sqrt(+e),u=qt((u+1)/2)-(u<0||u%2),r=new P(e=l==1/0?"5e"+u:(e=l.toExponential()).slice(0,e.indexOf("e")+1)+u)):r=new P(l+""),r.c[0])for((l=(u=r.e)+g)<3&&(l=0);;)if(i=r,r=p.times(i.plus(n(s,i,g,1))),jt(i.c).slice(0,l)===(e=jt(r.c)).slice(0,l)){if(r.e<u&&--l,"9999"!=(e=e.slice(l-3,l+1))&&(o||"4999"!=e)){+e&&(+e.slice(1)||"5"!=e.charAt(0))||(E(r,r.e+c+2,1),t=!r.times(r).eq(s));break}if(!o&&(E(i,i.e+c+2,0),i.times(i).eq(s))){r=i;break}g+=4,l+=4,o=1}return E(r,r.e+c+1,h,t)},a.toExponential=function(t,e){return null!=t&&($t(t,0,Kt),t++),b(this,t,e,1)},a.toFixed=function(t,e){return null!=t&&($t(t,0,Kt),t=t+this.e+1),b(this,t,e)},a.toFormat=function(t,e,n){var r,o=this;if(null==n)null!=t&&e&&"object"==typeof e?(n=e,e=null):t&&"object"==typeof t?(n=t,t=e=null):n=v;else if("object"!=typeof n)throw Error(Gt+"Argument not an object: "+n);if(r=o.toFixed(t,e),o.c){var i,s=r.split("."),a=+n.groupSize,l=+n.secondaryGroupSize,c=n.groupSeparator||"",h=s[0],u=s[1],g=o.s<0,p=g?h.slice(1):h,d=p.length;if(l&&(i=a,a=l,l=i,d-=i),a>0&&d>0){for(i=d%a||a,h=p.substr(0,i);i<d;i+=a)h+=c+p.substr(i,a);l>0&&(h+=c+p.slice(i)),g&&(h="-"+h)}r=u?h+(n.decimalSeparator||"")+((l=+n.fractionGroupSize)?u.replace(new RegExp("\\d{"+l+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):u):h}return(n.prefix||"")+r+(n.suffix||"")},a.toFraction=function(t){var e,r,o,i,s,a,c,u,g,p,f,m,y=this,v=y.c;if(null!=t&&(!(c=new P(t)).isInteger()&&(c.c||1!==c.s)||c.lt(l)))throw Error(Gt+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+L(c));if(!v)return new P(y);for(e=new P(l),g=r=new P(l),o=u=new P(l),m=jt(v),s=e.e=m.length-y.e-1,e.c[0]=Yt[(a=s%Rt)<0?Rt+a:a],t=!t||c.comparedTo(e)>0?s>0?e:g:c,a=d,d=1/0,c=new P(m),u.c[0]=0;p=n(c,e,0,1),1!=(i=r.plus(p.times(o))).comparedTo(t);)r=o,o=i,g=u.plus(p.times(i=g)),u=i,e=c.minus(p.times(i=e)),c=i;return i=n(t.minus(r),o,0,1),u=u.plus(i.times(g)),r=r.plus(i.times(o)),u.s=g.s=y.s,f=n(g,o,s*=2,h).minus(y).abs().comparedTo(n(u,r,s,h).minus(y).abs())<1?[g,o]:[u,r],d=a,f},a.toNumber=function(){return+L(this)},a.toPrecision=function(t,e){return null!=t&&$t(t,1,Kt),b(this,t,e,2)},a.toString=function(t){var e,n=this,o=n.s,i=n.e;return null===i?o?(e="Infinity",o<0&&(e="-"+e)):e="NaN":(null==t?e=i<=u||i>=g?Zt(jt(n.c),i):Qt(jt(n.c),i,"0"):10===t&&w?e=Qt(jt((n=E(new P(n),c+i+1,h)).c),n.e,"0"):($t(t,2,M.length,"Base"),e=r(Qt(jt(n.c),i,"0"),10,t,o,!0)),o<0&&n.c[0]&&(e="-"+e)),e},a.valueOf=a.toJSON=function(){return L(this)},a._isBigNumber=!0,a[Symbol.toStringTag]="BigNumber",a[Symbol.for("nodejs.util.inspect.custom")]=a.valueOf,null!=e&&P.set(e),P}(),ee=class{constructor(t){i(this,"key"),i(this,"left",null),i(this,"right",null),this.key=t}},ne=class extends ee{constructor(t){super(t)}},re=class{constructor(){i(this,"size",0),i(this,"modificationCount",0),i(this,"splayCount",0)}splay(t){const e=this.root;if(null==e)return this.compare(t,t),-1;let n=null,r=null,o=null,i=null,s=e;const a=this.compare;let l;for(;;)if(l=a(s.key,t),l>0){let e=s.left;if(null==e)break;if(l=a(e.key,t),l>0&&(s.left=e.right,e.right=s,s=e,e=s.left,null==e))break;null==n?r=s:n.left=s,n=s,s=e}else{if(!(l<0))break;{let e=s.right;if(null==e)break;if(l=a(e.key,t),l<0&&(s.right=e.left,e.left=s,s=e,e=s.right,null==e))break;null==o?i=s:o.right=s,o=s,s=e}}return null!=o&&(o.right=s.left,s.left=i),null!=n&&(n.left=s.right,s.right=r),this.root!==s&&(this.root=s,this.splayCount++),l}splayMin(t){let e=t,n=e.left;for(;null!=n;){const t=n;e.left=t.right,t.right=e,e=t,n=e.left}return e}splayMax(t){let e=t,n=e.right;for(;null!=n;){const t=n;e.right=t.left,t.left=e,e=t,n=e.right}return e}_delete(t){if(null==this.root)return null;if(0!=this.splay(t))return null;let e=this.root;const n=e,r=e.left;if(this.size--,null==r)this.root=e.right;else{const t=e.right;e=this.splayMax(r),e.right=t,this.root=e}return this.modificationCount++,n}addNewRoot(t,e){this.size++,this.modificationCount++;const n=this.root;null!=n?(e<0?(t.left=n,t.right=n.right,n.right=null):(t.right=n,t.left=n.left,n.left=null),this.root=t):this.root=t}_first(){const t=this.root;return null==t?null:(this.root=this.splayMin(t),this.root)}_last(){const t=this.root;return null==t?null:(this.root=this.splayMax(t),this.root)}clear(){this.root=null,this.size=0,this.modificationCount++}has(t){return this.validKey(t)&&0==this.splay(t)}defaultCompare(){return(t,e)=>t<e?-1:t>e?1:0}wrap(){return{getRoot:()=>this.root,setRoot:t=>{this.root=t},getSize:()=>this.size,getModificationCount:()=>this.modificationCount,getSplayCount:()=>this.splayCount,setSplayCount:t=>{this.splayCount=t},splay:t=>this.splay(t),has:t=>this.has(t)}}},oe=class t extends re{constructor(t,e){super(),i(this,"root",null),i(this,"compare"),i(this,"validKey"),i(this,n,"[object Set]"),this.compare=t??this.defaultCompare(),this.validKey=e??(t=>null!=t&&null!=t)}delete(t){return!!this.validKey(t)&&null!=this._delete(t)}deleteAll(t){for(const e of t)this.delete(e)}forEach(t){const e=this[Symbol.iterator]();let n;for(;n=e.next(),!n.done;)t(n.value,n.value,this)}add(t){const e=this.splay(t);return 0!=e&&this.addNewRoot(new ne(t),e),this}addAndReturn(t){const e=this.splay(t);return 0!=e&&this.addNewRoot(new ne(t),e),this.root.key}addAll(t){for(const e of t)this.add(e)}isEmpty(){return null==this.root}isNotEmpty(){return null!=this.root}single(){if(0==this.size)throw"Bad state: No element";if(this.size>1)throw"Bad state: Too many element";return this.root.key}first(){if(0==this.size)throw"Bad state: No element";return this._first().key}last(){if(0==this.size)throw"Bad state: No element";return this._last().key}lastBefore(t){if(null==t)throw"Invalid arguments(s)";if(null==this.root)return null;if(this.splay(t)<0)return this.root.key;let e=this.root.left;if(null==e)return null;let n=e.right;for(;null!=n;)e=n,n=e.right;return e.key}firstAfter(t){if(null==t)throw"Invalid arguments(s)";if(null==this.root)return null;if(this.splay(t)>0)return this.root.key;let e=this.root.right;if(null==e)return null;let n=e.left;for(;null!=n;)e=n,n=e.left;return e.key}retainAll(e){const n=new t(this.compare,this.validKey),r=this.modificationCount;for(const t of e){if(r!=this.modificationCount)throw"Concurrent modification during iteration.";this.validKey(t)&&0==this.splay(t)&&n.add(this.root.key)}n.size!=this.size&&(this.root=n.root,this.size=n.size,this.modificationCount++)}lookup(t){if(!this.validKey(t))return null;return 0!=this.splay(t)?null:this.root.key}intersection(e){const n=new t(this.compare,this.validKey);for(const t of this)e.has(t)&&n.add(t);return n}difference(e){const n=new t(this.compare,this.validKey);for(const t of this)e.has(t)||n.add(t);return n}union(t){const e=this.clone();return e.addAll(t),e}clone(){const e=new t(this.compare,this.validKey);return e.size=this.size,e.root=this.copyNode(this.root),e}copyNode(t){if(null==t)return null;const e=new ne(t.key);return function t(e,n){let r,o;do{if(r=e.left,o=e.right,null!=r){const e=new ne(r.key);n.left=e,t(r,e)}if(null!=o){const t=new ne(o.key);n.right=t,e=o,n=t}}while(null!=o)}(t,e),e}toSet(){return this.clone()}entries(){return new ae(this.wrap())}keys(){return this[Symbol.iterator]()}values(){return this[Symbol.iterator]()}[(r=Symbol.iterator,n=Symbol.toStringTag,r)](){return new se(this.wrap())}},ie=class{constructor(t){i(this,"tree"),i(this,"path",new Array),i(this,"modificationCount",null),i(this,"splayCount"),this.tree=t,this.splayCount=t.getSplayCount()}[Symbol.iterator](){return this}next(){return this.moveNext()?{done:!1,value:this.current()}:{done:!0,value:null}}current(){if(!this.path.length)return null;const t=this.path[this.path.length-1];return this.getValue(t)}rebuildPath(t){this.path.splice(0,this.path.length),this.tree.splay(t),this.path.push(this.tree.getRoot()),this.splayCount=this.tree.getSplayCount()}findLeftMostDescendent(t){for(;null!=t;)this.path.push(t),t=t.left}moveNext(){if(this.modificationCount!=this.tree.getModificationCount()){if(null==this.modificationCount){this.modificationCount=this.tree.getModificationCount();let t=this.tree.getRoot();for(;null!=t;)this.path.push(t),t=t.left;return this.path.length>0}throw"Concurrent modification during iteration."}if(!this.path.length)return!1;this.splayCount!=this.tree.getSplayCount()&&this.rebuildPath(this.path[this.path.length-1].key);let t=this.path[this.path.length-1],e=t.right;if(null!=e){for(;null!=e;)this.path.push(e),e=e.left;return!0}for(this.path.pop();this.path.length&&this.path[this.path.length-1].right===t;)t=this.path.pop();return this.path.length>0}},se=class extends ie{getValue(t){return t.key}},ae=class extends ie{getValue(t){return[t.key,t.key]}},le=t=>()=>t,ce=t=>{const e=t?(e,n)=>n.minus(e).abs().isLessThanOrEqualTo(t):le(!1);return(t,n)=>e(t,n)?0:t.comparedTo(n)};function he(t){const e=t?(e,n,r,o,i)=>e.exponentiatedBy(2).isLessThanOrEqualTo(o.minus(n).exponentiatedBy(2).plus(i.minus(r).exponentiatedBy(2)).times(t)):le(!1);return(t,n,r)=>{const o=t.x,i=t.y,s=r.x,a=r.y,l=i.minus(a).times(n.x.minus(s)).minus(o.minus(s).times(n.y.minus(a)));return e(l,o,i,s,a)?0:l.comparedTo(0)}}var ue=t=>t,ge=t=>{if(t){const e=new oe(ce(t)),n=new oe(ce(t)),r=(t,e)=>e.addAndReturn(t),o=t=>({x:r(t.x,e),y:r(t.y,n)});return o({x:new te(0),y:new te(0)}),o}return ue},pe=t=>({set:t=>{de=pe(t)},reset:()=>pe(t),compare:ce(t),snap:ge(t),orient:he(t)}),de=pe(),fe=(t,e)=>t.ll.x.isLessThanOrEqualTo(e.x)&&e.x.isLessThanOrEqualTo(t.ur.x)&&t.ll.y.isLessThanOrEqualTo(e.y)&&e.y.isLessThanOrEqualTo(t.ur.y),me=(t,e)=>{if(e.ur.x.isLessThan(t.ll.x)||t.ur.x.isLessThan(e.ll.x)||e.ur.y.isLessThan(t.ll.y)||t.ur.y.isLessThan(e.ll.y))return null;const n=t.ll.x.isLessThan(e.ll.x)?e.ll.x:t.ll.x,r=t.ur.x.isLessThan(e.ur.x)?t.ur.x:e.ur.x;return{ll:{x:n,y:t.ll.y.isLessThan(e.ll.y)?e.ll.y:t.ll.y},ur:{x:r,y:t.ur.y.isLessThan(e.ur.y)?t.ur.y:e.ur.y}}},ye=(t,e)=>t.x.times(e.y).minus(t.y.times(e.x)),ve=(t,e)=>t.x.times(e.x).plus(t.y.times(e.y)),Me=t=>ve(t,t).sqrt(),we=(t,e,n)=>{const r={x:e.x.minus(t.x),y:e.y.minus(t.y)},o={x:n.x.minus(t.x),y:n.y.minus(t.y)};return ye(o,r).div(Me(o)).div(Me(r))},Pe=(t,e,n)=>{const r={x:e.x.minus(t.x),y:e.y.minus(t.y)},o={x:n.x.minus(t.x),y:n.y.minus(t.y)};return ve(o,r).div(Me(o)).div(Me(r))},be=(t,e,n)=>e.y.isZero()?null:{x:t.x.plus(e.x.div(e.y).times(n.minus(t.y))),y:n},xe=(t,e,n)=>e.x.isZero()?null:{x:n,y:t.y.plus(e.y.div(e.x).times(n.minus(t.x)))},ke=class t{constructor(t,e){i(this,"point"),i(this,"isLeft"),i(this,"segment"),i(this,"otherSE"),i(this,"consumedBy"),void 0===t.events?t.events=[this]:t.events.push(this),this.point=t,this.isLeft=e}static compare(e,n){const r=t.comparePoints(e.point,n.point);return 0!==r?r:(e.point!==n.point&&e.link(n),e.isLeft!==n.isLeft?e.isLeft?1:-1:Ie.compare(e.segment,n.segment))}static comparePoints(t,e){return t.x.isLessThan(e.x)?-1:t.x.isGreaterThan(e.x)?1:t.y.isLessThan(e.y)?-1:t.y.isGreaterThan(e.y)?1:0}link(t){if(t.point===this.point)throw new Error("Tried to link already linked events");const e=t.point.events;for(let n=0,r=e.length;n<r;n++){const t=e[n];this.point.events.push(t),t.point=this.point}this.checkForConsuming()}checkForConsuming(){const t=this.point.events.length;for(let e=0;e<t;e++){const n=this.point.events[e];if(void 0===n.segment.consumedBy)for(let r=e+1;r<t;r++){const t=this.point.events[r];void 0===t.consumedBy&&(n.otherSE.point.events===t.otherSE.point.events&&n.segment.consume(t.segment))}}}getAvailableLinkedEvents(){const t=[];for(let e=0,n=this.point.events.length;e<n;e++){const n=this.point.events[e];n!==this&&!n.segment.ringOut&&n.segment.isInResult()&&t.push(n)}return t}getLeftmostComparator(t){const e=new Map,n=n=>{const r=n.otherSE;e.set(n,{sine:we(this.point,t.point,r.point),cosine:Pe(this.point,t.point,r.point)})};return(t,r)=>{e.has(t)||n(t),e.has(r)||n(r);const{sine:o,cosine:i}=e.get(t),{sine:s,cosine:a}=e.get(r);return o.isGreaterThanOrEqualTo(0)&&s.isGreaterThanOrEqualTo(0)?i.isLessThan(a)?1:i.isGreaterThan(a)?-1:0:o.isLessThan(0)&&s.isLessThan(0)?i.isLessThan(a)?-1:i.isGreaterThan(a)?1:0:s.isLessThan(o)?-1:s.isGreaterThan(o)?1:0}}},Ee=class t{constructor(t){i(this,"events"),i(this,"poly"),i(this,"_isExteriorRing"),i(this,"_enclosingRing"),this.events=t;for(let e=0,n=t.length;e<n;e++)t[e].segment.ringOut=this;this.poly=null}static factory(e){const n=[];for(let r=0,o=e.length;r<o;r++){const o=e[r];if(!o.isInResult()||o.ringOut)continue;let i=null,s=o.leftSE,a=o.rightSE;const l=[s],c=s.point,h=[];for(;i=s,s=a,l.push(s),s.point!==c;)for(;;){const e=s.getAvailableLinkedEvents();if(0===e.length){const t=l[0].point,e=l[l.length-1].point;throw new Error(`Unable to complete output ring starting at [${t.x}, ${t.y}]. Last matching segment found ends at [${e.x}, ${e.y}].`)}if(1===e.length){a=e[0].otherSE;break}let r=null;for(let t=0,n=h.length;t<n;t++)if(h[t].point===s.point){r=t;break}if(null!==r){const e=h.splice(r)[0],o=l.splice(e.index);o.unshift(o[0].otherSE),n.push(new t(o.reverse()));continue}h.push({index:l.length,point:s.point});const o=s.getLeftmostComparator(i);a=e.sort(o)[0].otherSE;break}n.push(new t(l))}return n}getGeom(){let t=this.events[0].point;const e=[t];for(let l=1,c=this.events.length-1;l<c;l++){const n=this.events[l].point,r=this.events[l+1].point;0!==de.orient(n,t,r)&&(e.push(n),t=n)}if(1===e.length)return null;const n=e[0],r=e[1];0===de.orient(n,t,r)&&e.shift(),e.push(e[0]);const o=this.isExteriorRing()?1:-1,i=this.isExteriorRing()?0:e.length-1,s=this.isExteriorRing()?e.length:-1,a=[];for(let l=i;l!=s;l+=o)a.push([e[l].x.toNumber(),e[l].y.toNumber()]);return a}isExteriorRing(){if(void 0===this._isExteriorRing){const t=this.enclosingRing();this._isExteriorRing=!t||!t.isExteriorRing()}return this._isExteriorRing}enclosingRing(){return void 0===this._enclosingRing&&(this._enclosingRing=this._calcEnclosingRing()),this._enclosingRing}_calcEnclosingRing(){var t,e;let n=this.events[0];for(let i=1,s=this.events.length;i<s;i++){const t=this.events[i];ke.compare(n,t)>0&&(n=t)}let r=n.segment.prevInResult(),o=r?r.prevInResult():null;for(;;){if(!r)return null;if(!o)return r.ringOut;if(o.ringOut!==r.ringOut)return(null==(t=o.ringOut)?void 0:t.enclosingRing())!==r.ringOut?r.ringOut:null==(e=r.ringOut)?void 0:e.enclosingRing();r=o.prevInResult(),o=r?r.prevInResult():null}}},Le=class{constructor(t){i(this,"exteriorRing"),i(this,"interiorRings"),this.exteriorRing=t,t.poly=this,this.interiorRings=[]}addInterior(t){this.interiorRings.push(t),t.poly=this}getGeom(){const t=this.exteriorRing.getGeom();if(null===t)return null;const e=[t];for(let n=0,r=this.interiorRings.length;n<r;n++){const t=this.interiorRings[n].getGeom();null!==t&&e.push(t)}return e}},De=class{constructor(t){i(this,"rings"),i(this,"polys"),this.rings=t,this.polys=this._composePolys(t)}getGeom(){const t=[];for(let e=0,n=this.polys.length;e<n;e++){const n=this.polys[e].getGeom();null!==n&&t.push(n)}return t}_composePolys(t){var e;const n=[];for(let r=0,o=t.length;r<o;r++){const o=t[r];if(!o.poly)if(o.isExteriorRing())n.push(new Le(o));else{const t=o.enclosingRing();(null==t?void 0:t.poly)||n.push(new Le(t)),null==(e=null==t?void 0:t.poly)||e.addInterior(o)}}return n}},Se=class{constructor(t,e=Ie.compare){i(this,"queue"),i(this,"tree"),i(this,"segments"),this.queue=t,this.tree=new oe(e),this.segments=[]}process(t){const e=t.segment,n=[];if(t.consumedBy)return t.isLeft?this.queue.delete(t.otherSE):this.tree.delete(e),n;t.isLeft&&this.tree.add(e);let r=e,o=e;do{r=this.tree.lastBefore(r)}while(null!=r&&null!=r.consumedBy);do{o=this.tree.firstAfter(o)}while(null!=o&&null!=o.consumedBy);if(t.isLeft){let i=null;if(r){const t=r.getIntersection(e);if(null!==t&&(e.isAnEndpoint(t)||(i=t),!r.isAnEndpoint(t))){const e=this._splitSafely(r,t);for(let t=0,r=e.length;t<r;t++)n.push(e[t])}}let s=null;if(o){const t=o.getIntersection(e);if(null!==t&&(e.isAnEndpoint(t)||(s=t),!o.isAnEndpoint(t))){const e=this._splitSafely(o,t);for(let t=0,r=e.length;t<r;t++)n.push(e[t])}}if(null!==i||null!==s){let t=null;if(null===i)t=s;else if(null===s)t=i;else{t=ke.comparePoints(i,s)<=0?i:s}this.queue.delete(e.rightSE),n.push(e.rightSE);const r=e.split(t);for(let e=0,o=r.length;e<o;e++)n.push(r[e])}n.length>0?(this.tree.delete(e),n.push(t)):(this.segments.push(e),e.prev=r)}else{if(r&&o){const t=r.getIntersection(o);if(null!==t){if(!r.isAnEndpoint(t)){const e=this._splitSafely(r,t);for(let t=0,r=e.length;t<r;t++)n.push(e[t])}if(!o.isAnEndpoint(t)){const e=this._splitSafely(o,t);for(let t=0,r=e.length;t<r;t++)n.push(e[t])}}}this.tree.delete(e)}return n}_splitSafely(t,e){this.tree.delete(t);const n=t.rightSE;this.queue.delete(n);const r=t.split(e);return r.push(n),void 0===t.consumedBy&&this.tree.add(t),r}},Ce=new class{constructor(){i(this,"type"),i(this,"numMultiPolys")}run(t,e,n){Ce.type=t;const r=[new Fe(e,!0)];for(let l=0,c=n.length;l<c;l++)r.push(new Fe(n[l],!1));if(Ce.numMultiPolys=r.length,"difference"===Ce.type){const t=r[0];let e=1;for(;e<r.length;)null!==me(r[e].bbox,t.bbox)?e++:r.splice(e,1)}if("intersection"===Ce.type)for(let l=0,c=r.length;l<c;l++){const t=r[l];for(let e=l+1,n=r.length;e<n;e++)if(null===me(t.bbox,r[e].bbox))return[]}const o=new oe(ke.compare);for(let l=0,c=r.length;l<c;l++){const t=r[l].getSweepEvents();for(let e=0,n=t.length;e<n;e++)o.add(t[e])}const i=new Se(o);let s=null;for(0!=o.size&&(s=o.first(),o.delete(s));s;){const t=i.process(s);for(let e=0,n=t.length;e<n;e++){const n=t[e];void 0===n.consumedBy&&o.add(n)}0!=o.size?(s=o.first(),o.delete(s)):s=null}de.reset();const a=Ee.factory(i.segments);return new De(a).getGeom()}},Ae=Ce,Te=0,Ie=class t{constructor(t,e,n,r){i(this,"id"),i(this,"leftSE"),i(this,"rightSE"),i(this,"rings"),i(this,"windings"),i(this,"ringOut"),i(this,"consumedBy"),i(this,"prev"),i(this,"_prevInResult"),i(this,"_beforeState"),i(this,"_afterState"),i(this,"_isInResult"),this.id=++Te,this.leftSE=t,t.segment=this,t.otherSE=e,this.rightSE=e,e.segment=this,e.otherSE=t,this.rings=n,this.windings=r}static compare(t,e){const n=t.leftSE.point.x,r=e.leftSE.point.x,o=t.rightSE.point.x,i=e.rightSE.point.x;if(i.isLessThan(n))return 1;if(o.isLessThan(r))return-1;const s=t.leftSE.point.y,a=e.leftSE.point.y,l=t.rightSE.point.y,c=e.rightSE.point.y;if(n.isLessThan(r)){if(a.isLessThan(s)&&a.isLessThan(l))return 1;if(a.isGreaterThan(s)&&a.isGreaterThan(l))return-1;const n=t.comparePoint(e.leftSE.point);if(n<0)return 1;if(n>0)return-1;const r=e.comparePoint(t.rightSE.point);return 0!==r?r:-1}if(n.isGreaterThan(r)){if(s.isLessThan(a)&&s.isLessThan(c))return-1;if(s.isGreaterThan(a)&&s.isGreaterThan(c))return 1;const n=e.comparePoint(t.leftSE.point);if(0!==n)return n;const r=t.comparePoint(e.rightSE.point);return r<0?1:r>0?-1:1}if(s.isLessThan(a))return-1;if(s.isGreaterThan(a))return 1;if(o.isLessThan(i)){const n=e.comparePoint(t.rightSE.point);if(0!==n)return n}if(o.isGreaterThan(i)){const n=t.comparePoint(e.rightSE.point);if(n<0)return 1;if(n>0)return-1}if(!o.eq(i)){const t=l.minus(s),e=o.minus(n),h=c.minus(a),u=i.minus(r);if(t.isGreaterThan(e)&&h.isLessThan(u))return 1;if(t.isLessThan(e)&&h.isGreaterThan(u))return-1}return o.isGreaterThan(i)?1:o.isLessThan(i)||l.isLessThan(c)?-1:l.isGreaterThan(c)?1:t.id<e.id?-1:t.id>e.id?1:0}static fromRing(e,n,r){let o,i,s;const a=ke.comparePoints(e,n);if(a<0)o=e,i=n,s=1;else{if(!(a>0))throw new Error(`Tried to create degenerate segment at [${e.x}, ${e.y}]`);o=n,i=e,s=-1}const l=new ke(o,!0),c=new ke(i,!1);return new t(l,c,[r],[s])}replaceRightSE(t){this.rightSE=t,this.rightSE.segment=this,this.rightSE.otherSE=this.leftSE,this.leftSE.otherSE=this.rightSE}bbox(){const t=this.leftSE.point.y,e=this.rightSE.point.y;return{ll:{x:this.leftSE.point.x,y:t.isLessThan(e)?t:e},ur:{x:this.rightSE.point.x,y:t.isGreaterThan(e)?t:e}}}vector(){return{x:this.rightSE.point.x.minus(this.leftSE.point.x),y:this.rightSE.point.y.minus(this.leftSE.point.y)}}isAnEndpoint(t){return t.x.eq(this.leftSE.point.x)&&t.y.eq(this.leftSE.point.y)||t.x.eq(this.rightSE.point.x)&&t.y.eq(this.rightSE.point.y)}comparePoint(t){return de.orient(this.leftSE.point,t,this.rightSE.point)}getIntersection(t){const e=this.bbox(),n=t.bbox(),r=me(e,n);if(null===r)return null;const o=this.leftSE.point,i=this.rightSE.point,s=t.leftSE.point,a=t.rightSE.point,l=fe(e,s)&&0===this.comparePoint(s),c=fe(n,o)&&0===t.comparePoint(o),h=fe(e,a)&&0===this.comparePoint(a),u=fe(n,i)&&0===t.comparePoint(i);if(c&&l)return u&&!h?i:!u&&h?a:null;if(c)return h&&o.x.eq(a.x)&&o.y.eq(a.y)?null:o;if(l)return u&&i.x.eq(s.x)&&i.y.eq(s.y)?null:s;if(u&&h)return null;if(u)return i;if(h)return a;const g=((t,e,n,r)=>{if(e.x.isZero())return xe(n,r,t.x);if(r.x.isZero())return xe(t,e,n.x);if(e.y.isZero())return be(n,r,t.y);if(r.y.isZero())return be(t,e,n.y);const o=ye(e,r);if(o.isZero())return null;const i={x:n.x.minus(t.x),y:n.y.minus(t.y)},s=ye(i,e).div(o),a=ye(i,r).div(o),l=t.x.plus(a.times(e.x)),c=n.x.plus(s.times(r.x)),h=t.y.plus(a.times(e.y)),u=n.y.plus(s.times(r.y));return{x:l.plus(c).div(2),y:h.plus(u).div(2)}})(o,this.vector(),s,t.vector());return null===g?null:fe(r,g)?de.snap(g):null}split(e){const n=[],r=void 0!==e.events,o=new ke(e,!0),i=new ke(e,!1),s=this.rightSE;this.replaceRightSE(i),n.push(i),n.push(o);const a=new t(o,s,this.rings.slice(),this.windings.slice());return ke.comparePoints(a.leftSE.point,a.rightSE.point)>0&&a.swapEvents(),ke.comparePoints(this.leftSE.point,this.rightSE.point)>0&&this.swapEvents(),r&&(o.checkForConsuming(),i.checkForConsuming()),n}swapEvents(){const t=this.rightSE;this.rightSE=this.leftSE,this.leftSE=t,this.leftSE.isLeft=!0,this.rightSE.isLeft=!1;for(let e=0,n=this.windings.length;e<n;e++)this.windings[e]*=-1}consume(e){let n=this,r=e;for(;n.consumedBy;)n=n.consumedBy;for(;r.consumedBy;)r=r.consumedBy;const o=t.compare(n,r);if(0!==o){if(o>0){const t=n;n=r,r=t}if(n.prev===r){const t=n;n=r,r=t}for(let t=0,e=r.rings.length;t<e;t++){const e=r.rings[t],o=r.windings[t],i=n.rings.indexOf(e);-1===i?(n.rings.push(e),n.windings.push(o)):n.windings[i]+=o}r.rings=null,r.windings=null,r.consumedBy=n,r.leftSE.consumedBy=n.leftSE,r.rightSE.consumedBy=n.rightSE}}prevInResult(){return void 0!==this._prevInResult||(this.prev?this.prev.isInResult()?this._prevInResult=this.prev:this._prevInResult=this.prev.prevInResult():this._prevInResult=null),this._prevInResult}beforeState(){if(void 0!==this._beforeState)return this._beforeState;if(this.prev){const t=this.prev.consumedBy||this.prev;this._beforeState=t.afterState()}else this._beforeState={rings:[],windings:[],multiPolys:[]};return this._beforeState}afterState(){if(void 0!==this._afterState)return this._afterState;const t=this.beforeState();this._afterState={rings:t.rings.slice(0),windings:t.windings.slice(0),multiPolys:[]};const e=this._afterState.rings,n=this._afterState.windings,r=this._afterState.multiPolys;for(let s=0,a=this.rings.length;s<a;s++){const t=this.rings[s],r=this.windings[s],o=e.indexOf(t);-1===o?(e.push(t),n.push(r)):n[o]+=r}const o=[],i=[];for(let s=0,a=e.length;s<a;s++){if(0===n[s])continue;const t=e[s],r=t.poly;if(-1===i.indexOf(r))if(t.isExterior)o.push(r);else{-1===i.indexOf(r)&&i.push(r);const e=o.indexOf(t.poly);-1!==e&&o.splice(e,1)}}for(let s=0,a=o.length;s<a;s++){const t=o[s].multiPoly;-1===r.indexOf(t)&&r.push(t)}return this._afterState}isInResult(){if(this.consumedBy)return!1;if(void 0!==this._isInResult)return this._isInResult;const t=this.beforeState().multiPolys,e=this.afterState().multiPolys;switch(Ae.type){case"union":{const n=0===t.length,r=0===e.length;this._isInResult=n!==r;break}case"intersection":{let n,r;t.length<e.length?(n=t.length,r=e.length):(n=e.length,r=t.length),this._isInResult=r===Ae.numMultiPolys&&n<r;break}case"xor":{const n=Math.abs(t.length-e.length);this._isInResult=n%2==1;break}case"difference":{const n=t=>1===t.length&&t[0].isSubject;this._isInResult=n(t)!==n(e);break}}return this._isInResult}},Oe=class{constructor(t,e,n){if(i(this,"poly"),i(this,"isExterior"),i(this,"segments"),i(this,"bbox"),!Array.isArray(t)||0===t.length)throw new Error("Input geometry is not a valid Polygon or MultiPolygon");if(this.poly=e,this.isExterior=n,this.segments=[],"number"!=typeof t[0][0]||"number"!=typeof t[0][1])throw new Error("Input geometry is not a valid Polygon or MultiPolygon");const r=de.snap({x:new te(t[0][0]),y:new te(t[0][1])});this.bbox={ll:{x:r.x,y:r.y},ur:{x:r.x,y:r.y}};let o=r;for(let i=1,s=t.length;i<s;i++){if("number"!=typeof t[i][0]||"number"!=typeof t[i][1])throw new Error("Input geometry is not a valid Polygon or MultiPolygon");const e=de.snap({x:new te(t[i][0]),y:new te(t[i][1])});e.x.eq(o.x)&&e.y.eq(o.y)||(this.segments.push(Ie.fromRing(o,e,this)),e.x.isLessThan(this.bbox.ll.x)&&(this.bbox.ll.x=e.x),e.y.isLessThan(this.bbox.ll.y)&&(this.bbox.ll.y=e.y),e.x.isGreaterThan(this.bbox.ur.x)&&(this.bbox.ur.x=e.x),e.y.isGreaterThan(this.bbox.ur.y)&&(this.bbox.ur.y=e.y),o=e)}r.x.eq(o.x)&&r.y.eq(o.y)||this.segments.push(Ie.fromRing(o,r,this))}getSweepEvents(){const t=[];for(let e=0,n=this.segments.length;e<n;e++){const n=this.segments[e];t.push(n.leftSE),t.push(n.rightSE)}return t}},_e=class{constructor(t,e){if(i(this,"multiPoly"),i(this,"exteriorRing"),i(this,"interiorRings"),i(this,"bbox"),!Array.isArray(t))throw new Error("Input geometry is not a valid Polygon or MultiPolygon");this.exteriorRing=new Oe(t[0],this,!0),this.bbox={ll:{x:this.exteriorRing.bbox.ll.x,y:this.exteriorRing.bbox.ll.y},ur:{x:this.exteriorRing.bbox.ur.x,y:this.exteriorRing.bbox.ur.y}},this.interiorRings=[];for(let n=1,r=t.length;n<r;n++){const e=new Oe(t[n],this,!1);e.bbox.ll.x.isLessThan(this.bbox.ll.x)&&(this.bbox.ll.x=e.bbox.ll.x),e.bbox.ll.y.isLessThan(this.bbox.ll.y)&&(this.bbox.ll.y=e.bbox.ll.y),e.bbox.ur.x.isGreaterThan(this.bbox.ur.x)&&(this.bbox.ur.x=e.bbox.ur.x),e.bbox.ur.y.isGreaterThan(this.bbox.ur.y)&&(this.bbox.ur.y=e.bbox.ur.y),this.interiorRings.push(e)}this.multiPoly=e}getSweepEvents(){const t=this.exteriorRing.getSweepEvents();for(let e=0,n=this.interiorRings.length;e<n;e++){const n=this.interiorRings[e].getSweepEvents();for(let e=0,r=n.length;e<r;e++)t.push(n[e])}return t}},Fe=class{constructor(t,e){if(i(this,"isSubject"),i(this,"polys"),i(this,"bbox"),!Array.isArray(t))throw new Error("Input geometry is not a valid Polygon or MultiPolygon");try{"number"==typeof t[0][0][0]&&(t=[t])}catch(n){}this.polys=[],this.bbox={ll:{x:new te(Number.POSITIVE_INFINITY),y:new te(Number.POSITIVE_INFINITY)},ur:{x:new te(Number.NEGATIVE_INFINITY),y:new te(Number.NEGATIVE_INFINITY)}};for(let r=0,o=t.length;r<o;r++){const e=new _e(t[r],this);e.bbox.ll.x.isLessThan(this.bbox.ll.x)&&(this.bbox.ll.x=e.bbox.ll.x),e.bbox.ll.y.isLessThan(this.bbox.ll.y)&&(this.bbox.ll.y=e.bbox.ll.y),e.bbox.ur.x.isGreaterThan(this.bbox.ur.x)&&(this.bbox.ur.x=e.bbox.ur.x),e.bbox.ur.y.isGreaterThan(this.bbox.ur.y)&&(this.bbox.ur.y=e.bbox.ur.y),this.polys.push(e)}this.isSubject=e}getSweepEvents(){const t=[];for(let e=0,n=this.polys.length;e<n;e++){const n=this.polys[e].getSweepEvents();for(let e=0,r=n.length;e<r;e++)t.push(n[e])}return t}};de.set;var Be=function(t,e={}){const n=[];if(N(t,t=>{n.push(t.coordinates)}),n.length<2)throw new Error("Must have at least 2 geometries");const r=((t,...e)=>Ae.run("union",t,e))(n[0],...n.slice(1));return 0===r.length?null:1===r.length?I(r[0],e.properties):F(r,e.properties)};var He=function(t,e={}){const n=[];if(N(t,t=>{n.push(t.coordinates)}),n.length<2)throw new Error("Must specify at least 2 geometries");const r=((t,...e)=>Ae.run("intersection",t,e))(n[0],...n.slice(1));return 0===r.length?null:1===r.length?I(r[0],e.properties):F(r,e.properties)};var ze=function(t){const e=[];if(N(t,t=>{e.push(t.coordinates)}),e.length<2)throw new Error("Must have at least two features");const n=t.features[0].properties||{},r=((t,...e)=>Ae.run("difference",t,e))(e[0],...e.slice(1));return 0===r.length?null:1===r.length?I(r[0],n):F(r,n)};var Ge=function(t){const e=[];return"FeatureCollection"===t.type?G(t,function(t){z(t,function(n){e.push(T(n,t.properties))})}):"Feature"===t.type?z(t,function(n){e.push(T(n,t.properties))}):z(t,function(t){e.push(T(t))}),_(e)};function Ne(t,e={}){var n="object"==typeof e?e.mutate:e;if(!t)throw new Error("geojson is required");var r=Pt(t),o=[];switch(r){case"LineString":o=Ue(t,r);break;case"MultiLineString":case"Polygon":Mt(t).forEach(function(t){o.push(Ue(t,r))});break;case"MultiPolygon":Mt(t).forEach(function(t){var e=[];t.forEach(function(t){e.push(Ue(t,r))}),o.push(e)});break;case"Point":return t;case"MultiPoint":var i={};Mt(t).forEach(function(t){var e=t.join("-");Object.prototype.hasOwnProperty.call(i,e)||(o.push(t),i[e]=!0)});break;default:throw new Error(r+" geometry not supported")}return t.coordinates?!0===n?(t.coordinates=o,t):{type:r,coordinates:o}:!0===n?(t.geometry.coordinates=o,t):A({type:r,coordinates:o},t.properties,{bbox:t.bbox,id:t.id})}function Ue(t,e){var n=Mt(t);if(2===n.length&&!Re(n[0],n[1]))return n;var r=[],o=n.length-1,i=r.length;r.push(n[0]);for(var s=1;s<o;s++){var a=r[r.length-1];n[s][0]===a[0]&&n[s][1]===a[1]||(r.push(n[s]),(i=r.length)>2&&Xe(r[i-3],r[i-1],r[i-2])&&r.splice(r.length-2,1))}if(r.push(n[n.length-1]),i=r.length,("Polygon"===e||"MultiPolygon"===e)&&Re(n[0],n[n.length-1])&&i<4)throw new Error("invalid polygon");return"LineString"===e&&i<3||Xe(r[i-3],r[i-1],r[i-2])&&r.splice(r.length-2,1),r}function Re(t,e){return t[0]===e[0]&&t[1]===e[1]}function Xe(t,e,n){var r=n[0],o=n[1],i=t[0],s=t[1],a=e[0],l=e[1],c=a-i,h=l-s;return 0===(r-i)*h-(o-s)*c&&(Math.abs(c)>=Math.abs(h)?c>0?i<=r&&r<=a:a<=r&&r<=i:h>0?s<=o&&o<=l:l<=o&&o<=s)}function Ye(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return Ve(t);case"FeatureCollection":return function(t){const e={type:"FeatureCollection"};return Object.keys(t).forEach(n=>{switch(n){case"type":case"features":return;default:e[n]=t[n]}}),e.features=t.features.map(t=>Ve(t)),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return qe(t);default:throw new Error("unknown GeoJSON type")}}function Ve(t){const e={type:"Feature"};return Object.keys(t).forEach(n=>{switch(n){case"type":case"properties":case"geometry":return;default:e[n]=t[n]}}),e.properties=Ke(t.properties),null==t.geometry?e.geometry=null:e.geometry=qe(t.geometry),e}function Ke(t){const e={};return t?(Object.keys(t).forEach(n=>{const r=t[n];"object"==typeof r?null===r?e[n]=null:Array.isArray(r)?e[n]=r.map(t=>t):e[n]=Ke(r):e[n]=r}),e):e}function qe(t){const e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map(t=>qe(t)),e):(e.coordinates=je(t.coordinates),e)}function je(t){const e=t;return"object"!=typeof e[0]?e.slice():e.map(t=>je(t))}function We(t,e){var n=t[0]-e[0],r=t[1]-e[1];return n*n+r*r}function $e(t,e,n){var r=e[0],o=e[1],i=n[0]-r,s=n[1]-o;if(0!==i||0!==s){var a=((t[0]-r)*i+(t[1]-o)*s)/(i*i+s*s);a>1?(r=n[0],o=n[1]):a>0&&(r+=i*a,o+=s*a)}return(i=t[0]-r)*i+(s=t[1]-o)*s}function Je(t,e,n,r,o){for(var i,s=r,a=e+1;a<n;a++){var l=$e(t[a],t[e],t[n]);l>s&&(i=a,s=l)}s>r&&(i-e>1&&Je(t,e,i,r,o),o.push(t[i]),n-i>1&&Je(t,i,n,r,o))}function Ze(t,e){var n=t.length-1,r=[t[0]];return Je(t,0,n,e,r),r.push(t[n]),r}function Qe(t,e,n){if(t.length<=2)return t;var r=void 0!==e?e*e:1;return t=n?t:function(t,e){for(var n,r=t[0],o=[r],i=1,s=t.length;i<s;i++)We(n=t[i],r)>e&&(o.push(n),r=n);return r!==n&&o.push(n),o}(t,r),t=Ze(t,r)}function tn(t,e,n){return t.map(function(t){if(t.length<4)throw new Error("invalid polygon");let r=e,o=Qe(t,r,n);for(;!en(o);)r-=.01*r,o=Qe(t,r,n);return o[o.length-1][0]===o[0][0]&&o[o.length-1][1]===o[0][1]||o.push(o[0]),o})}function en(t){return!(t.length<3)&&!(3===t.length&&t[2][0]===t[0][0]&&t[2][1]===t[0][1])}var nn=function(t,e={}){var n,r,o,i;if(null===(i=e=null!=e?e:{})||"object"!=typeof i||Array.isArray(i))throw new Error("options is invalid");const s=null!=(n=e.tolerance)?n:1,a=null!=(r=e.highQuality)&&r,l=null!=(o=e.mutate)&&o;if(!t)throw new Error("geojson is required");if(s&&s<0)throw new Error("invalid tolerance");return!0!==l&&(t=Ye(t)),N(t,function(t){!function(t,e,n){const r=t.type;if("Point"===r||"MultiPoint"===r)return t;if(Ne(t,{mutate:!0}),"GeometryCollection"!==r)switch(r){case"LineString":t.coordinates=Qe(t.coordinates,e,n);break;case"MultiLineString":t.coordinates=t.coordinates.map(t=>Qe(t,e,n));break;case"Polygon":t.coordinates=tn(t.coordinates,e,n);break;case"MultiPolygon":t.coordinates=t.coordinates.map(t=>tn(t,e,n))}}(t,s,a)}),t};function rn(t,e,n,r,o,i,s,a){let l,c,h,u,g;const p={x:null,y:null,onLine1:!1,onLine2:!1};return l=(a-i)*(n-t)-(s-o)*(r-e),0===l?null!==p.x&&null!==p.y&&p:(c=e-i,h=t-o,u=(s-o)*c-(a-i)*h,g=(n-t)*c-(r-e)*h,c=u/l,h=g/l,p.x=t+c*(n-t),p.y=e+c*(r-e),c>=0&&c<=1&&(p.onLine1=!0),h>=0&&h<=1&&(p.onLine2=!0),!(!p.onLine1||!p.onLine2)&&[p.x,p.y])}var on=function(t){let e,n;const r={type:"FeatureCollection",features:[]};if(n="Feature"===t.type?t.geometry:t,"LineString"===n.type)e=[n.coordinates];else if("MultiLineString"===n.type)e=n.coordinates;else if("MultiPolygon"===n.type)e=[].concat(...n.coordinates);else{if("Polygon"!==n.type)throw new Error("Input must be a LineString, MultiLineString, Polygon, or MultiPolygon Feature or Geometry");e=n.coordinates}return e.forEach(t=>{e.forEach(e=>{for(let n=0;n<t.length-1;n++)for(let o=n;o<e.length-1;o++){if(t===e){if(1===Math.abs(n-o))continue;if(0===n&&o===t.length-2&&t[n][0]===t[t.length-1][0]&&t[n][1]===t[t.length-1][1])continue}const i=rn(t[n][0],t[n][1],t[n+1][0],t[n+1][1],e[o][0],e[o][1],e[o+1][0],e[o+1][1]);i&&r.features.push(T([i[0],i[1]]))}})}),r};function sn(t,e,n,r,o){an(t,e,n||0,r||t.length-1,o||cn)}function an(t,e,n,r,o){for(;r>n;){if(r-n>600){var i=r-n+1,s=e-n+1,a=Math.log(i),l=.5*Math.exp(2*a/3),c=.5*Math.sqrt(a*l*(i-l)/i)*(s-i/2<0?-1:1);an(t,e,Math.max(n,Math.floor(e-s*l/i+c)),Math.min(r,Math.floor(e+(i-s)*l/i+c)),o)}var h=t[e],u=n,g=r;for(ln(t,n,e),o(t[r],h)>0&&ln(t,n,r);u<g;){for(ln(t,u,g),u++,g--;o(t[u],h)<0;)u++;for(;o(t[g],h)>0;)g--}0===o(t[n],h)?ln(t,n,g):ln(t,++g,r),g<=e&&(n=g+1),e<=g&&(r=g-1)}}function ln(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function cn(t,e){return t<e?-1:t>e?1:0}let hn=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const n=[];if(!bn(t,e))return n;const r=this.toBBox,o=[];for(;e;){for(let i=0;i<e.children.length;i++){const s=e.children[i],a=e.leaf?r(s):s;bn(t,a)&&(e.leaf?n.push(s):Pn(t,a)?this._all(s,n):o.push(s))}e=o.pop()}return n}collides(t){let e=this.data;if(!bn(t,e))return!1;const n=[];for(;e;){for(let r=0;r<e.children.length;r++){const o=e.children[r],i=e.leaf?this.toBBox(o):o;if(bn(t,i)){if(e.leaf||Pn(t,i))return!0;n.push(o)}}e=n.pop()}return!1}load(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return this}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e;return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=xn([]),this}remove(t,e){if(!t)return this;let n=this.data;const r=this.toBBox(t),o=[],i=[];let s,a,l;for(;n||o.length;){if(n||(n=o.pop(),a=o[o.length-1],s=i.pop(),l=!0),n.leaf){const r=un(t,n.children,e);if(-1!==r)return n.children.splice(r,1),o.push(n),this._condense(o),this}l||n.leaf||!Pn(n,r)?a?(s++,n=a.children[s],l=!1):n=null:(o.push(n),i.push(s),s=0,a=n,n=n.children[0])}return this}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,e){const n=[];for(;t;)t.leaf?e.push(...t.children):n.push(...t.children),t=n.pop();return e}_build(t,e,n,r){const o=n-e+1;let i,s=this._maxEntries;if(o<=s)return i=xn(t.slice(e,n+1)),gn(i,this.toBBox),i;r||(r=Math.ceil(Math.log(o)/Math.log(s)),s=Math.ceil(o/Math.pow(s,r-1))),i=xn([]),i.leaf=!1,i.height=r;const a=Math.ceil(o/s),l=a*Math.ceil(Math.sqrt(s));kn(t,e,n,l,this.compareMinX);for(let c=e;c<=n;c+=l){const e=Math.min(c+l-1,n);kn(t,c,e,a,this.compareMinY);for(let n=c;n<=e;n+=a){const o=Math.min(n+a-1,e);i.children.push(this._build(t,n,o,r-1))}}return gn(i,this.toBBox),i}_chooseSubtree(t,e,n,r){for(;r.push(e),!e.leaf&&r.length-1!==n;){let n,r=1/0,o=1/0;for(let i=0;i<e.children.length;i++){const s=e.children[i],a=yn(s),l=Mn(t,s)-a;l<o?(o=l,r=a<r?a:r,n=s):l===o&&a<r&&(r=a,n=s)}e=n||e.children[0]}return e}_insert(t,e,n){const r=n?t:this.toBBox(t),o=[],i=this._chooseSubtree(r,this.data,e,o);for(i.children.push(t),dn(i,r);e>=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)}_split(t,e){const n=t[e],r=n.children.length,o=this._minEntries;this._chooseSplitAxis(n,o,r);const i=this._chooseSplitIndex(n,o,r),s=xn(n.children.splice(i,n.children.length-i));s.height=n.height,s.leaf=n.leaf,gn(n,this.toBBox),gn(s,this.toBBox),e?t[e-1].children.push(s):this._splitRoot(n,s)}_splitRoot(t,e){this.data=xn([t,e]),this.data.height=t.height+1,this.data.leaf=!1,gn(this.data,this.toBBox)}_chooseSplitIndex(t,e,n){let r,o=1/0,i=1/0;for(let s=e;s<=n-e;s++){const e=pn(t,0,s,this.toBBox),a=pn(t,s,n,this.toBBox),l=wn(e,a),c=yn(e)+yn(a);l<o?(o=l,r=s,i=c<i?c:i):l===o&&c<i&&(i=c,r=s)}return r||n-e}_chooseSplitAxis(t,e,n){const r=t.leaf?this.compareMinX:fn,o=t.leaf?this.compareMinY:mn;this._allDistMargin(t,e,n,r)<this._allDistMargin(t,e,n,o)&&t.children.sort(r)}_allDistMargin(t,e,n,r){t.children.sort(r);const o=this.toBBox,i=pn(t,0,e,o),s=pn(t,n-e,n,o);let a=vn(i)+vn(s);for(let l=e;l<n-e;l++){const e=t.children[l];dn(i,t.leaf?o(e):e),a+=vn(i)}for(let l=n-e-1;l>=e;l--){const e=t.children[l];dn(s,t.leaf?o(e):e),a+=vn(s)}return a}_adjustParentBBoxes(t,e,n){for(let r=n;r>=0;r--)dn(e[r],t)}_condense(t){for(let e,n=t.length-1;n>=0;n--)0===t[n].children.length?n>0?(e=t[n-1].children,e.splice(e.indexOf(t[n]),1)):this.clear():gn(t[n],this.toBBox)}};function un(t,e,n){if(!n)return e.indexOf(t);for(let r=0;r<e.length;r++)if(n(t,e[r]))return r;return-1}function gn(t,e){pn(t,0,t.children.length,e,t)}function pn(t,e,n,r,o){o||(o=xn(null)),o.minX=1/0,o.minY=1/0,o.maxX=-1/0,o.maxY=-1/0;for(let i=e;i<n;i++){const e=t.children[i];dn(o,t.leaf?r(e):e)}return o}function dn(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function fn(t,e){return t.minX-e.minX}function mn(t,e){return t.minY-e.minY}function yn(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function vn(t){return t.maxX-t.minX+(t.maxY-t.minY)}function Mn(t,e){return(Math.max(e.maxX,t.maxX)-Math.min(e.minX,t.minX))*(Math.max(e.maxY,t.maxY)-Math.min(e.minY,t.minY))}function wn(t,e){const n=Math.max(t.minX,e.minX),r=Math.max(t.minY,e.minY),o=Math.min(t.maxX,e.maxX),i=Math.min(t.maxY,e.maxY);return Math.max(0,o-n)*Math.max(0,i-r)}function Pn(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function bn(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function xn(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function kn(t,e,n,r,o){const i=[e,n];for(;i.length;){if((n=i.pop())-(e=i.pop())<=r)continue;const s=e+Math.ceil((n-e)/r/2)*r;sn(t,s,e,n,o),i.push(e,s,s,n)}}const En=11102230246251565e-32,Ln=134217729,Dn=(3+8*En)*En;function Sn(t,e,n,r,o){let i,s,a,l,c=e[0],h=r[0],u=0,g=0;h>c==h>-c?(i=c,c=e[++u]):(i=h,h=r[++g]);let p=0;if(u<t&&g<n)for(h>c==h>-c?(s=c+i,a=i-(s-c),c=e[++u]):(s=h+i,a=i-(s-h),h=r[++g]),i=s,0!==a&&(o[p++]=a);u<t&&g<n;)h>c==h>-c?(s=i+c,l=s-i,a=i-(s-l)+(c-l),c=e[++u]):(s=i+h,l=s-i,a=i-(s-l)+(h-l),h=r[++g]),i=s,0!==a&&(o[p++]=a);for(;u<t;)s=i+c,l=s-i,a=i-(s-l)+(c-l),c=e[++u],i=s,0!==a&&(o[p++]=a);for(;g<n;)s=i+h,l=s-i,a=i-(s-l)+(h-l),h=r[++g],i=s,0!==a&&(o[p++]=a);return 0===i&&0!==p||(o[p++]=i),p}function Cn(t){return new Float64Array(t)}const An=Cn(4),Tn=Cn(8),In=Cn(12),On=Cn(16),_n=Cn(4);function Fn(t,e,n,r,o,i){const s=(e-i)*(n-o),a=(t-o)*(r-i),l=s-a,c=Math.abs(s+a);return Math.abs(l)>=33306690738754716e-32*c?l:-function(t,e,n,r,o,i,s){let a,l,c,h,u,g,p,d,f,m,y,v,M,w,P,b,x,k;const E=t-o,L=n-o,D=e-i,S=r-i;w=E*S,g=Ln*E,p=g-(g-E),d=E-p,g=Ln*S,f=g-(g-S),m=S-f,P=d*m-(w-p*f-d*f-p*m),b=D*L,g=Ln*D,p=g-(g-D),d=D-p,g=Ln*L,f=g-(g-L),m=L-f,x=d*m-(b-p*f-d*f-p*m),y=P-x,u=P-y,An[0]=P-(y+u)+(u-x),v=w+y,u=v-w,M=w-(v-u)+(y-u),y=M-b,u=M-y,An[1]=M-(y+u)+(u-b),k=v+y,u=k-v,An[2]=v-(k-u)+(y-u),An[3]=k;let C=function(t,e){let n=e[0];for(let r=1;r<t;r++)n+=e[r];return n}(4,An),A=22204460492503146e-32*s;if(C>=A||-C>=A)return C;if(u=t-E,a=t-(E+u)+(u-o),u=n-L,c=n-(L+u)+(u-o),u=e-D,l=e-(D+u)+(u-i),u=r-S,h=r-(S+u)+(u-i),0===a&&0===l&&0===c&&0===h)return C;if(A=11093356479670487e-47*s+Dn*Math.abs(C),C+=E*h+S*a-(D*c+L*l),C>=A||-C>=A)return C;w=a*S,g=Ln*a,p=g-(g-a),d=a-p,g=Ln*S,f=g-(g-S),m=S-f,P=d*m-(w-p*f-d*f-p*m),b=l*L,g=Ln*l,p=g-(g-l),d=l-p,g=Ln*L,f=g-(g-L),m=L-f,x=d*m-(b-p*f-d*f-p*m),y=P-x,u=P-y,_n[0]=P-(y+u)+(u-x),v=w+y,u=v-w,M=w-(v-u)+(y-u),y=M-b,u=M-y,_n[1]=M-(y+u)+(u-b),k=v+y,u=k-v,_n[2]=v-(k-u)+(y-u),_n[3]=k;const T=Sn(4,An,4,_n,Tn);w=E*h,g=Ln*E,p=g-(g-E),d=E-p,g=Ln*h,f=g-(g-h),m=h-f,P=d*m-(w-p*f-d*f-p*m),b=D*c,g=Ln*D,p=g-(g-D),d=D-p,g=Ln*c,f=g-(g-c),m=c-f,x=d*m-(b-p*f-d*f-p*m),y=P-x,u=P-y,_n[0]=P-(y+u)+(u-x),v=w+y,u=v-w,M=w-(v-u)+(y-u),y=M-b,u=M-y,_n[1]=M-(y+u)+(u-b),k=v+y,u=k-v,_n[2]=v-(k-u)+(y-u),_n[3]=k;const I=Sn(T,Tn,4,_n,In);w=a*h,g=Ln*a,p=g-(g-a),d=a-p,g=Ln*h,f=g-(g-h),m=h-f,P=d*m-(w-p*f-d*f-p*m),b=l*c,g=Ln*l,p=g-(g-l),d=l-p,g=Ln*c,f=g-(g-c),m=c-f,x=d*m-(b-p*f-d*f-p*m),y=P-x,u=P-y,_n[0]=P-(y+u)+(u-x),v=w+y,u=v-w,M=w-(v-u)+(y-u),y=M-b,u=M-y,_n[1]=M-(y+u)+(u-b),k=v+y,u=k-v,_n[2]=v-(k-u)+(y-u),_n[3]=k;const O=Sn(I,In,4,_n,On);return On[O-1]}(t,e,n,r,o,i,c)}function Bn(t,e){var n,r,o,i,s,a,l,c,h,u=0,g=t[0],p=t[1],d=e.length;for(n=0;n<d;n++){r=0;var f=e[n],m=f.length-1;if((c=f[0])[0]!==f[m][0]&&c[1]!==f[m][1])throw new Error("First and last coordinates in a ring must be the same");for(i=c[0]-g,s=c[1]-p;r<m;r++){if(a=(h=f[r+1])[0]-g,l=h[1]-p,0===s&&0===l){if(a<=0&&i>=0||i<=0&&a>=0)return 0}else if(l>=0&&s<=0||l<=0&&s>=0){if(0===(o=Fn(i,a,s,l,0,0)))return 0;(o>0&&l>0&&s<=0||o<0&&l<=0&&s>0)&&u++}c=h,s=l,i=a}}return u%2!=0}function Hn(t,e,n={}){if(!t)throw new Error("point is required");if(!e)throw new Error("polygon is required");const r=vt(t),o=wt(e),i=o.type,s=e.bbox;let a=o.coordinates;if(s&&!1===function(t,e){return e[0]<=t[0]&&e[1]<=t[1]&&e[2]>=t[0]&&e[3]>=t[1]}(r,s))return!1;"Polygon"===i&&(a=[a]);let l=!1;for(var c=0;c<a.length;++c){const t=Bn(r,a[c]);if(0===t)return!n.ignoreBoundary;t&&(l=!0)}return l}var zn=Hn;function Gn(t,e,n){if("Polygon"!==t.geometry.type)throw new Error("The input feature must be a Polygon");void 0===n&&(n=1);var r=t.geometry.coordinates,o=[],i={};if(n){for(var s=[],a=0;a<r.length;a++)for(var l=0;l<r[a].length-1;l++)s.push(f(a,l));var c=new hn;c.load(s)}for(var h=0;h<r.length;h++)for(var u=0;u<r[h].length-1;u++){if(n)c.search(f(h,u)).forEach(function(t){var e=t.ring,n=t.edge;d(h,u,e,n)});else for(var g=0;g<r.length;g++)for(var p=0;p<r[g].length-1;p++)d(h,u,g,p)}return e||(o={type:"Feature",geometry:{type:"MultiPoint",coordinates:o}}),o;function d(t,n,s,a){var l,c,h=r[t][n],u=r[t][n+1],g=r[s][a],p=r[s][a+1],d=function(t,e,n,r){if(Nn(t,n)||Nn(t,r)||Nn(e,n)||Nn(r,n))return null;var o=t[0],i=t[1],s=e[0],a=e[1],l=n[0],c=n[1],h=r[0],u=r[1],g=(o-s)*(c-u)-(i-a)*(l-h);return 0===g?null:[((o*a-i*s)*(l-h)-(o-s)*(l*u-c*h))/g,((o*a-i*s)*(c-u)-(i-a)*(l*u-c*h))/g]}(h,u,g,p);if(null!==d&&(l=u[0]!==h[0]?(d[0]-h[0])/(u[0]-h[0]):(d[1]-h[1])/(u[1]-h[1]),c=p[0]!==g[0]?(d[0]-g[0])/(p[0]-g[0]):(d[1]-g[1])/(p[1]-g[1]),!(l>=1||l<=0||c>=1||c<=0))){var f=d,m=!i[f];m&&(i[f]=!0),e?o.push(e(d,t,n,h,u,l,s,a,g,p,c,m)):o.push(d)}}function f(t,e){var n,o,i,s,a=r[t][e],l=r[t][e+1];return a[0]<l[0]?(n=a[0],o=l[0]):(n=l[0],o=a[0]),a[1]<l[1]?(i=a[1],s=l[1]):(i=l[1],s=a[1]),{minX:n,minY:i,maxX:o,maxY:s,ring:t,edge:e}}}function Nn(t,e){if(!t||!e)return!1;if(t.length!==e.length)return!1;for(var n=0,r=t.length;n<r;n++)if(t[n]instanceof Array&&e[n]instanceof Array){if(!Nn(t[n],e[n]))return!1}else if(t[n]!==e[n])return!1;return!0}function Un(t){if("Feature"!=t.type)throw new Error("The input must a geojson object of type Feature");if(void 0===t.geometry||null==t.geometry)throw new Error("The input must a geojson object with a non-empty geometry");if("Polygon"!=t.geometry.type)throw new Error("The input must be a geojson Polygon");for(var e=t.geometry.coordinates.length,n=[],r=0;r<e;r++){var o=t.geometry.coordinates[r];Kn(o[0],o[o.length-1])||o.push(o[0]);for(var i=0;i<o.length-1;i++)n.push(o[i])}if(!function(t){for(var e={},n=1,r=0,o=t.length;r<o;++r){if(Object.prototype.hasOwnProperty.call(e,t[r])){n=0;break}e[t[r]]=1}return n}(n))throw new Error("The input polygon may not have duplicate vertices (except for the first and last vertex of each ring)");var s=n.length,a=Gn(t,function(t,e,n,r,o,i,s,a,l,c,h,u){return[t,e,n,r,o,i,s,a,l,c,h,u]}),l=a.length;if(0==l){var c=[];for(r=0;r<e;r++)c.push(I([t.geometry.coordinates[r]],{parent:-1,winding:Vn(t.geometry.coordinates[r])}));var h=_(c);return z(),G(),h}var u=[],g=[];for(r=0;r<e;r++){u.push([]);for(i=0;i<t.geometry.coordinates[r].length-1;i++)u[r].push([new Rn(t.geometry.coordinates[r][qn(i+1,t.geometry.coordinates[r].length-1)],1,[r,i],[r,qn(i+1,t.geometry.coordinates[r].length-1)],void 0)]),g.push(new Xn(t.geometry.coordinates[r][i],[r,qn(i-1,t.geometry.coordinates[r].length-1)],[r,i],void 0,void 0,!1,!0))}for(r=0;r<l;r++)u[a[r][1]][a[r][2]].push(new Rn(a[r][0],a[r][5],[a[r][1],a[r][2]],[a[r][6],a[r][7]],void 0)),a[r][11]&&g.push(new Xn(a[r][0],[a[r][1],a[r][2]],[a[r][6],a[r][7]],void 0,void 0,!0,!0));var p=g.length;for(r=0;r<u.length;r++)for(i=0;i<u[r].length;i++)u[r][i].sort(function(t,e){return t.param<e.param?-1:1});var d=[];for(r=0;r<p;r++)d.push({minX:g[r].coord[0],minY:g[r].coord[1],maxX:g[r].coord[0],maxY:g[r].coord[1],index:r});var f=new hn;f.load(d);for(r=0;r<u.length;r++)for(i=0;i<u[r].length;i++)for(var m=0;m<u[r][i].length;m++){v=m==u[r][i].length-1?u[r][qn(i+1,t.geometry.coordinates[r].length-1)][0].coord:u[r][i][m+1].coord;var y=f.search({minX:v[0],minY:v[1],maxX:v[0],maxY:v[1]})[0];u[r][i][m].nxtIsectAlongEdgeIn=y.index}for(r=0;r<u.length;r++)for(i=0;i<u[r].length;i++)for(m=0;m<u[r][i].length;m++){var v=u[r][i][m].coord,M=(y=f.search({minX:v[0],minY:v[1],maxX:v[0],maxY:v[1]})[0]).index;M<s?g[M].nxtIsectAlongRingAndEdge2=u[r][i][m].nxtIsectAlongEdgeIn:Kn(g[M].ringAndEdge1,u[r][i][m].ringAndEdgeIn)?g[M].nxtIsectAlongRingAndEdge1=u[r][i][m].nxtIsectAlongEdgeIn:g[M].nxtIsectAlongRingAndEdge2=u[r][i][m].nxtIsectAlongEdgeIn}var w=[];for(r=0,i=0;i<e;i++){var P=r;for(m=0;m<t.geometry.coordinates[i].length-1;m++)g[r].coord[0]<g[P].coord[0]&&(P=r),r++;var b=g[P].nxtIsectAlongRingAndEdge2;for(m=0;m<g.length;m++)if(g[m].nxtIsectAlongRingAndEdge1==P||g[m].nxtIsectAlongRingAndEdge2==P){var x=m;break}var k=Yn([g[x].coord,g[P].coord,g[b].coord],!0)?1:-1;w.push({isect:P,parent:-1,winding:k})}w.sort(function(t,e){return g[t.isect].coord>g[e.isect].coord?-1:1});for(c=[];w.length>0;){var E=w.pop(),L=E.isect,D=E.parent,S=E.winding,C=c.length,A=[g[L].coord],T=L;if(g[L].ringAndEdge1Walkable)var O=g[L].ringAndEdge1,F=g[L].nxtIsectAlongRingAndEdge1;else O=g[L].ringAndEdge2,F=g[L].nxtIsectAlongRingAndEdge2;for(;!Kn(g[L].coord,g[F].coord);){A.push(g[F].coord);var B=void 0;for(r=0;r<w.length;r++)if(w[r].isect==F){B=r;break}if(null!=B&&w.splice(B,1),Kn(O,g[F].ringAndEdge1)){if(O=g[F].ringAndEdge2,g[F].ringAndEdge2Walkable=!1,g[F].ringAndEdge1Walkable){var H={isect:F};Yn([g[T].coord,g[F].coord,g[g[F].nxtIsectAlongRingAndEdge2].coord],1==S)?(H.parent=D,H.winding=-S):(H.parent=C,H.winding=S),w.push(H)}T=F,F=g[F].nxtIsectAlongRingAndEdge2}else{if(O=g[F].ringAndEdge1,g[F].ringAndEdge1Walkable=!1,g[F].ringAndEdge2Walkable){H={isect:F};Yn([g[T].coord,g[F].coord,g[g[F].nxtIsectAlongRingAndEdge1].coord],1==S)?(H.parent=D,H.winding=-S):(H.parent=C,H.winding=S),w.push(H)}T=F,F=g[F].nxtIsectAlongRingAndEdge1}}A.push(g[F].coord),c.push(I([A],{index:C,parent:D,winding:S,netWinding:void 0}))}h=_(c);function z(){for(var t=[],e=0;e<h.features.length;e++)-1==h.features[e].properties.parent&&t.push(e);if(t.length>1)for(e=0;e<t.length;e++){for(var n=-1,r=1/0,o=0;o<h.features.length;o++)t[e]!=o&&Hn(h.features[t[e]].geometry.coordinates[0][0],h.features[o],{ignoreBoundary:!0})&&X(h.features[o])<r&&(n=o);h.features[t[e]].properties.parent=n}}function G(){for(var t=0;t<h.features.length;t++)if(-1==h.features[t].properties.parent){var e=h.features[t].properties.winding;h.features[t].properties.netWinding=e,N(t,e)}}function N(t,e){for(var n=0;n<h.features.length;n++)if(h.features[n].properties.parent==t){var r=e+h.features[n].properties.winding;h.features[n].properties.netWinding=r,N(n,r)}}return z(),G(),h}var Rn=function(t,e,n,r,o){this.coord=t,this.param=e,this.ringAndEdgeIn=n,this.ringAndEdgeOut=r,this.nxtIsectAlongEdgeIn=o},Xn=function(t,e,n,r,o,i,s){this.coord=t,this.ringAndEdge1=e,this.ringAndEdge2=n,this.nxtIsectAlongRingAndEdge1=r,this.nxtIsectAlongRingAndEdge2=o,this.ringAndEdge1Walkable=i,this.ringAndEdge2Walkable=s};function Yn(t,e){if(void 0===e&&(e=!0),3!=t.length)throw new Error("This function requires an array of three points [x,y]");return(t[1][0]-t[0][0])*(t[2][1]-t[0][1])-(t[1][1]-t[0][1])*(t[2][0]-t[0][0])>=0==e}function Vn(t){for(var e=0,n=0;n<t.length-1;n++)t[n][0]<t[e][0]&&(e=n);if(Yn([t[qn(e-1,t.length-1)],t[e],t[qn(e+1,t.length-1)]],!0))var r=1;else r=-1;return r}function Kn(t,e){if(!t||!e)return!1;if(t.length!=e.length)return!1;for(var n=0,r=t.length;n<r;n++)if(t[n]instanceof Array&&e[n]instanceof Array){if(!Kn(t[n],e[n]))return!1}else if(t[n]!=e[n])return!1;return!0}function qn(t,e){return(t%e+e)%e}var jn=function(t){var e=[];return U(t,function(t){"Polygon"===t.geometry.type&&G(Un(t),function(n){e.push(I(n.geometry.coordinates,t.properties))})}),_(e)};function Wn(t,e={}){if(null!=t.bbox&&!0!==e.recompute)return t.bbox;const n=[1/0,1/0,-1/0,-1/0];return z(t,t=>{n[0]>t[0]&&(n[0]=t[0]),n[1]>t[1]&&(n[1]=t[1]),n[2]<t[0]&&(n[2]=t[0]),n[3]<t[1]&&(n[3]=t[1])}),n}function $n(t,e,n={}){const r=vt(t),o=Mt(e);for(let i=0;i<o.length-1;i++){let t=!1;if(n.ignoreEndVertices&&(0===i&&(t="start"),i===o.length-2&&(t="end"),0===i&&i+1===o.length-1&&(t="both")),Jn(o[i],o[i+1],r,t,void 0===n.epsilon?null:n.epsilon))return!0}return!1}function Jn(t,e,n,r,o){const i=n[0],s=n[1],a=t[0],l=t[1],c=e[0],h=e[1],u=c-a,g=h-l,p=(n[0]-a)*g-(n[1]-l)*u;if(null!==o){if(Math.abs(p)>o)return!1}else if(0!==p)return!1;return Math.abs(u)===Math.abs(g)&&0===Math.abs(u)?!r&&(n[0]===t[0]&&n[1]===t[1]):r?"start"===r?Math.abs(u)>=Math.abs(g)?u>0?a<i&&i<=c:c<=i&&i<a:g>0?l<s&&s<=h:h<=s&&s<l:"end"===r?Math.abs(u)>=Math.abs(g)?u>0?a<=i&&i<c:c<i&&i<=a:g>0?l<=s&&s<h:h<s&&s<=l:"both"===r&&(Math.abs(u)>=Math.abs(g)?u>0?a<i&&i<c:c<i&&i<a:g>0?l<s&&s<h:h<s&&s<l):Math.abs(u)>=Math.abs(g)?u>0?a<=i&&i<=c:c<=i&&i<=a:g>0?l<=s&&s<=h:h<=s&&s<=l}function Zn(t,e){return!(t[0]>e[0])&&(!(t[2]<e[2])&&(!(t[1]>e[1])&&!(t[3]<e[3])))}function Qn(t,e){return t[0]===e[0]&&t[1]===e[1]}function tr(t,e){return[(t[0]+e[0])/2,(t[1]+e[1])/2]}var er=function(t,e){var n=wt(t),r=wt(e),o=n.type,i=r.type;switch(o){case"Point":switch(i){case"MultiPoint":return function(t,e){var n,r=!1;for(n=0;n<e.coordinates.length;n++)if(Qn(e.coordinates[n],t.coordinates)){r=!0;break}return r}(n,r);case"LineString":return $n(n,r,{ignoreEndVertices:!0});case"Polygon":case"MultiPolygon":return Hn(n,r,{ignoreBoundary:!0});default:throw new Error("feature2 "+i+" geometry not supported")}case"MultiPoint":switch(i){case"MultiPoint":return function(t,e){for(var n=0;n<t.coordinates.length;n++){for(var r=!1,o=0;o<e.coordinates.length;o++)Qn(t.coordinates[n],e.coordinates[o])&&(r=!0);if(!r)return!1}return!0}(n,r);case"LineString":return function(t,e){for(var n=!1,r=0;r<t.coordinates.length;r++){if(!$n(t.coordinates[r],e))return!1;n||(n=$n(t.coordinates[r],e,{ignoreEndVertices:!0}))}return n}(n,r);case"Polygon":case"MultiPolygon":return function(t,e){for(var n=!0,r=!1,o=0;o<t.coordinates.length;o++){if(!(r=Hn(t.coordinates[o],e))){n=!1;break}r=Hn(t.coordinates[o],e,{ignoreBoundary:!0})}return n&&r}(n,r);default:throw new Error("feature2 "+i+" geometry not supported")}case"LineString":switch(i){case"LineString":return function(t,e){for(var n=0;n<t.coordinates.length;n++)if(!$n(t.coordinates[n],e))return!1;return!0}(n,r);case"Polygon":case"MultiPolygon":return function(t,e){var n=Wn(e),r=Wn(t);if(!Zn(n,r))return!1;for(var o=!1,i=0;i<t.coordinates.length;i++){if(!Hn(t.coordinates[i],e))return!1;if(o||(o=Hn(t.coordinates[i],e,{ignoreBoundary:!0})),!o&&i<t.coordinates.length-1)o=Hn(tr(t.coordinates[i],t.coordinates[i+1]),e,{ignoreBoundary:!0})}return o}(n,r);default:throw new Error("feature2 "+i+" geometry not supported")}case"Polygon":switch(i){case"Polygon":case"MultiPolygon":return function(t,e){var n=Wn(t);if(!Zn(Wn(e),n))return!1;for(var r=0;r<t.coordinates[0].length;r++)if(!Hn(t.coordinates[0][r],e))return!1;return!0}(n,r);default:throw new Error("feature2 "+i+" geometry not supported")}default:throw new Error("feature1 "+o+" geometry not supported")}},nr=Object.defineProperty,rr=(t,e)=>nr(t,"name",{value:e,configurable:!0}),or=class{constructor(t){var e,n,r;this.direction=!1,this.compareProperties=!0,this.precision=10**-(null!=(e=null==t?void 0:t.precision)?e:17),this.direction=null!=(n=null==t?void 0:t.direction)&&n,this.compareProperties=null==(r=null==t?void 0:t.compareProperties)||r}compare(t,e){if(t.type!==e.type)return!1;if(!sr(t,e))return!1;switch(t.type){case"Point":return this.compareCoord(t.coordinates,e.coordinates);case"LineString":return this.compareLine(t.coordinates,e.coordinates);case"Polygon":return this.comparePolygon(t,e);case"GeometryCollection":return this.compareGeometryCollection(t,e);case"Feature":return this.compareFeature(t,e);case"FeatureCollection":return this.compareFeatureCollection(t,e);default:if(t.type.startsWith("Multi")){const n=ar(t),r=ar(e);return n.every(t=>r.some(e=>this.compare(t,e)))}}return!1}compareCoord(t,e){return t.length===e.length&&t.every((t,n)=>Math.abs(t-e[n])<this.precision)}compareLine(t,e,n=0,r=!1){if(!sr(t,e))return!1;const o=t;let i=e;if(r&&!this.compareCoord(o[0],i[0])){const t=this.fixStartIndex(i,o);if(!t)return!1;i=t}const s=this.compareCoord(o[n],i[n]);return this.direction||s?this.comparePath(o,i):!!this.compareCoord(o[n],i[i.length-(1+n)])&&this.comparePath(o.slice().reverse(),i)}fixStartIndex(t,e){let n,r=-1;for(let o=0;o<t.length;o++)if(this.compareCoord(t[o],e[0])){r=o;break}return r>=0&&(n=[].concat(t.slice(r,t.length),t.slice(1,r+1))),n}comparePath(t,e){return t.every((t,n)=>this.compareCoord(t,e[n]))}comparePolygon(t,e){if(this.compareLine(t.coordinates[0],e.coordinates[0],1,!0)){const n=t.coordinates.slice(1,t.coordinates.length),r=e.coordinates.slice(1,e.coordinates.length);return n.every(t=>r.some(e=>this.compareLine(t,e,1,!0)))}return!1}compareGeometryCollection(t,e){return sr(t.geometries,e.geometries)&&this.compareBBox(t,e)&&t.geometries.every((t,n)=>this.compare(t,e.geometries[n]))}compareFeature(t,e){return t.id===e.id&&(!this.compareProperties||cr(t.properties,e.properties))&&this.compareBBox(t,e)&&this.compare(t.geometry,e.geometry)}compareFeatureCollection(t,e){return sr(t.features,e.features)&&this.compareBBox(t,e)&&t.features.every((t,n)=>this.compare(t,e.features[n]))}compareBBox(t,e){return Boolean(!t.bbox&&!e.bbox)||!(!t.bbox||!e.bbox)&&this.compareCoord(t.bbox,e.bbox)}};rr(or,"GeojsonEquality");var ir=or;function sr(t,e){return t.coordinates?t.coordinates.length===e.coordinates.length:t.length===e.length}function ar(t){return t.coordinates.map(e=>({type:t.type.replace("Multi",""),coordinates:e}))}function lr(t,e,n){return new ir(n).compare(t,e)}function cr(t,e){if(null===t&&null===e)return!0;if(null===t||null===e)return!1;const n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(var o of n){const n=t[o],r=e[o],i=hr(n)&&hr(r);if(i&&!cr(n,r)||!i&&n!==r)return!1}return!0}rr(sr,"sameLength"),rr(ar,"explode"),rr(lr,"geojsonEquality"),rr(cr,"equal");var hr=rr(t=>null!=t&&"object"==typeof t,"isObject");var ur=function(t,e,n={}){let r=n.precision;if(r=null==r||isNaN(r)?6:r,"number"!=typeof r||!(r>=0))throw new Error("precision must be a positive number");return wt(t).type===wt(e).type&&lr(Ne(t),Ne(e),{precision:r})};function gr(t,e,n={}){var r=vt(t),o=vt(e),i=B(o[1]-r[1]),s=B(o[0]-r[0]),a=B(r[1]),l=B(o[1]),c=Math.pow(Math.sin(i/2),2)+Math.pow(Math.sin(s/2),2)*Math.cos(a)*Math.cos(l);return function(t,e="kilometers"){const n=C[e];if(!n)throw new Error(e+" units is invalid");return t*n}(2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c)),n.units)}var pr=Object.defineProperty,dr=Object.defineProperties,fr=Object.getOwnPropertyDescriptors,mr=Object.getOwnPropertySymbols,yr=Object.prototype.hasOwnProperty,vr=Object.prototype.propertyIsEnumerable,Mr=(t,e,n)=>e in t?pr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,wr=(t,e)=>{for(var n in e||(e={}))yr.call(e,n)&&Mr(t,n,e[n]);if(mr)for(var n of mr(e))vr.call(e,n)&&Mr(t,n,e[n]);return t},Pr=(t,e)=>dr(t,fr(e));var br=function(t,e,n={}){if(!t)throw new Error("targetPoint is required");if(!e)throw new Error("points is required");let r=1/0,o=0;G(e,(e,i)=>{const s=gr(t,e,n);s<r&&(o=i,r=s)});const i=Ye(e.features[o]);return Pr(wr({},i),{properties:Pr(wr({},i.properties),{featureIndex:o,distanceToPoint:r})})},xr=class{constructor(t){this.points=t.points||[],this.duration=t.duration||1e4,this.sharpness=t.sharpness||.85,this.centers=[],this.controls=[],this.stepLength=t.stepLength||60,this.length=this.points.length,this.delay=0;for(let e=0;e<this.length;e++)this.points[e].z=this.points[e].z||0;for(let e=0;e<this.length-1;e++){const t=this.points[e],n=this.points[e+1];this.centers.push({x:(t.x+n.x)/2,y:(t.y+n.y)/2,z:(t.z+n.z)/2})}this.controls.push([this.points[0],this.points[0]]);for(let e=0;e<this.centers.length-1;e++){const t=this.points[e+1].x-(this.centers[e].x+this.centers[e+1].x)/2,n=this.points[e+1].y-(this.centers[e].y+this.centers[e+1].y)/2,r=this.points[e+1].z-(this.centers[e].y+this.centers[e+1].z)/2;this.controls.push([{x:(1-this.sharpness)*this.points[e+1].x+this.sharpness*(this.centers[e].x+t),y:(1-this.sharpness)*this.points[e+1].y+this.sharpness*(this.centers[e].y+n),z:(1-this.sharpness)*this.points[e+1].z+this.sharpness*(this.centers[e].z+r)},{x:(1-this.sharpness)*this.points[e+1].x+this.sharpness*(this.centers[e+1].x+t),y:(1-this.sharpness)*this.points[e+1].y+this.sharpness*(this.centers[e+1].y+n),z:(1-this.sharpness)*this.points[e+1].z+this.sharpness*(this.centers[e+1].z+r)}])}return this.controls.push([this.points[this.length-1],this.points[this.length-1]]),this.steps=this.cacheSteps(this.stepLength),this}cacheSteps(t){const e=[];let n=this.pos(0);e.push(0);for(let r=0;r<this.duration;r+=10){const o=this.pos(r);Math.sqrt((o.x-n.x)*(o.x-n.x)+(o.y-n.y)*(o.y-n.y)+(o.z-n.z)*(o.z-n.z))>t&&(e.push(r),n=o)}return e}vector(t){const e=this.pos(t+10),n=this.pos(t-10);return{angle:180*Math.atan2(e.y-n.y,e.x-n.x)/3.14,speed:Math.sqrt((n.x-e.x)*(n.x-e.x)+(n.y-e.y)*(n.y-e.y)+(n.z-e.z)*(n.z-e.z))}}pos(t){let e=t-this.delay;e<0&&(e=0),e>this.duration&&(e=this.duration-1);const n=e/this.duration;if(n>=1)return this.points[this.length-1];const r=Math.floor((this.points.length-1)*n);return function(t,e,n,r,o){const i=function(t){const e=t*t,n=e*t;return[n,3*e*(1-t),3*t*(1-t)*(1-t),(1-t)*(1-t)*(1-t)]}(t);return{x:o.x*i[0]+r.x*i[1]+n.x*i[2]+e.x*i[3],y:o.y*i[0]+r.y*i[1]+n.y*i[2]+e.y*i[3],z:o.z*i[0]+r.z*i[1]+n.z*i[2]+e.z*i[3]}}((this.length-1)*n-r,this.points[r],this.controls[r][1],this.controls[r+1][0],this.points[r+1])}};var kr=function(t,e={}){const n=e.resolution||1e4,r=e.sharpness||.85,o=[],i=wt(t).coordinates.map(t=>({x:t[0],y:t[1]})),s=new xr({duration:n,points:i,sharpness:r}),a=t=>{var e=s.pos(t);Math.floor(t/100)%2==0&&o.push([e.x,e.y])};for(var l=0;l<s.duration;l+=10)a(l);return a(s.duration),O(o,e.properties)};var Er=function(t,e={}){return R(t,(t,n)=>{const r=n.geometry.coordinates;return t+gr(r[0],r[1],e)},0)};function Lr(t,e,n=0,r=t.length-1,o=Sr){for(;r>n;){if(r-n>600){const i=r-n+1,s=e-n+1,a=Math.log(i),l=.5*Math.exp(2*a/3),c=.5*Math.sqrt(a*l*(i-l)/i)*(s-i/2<0?-1:1);Lr(t,e,Math.max(n,Math.floor(e-s*l/i+c)),Math.min(r,Math.floor(e+(i-s)*l/i+c)),o)}const i=t[e];let s=n,a=r;for(Dr(t,n,e),o(t[r],i)>0&&Dr(t,n,r);s<a;){for(Dr(t,s,a),s++,a--;o(t[s],i)<0;)s++;for(;o(t[a],i)>0;)a--}0===o(t[n],i)?Dr(t,n,a):(a++,Dr(t,a,r)),a<=e&&(n=a+1),e<=a&&(r=a-1)}}function Dr(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function Sr(t,e){return t<e?-1:t>e?1:0}class Cr{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const n=[];if(!Ur(t,e))return n;const r=this.toBBox,o=[];for(;e;){for(let i=0;i<e.children.length;i++){const s=e.children[i],a=e.leaf?r(s):s;Ur(t,a)&&(e.leaf?n.push(s):Nr(t,a)?this._all(s,n):o.push(s))}e=o.pop()}return n}collides(t){let e=this.data;if(!Ur(t,e))return!1;const n=[];for(;e;){for(let r=0;r<e.children.length;r++){const o=e.children[r],i=e.leaf?this.toBBox(o):o;if(Ur(t,i)){if(e.leaf||Nr(t,i))return!0;n.push(o)}}e=n.pop()}return!1}load(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return this}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e;return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=Rr([]),this}remove(t,e){if(!t)return this;let n=this.data;const r=this.toBBox(t),o=[],i=[];let s,a,l;for(;n||o.length;){if(n||(n=o.pop(),a=o[o.length-1],s=i.pop(),l=!0),n.leaf){const r=Ar(t,n.children,e);if(-1!==r)return n.children.splice(r,1),o.push(n),this._condense(o),this}l||n.leaf||!Nr(n,r)?a?(s++,n=a.children[s],l=!1):n=null:(o.push(n),i.push(s),s=0,a=n,n=n.children[0])}return this}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,e){const n=[];for(;t;)t.leaf?e.push(...t.children):n.push(...t.children),t=n.pop();return e}_build(t,e,n,r){const o=n-e+1;let i,s=this._maxEntries;if(o<=s)return i=Rr(t.slice(e,n+1)),Tr(i,this.toBBox),i;r||(r=Math.ceil(Math.log(o)/Math.log(s)),s=Math.ceil(o/Math.pow(s,r-1))),i=Rr([]),i.leaf=!1,i.height=r;const a=Math.ceil(o/s),l=a*Math.ceil(Math.sqrt(s));Xr(t,e,n,l,this.compareMinX);for(let c=e;c<=n;c+=l){const e=Math.min(c+l-1,n);Xr(t,c,e,a,this.compareMinY);for(let n=c;n<=e;n+=a){const o=Math.min(n+a-1,e);i.children.push(this._build(t,n,o,r-1))}}return Tr(i,this.toBBox),i}_chooseSubtree(t,e,n,r){for(;r.push(e),!e.leaf&&r.length-1!==n;){let n,r=1/0,o=1/0;for(let i=0;i<e.children.length;i++){const s=e.children[i],a=Br(s),l=zr(t,s)-a;l<o?(o=l,r=a<r?a:r,n=s):l===o&&a<r&&(r=a,n=s)}e=n||e.children[0]}return e}_insert(t,e,n){const r=n?t:this.toBBox(t),o=[],i=this._chooseSubtree(r,this.data,e,o);for(i.children.push(t),Or(i,r);e>=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)}_split(t,e){const n=t[e],r=n.children.length,o=this._minEntries;this._chooseSplitAxis(n,o,r);const i=this._chooseSplitIndex(n,o,r),s=Rr(n.children.splice(i,n.children.length-i));s.height=n.height,s.leaf=n.leaf,Tr(n,this.toBBox),Tr(s,this.toBBox),e?t[e-1].children.push(s):this._splitRoot(n,s)}_splitRoot(t,e){this.data=Rr([t,e]),this.data.height=t.height+1,this.data.leaf=!1,Tr(this.data,this.toBBox)}_chooseSplitIndex(t,e,n){let r,o=1/0,i=1/0;for(let s=e;s<=n-e;s++){const e=Ir(t,0,s,this.toBBox),a=Ir(t,s,n,this.toBBox),l=Gr(e,a),c=Br(e)+Br(a);l<o?(o=l,r=s,i=c<i?c:i):l===o&&c<i&&(i=c,r=s)}return r||n-e}_chooseSplitAxis(t,e,n){const r=t.leaf?this.compareMinX:_r,o=t.leaf?this.compareMinY:Fr;this._allDistMargin(t,e,n,r)<this._allDistMargin(t,e,n,o)&&t.children.sort(r)}_allDistMargin(t,e,n,r){t.children.sort(r);const o=this.toBBox,i=Ir(t,0,e,o),s=Ir(t,n-e,n,o);let a=Hr(i)+Hr(s);for(let l=e;l<n-e;l++){const e=t.children[l];Or(i,t.leaf?o(e):e),a+=Hr(i)}for(let l=n-e-1;l>=e;l--){const e=t.children[l];Or(s,t.leaf?o(e):e),a+=Hr(s)}return a}_adjustParentBBoxes(t,e,n){for(let r=n;r>=0;r--)Or(e[r],t)}_condense(t){for(let e,n=t.length-1;n>=0;n--)0===t[n].children.length?n>0?(e=t[n-1].children,e.splice(e.indexOf(t[n]),1)):this.clear():Tr(t[n],this.toBBox)}}function Ar(t,e,n){if(!n)return e.indexOf(t);for(let r=0;r<e.length;r++)if(n(t,e[r]))return r;return-1}function Tr(t,e){Ir(t,0,t.children.length,e,t)}function Ir(t,e,n,r,o){o||(o=Rr(null)),o.minX=1/0,o.minY=1/0,o.maxX=-1/0,o.maxY=-1/0;for(let i=e;i<n;i++){const e=t.children[i];Or(o,t.leaf?r(e):e)}return o}function Or(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function _r(t,e){return t.minX-e.minX}function Fr(t,e){return t.minY-e.minY}function Br(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function Hr(t){return t.maxX-t.minX+(t.maxY-t.minY)}function zr(t,e){return(Math.max(e.maxX,t.maxX)-Math.min(e.minX,t.minX))*(Math.max(e.maxY,t.maxY)-Math.min(e.minY,t.minY))}function Gr(t,e){const n=Math.max(t.minX,e.minX),r=Math.max(t.minY,e.minY),o=Math.min(t.maxX,e.maxX),i=Math.min(t.maxY,e.maxY);return Math.max(0,o-n)*Math.max(0,i-r)}function Nr(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function Ur(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function Rr(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Xr(t,e,n,r,o){const i=[e,n];for(;i.length;){if((n=i.pop())-(e=i.pop())<=r)continue;const s=e+Math.ceil((n-e)/r/2)*r;Lr(t,s,e,n,o),i.push(e,s,s,n)}}class Yr{constructor(t=[],e=(t,e)=>t<e?-1:t>e?1:0){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let n=(this.length>>1)-1;n>=0;n--)this._down(n)}push(t){this.data.push(t),this._up(this.length++)}pop(){if(0===this.length)return;const t=this.data[0],e=this.data.pop();return--this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){const{data:e,compare:n}=this,r=e[t];for(;t>0;){const o=t-1>>1,i=e[o];if(n(r,i)>=0)break;e[t]=i,t=o}e[t]=r}_down(t){const{data:e,compare:n}=this,r=this.length>>1,o=e[t];for(;t<r;){let r=1+(t<<1);const i=r+1;if(i<this.length&&n(e[i],e[r])<0&&(r=i),n(e[r],o)>=0)break;e[t]=e[r],t=r}e[t]=o}}const Vr=W(ct());function Kr(t,e,n){e=Math.max(0,void 0===e?2:e),n=n||0;const r=function(t){let e=t[0],n=t[0],r=t[0],o=t[0];for(let a=0;a<t.length;a++){const i=t[a];i[0]<e[0]&&(e=i),i[0]>r[0]&&(r=i),i[1]<n[1]&&(n=i),i[1]>o[1]&&(o=i)}const i=[e,n,r,o],s=i.slice();for(let a=0;a<t.length;a++)Vr(t[a],i)||s.push(t[a]);return function(t){t.sort(io);const e=[];for(let r=0;r<t.length;r++){for(;e.length>=2&&Zr(e[e.length-2],e[e.length-1],t[r])<=0;)e.pop();e.push(t[r])}const n=[];for(let r=t.length-1;r>=0;r--){for(;n.length>=2&&Zr(n[n.length-2],n[n.length-1],t[r])<=0;)n.pop();n.push(t[r])}return n.pop(),e.pop(),e.concat(n)}(s)}(t),o=new Cr(16);o.toBBox=function(t){return{minX:t[0],minY:t[1],maxX:t[0],maxY:t[1]}},o.compareMinX=function(t,e){return t[0]-e[0]},o.compareMinY=function(t,e){return t[1]-e[1]},o.load(t);const i=[];let s;for(let g=0;g<r.length;g++){const t=r[g];o.remove(t),s=eo(t,s),i.push(s)}const a=new Cr(16);for(let g=0;g<i.length;g++)a.insert(to(i[g]));const l=e*e,c=n*n;for(;i.length;){const t=i.shift(),e=t.p,n=t.next.p,r=no(e,n);if(r<c)continue;const s=r/l,h=qr(o,t.prev.p,e,n,t.next.next.p,s,a);h&&Math.min(no(h,e),no(h,n))<=s&&(i.push(t),i.push(eo(h,t)),o.remove(h),a.remove(t),a.insert(to(t)),a.insert(to(t.next)))}let h=s;const u=[];do{u.push(h.p),h=h.next}while(h!==s);return u.push(h.p),u}function qr(t,e,n,r,o,i,s){const a=new Yr([],jr);let l=t.data;for(;l;){for(let t=0;t<l.children.length;t++){const e=l.children[t],o=l.leaf?ro(e,n,r):Wr(n,r,e);o>i||a.push({node:e,dist:o})}for(;a.length&&!a.peek().node.children;){const t=a.pop(),i=t.node,l=ro(i,e,n),c=ro(i,r,o);if(t.dist<l&&t.dist<c&&Jr(n,i,s)&&Jr(r,i,s))return i}l=a.pop(),l&&(l=l.node)}return null}function jr(t,e){return t.dist-e.dist}function Wr(t,e,n){if($r(t,n)||$r(e,n))return 0;const r=oo(t[0],t[1],e[0],e[1],n.minX,n.minY,n.maxX,n.minY);if(0===r)return 0;const o=oo(t[0],t[1],e[0],e[1],n.minX,n.minY,n.minX,n.maxY);if(0===o)return 0;const i=oo(t[0],t[1],e[0],e[1],n.maxX,n.minY,n.maxX,n.maxY);if(0===i)return 0;const s=oo(t[0],t[1],e[0],e[1],n.minX,n.maxY,n.maxX,n.maxY);return 0===s?0:Math.min(r,o,i,s)}function $r(t,e){return t[0]>=e.minX&&t[0]<=e.maxX&&t[1]>=e.minY&&t[1]<=e.maxY}function Jr(t,e,n){const r=Math.min(t[0],e[0]),o=Math.min(t[1],e[1]),i=Math.max(t[0],e[0]),s=Math.max(t[1],e[1]),a=n.search({minX:r,minY:o,maxX:i,maxY:s});for(let l=0;l<a.length;l++)if(Qr(a[l].p,a[l].next.p,t,e))return!1;return!0}function Zr(t,e,n){return Fn(t[0],t[1],e[0],e[1],n[0],n[1])}function Qr(t,e,n,r){return t!==r&&e!==n&&Zr(t,e,n)>0!=Zr(t,e,r)>0&&Zr(n,r,t)>0!=Zr(n,r,e)>0}function to(t){const e=t.p,n=t.next.p;return t.minX=Math.min(e[0],n[0]),t.minY=Math.min(e[1],n[1]),t.maxX=Math.max(e[0],n[0]),t.maxY=Math.max(e[1],n[1]),t}function eo(t,e){const n={p:t,prev:null,next:null,minX:0,minY:0,maxX:0,maxY:0};return e?(n.next=e.next,n.prev=e,e.next.prev=n,e.next=n):(n.prev=n,n.next=n),n}function no(t,e){const n=t[0]-e[0],r=t[1]-e[1];return n*n+r*r}function ro(t,e,n){let r=e[0],o=e[1],i=n[0]-r,s=n[1]-o;if(0!==i||0!==s){const e=((t[0]-r)*i+(t[1]-o)*s)/(i*i+s*s);e>1?(r=n[0],o=n[1]):e>0&&(r+=i*e,o+=s*e)}return i=t[0]-r,s=t[1]-o,i*i+s*s}function oo(t,e,n,r,o,i,s,a){const l=n-t,c=r-e,h=s-o,u=a-i,g=t-o,p=e-i,d=l*l+c*c,f=l*h+c*u,m=h*h+u*u,y=l*g+c*p,v=h*g+u*p,M=d*m-f*f;let w,P,b=M,x=M;0===M?(w=0,b=1,P=v,x=m):(w=f*v-m*y,P=d*v-f*y,w<0?(w=0,P=v,x=m):w>b&&(w=b,P=v+f,x=m)),P<0?(P=0,-y<0?w=0:-y>d?w=b:(w=-y,b=d)):P>x&&(P=x,-y+f<0?w=0:-y+f>d?w=b:(w=-y+f,b=d));const k=0===w?0:w/b,E=0===P?0:P/x,L=(1-E)*o+E*s-((1-k)*t+k*n),D=(1-E)*i+E*a-((1-k)*e+k*r);return L*L+D*D}function io(t,e){return t[0]===e[0]?t[1]-e[1]:t[0]-e[0]}const so=()=>"ontouchstart"in window||navigator.maxTouchPoints>0;function ao(){return"undefined"!=typeof vitest}class lo{static getBounds(t,e=0){const n=[];t.forEach(t=>{isNaN(t.lat)||isNaN(t.lng),n.push(t)});const r=new a.Polyline(n).getBounds();return 0!==e?r.pad(e):r}}class co{constructor(t=0,e=0,n=0,r=0){i(this,"direction",{East:new a.LatLng(0,0),North:new a.LatLng(0,0),NorthEast:new a.LatLng(0,0),NorthWest:new a.LatLng(0,0),South:new a.LatLng(0,0),SouthEast:new a.LatLng(0,0),SouthWest:new a.LatLng(0,0),West:new a.LatLng(0,0)}),this.direction.North=new a.LatLng(n,(e+r)/2),this.direction.NorthEast=new a.LatLng(n,r),this.direction.East=new a.LatLng((t+n)/2,r),this.direction.SouthEast=new a.LatLng(t,r),this.direction.South=new a.LatLng(t,(e+r)/2),this.direction.SouthWest=new a.LatLng(t,e),this.direction.West=new a.LatLng((t+n)/2,e),this.direction.NorthWest=new a.LatLng(n,e)}getDirection(t){switch(t){case h.SouthWest:return this.direction.SouthWest;case h.West:return this.direction.West;case h.NorthWest:return this.direction.NorthWest;case h.North:return this.direction.North;case h.NorthEast:return this.direction.NorthEast;case h.East:return this.direction.East;case h.SouthEast:return this.direction.SouthEast;case h.South:return this.direction.South;default:throw new Error}}getPositions(t=h.SouthWest,e=!1,n=!0){const r=[],o=this.getPositionAsArray(t,e);return o.forEach(t=>{r.push([t.lng,t.lat])}),n&&r.push([o[0].lng,o[0].lat]),r}getPositionAsArray(t=h.NorthEast,e=!1){const n=[];if(e?(n.push(this.direction.SouthWest),n.push(this.direction.West),n.push(this.direction.NorthWest),n.push(this.direction.North),n.push(this.direction.NorthEast),n.push(this.direction.East),n.push(this.direction.SouthEast),n.push(this.direction.South)):(n.push(this.direction.SouthWest),n.push(this.direction.South),n.push(this.direction.SouthEast),n.push(this.direction.East),n.push(this.direction.NorthEast),n.push(this.direction.North),n.push(this.direction.NorthWest),n.push(this.direction.West)),t!==h.SouthWest){n.splice(0,t).forEach((e,r)=>{n.splice(t+r,0,e)})}return n}}class ho{constructor(t,e){if(i(this,"metricLength",""),i(this,"metricUnit",""),i(this,"imperialLength",""),i(this,"imperialUnit",""),null!==t||void 0!==t){0===t?e.markers.markerInfoIcon.usePerimeterMinValue?(this.metricLength=e.markers.markerInfoIcon.values.min.metric,this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m,this.imperialLength=e.markers.markerInfoIcon.values.min.imperial,this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.feet):(this.metricLength=e.markers.markerInfoIcon.values.unknown.metric,this.metricUnit=e.markers.markerInfoIcon.units.unknownUnit,this.imperialLength=e.markers.markerInfoIcon.values.unknown.imperial,this.imperialUnit=e.markers.markerInfoIcon.units.unknownUnit):t<100?(this.metricLength=(10*Math.ceil(t/10)).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m):t<500?(this.metricLength=(50*Math.ceil(t/50)).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m):t<1e3?(this.metricLength=(100*Math.ceil(t/100)).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m):t<1e4?(this.metricLength=(100*Math.ceil(t/100)/1e3).toFixed(1),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.km):(this.metricLength=(1e3*Math.ceil(t/1e3)/1e3).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.km);const n=t/.0254/12,r=n/3,o=r/1760;t<1e3/2.54?(this.imperialLength=(10*Math.ceil(n/10)).toString(),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.feet):t<1e3/2.54*3?(this.imperialLength=(10*Math.ceil(r/10)).toString(),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.yards):t<1609?(this.imperialLength=o.toFixed(2),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.miles):t<16093?(this.imperialLength=o.toFixed(1),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.miles):(this.imperialLength=o.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.miles)}}}class uo{constructor(t,e){i(this,"metricArea",""),i(this,"metricUnit",""),i(this,"imperialArea",""),i(this,"imperialUnit","");const n=t,r=e.markers.markerInfoIcon.units.metric.onlyMetrics;if(null!==n||void 0!==n){0===n?(this.metricArea="-",this.metricUnit=e.markers.markerInfoIcon.units.unknownUnit,this.imperialArea="-",this.imperialUnit=e.markers.markerInfoIcon.units.unknownUnit):n<1e4?(this.metricArea=Math.round(n).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.m2):n<1e5?r?(this.metricArea=(n/1e6).toFixed(2),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2):(this.metricArea=(n/1e3).toFixed(1),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.daa):n<1e7?r?(this.metricArea=(n/1e6).toFixed(2),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2):(this.metricArea=Math.round(n/1e3).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.daa):n<1e8?r?(this.metricArea=(n/1e6).toFixed(1),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2):(this.metricArea=Math.round(n/1e4).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.ha):(this.metricArea=Math.round(n/1e6).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2);const t=.0069444*(1550*n),o=.11111*t,i=20661e-8*o,s=3.2283e-7*o;n<92.9?(this.imperialArea=Math.round(t).toString(),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.feet2):n<836.14?(this.imperialArea=o.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.yards2):n<40469.6?(this.imperialArea=i.toFixed(2),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.acres):n<404696?(this.imperialArea=i.toFixed(1),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.acres):n<4046960?(this.imperialArea=i.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.acres):n<25900404?(this.imperialArea=s.toFixed(2),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.miles2):n<259004040?(this.imperialArea=s.toFixed(1),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.miles2):(this.imperialArea=s.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.miles2)}}}class go{constructor(t){i(this,"config",u),this.config={...u,...t}}toProjectedTolerance(t,e){if(t<=0)return 0;try{const n=g*f,r=t*n,o=Math.cos(e.lat*f);return 0===o?t:r/(n*o)}catch{return t}}getFeatureDiagonal(t){try{const[e,n,r,o]=x(t);return Math.hypot(r-e,o-n)}catch{return 0}}getRingDiagonal(t){if(!t||0===t.length)return 0;let e=t[0].lat,n=t[0].lat,r=t[0].lng,o=t[0].lng;for(const i of t)e=Math.min(e,i.lat),n=Math.max(n,i.lat),r=Math.min(r,i.lng),o=Math.max(o,i.lng);return Math.hypot(o-r,n-e)}getAdaptiveTolerance(t,e){if(t<=0)return 0;if(e<=0)return t;const n=.02*e;return Math.min(t,n)}union(t,e){try{const n=P([t,e]),r=Be(n);return r?this.getTurfPolygon(r):null}catch(n){return ao()||console.warn("Error in union:",n instanceof Error?n.message:String(n)),null}}createPolygonFromTrace(t){var e;const n=(null==(e=this.config.polygonCreation)?void 0:e.method)||"concaveman";switch(n){case"concaveman":case"buffer":return this.turfConcaveman(t);case"convex":return this.createConvexPolygon(t);case"direct":return this.createDirectPolygon(t);default:return ao()||console.warn(`Unknown polygon creation method: ${n}, falling back to concaveman`),this.turfConcaveman(t)}}turfConcaveman(t){return w([[Kr(Ge(t).features.map(t=>t.geometry.coordinates))]])}createConvexPolygon(t){const e=Ge(t),n=mt(e);return n?this.getTurfPolygon(n):this.createDirectPolygon(t)}createDirectPolygon(t){let e;if("LineString"===t.geometry.type)e=t.geometry.coordinates;else if("Polygon"===t.geometry.type)e=t.geometry.coordinates[0];else{e=Ge(t).features.map(t=>t.geometry.coordinates)}if(e.length>0){const t=e[0],n=e[e.length-1];t[0]===n[0]&&t[1]===n[1]||e.push([t[0],t[1]])}return e.length<4?(ao()||console.warn("Not enough points for direct polygon, falling back to concaveman"),this.turfConcaveman(t)):w([[e]])}getSimplified(t,e=!1){const n=this.resolveSimplificationConfig();if("none"===n.mode)return t;if("simple"===n.mode){const e=this.getAdaptiveTolerance(n.simple.tolerance,this.getFeatureDiagonal(t));return nn(t,{tolerance:this.toProjectedTolerance(e,this.getReferenceLatLng(t)),highQuality:n.simple.highQuality,mutate:!1})}const r=t.geometry.coordinates[0][0].length,o=n.dynamic.fractionGuard,i=n.dynamic.multiplier,s=this.getAdaptiveTolerance(n.dynamic.baseTolerance,this.getFeatureDiagonal(t)),a={highQuality:n.dynamic.highQuality,mutate:!1},l=e=>nn(t,{...a,tolerance:this.toProjectedTolerance(e,this.getReferenceLatLng(t))});if(!e)return l(s);let c=s,h=l(c);for(;h.geometry.coordinates[0][0].length>4&&h.geometry.coordinates[0][0].length/(r+2)>o;)c*=i,h=l(c);return h}simplifyLatLngRing(t,e,n=!0){var r,o;if(!t||0===t.length||e<=0)return t?[...t]:[];const i=[...t],s=i[0],a=i[i.length-1];a&&s&&a.lat===s.lat&&a.lng===s.lng||i.push({lat:s.lat,lng:s.lng});const l=i.map(t=>[t.lng,t.lat]),c=this.getAdaptiveTolerance(e,this.getRingDiagonal(i));try{const e=M([l]),i=nn(e,{tolerance:this.toProjectedTolerance(c,t[0]),highQuality:n,mutate:!1}),s=null==(o=null==(r=null==i?void 0:i.geometry)?void 0:r.coordinates)?void 0:o[0];return s&&0!==s.length?s.map(t=>({lat:t[1],lng:t[0]})):[...t]}catch(h){return ao()||console.warn("Error simplifying ring:",h instanceof Error?h.message:String(h)),[...t]}}resolveSimplificationConfig(){var t,e,n,r,o,i,s,a,l,c,h,u,g;const p=null==(t=this.config.polygonCreation)?void 0:t.simplification,d=this.config.simplification,f=(null==p?void 0:p.tolerance)??1e-5,m=(null==p?void 0:p.highQuality)??!1,y=null==p?void 0:p.mode,v=(null==p?void 0:p.tolerance)??1e-4;return{mode:(null==d?void 0:d.mode)??("none"===y?"none":"dynamic"===y?"dynamic":"simple"),simple:{tolerance:(null==(e=null==d?void 0:d.simple)?void 0:e.tolerance)??(null==(n=null==d?void 0:d.simplifyTolerance)?void 0:n.tolerance)??f,highQuality:(null==(r=null==d?void 0:d.simple)?void 0:r.highQuality)??(null==(o=null==d?void 0:d.simplifyTolerance)?void 0:o.highQuality)??m},dynamic:{baseTolerance:(null==(i=null==d?void 0:d.dynamic)?void 0:i.baseTolerance)??(null==(s=null==d?void 0:d.simplifyTolerance)?void 0:s.tolerance)??v,highQuality:(null==(a=null==d?void 0:d.dynamic)?void 0:a.highQuality)??(null==(l=null==d?void 0:d.simplifyTolerance)?void 0:l.highQuality)??m,fractionGuard:(null==(c=null==d?void 0:d.dynamic)?void 0:c.fractionGuard)??(null==(h=null==d?void 0:d.dynamicMode)?void 0:h.fractionGuard)??.9,multiplier:(null==(u=null==d?void 0:d.dynamic)?void 0:u.multiplier)??(null==(g=null==d?void 0:d.dynamicMode)?void 0:g.multiplier)??2}}}getTurfPolygon(t){let e;return e="Polygon"===t.geometry.type?w([t.geometry.coordinates]):w(t.geometry.coordinates),e}getMultiPolygon(t){return w(t)}getKinks(t){try{if(!t||!t.geometry||!t.geometry.coordinates)return[t];const e=this.removeDuplicateVertices(t);if(!e||!e.geometry||!e.geometry.coordinates)return ao()||console.warn("Feature became invalid after cleaning in getKinks"),[t];if(this.polygonHasHoles(e))return this.getKinksWithHolePreservation(e);{const t=jn(e),n=[];return G(t,t=>{n.push(t)}),n}}catch(e){return ao()||console.warn("Error processing kinks:",e instanceof Error?e.message:String(e)),[t]}}getCoords(t){return b(t)}getReferenceLatLng(t){var e,n;try{const r=b(t),o=null==(n=null==(e=null==r?void 0:r[0])?void 0:e[0])?void 0:n[0];if(o&&Array.isArray(o)&&o.length>=2)return{lat:o[1],lng:o[0]}}catch{}return{lat:0,lng:0}}hasKinks(t){return on(t).features.length>0}getConvexHull(t){try{const e=P([t]);return mt(e)}catch(e){return ao()||console.warn("Error in getConvexHull:",e instanceof Error?e.message:String(e)),null}}getMidpoint(t,e){const n=E(y([t.lng,t.lat]),y([e.lng,e.lat]));return{lat:n.geometry.coordinates[1],lng:n.geometry.coordinates[0]}}polygonIntersect(t,e){try{if(!(t&&t.geometry&&t.geometry.coordinates&&e&&e.geometry&&e.geometry.coordinates))return ao()||console.warn("Invalid features passed to polygonIntersect"),!1;const n=t=>{var e,n;return Array.isArray(null==(n=null==(e=t[0])?void 0:e[0])?void 0:n[0])},r=t=>{if(!Array.isArray(t))return!1;const e=n(t)?t.flat():t;for(const n of e){if(!Array.isArray(n))return!1;for(const t of n){if(!Array.isArray(t)||t.length<2)return!1;if(t.some(t=>null==t||!isFinite(t)))return!1}}return!0};if(!r(t.geometry.coordinates)||!r(e.geometry.coordinates))return!1;try{const n=P([t,e]),r=He(n);if(r&&r.geometry&&("Polygon"===r.geometry.type||"MultiPolygon"===r.geometry.type)){if(j(r)>1e-6)return!0}}catch{}try{const n=Ge(t),r=Ge(e);for(const e of r.features)if(zn(e,t))return!0;for(const t of n.features)if(zn(t,e))return!0}catch{}try{const n=b(t),r=b(e);for(const t of n){const e=t[0];if(e&&!(e.length<2))for(let t=0;t<e.length-1;t++){const n=e[t],o=e[t+1];if(!n||!o||!Array.isArray(n)||!Array.isArray(o)||n.length<2||o.length<2||n.some(t=>null==t||!isFinite(t))||o.some(t=>null==t||!isFinite(t)))continue;const i=v([n,o]);for(const t of r){const e=t[0];if(e&&!(e.length<2))for(let t=0;t<e.length-1;t++){const n=e[t],r=e[t+1];if(!n||!r||!Array.isArray(n)||!Array.isArray(r)||n.length<2||r.length<2||n.some(t=>null==t||!isFinite(t))||r.some(t=>null==t||!isFinite(t)))continue;const o=v([n,r]);try{const t=Ft(i,o);if(t&&t.features&&t.features.length>0)return!0}catch{}}}}}}catch{}return!1}catch(n){return ao()||console.warn("Error in polygonIntersect:",n instanceof Error?n.message:String(n)),!1}}getIntersection(t,e){try{const n=P([t,e]),r=He(n);return r&&r.geometry&&("Polygon"===r.geometry.type||"MultiPolygon"===r.geometry.type)?r:null}catch(n){return ao()||console.warn("Error in getIntersection:",n instanceof Error?n.message:String(n)),null}}getDistance(t,e){return k(t,e)}isWithin(t,e){return er(M([t]),M([e]))}isPolygonCompletelyWithin(t,e){try{return er(t,e)}catch{const n=b(t),r=b(e);for(const t of n)for(const e of t)for(const t of e){const e=y(t);let n=!1;for(const t of r){for(const r of t){const t=M([r]);if(zn(e,t)){n=!0;break}}if(n)break}if(!n)return!1}return!0}}toPointFeature(t){if((t=>{var e;if(!t||"object"!=typeof t)return!1;const n=t;return"Feature"===n.type&&"Point"===(null==(e=n.geometry)?void 0:e.type)})(t))return t;if(Array.isArray(t)&&t.length>=2&&"number"==typeof t[0]&&"number"==typeof t[1])return y(t);if((e=t)&&"object"==typeof e&&"number"==typeof e.lat&&"number"==typeof e.lng){const e=t;return y([e.lng,e.lat])}var e;if((t=>{if(!t||"object"!=typeof t)return!1;const e=t.geometry;return!!e&&Array.isArray(e.coordinates)})(t))return y(t.geometry.coordinates);throw new Error("Unsupported point format provided to toPointFeature")}isPointInsidePolygon(t,e){try{const n=this.toPointFeature(t);return zn(n,e)}catch{return!1}}equalPolygons(t,e){return ur(t,e)}convertToBoundingBoxPolygon(t){const e=function(t){const[e,n,r,o]=t;return M([[[e,n],[r,n],[r,o],[e,o],[e,n]]])}(x(t));return e}polygonToMultiPolygon(t){return w([t.geometry.coordinates])}injectPointToPolygon(t,e,n){const r=JSON.parse(JSON.stringify(t));let o;if("MultiPolygon"===r.geometry.type)o=r.geometry.coordinates[0][n];else{if("Polygon"!==r.geometry.type)return r;o=r.geometry.coordinates[n]}if(!o)return r;let i=1/0,s=0;for(let a=0;a<o.length-1;a++){const t=o[a],n=o[a+1],r=this.distanceToLineSegment(e,t,n);r<i&&(i=r,s=a+1)}return o.splice(s,0,e),r}distanceToLineSegment(t,e,n){const r=t[0]-e[0],o=t[1]-e[1],i=n[0]-e[0],s=n[1]-e[1],a=r*i+o*s,l=i*i+s*s;if(0===l)return Math.sqrt(r*r+o*o);const c=a/l;let h,u;c<0?(h=e[0],u=e[1]):c>1?(h=n[0],u=n[1]):(h=e[0]+c*i,u=e[1]+c*s);const g=t[0]-h,p=t[1]-u;return Math.sqrt(g*g+p*p)}polygonDifference(t,e){try{const n=P([t,e]),r=ze(n);return r?this.getTurfPolygon(r):null}catch(n){return ao()||console.warn("Error in polygonDifference:",n instanceof Error?n.message:String(n)),null}}getBoundingBoxCompassPosition(t,e,n,r){return null}getNearestPointIndex(t,e){return br(t,e).properties.featureIndex??0}getCoord(t){return[t.lng,t.lat]}createPolygon(t){return M(t)}getFeaturePointCollection(t){const e=[];t.forEach(t=>{const n=y([t.lng,t.lat],{});e.push(n)});return P(e)}getPolygonArea(t){return j(t)}getPolygonPerimeter(t){return Er(t,{units:"kilometers"})}getCenterOfMass(t){return bt(t)}getDoubleElbowLatLngs(t){const e=[],n=t.length,r=t[0].lat===t[n-1].lat&&t[0].lng===t[n-1].lng?n-1:n;for(let o=0;o<r;o++){const n=t[o],i=t[(o+1)%r];e.push(new a.LatLng(n.lat,n.lng));const s=E(y([n.lng,n.lat]),y([i.lng,i.lat]));e.push(new a.LatLng(s.geometry.coordinates[1],s.geometry.coordinates[0]))}return e}getBezierMultiPolygon(t){const e=t=>{if(!t||0===t.length)return t;const e=t[0],n=t[t.length-1];return e[0]===n[0]&&e[1]===n[1]?t:[...t,[e[0],e[1]]]},n=t.map(t=>t.map(t=>{const n=e(t);try{const t=v(n),r=kr(t,{resolution:this.config.bezier.resolution,sharpness:this.config.bezier.sharpness}).geometry.coordinates??n,o=Math.max(2,n.length-1),i=Math.max(1,this.config.bezier.resampleMultiplier??10),s=Math.max(4,this.config.bezier.maxNodes??r.length),a=((t,n)=>{const r=e(t);if(!r||r.length<2)return r;const o=(t,e)=>{const n=t[0]-e[0],r=t[1]-e[1];return Math.sqrt(n*n+r*r)};let i=0;for(let e=1;e<r.length;e++)i+=o(r[e-1],r[e]);if(!Number.isFinite(i)||i<=0)return r;const s=i/Math.max(n,4),a=[r[0]];let l=0;for(let e=1;e<r.length;e++){let t=r[e-1];const n=r[e];let i=o(t,n);for(;l+i>=s&&i>0;){const e=(s-l)/i,r=[t[0]+(n[0]-t[0])*e,t[1]+(n[1]-t[1])*e];a.push(r),t=r,i=o(t,n),l=0}l+=i}return e(a)})(r,Math.max(4,Math.min(s,o*i))),l=(t=>{if(!t||0===t.length)return t;const n=1e-6,r=new Set,o=[];for(let e=0;e<t.length;e++){const i=t[e];if(!Array.isArray(i)||i.length<2)continue;const s=`${Math.round(i[0]/n)}:${Math.round(i[1]/n)}`;r.has(s)||(r.add(s),o.push(i))}return e(o)})(a);return l.length>=4?l:n}catch(r){return ao()||console.warn("Bezier smoothing failed for ring, falling back to original:",r),n}}));return this.getMultiPolygon(n)}polygonHasHoles(t){try{return"Polygon"===t.geometry.type?t.geometry.coordinates.length>1:"MultiPolygon"===t.geometry.type&&t.geometry.coordinates.some(t=>t.length>1)}catch(e){return ao()||console.warn("Error checking for holes:",e instanceof Error?e.message:String(e)),!1}}getKinksWithHolePreservation(t){try{if("Polygon"===t.geometry.type){const e=t.geometry.coordinates,n=e[0],r=e.slice(1),o={type:"Feature",geometry:{type:"Polygon",coordinates:[n]},properties:t.properties||{}},i=this.hasKinks(o),s=this.checkOuterRingHoleIntersection(n,r);if(i||s){if(this.checkIfDragCompletelyThroughHole(n,r))return this.handleCompleteHoleTraversal(o,r);const t=jn(o),e=[];return G(t,t=>{const n=this.subtractIntersectingHoles(t,r);e.push(n)}),e}return[t]}if("MultiPolygon"===t.geometry.type){const e=[];for(const n of t.geometry.coordinates){const r={type:"Feature",geometry:{type:"Polygon",coordinates:n},properties:t.properties||{}},o=this.getKinksWithHolePreservation(r);e.push(...o)}return e}return[t]}catch(e){return ao()||console.warn("Error in getKinksWithHolePreservation:",e instanceof Error?e.message:String(e)),[t]}}checkIfDragCompletelyThroughHole(t,e){try{if(this.findDuplicatePoints(t).length>0)return!0;const n=this.findSelfIntersectionLine(t);if(n&&e.length>0)for(const t of e)if(this.lineCompletelyTraversesHole(n,t))return!0;if(this.hasKinks({type:"Feature",geometry:{type:"Polygon",coordinates:[t]},properties:{}}))for(const r of e)if(this.holeIsCutByKinks(t,r))return!0;return!1}catch(n){return ao()||console.warn("Error checking complete hole traversal:",n instanceof Error?n.message:String(n)),!1}}findSelfIntersectionLine(t){try{const e=new Map;for(let n=0;n<t.length-1;n++){const r=t[n],o=`${r[0]},${r[1]}`;e.has(o)?e.get(o).indices.push(n):e.set(o,{point:r,indices:[n]})}for(const[,n]of e)if(n.indices.length>=2){const e=n.indices[0],r=n.indices[1],o=[];for(let n=e;n<=r;n++)o.push(t[n]);return o}return null}catch(e){return ao()||console.warn("Error finding self-intersection line:",e instanceof Error?e.message:String(e)),null}}lineCompletelyTraversesHole(t,e){try{if(t.length<2)return!1;const n=t[0],r=t[t.length-1],o=M([e]),i=zn(y(n),o);return i!==zn(y(r),o)}catch(n){return ao()||console.warn("Error checking line hole traversal:",n instanceof Error?n.message:String(n)),!1}}holeIsCutByKinks(t,e){try{const n=M([t]),r=M([e]),o=on(n);if(0===o.features.length)return!1;for(const t of o.features){const e=t.geometry.coordinates;try{if(k(y(e),L(r))<.01)return!0;if(zn(y(e),r))return!0}catch{if(zn(y(e),r))return!0}}return!1}catch(n){return ao()||console.warn("Error checking hole cut by kinks:",n.message),!1}}findDuplicatePoints(t){const e=[],n=new Set;for(let r=0;r<t.length-1;r++){const o=t[r],i=`${o[0]},${o[1]}`;n.has(i)?e.push(o):n.add(i)}return e}checkOuterRingHoleIntersection(t,e){try{if(0===e.length)return!1;const n=M([t]);for(const r of e){const e=M([r]);if(this.getIntersection(n,e))return!0;for(let n=0;n<t.length-1;n++){const r=t[n];if(zn(y(r),e))return!0}}return!1}catch{return!1}}handleCompleteHoleTraversal(t,e){try{const e={type:"Feature",geometry:{type:"Polygon",coordinates:[t.geometry.coordinates[0]]},properties:t.properties||{}},n=jn(e),r=[];return G(n,t=>{t._polydrawHoleTraversalOccurred=!0,r.push(t)}),r}catch(n){ao()||console.warn("Error handling complete hole traversal:",n instanceof Error?n.message:String(n));try{const e={...t,geometry:{...t.geometry,coordinates:[t.geometry.coordinates[0]]}};return e._polydrawHoleTraversalOccurred=!0,[e]}catch{return[t]}}}subtractIntersectingHoles(t,e){try{let n=t;for(const t of e){const e=M([t]);if(this.getIntersection(e,n)){const t=this.polygonDifference(n,e);if(t)if("Polygon"===t.geometry.type)n=t;else if("MultiPolygon"===t.geometry.type){const e=t;let r=0,o=null;for(const t of e.geometry.coordinates){const e={type:"Feature",geometry:{type:"Polygon",coordinates:t},properties:{}},n=j(e);n>r&&(r=n,o=e)}o&&(n=o)}}}return n}catch(n){return ao()||console.warn("Error subtracting intersecting holes:",n instanceof Error?n.message:String(n)),t}}removeDuplicateVertices(t){if(!t||!t.geometry||!t.geometry.coordinates)return ao()||console.warn("Invalid feature passed to removeDuplicateVertices"),t;const e=t=>{if(!t||t.length<3)return ao()||console.warn("Invalid coordinates array - need at least 3 points for a polygon"),t||[];const e=[],n=1e-6,r=new Set;for(let o=0;o<t.length;o++){const i=t[o],s=t[(o+1)%t.length];if(!i||!Array.isArray(i)||i.length<2||!s||!Array.isArray(s)||s.length<2)continue;const a=Math.abs(i[1]-s[1]),l=Math.abs(i[0]-s[0]),c=`${Math.round(i[0]/n)}:${Math.round(i[1]/n)}`,h=r.has(c);(a>n||l>n)&&!h&&(e.push(i),r.add(c))}if(e.length<3)return ao()||console.warn("After cleaning, polygon has less than 3 points"),t;if(e.length>0){const t=e[0],r=e[e.length-1],o=Math.abs(t[1]-r[1]),i=Math.abs(t[0]-r[0]);(o>n||i>n)&&e.push([t[0],t[1]])}return e};try{if("Polygon"===t.geometry.type){const n=t.geometry.coordinates.map(t=>e(t));return n.some(t=>t.length<4)?(ao()||console.warn("Cleaned polygon has invalid ring with less than 4 coordinates"),t):{...t,geometry:{...t.geometry,coordinates:n}}}if("MultiPolygon"===t.geometry.type){const n=t.geometry.coordinates.map(t=>t.map(t=>e(t)));return n.some(t=>t.some(t=>t.length<4))?(ao()||console.warn("Cleaned multipolygon has invalid ring with less than 4 coordinates"),t):{...t,geometry:{...t.geometry,coordinates:n}}}}catch(n){return ao()||console.warn("Error in removeDuplicateVertices:",n instanceof Error?n.message:String(n)),t}return t}}const po=()=>{if("undefined"!=typeof globalThis)return globalThis.L};class fo{static getVersion(){if(this._detectedVersion)return this._detectedVersion;const t=po();return t?(this._detectedVersion=this.detectVersion(t),this._detectedVersion):l.V2}static detectVersion(t){const e=t??po();if(!e)return l.V2;if(e.version){if(e.version.startsWith("2."))return l.V2;if(e.version.startsWith("1."))return l.V1}return"function"!=typeof e.marker?l.V2:"function"==typeof e.marker&&"function"==typeof e.polyline&&"function"==typeof e.polygon?l.V1:e.Marker&&"function"==typeof e.Marker&&e.Polyline&&"function"==typeof e.Polyline?l.V2:l.V1}static isV1(){return this.getVersion()===l.V1}static isV2(){return this.getVersion()===l.V2}static reset(){this._detectedVersion=null}static getVersionInfo(){const t=this.getVersion(),e=po();return{version:t,leafletVersion:null==e?void 0:e.version,hasFactoryMethods:"function"==typeof(null==e?void 0:e.marker),hasConstructors:!!(null==e?void 0:e.Marker)&&"function"==typeof e.Marker,globalLAvailable:!!e}}}i(fo,"_detectedVersion",null);const mo=new class{constructor(){i(this,"domUtil",{create:(t,e,n)=>{if(void 0!==a&&a.DomUtil)return a.DomUtil.create(t,e,n);{const r=document.createElement(t);return e&&(r.className=e),n&&n.appendChild(r),r}},addClass:(t,e)=>{this.version===l.V1?a.DomUtil.addClass(t,e):t.classList.add(e)},removeClass:(t,e)=>{this.version===l.V1?a.DomUtil.removeClass(t,e):t.classList.remove(e)},hasClass:(t,e)=>this.version===l.V1?a.DomUtil.hasClass(t,e):t.classList.contains(e),setPosition:(t,e)=>{a.DomUtil.setPosition(t,e)},getPosition:t=>a.DomUtil.getPosition(t)}),i(this,"domEvent",{on:(t,e,n,r)=>(a.DomEvent.on(t,e,n,r),this),off:(t,e,n,r)=>(a.DomEvent.off(t,e,n,r),this),stopPropagation:t=>(a.DomEvent.stopPropagation(t),this),preventDefault:t=>(a.DomEvent.preventDefault(t),this),stop:t=>(a.DomEvent.stop(t),this),disableClickPropagation:t=>(a.DomEvent.disableClickPropagation(t),this),disableScrollPropagation:t=>(a.DomEvent.disableScrollPropagation(t),this),getMousePosition:(t,e)=>{if(this.version===l.V1)return a.DomEvent.getMousePosition(t,e);{const n=a.DomEvent;return n.getPointerPosition?n.getPointerPosition(t,e):a.DomEvent.getMousePosition(t,e)}}}),i(this,"util",{extend:(t,...e)=>this.version===l.V1?a.Util.extend(t,...e):Object.assign(t,...e),bind:(t,e)=>this.version===l.V1?a.Util.bind(t,e):t.bind(e),stamp:t=>a.Util.stamp(t),throttle:(t,e,n)=>a.Util.throttle(t,e,n),wrapNum:(t,e,n)=>a.Util.wrapNum(t,e,n),falseFn:()=>a.Util.falseFn(),formatNum:(t,e)=>a.Util.formatNum(t,e),trim:t=>this.version===l.V1?a.Util.trim(t):t.trim(),splitWords:t=>a.Util.splitWords(t),setOptions:(t,e)=>a.Util.setOptions(t,e),getParamString:(t,e,n)=>{if(this.version===l.V1)return a.Util.getParamString(t,e,n);{const r=new URLSearchParams;for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const o=n?e.toUpperCase():e;r.set(o,String(t[e]))}const o=r.toString();if(e){const t=-1===e.indexOf("?")?"?":"&";return e+t+o}return o?"?"+o:""}},template:(t,e)=>a.Util.template(t,e),isArray:t=>this.version===l.V1?a.Util.isArray(t):Array.isArray(t),indexOf:(t,e)=>a.Util.indexOf(t,e),requestAnimFrame:(t,e,n)=>this.version===l.V1?a.Util.requestAnimFrame(t,e,n):requestAnimationFrame(e?t.bind(e):t),cancelAnimFrame:t=>{this.version===l.V1?a.Util.cancelAnimFrame(t):cancelAnimationFrame(t)}})}get version(){return fo.getVersion()}createTileLayer(t,e){return new a.TileLayer(t,e)}createMap(t,e){return new a.Map(t,e)}createMarker(t,e){return new a.Marker(t,e)}createPolyline(t,e){return new a.Polyline(t,e)}createPolygon(t,e){return new a.Polygon(t,e)}createDivIcon(t){return new a.DivIcon(t)}createLatLng(t,e,n){return new a.LatLng(t,e,n)}createLatLngBounds(t,e){return t&&e?new a.LatLngBounds(t,e):t?new a.LatLngBounds(t,t):new a.LatLngBounds([])}createPoint(t,e,n){return new a.Point(t,e,n)}createPopup(t,e){return new a.Popup(t,e)}createFeatureGroup(t){return new a.FeatureGroup(t)}createLayerGroup(t){return new a.LayerGroup(t)}getBrowser(){const t=this,e=a.Browser;return{get ie(){return t.version===l.V1&&a.Browser.ie},get ielt9(){return t.version===l.V1&&a.Browser.ielt9},get edge(){return t.version===l.V1&&a.Browser.edge},get webkit(){return t.version===l.V1&&a.Browser.webkit},get android(){return t.version===l.V1?a.Browser.android:/Android/.test(navigator.userAgent)},get android23(){return t.version===l.V1&&a.Browser.android23},get androidStock(){return t.version===l.V1&&a.Browser.androidStock},get opera(){return t.version===l.V1&&a.Browser.opera},get chrome(){return t.version===l.V1?a.Browser.chrome:/Chrome/.test(navigator.userAgent)},get gecko(){return t.version===l.V1&&a.Browser.gecko},get safari(){return t.version===l.V1?a.Browser.safari:/Safari/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)},get phantom(){return t.version===l.V1&&(e.phantom??!1)},get opera12(){return t.version===l.V1&&a.Browser.opera12},get win(){return t.version===l.V1?a.Browser.win:/Win/.test(navigator.platform)},get ie3d(){return t.version===l.V1&&a.Browser.ie3d},get webkit3d(){return t.version===l.V1&&a.Browser.webkit3d},get gecko3d(){return t.version===l.V1&&a.Browser.gecko3d},get any3d(){return t.version!==l.V1||a.Browser.any3d},get mobile(){return a.Browser.mobile},get mobileWebkit(){return t.version===l.V1&&a.Browser.mobileWebkit},get mobileWebkit3d(){return t.version===l.V1&&a.Browser.mobileWebkit3d},get msPointer(){return t.version===l.V1&&a.Browser.msPointer},get pointer(){return a.Browser.pointer||!0},get touch(){return a.Browser.touch},get touchNative(){return t.version===l.V1&&(e.touchNative??!1)},get mobileOpera(){return t.version===l.V1&&a.Browser.mobileOpera},get mobileGecko(){return t.version===l.V1&&a.Browser.mobileGecko},get retina(){return a.Browser.retina},get passiveEvents(){return t.version!==l.V1||(e.passiveEvents??!0)},get canvas(){return t.version!==l.V1||a.Browser.canvas},get svg(){return t.version!==l.V1||a.Browser.svg},get vml(){return t.version===l.V1&&a.Browser.vml},get inlineSvg(){return t.version!==l.V1||(e.inlineSvg??!0)}}}getVersion(){return this.version}isV1(){return this.version===l.V1}isV2(){return this.version===l.V2}};function yo(t,e){t.innerHTML=e;const n=t.querySelector("svg");n&&(!function(t){if(t.hasAttribute("viewBox"))return;const e=t.getAttribute("width"),n=t.getAttribute("height"),r=e?parseFloat(e):NaN,o=n?parseFloat(n):NaN;Number.isFinite(r)&&Number.isFinite(o)&&r>0&&o>0&&t.setAttribute("viewBox",`0 0 ${r} ${o}`)}(n),function(t){const e=Array.from(t.querySelectorAll("style"));if(0===e.length)return;const n=new Set;if(e.forEach(e=>{const r=e.textContent;if(!r)return void e.remove();const o=/([^{]+)\{([^}]*)\}/g;let i;for(;null!==(i=o.exec(r));){const e=i[1].split(",").map(t=>t.trim()).filter(Boolean),r=i[2];e.forEach(e=>{if(!e.startsWith("."))return;const o=e.slice(1);n.add(o),t.querySelectorAll(`.${o}`).forEach(t=>{r.split(";").forEach(e=>{const[n,r]=e.split(":");n&&r&&t.style.setProperty(n.trim(),r.trim())})})})}e.remove()}),0===n.size)return;t.querySelectorAll("[class]").forEach(t=>{const e=Array.from(t.classList).filter(t=>!n.has(t));e.length>0?t.setAttribute("class",e.join(" ")):t.removeAttribute("class")})}(n),n.setAttribute("width","24"),n.setAttribute("height","24"),n.style.pointerEvents="none",n.querySelectorAll("*").forEach(t=>{t.style.pointerEvents="none"}))}const vo={activate:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="Shape" fill="#000" fill-rule="evenodd" stroke="none" d="M73.574 425.687c-1.14.188-4.099-.592-6.574-1.735-2.475-1.142-5.513-3.027-6.75-4.188C58 417.65 58 417.65 58 348.144c0-69.506 0-69.506 6.152-80.075a1599.57 1599.57 0 0 1 12.84-21.569c3.677-6.05 12.679-21.125 20.004-33.5 7.324-12.375 15.666-26.325 18.538-31 2.87-4.675 13.163-21.88 22.872-38.233a33686.921 33686.921 0 0 1 34.229-57.5c9.117-15.272 18.261-30.022 20.322-32.777 2.298-3.074 5.78-6.117 9.008-7.874 3.583-1.95 7.22-3.017 11.399-3.342 4.972-.388 7.445.018 13.04 2.137 3.799 1.439 10.999 4.919 16 7.733 5.003 2.814 13.371 7.613 18.596 10.663s13.775 8.134 19 11.297c5.225 3.163 12.061 7.246 15.192 9.073 3.13 1.828 9.402 5.521 13.936 8.208 4.535 2.686 10.397 6.897 13.027 9.357 3.265 3.054 5.457 6.261 6.912 10.115 1.672 4.43 2.036 7.161 1.694 12.704-.324 5.244-1.186 8.511-3.349 12.695-1.601 3.098-9.388 16.57-17.303 29.939-7.915 13.368-16.24 27.326-18.5 31.019a3087.099 3087.099 0 0 0-9.697 16c-3.073 5.107-11.2 18.736-18.061 30.286-6.86 11.55-16.45 27.75-21.312 36-4.86 8.25-11.179 18.825-14.04 23.5-2.862 4.675-8.308 13.83-12.101 20.343-3.794 6.513-10.508 17.762-14.92 24.997-7.721 12.664-8.263 13.29-14.5 16.77-3.563 1.987-15.357 8.416-26.21 14.286-10.851 5.87-28.851 15.66-40 21.756-11.147 6.096-25.86 14.032-32.694 17.638-6.834 3.605-13.359 6.709-14.5 6.897ZM116 376.754c2.096-.21 12.525-5.28 26-12.636 12.375-6.757 23.394-13.153 24.486-14.215 1.495-1.453 1.734-2.331.966-3.548-.56-.889-7.304-5.352-14.986-9.918-7.681-4.565-17.116-10.268-20.966-12.672-3.85-2.405-15.046-9.073-24.88-14.818-9.834-5.746-19.087-10.976-20.561-11.623-1.641-.72-3.24-.831-4.12-.287-.981.606-1.598 3.444-1.939 8.924-.275 4.42-.347 17.312-.16 28.65.341 20.616.341 20.616 3.5 23.908 1.738 1.81 9.01 6.733 16.16 10.94 10.754 6.327 13.605 7.587 16.5 7.295ZM184.98 329c.9 0 2.342-.563 3.204-1.25.86-.688 3.803-4.85 6.537-9.25 2.735-4.4 17.476-28.925 32.759-54.5 15.283-25.575 29.64-49.497 31.904-53.16 2.264-3.662 6.141-10.152 8.616-14.422 2.475-4.27 5.957-10.274 7.738-13.341 1.785-3.075 3.244-7.005 3.25-8.759.011-2.982-.694-3.614-11.238-10.077A2882.894 2882.894 0 0 0 249 152.847c-4.125-2.475-13.245-7.94-20.267-12.145a9841.507 9841.507 0 0 1-20.5-12.309 1566.199 1566.199 0 0 0-14.685-8.73c-3.823-2.238-8.13-4.242-9.57-4.453-1.998-.293-3.333.43-5.64 3.057-1.661 1.893-5.368 7.444-8.237 12.337a2040.256 2040.256 0 0 1-11.477 19.251 5775.594 5775.594 0 0 0-12.325 20.5A7048.542 7048.542 0 0 1 131.47 195c-4.823 7.975-10.898 18.1-13.501 22.5-2.604 4.4-8.45 14.075-12.991 21.5-4.542 7.425-10.268 16.988-12.725 21.252-3.26 5.657-4.304 8.405-3.861 10.168.454 1.81 4.239 4.57 15.1 11.01 7.973 4.726 20.686 12.257 28.252 16.735 7.566 4.477 17.582 10.485 22.257 13.351 4.675 2.866 13.19 7.973 18.921 11.348 5.732 3.375 11.158 6.136 12.059 6.136Zm100.681-194.022c2.318.016 3.852-.798 5.75-3.055 1.497-1.78 2.589-4.313 2.589-6.01 0-2.269-.848-3.508-3.75-5.478-2.063-1.4-6.53-4.29-9.927-6.421-3.398-2.132-9.923-6.015-14.5-8.63-4.578-2.614-10.798-6.408-13.823-8.43-3.025-2.022-7.75-4.873-10.5-6.334-2.75-1.462-8.15-4.689-12-7.171-5.023-3.24-7.838-4.434-9.968-4.232-2.1.2-3.65 1.298-5.297 3.75-1.437 2.14-2.215 4.588-2.032 6.391.254 2.498 1.604 3.72 9.297 8.412 4.95 3.02 15.525 9.427 23.5 14.238a3631.896 3631.896 0 0 1 26 15.848c7.807 4.82 12.515 7.107 14.661 7.122Z"/>\n <path id="path1" fill="#000" fill-rule="evenodd" stroke="none" d="M479.5 119.5c0 34 0 34-7 34.262-3.85.144-11.275.947-16.5 1.785s-12.533 2.42-16.24 3.514c-3.708 1.095-9.416 3.559-12.686 5.475-3.269 1.916-7.401 4.71-9.183 6.209-1.781 1.499-4.926 5.336-6.988 8.526-2.395 3.706-4.41 8.588-5.576 13.515-1.346 5.684-1.817 11.548-1.79 22.282.023 8.902.749 19.208 1.866 26.5 1.006 6.563 2.964 17.107 4.352 23.432 1.388 6.325 3.152 14.2 3.92 17.5.768 3.3 3.14 14.55 5.272 25s4.816 24.901 5.965 32.114c1.57 9.86 2.088 17.705 2.088 31.622 0 16.395-.284 19.635-2.485 28.386-1.367 5.433-4.299 13.56-6.515 18.061-2.832 5.75-6.265 10.559-11.545 16.172-5.308 5.642-10.516 9.846-17.735 14.316-5.62 3.481-13.145 7.611-16.72 9.179-3.575 1.567-10.739 4.4-15.92 6.293-5.181 1.894-13.506 4.308-18.5 5.365-4.994 1.056-13.58 2.637-19.08 3.513-6.633 1.057-18.754 1.716-36 1.958-14.3.201-30.5.01-36-.424s-15.625-1.537-22.5-2.45c-6.875-.912-16.575-2.328-21.557-3.146-4.98-.817-12.406-2.176-16.5-3.02-4.093-.843-9.693-2.157-12.443-2.92-2.75-.763-7.7-2.083-11-2.932-3.3-.85-10.5-2.648-16-3.996-5.5-1.348-15.85-4.3-23-6.56-7.15-2.261-14.912-4.805-17.25-5.653-2.904-1.055-4.25-2.127-4.25-3.386 0-1.228 3.252-3.97 9.75-8.22 5.363-3.507 13.202-8.277 17.421-10.6 7.671-4.225 7.671-4.225 18.5-1.287 5.956 1.616 19.154 4.998 29.329 7.515 10.175 2.517 23.45 5.465 29.5 6.55 6.05 1.087 15.05 2.427 20 2.98 4.95.552 14.85 1.53 22 2.175 8.107.73 21.657.955 36 .598 13.264-.33 27.021-1.234 32.5-2.135 5.225-.86 14-2.963 19.5-4.673s12.925-4.443 16.5-6.073a870.93 870.93 0 0 0 11.5-5.354c2.75-1.314 7.94-4.836 11.535-7.826 3.888-3.234 7.591-7.403 9.142-10.29 1.433-2.668 3.653-8.143 4.932-12.166 1.934-6.082 2.319-9.415 2.283-19.794-.024-7.149-.774-16.627-1.756-22.186-.943-5.339-2.407-13.531-3.253-18.206-.847-4.675-2.454-12.775-3.572-18-1.118-5.225-3.15-14-4.514-19.5-1.365-5.5-3.5-14.725-4.746-20.5-1.246-5.775-2.995-15-3.886-20.5-.892-5.5-2.081-14.08-2.643-19.068-.562-4.987-1.014-13.987-1.005-20 .01-6.012.652-14.799 1.427-19.525.775-4.726 2.12-11.026 2.988-14 .869-2.974 3.04-8.224 4.824-11.668 1.784-3.443 5.256-9.004 7.715-12.356 2.46-3.353 8.084-8.988 12.5-12.523 4.416-3.534 11.629-8.164 16.029-10.287 4.4-2.124 12.05-5.194 17-6.823 4.95-1.63 14.625-3.757 21.5-4.729s16.1-1.824 20.5-1.894l8-.127Z"/>\n <path id="path2" fill="#B6BCC4" fill-rule="evenodd" stroke="none" d="M116 375.743c-2.73.236-5.372-.8-12-4.708-4.675-2.756-11.133-6.704-14.35-8.773-3.218-2.07-6.48-4.977-7.25-6.462-1.094-2.111-1.4-8.348-1.4-28.56 0-21.125.267-26.213 1.461-27.799 1.43-1.9 1.574-1.879 6.75.986 2.909 1.61 8.214 4.584 11.789 6.61 3.575 2.026 9.1 5.209 12.28 7.073 3.179 1.865 10.253 6.09 15.722 9.39 5.468 3.3 13.836 8.245 18.596 10.989 4.76 2.744 10.736 6.348 13.279 8.01 2.568 1.678 4.753 3.927 4.917 5.062.246 1.716-3.42 4.101-23 14.96-14.766 8.189-24.575 13.03-26.794 13.222Z"/>\n <path id="path3" fill="#fff" fill-rule="evenodd" stroke="none" d="M185.256 329c-1.012 0-5.646-2.194-10.298-4.875-4.652-2.68-22.633-13.322-39.958-23.648-17.325-10.325-34.65-20.844-38.5-23.375-6.25-4.109-7.029-4.977-7.268-8.102-.202-2.632.816-5.36 4.106-11 2.407-4.125 21.576-36.075 42.6-71 21.022-34.925 39.47-65.075 40.994-67 2.195-2.772 3.589-3.562 6.699-3.797 3.477-.262 6.271 1.103 24.398 11.925 11.259 6.722 30.146 18.027 41.971 25.123 11.825 7.095 23.075 14.15 25 15.675 2.099 1.664 3.627 3.836 3.816 5.425.19 1.592-1.021 5.145-3.035 8.9-1.844 3.437-21.525 36.528-43.737 73.537-22.211 37.008-41.411 68.395-42.666 69.75-1.256 1.354-3.11 2.462-4.122 2.462Z"/>\n</svg>'.trim(),draw:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="Shape" fill="#000" fill-rule="evenodd" stroke="none" d="M73.574 425.687c-1.14.188-4.099-.592-6.574-1.735-2.475-1.142-5.513-3.027-6.75-4.188C58 417.65 58 417.65 58 348.144c0-69.506 0-69.506 6.152-80.075a1599.57 1599.57 0 0 1 12.84-21.569c3.677-6.05 12.679-21.125 20.004-33.5 7.324-12.375 15.666-26.325 18.538-31 2.87-4.675 13.163-21.88 22.872-38.233a33686.921 33686.921 0 0 1 34.229-57.5c9.117-15.272 18.261-30.022 20.322-32.777 2.298-3.074 5.78-6.117 9.008-7.874 3.583-1.95 7.22-3.017 11.399-3.342 4.972-.388 7.445.018 13.04 2.137 3.799 1.439 10.999 4.919 16 7.733 5.003 2.814 13.371 7.613 18.596 10.663s13.775 8.134 19 11.297c5.225 3.163 12.061 7.246 15.192 9.073 3.13 1.828 9.402 5.521 13.936 8.208 4.535 2.686 10.397 6.897 13.027 9.357 3.265 3.054 5.457 6.261 6.912 10.115 1.672 4.43 2.036 7.161 1.694 12.704-.324 5.244-1.186 8.511-3.349 12.695-1.601 3.098-9.388 16.57-17.303 29.939-7.915 13.368-16.24 27.326-18.5 31.019a3087.099 3087.099 0 0 0-9.697 16c-3.073 5.107-11.2 18.736-18.061 30.286-6.86 11.55-16.45 27.75-21.312 36-4.86 8.25-11.179 18.825-14.04 23.5-2.862 4.675-8.308 13.83-12.101 20.343-3.794 6.513-10.508 17.762-14.92 24.997-7.721 12.664-8.263 13.29-14.5 16.77-3.563 1.987-15.357 8.416-26.21 14.286-10.851 5.87-28.851 15.66-40 21.756-11.147 6.096-25.86 14.032-32.694 17.638-6.834 3.605-13.359 6.709-14.5 6.897ZM116 376.754c2.096-.21 12.525-5.28 26-12.636 12.375-6.757 23.394-13.153 24.486-14.215 1.495-1.453 1.734-2.331.966-3.548-.56-.889-7.304-5.352-14.986-9.918-7.681-4.565-17.116-10.268-20.966-12.672-3.85-2.405-15.046-9.073-24.88-14.818-9.834-5.746-19.087-10.976-20.561-11.623-1.641-.72-3.24-.831-4.12-.287-.981.606-1.598 3.444-1.939 8.924-.275 4.42-.347 17.312-.16 28.65.341 20.616.341 20.616 3.5 23.908 1.738 1.81 9.01 6.733 16.16 10.94 10.754 6.327 13.605 7.587 16.5 7.295ZM184.98 329c.9 0 2.342-.563 3.204-1.25.86-.688 3.803-4.85 6.537-9.25 2.735-4.4 17.476-28.925 32.759-54.5 15.283-25.575 29.64-49.497 31.904-53.16 2.264-3.662 6.141-10.152 8.616-14.422 2.475-4.27 5.957-10.274 7.738-13.341 1.785-3.075 3.244-7.005 3.25-8.759.011-2.982-.694-3.614-11.238-10.077A2882.894 2882.894 0 0 0 249 152.847c-4.125-2.475-13.245-7.94-20.267-12.145a9841.507 9841.507 0 0 1-20.5-12.309 1566.199 1566.199 0 0 0-14.685-8.73c-3.823-2.238-8.13-4.242-9.57-4.453-1.998-.293-3.333.43-5.64 3.057-1.661 1.893-5.368 7.444-8.237 12.337a2040.256 2040.256 0 0 1-11.477 19.251 5775.594 5775.594 0 0 0-12.325 20.5A7048.542 7048.542 0 0 1 131.47 195c-4.823 7.975-10.898 18.1-13.501 22.5-2.604 4.4-8.45 14.075-12.991 21.5-4.542 7.425-10.268 16.988-12.725 21.252-3.26 5.657-4.304 8.405-3.861 10.168.454 1.81 4.239 4.57 15.1 11.01 7.973 4.726 20.686 12.257 28.252 16.735 7.566 4.477 17.582 10.485 22.257 13.351 4.675 2.866 13.19 7.973 18.921 11.348 5.732 3.375 11.158 6.136 12.059 6.136Zm100.681-194.022c2.318.016 3.852-.798 5.75-3.055 1.497-1.78 2.589-4.313 2.589-6.01 0-2.269-.848-3.508-3.75-5.478-2.063-1.4-6.53-4.29-9.927-6.421-3.398-2.132-9.923-6.015-14.5-8.63-4.578-2.614-10.798-6.408-13.823-8.43-3.025-2.022-7.75-4.873-10.5-6.334-2.75-1.462-8.15-4.689-12-7.171-5.023-3.24-7.838-4.434-9.968-4.232-2.1.2-3.65 1.298-5.297 3.75-1.437 2.14-2.215 4.588-2.032 6.391.254 2.498 1.604 3.72 9.297 8.412 4.95 3.02 15.525 9.427 23.5 14.238a3631.896 3631.896 0 0 1 26 15.848c7.807 4.82 12.515 7.107 14.661 7.122Z" style="stroke:#000;stroke-opacity:1;stroke-width:20;stroke-dasharray:none"/>\n <path id="path1" fill="#000" fill-rule="evenodd" stroke="none" d="M479.5 119.5c0 34 0 34-7 34.262-3.85.144-11.275.947-16.5 1.785s-12.533 2.42-16.24 3.514c-3.708 1.095-9.416 3.559-12.686 5.475-3.269 1.916-7.401 4.71-9.183 6.209-1.781 1.499-4.926 5.336-6.988 8.526-2.395 3.706-4.41 8.588-5.576 13.515-1.346 5.684-1.817 11.548-1.79 22.282.023 8.902.749 19.208 1.866 26.5 1.006 6.563 2.964 17.107 4.352 23.432 1.388 6.325 3.152 14.2 3.92 17.5.768 3.3 3.14 14.55 5.272 25s4.816 24.901 5.965 32.114c1.57 9.86 2.088 17.705 2.088 31.622 0 16.395-.284 19.635-2.485 28.386-1.367 5.433-4.299 13.56-6.515 18.061-2.832 5.75-6.265 10.559-11.545 16.172-5.308 5.642-10.516 9.846-17.735 14.316-5.62 3.481-13.145 7.611-16.72 9.179-3.575 1.567-10.739 4.4-15.92 6.293-5.181 1.894-13.506 4.308-18.5 5.365-4.994 1.056-13.58 2.637-19.08 3.513-6.633 1.057-18.754 1.716-36 1.958-14.3.201-30.5.01-36-.424s-15.625-1.537-22.5-2.45c-6.875-.912-16.575-2.328-21.557-3.146-4.98-.817-12.406-2.176-16.5-3.02-4.093-.843-9.693-2.157-12.443-2.92-2.75-.763-7.7-2.083-11-2.932-3.3-.85-10.5-2.648-16-3.996-5.5-1.348-15.85-4.3-23-6.56-7.15-2.261-14.912-4.805-17.25-5.653-2.904-1.055-4.25-2.127-4.25-3.386 0-1.228 3.252-3.97 9.75-8.22 5.363-3.507 13.202-8.277 17.421-10.6 7.671-4.225 7.671-4.225 18.5-1.287 5.956 1.616 19.154 4.998 29.329 7.515 10.175 2.517 23.45 5.465 29.5 6.55 6.05 1.087 15.05 2.427 20 2.98 4.95.552 14.85 1.53 22 2.175 8.107.73 21.657.955 36 .598 13.264-.33 27.021-1.234 32.5-2.135 5.225-.86 14-2.963 19.5-4.673s12.925-4.443 16.5-6.073a870.93 870.93 0 0 0 11.5-5.354c2.75-1.314 7.94-4.836 11.535-7.826 3.888-3.234 7.591-7.403 9.142-10.29 1.433-2.668 3.653-8.143 4.932-12.166 1.934-6.082 2.319-9.415 2.283-19.794-.024-7.149-.774-16.627-1.756-22.186-.943-5.339-2.407-13.531-3.253-18.206-.847-4.675-2.454-12.775-3.572-18-1.118-5.225-3.15-14-4.514-19.5-1.365-5.5-3.5-14.725-4.746-20.5-1.246-5.775-2.995-15-3.886-20.5-.892-5.5-2.081-14.08-2.643-19.068-.562-4.987-1.014-13.987-1.005-20 .01-6.012.652-14.799 1.427-19.525.775-4.726 2.12-11.026 2.988-14 .869-2.974 3.04-8.224 4.824-11.668 1.784-3.443 5.256-9.004 7.715-12.356 2.46-3.353 8.084-8.988 12.5-12.523 4.416-3.534 11.629-8.164 16.029-10.287 4.4-2.124 12.05-5.194 17-6.823 4.95-1.63 14.625-3.757 21.5-4.729s16.1-1.824 20.5-1.894l8-.127Z"/>\n <path id="path2" fill="#B6BCC4" fill-rule="evenodd" stroke="none" d="M116 375.743c-2.73.236-5.372-.8-12-4.708-4.675-2.756-11.133-6.704-14.35-8.773-3.218-2.07-6.48-4.977-7.25-6.462-1.094-2.111-1.4-8.348-1.4-28.56 0-21.125.267-26.213 1.461-27.799 1.43-1.9 1.574-1.879 6.75.986 2.909 1.61 8.214 4.584 11.789 6.61 3.575 2.026 9.1 5.209 12.28 7.073 3.179 1.865 10.253 6.09 15.722 9.39 5.468 3.3 13.836 8.245 18.596 10.989 4.76 2.744 10.736 6.348 13.279 8.01 2.568 1.678 4.753 3.927 4.917 5.062.246 1.716-3.42 4.101-23 14.96-14.766 8.189-24.575 13.03-26.794 13.222Z"/>\n</svg>'.trim(),subtract:'<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path fill-rule="evenodd" clip-rule="evenodd" d="M15.0722 3.9967L20.7508 9.83395L17.0544 13.5304L13.0758 17.5H21.0041V19H7.93503L4.00195 15.0669L15.0722 3.9967ZM10.952 17.5L15.4628 12.9994L11.8268 9.3634L6.12327 15.0669L8.55635 17.5H10.952Z" fill="#1F2328"></path> </g></svg>\n'.trim(),clone:'<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">\n <rect x="88" y="88" width="252" height="252" fill="none" stroke="#000" stroke-width="42"/>\n <rect x="172" y="172" width="252" height="252" fill="none" stroke="#000" stroke-width="42"/>\n</svg>'.trim(),p2p:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="path7" d="m155.327 480.616 323.962-.033V45.207L32.68 44.87l.24 35.605 411.103-.882-.338 365.995-169.126-.577Z" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8" cx="460.396" cy="461.547" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8" cx="460.775" cy="65.834" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8-0" cx="67.176" cy="62.815" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <path id="path2" fill="#000" fill-rule="evenodd" stroke="none" d="M78.983 469.63c-2.155.594-4.661-.186-6.416-1.995-1.755-1.81-2.512-4.396-1.937-6.616.52-2.005 2.036-7.54 3.369-12.298 1.333-4.76 4.302-15.274 6.598-23.365 2.295-8.09 6.159-21.33 8.585-29.421a5326.7 5326.7 0 0 0 9.458-32.018c2.775-9.519 6.848-23.538 9.05-31.153a3424.585 3424.585 0 0 1 8.424-28.556c2.432-8.09 5.74-19.445 7.35-25.23 1.61-5.786 4.963-13.271 7.45-16.634 3.196-4.319 8.828-8.134 19.19-12.998 8.067-3.787 22.221-10.287 31.454-14.445 9.232-4.158 20.186-9.16 24.34-11.116a766.22 766.22 0 0 1 15.108-6.874c4.154-1.824 8.5-4.181 9.657-5.238 1.675-1.53 1.537-3.405-.681-9.226-2.27-5.96-2.436-8.498-.898-13.779 1.221-4.19 5.936-10.614 13.373-18.217 6.772-6.923 13.882-12.502 17.322-13.59 4.562-1.444 7.103-1.28 11.648.752 3.426 1.532 23.389 20.759 48.618 46.826 23.543 24.325 45.072 47.061 47.841 50.525 3.873 4.843 5.036 8.022 5.036 13.76 0 6.664-.988 8.548-9.232 17.594-5.078 5.572-11.81 12.267-14.959 14.876-4.16 3.448-7.614 4.745-12.635 4.745-3.801 0-8.653-1.259-10.783-2.797-2.18-1.574-4.506-2.141-5.322-1.298-.797.824-5.186 10.455-9.754 21.402a5146.966 5146.966 0 0 1-15.335 36.316c-3.866 9.027-10.026 22.886-13.689 30.798-4.617 9.975-8.217 15.361-11.743 17.572-2.796 1.753-10.879 5.156-17.961 7.562-7.083 2.406-20.431 6.749-29.664 9.65-9.232 2.902-25.661 8.033-36.509 11.403-10.847 3.37-31.242 9.76-45.323 14.201-14.08 4.44-32.777 10.286-41.547 12.99-8.771 2.704-17.539 5.355-19.483 5.892zm33.106-25.66c3.124-.525 14.558-3.756 25.407-7.18 10.85-3.424 33.511-10.53 50.36-15.791a27689.101 27689.101 0 0 1 50.776-15.803c14.114-4.37 21.467-7.596 24.568-10.778 2.433-2.497 8.003-13.108 12.378-23.578 4.374-10.471 10.397-24.88 13.384-32.018 2.987-7.14 8.327-19.6 11.866-27.691 3.54-8.091 6.71-17.047 7.046-19.903.555-4.717-2.161-8.042-29.692-36.345-16.667-17.133-31.78-31.396-33.584-31.694-1.804-.298-24.636 9.269-50.737 21.259-26.102 11.99-49.09 23.383-51.087 25.316-1.997 1.934-4.862 7.745-6.369 12.914a7969.157 7969.157 0 0 0-7.086 24.55 5161.998 5161.998 0 0 1-9.204 31.594c-2.67 9.043-9.076 30.85-14.234 48.46-5.158 17.609-10.028 34.72-10.822 38.026-.794 3.304-1.129 6.334-.743 6.731.385.397 3.176-1.24 6.202-3.637 3.026-2.397 17.965-17.532 33.199-33.633 15.233-16.1 31.64-33.573 36.46-38.83 8.522-9.292 8.717-9.73 7.063-15.905-1.163-4.344-1.143-8.487.066-13.114 1.094-4.191 4.275-9.1 8.364-12.909 3.648-3.398 9.265-6.662 12.561-7.3 4.51-.872 7.9-.158 13.92 2.932 4.845 2.486 9.223 6.36 11.188 9.9 1.776 3.2 3.3 9.202 3.385 13.339.09 4.285-1.167 10.058-2.921 13.416-1.693 3.242-6.11 7.651-9.814 9.798-5.669 3.285-8.24 3.73-16.226 2.804-9.49-1.099-9.49-1.099-49.778 40.478-22.158 22.867-40.577 42.47-40.932 43.56-.438 1.349 1.175 1.679 5.036 1.031zm90.33-98.225c3.355 0 6.06-1.502 8.524-4.733 2.602-3.409 3.338-6.138 2.634-9.765-.537-2.768-2.295-6.065-3.908-7.327-1.612-1.262-5.138-2.32-7.835-2.35-2.697-.03-6.285 1.234-7.974 2.81-1.808 1.687-3.07 5.242-3.07 8.653 0 3.481 1.339 7.169 3.358 9.25 1.846 1.904 5.568 3.462 8.271 3.462zm133.61-53.652c1.976 0 7.955-4.72 14.175-11.19 10.066-10.471 10.62-11.455 8.624-15.3-1.174-2.262-22.067-24.651-46.43-49.755-28.883-29.764-45.482-45.645-47.707-45.645-1.918 0-7.85 4.523-13.542 10.323-7.359 7.498-9.997 11.39-9.645 14.229.303 2.438 17.518 21.468 45.796 50.622 29.62 30.538 46.495 46.716 48.73 46.716z" style="stroke:#010101;stroke-width:17.0446;stroke-dasharray:none;stroke-opacity:1"/>\n <path id="path3" d="m243.547 189.376 16.458-15.442 96.745 96.717-16.459 16.256z" style="fill:green;fill-opacity:1;stroke:none;stroke-width:18.6862;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path9" cx="201.178" cy="332.215" r="13.593" style="fill:#fff;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n</svg>'.trim(),p2pSubtract:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="path2" fill="#000" fill-rule="evenodd" stroke="none" d="M193.812 478.594c-90.053.005-55.415-.21-62.995-.883-3.109-.277-27.11-21.644-46.82-41.478-19.71-19.834-38.405-39.3-41.545-43.255-3.14-3.957-6.62-10.716-7.734-15.02-1.731-6.696-1.64-9.153.633-17.007 2.63-9.085 3.646-10.163 97.355-103.187 67.82-67.324 96.742-95.006 101.9-97.53 4.693-2.298 10.024-3.498 15.308-3.447 5.932.057 10.337 1.334 16.417 4.757 5.373 3.027 23.906 20.087 52.456 48.29 24.281 23.987 46.739 47.413 49.906 52.058 4.533 6.648 5.893 10.36 6.393 17.444.536 7.598-.072 10.288-3.907 17.275-3.191 5.814-24.3 28.163-70.958 75.126-36.529 36.767-66.373 67.623-66.926 68.174-19.83 19.71-39.71 38.183-39.483 38.683zm84.581-137.331c-68.043-67.49-88.703-86.892-89.81-86.657-1.106.234-27.946 26.117-59.643 57.517-31.698 31.4-57.439 57.94-57.202 58.977.236 1.037 15.757 17.272 34.492 36.078 34.062 34.193 34.062 34.193 53.6 34.193 19.536 0 19.536 0 55.274-35.285 19.656-19.407 41.937-41.932 49.514-50.054zm60.94-60.024c-66.9-66.62-87.289-86.356-88.469-86.837-1.29-.527-8.787 5.684-18.813 15.585l-16.668 16.46 44.408 44.028c24.425 24.215 44.787 44.027 45.249 44.027.461 0 8.366-7.484 17.566-16.632z" style="stroke-width:1.5931"/>\n <path id="path3" d="m214.604 225.766 35.345-32.835 89.308 87.873-34.083 33.773z" style="fill:maroon;fill-opacity:1;stroke:#010101;stroke-width:7.48758"/>\n <path id="path7" d="m238.705 480.616 240.584-.033V45.207L32.68 44.87l.24 35.605 411.103-.882-.338 365.995-169.126-.577Z" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8" cx="460.396" cy="461.547" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8" cx="460.775" cy="65.834" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8-0" cx="67.176" cy="62.815" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n</svg>'.trim(),erase:'<?xml version="1.0" encoding="utf-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" style="enable-background:new 0 0 48 48" version="1.1" viewBox="0 0 48 48">\n <style>\n .st0{fill:#000}\n </style>\n <path d="M0 0h48v48H0z" style="fill:#333;fill-opacity:0"/>\n <path d="M26.6 10V7.8h-5.2V10h-8.8v2.8h22.8V10zM35.4 15.4H12.6v4.3h1.8V37c0 1.1.9 2 2 2h15.2c1.1 0 2-.9 2-2V19.7h1.8v-4.3zM19.7 34.2c0 .5-.4 1-1 1-.5 0-1-.4-1-1V22.6c0-.5.4-1 1-1 .5 0 1 .4 1 1v11.6zm5.6-.4c0 .7-.6 1.3-1.3 1.3-.7 0-1.3-.6-1.3-1.3V23c0-.7.6-1.3 1.3-1.3.7 0 1.3.6 1.3 1.3v10.8zm5 .4c0 .5-.4 1-1 1-.5 0-1-.4-1-1V22.6c0-.5.4-1 1-1 .5 0 1 .4 1 1v11.6z" class="st0"/>\n</svg>'.trim(),collapse:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512">\n <path d="m80.033 292.15 175.755-174.592 175.755 174.591" style="fill:none;stroke:#000;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <path d="M80.105 394.539 255.86 219.947 431.615 394.54" style="fill:none;stroke:#000;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n</svg>'.trim(),undo:'<?xml version="1.0" encoding="utf-8"?>\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 48 48" xml:space="preserve">\n<style type="text/css">\n\t.st0{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;}\n</style>\n<g>\n\t<path class="st0" d="M14,18h10c6.6,0,12,5.4,12,12s-5.4,12-12,12s-12-5.4-12-12"/>\n\t<polyline class="st0" points="18,14 14,18 18,22"/>\n</g>\n</svg>\n'.trim(),redo:'<?xml version="1.0" encoding="utf-8"?>\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 48 48" xml:space="preserve">\n<style type="text/css">\n\t.st0{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;}\n</style>\n<g>\n\t<path class="st0" d="M34,18H24C17.4,18,12,23.4,12,30s5.4,12,12,12s12-5.4,12-12"/>\n\t<polyline class="st0" points="30,14 34,18 30,22"/>\n</g>\n</svg>\n'.trim()},Mo=(t,e)=>{yo(t,e)};class wo{static getCenter(t){let e=0,n=0,r=0;t.forEach(t=>{let o=t.lat,i=t.lng;o*=f,i*=f,e+=Math.cos(o)*Math.cos(i),n+=Math.cos(o)*Math.sin(i),r+=Math.sin(o)});let o=Math.atan2(n,e);const i=Math.sqrt(e*e+n*n);let s=Math.atan2(r,i);s*=m,o*=m;return{lat:s,lng:o}}static getSouthWest(t){return this.getBounds(t).getSouthWest()}static getNorthEast(t){return this.getBounds(t).getNorthEast()}static getNorthWest(t){return this.getBounds(t).getNorthWest()}static getSouthEast(t){return this.getBounds(t).getSouthEast()}static getNorth(t){return this.getBounds(t).getNorth()}static getSouth(t){return this.getBounds(t).getSouth()}static getWest(t){return this.getBounds(t).getWest()}static getEast(t){return this.getBounds(t).getEast()}static getSqmArea(t){const e=new a.Polygon(t).toGeoJSON();return this.turfHelper.getPolygonArea(e)}static getPerimeter(t){const e=new a.Polygon(t).toGeoJSON();return 1e3*this.turfHelper.getPolygonPerimeter(e)}static getPolygonChecksum(t){const e=t.filter((t,e,n)=>{const r=n.find(e=>e.lat===t.lat&&e.lng===t.lng);return!!r&&n.indexOf(r)===e});return e.reduce((t,e)=>+t+ +e.lat,0)*e.reduce((t,e)=>+t+ +e.lng,0)}static getMidPoint(t,e){const n=this.turfHelper.getMidpoint(t,e);return{lat:n.lat,lng:n.lng}}static getBounds(t){const e=[];t.forEach(t=>{isNaN(t.lat)||isNaN(t.lng),e.push(t)});return new a.Polyline(e).getBounds()}static getCenterOfMass(t){const e=this.turfHelper.getCenterOfMass(t);return{lat:e.geometry.coordinates[1],lng:e.geometry.coordinates[0]}}static getCenterOfPolygonByIndexWithOffsetFromCenterOfMass(t,e){const n=this.turfHelper.getCenterOfMass(t),r={lat:n.geometry.coordinates[1],lng:n.geometry.coordinates[0]},o=this.getPolygonLatLngAtIndex(t,e)??r,i=o.lat-r.lat,s=o.lng-r.lng,a={geometry:{coordinates:[r.lng+.5*s,r.lat+.5*i]}};return{lat:a.geometry.coordinates[1],lng:a.geometry.coordinates[0]}}static getPolygonLatLngAtIndex(t,e){const n=t.geometry;if(!n)return null;let r;if("Polygon"===n.type)r=n.coordinates[0];else{if("MultiPolygon"!==n.type)return null;r=n.coordinates[0][0]}if(!r||0===r.length)return null;if(r.length>1){const t=r[0],e=r[r.length-1];t[0]===e[0]&&t[1]===e[1]&&(r=r.slice(0,r.length-1))}if(0===r.length)return null;const o=r[(e%r.length+r.length)%r.length];return{lat:o[1],lng:o[0]}}}i(wo,"turfHelper",new go(u));class Po{constructor(t){if(i(this,"polygon",[]),i(this,"trashcanPoint",[]),i(this,"sqmArea",[]),i(this,"perimeter",[]),!Array.isArray(t))return;if(t.length>0&&Array.isArray(t[0])&&t[0].length>0&&"object"==typeof t[0][0]&&"lat"in t[0][0]){const e=t[0];return this.trashcanPoint[0]=this.getTrashcanPoint(e),this.sqmArea[0]=this.calculatePolygonArea(e),this.perimeter[0]=this.calculatePolygonPerimeter(e),void(this.polygon[0]=[e])}if(t.length>0&&t[0]&&"object"==typeof t[0]&&"lat"in t[0]){const e=t,n=[[e]];return this.trashcanPoint[0]=this.getTrashcanPoint(e),this.sqmArea[0]=this.calculatePolygonArea(e),this.perimeter[0]=this.calculatePolygonPerimeter(e),void(this.polygon[0]=n[0])}t.forEach((t,e)=>{t&&Array.isArray(t)&&t[0]&&Array.isArray(t[0])&&(this.trashcanPoint[e]=this.getTrashcanPoint(t[0]),this.sqmArea[e]=this.calculatePolygonArea(t[0]),this.perimeter[e]=this.calculatePolygonPerimeter(t[0]),this.polygon[e]=t)})}setSqmArea(t){this.sqmArea[0]=t}getTrashcanPoint(t){if(!Array.isArray(t)||0===t.length)return console.warn("getTrashcanPoint: Invalid polygon array:",t),{lat:0,lng:0};const e=t.filter(t=>t&&"object"==typeof t&&"number"==typeof t.lat&&"number"==typeof t.lng&&!isNaN(t.lat)&&!isNaN(t.lng));if(0===e.length)return console.warn("getTrashcanPoint: No valid coordinates found:",t),{lat:0,lng:0};const n=Math.max(...e.map(t=>t.lat)),r=e.findIndex(t=>t.lat===n);if(-1===r)return console.warn("getTrashcanPoint: Could not find max lat coordinate"),{lat:0,lng:0};let o,i;if(r>0?(o=e[r-1],i=r<e.length-1?e[r+1]:e[0]):(o=e[e.length-1],i=e[r+1]),!o||!i)return console.warn("getTrashcanPoint: Could not determine previous/next points"),e[r]||{lat:0,lng:0};const s=o.lng<i.lng?o:i;return wo.getMidPoint(e[r],s)}calculatePolygonArea(t){return wo.getSqmArea(t)}calculatePolygonPerimeter(t){return wo.getPerimeter(t)}}class bo{constructor(t){i(this,"polygonInfoListeners",[]),i(this,"polygonDrawStateListeners",[]),i(this,"polygonInformationStorage",[]),this.mapStateService=t}onPolygonInfoUpdated(t){this.polygonInfoListeners.push(t)}emitPolygonInfoUpdated(){for(const t of this.polygonInfoListeners)t(this.polygonInformationStorage)}onPolygonDrawStateUpdated(t){this.polygonDrawStateListeners.push(t)}updatePolygons(){const t=[];this.polygonInformationStorage.length>0&&this.polygonInformationStorage.forEach(e=>{const n=[];e.polygon.forEach(t=>{t.forEach(t=>{const e=[...t];t.length>0&&t[0].toString()!==t[t.length-1].toString()&&e.push(t[0]),n.push(e)})}),t.push(n)}),this.mapStateService.updatePolygons(t),this.saveCurrentState()}saveCurrentState(){this.emitPolygonInfoUpdated()}deleteTrashcan(t){const e=this.polygonInformationStorage.findIndex(e=>e.polygon[0]===t);-1!==e&&(this.polygonInformationStorage.splice(e,1),this.updatePolygons())}deleteTrashCanOnMulti(t){let e=0;this.polygonInformationStorage.forEach((n,r)=>{const o=n.polygon.findIndex(e=>e.toString()===t.toString());o>=0&&(e=r,n.trashcanPoint.splice(o,1),n.sqmArea.splice(o,1),n.perimeter.splice(o,1),n.polygon.splice(o,1))}),this.updatePolygons(),this.polygonInformationStorage.length>1&&this.polygonInformationStorage.splice(e,1)}deletePolygonInformationStorage(){this.polygonInformationStorage=[]}createPolygonInformationStorage(t){t.length>0&&(t.forEach(t=>{var e;const n=null==(e=t.getLayers)?void 0:e.call(t);if(null==n?void 0:n[0]){const t=n[0].getLatLngs(),e=new Po(t);this.polygonInformationStorage.push(e)}}),this.updatePolygons())}}class xo{constructor(){i(this,"map",null),i(this,"mapListeners",[])}onMapUpdated(t){this.map&&t(this.map),this.mapListeners.push(t)}emitMapUpdated(){if(this.map)for(const t of this.mapListeners)t(this.map)}updateMapState(t){this.map=t,this.emitMapUpdated()}updatePolygons(t){}}class ko{constructor(){i(this,"eventListeners",new Map)}on(t,e){this.eventListeners.has(t)||this.eventListeners.set(t,[]),this.eventListeners.get(t).push(e)}off(t,e){const n=this.eventListeners.get(t);if(n){const t=n.indexOf(e);t>-1&&n.splice(t,1)}}emit(t,e){var n;this.eventListeners.has(t)&&(null==(n=this.eventListeners.get(t))||n.forEach(t=>{t(e)}))}}class Eo{constructor(t,e){i(this,"state"),i(this,"config"),i(this,"eventManager"),this.config=t,this.eventManager=e,this.state=this.createInitialState()}createInitialState(){return{polygonDragging:this.config.modes.dragPolygons??!1,markerDragging:this.config.modes.dragElbow??!1,edgeClicking:!0,polygonClicking:!0,canStartDrawing:!0,canCompletePolygon:!1,mapDragging:!0,mapZooming:!0,mapDoubleClickZoom:!0,currentMode:c.Off,isDrawingActive:!1,isModifierKeyHeld:!1,showCrosshairCursor:!1,showDragCursor:!1}}updateStateForMode(t){switch(this.state.currentMode=t,t){case c.Off:this.setOffModeState();break;case c.Add:case c.Subtract:this.setDrawingModeState();break;case c.PointToPoint:case c.PointToPointSubtract:this.setPointToPointModeState();break;case c.Clone:this.setCloneModeState()}this.state.isDrawingActive=t!==c.Off&&t!==c.Clone,this.eventManager.emit("polydraw:mode:change",{mode:t})}setOffModeState(){this.state.polygonDragging=this.config.modes.dragPolygons??!1,this.state.markerDragging=this.config.modes.dragElbow??!1,this.state.edgeClicking=!0,this.state.polygonClicking=!0,this.state.canStartDrawing=!0,this.state.canCompletePolygon=!1,this.state.mapDragging=!0,this.state.mapZooming=!0,this.state.mapDoubleClickZoom=!0,this.state.showCrosshairCursor=!1,this.state.showDragCursor=!1}setDrawingModeState(){this.state.polygonDragging=!1,this.state.markerDragging=!1,this.state.edgeClicking=!1,this.state.polygonClicking=!1,this.state.canStartDrawing=!0,this.state.canCompletePolygon=!0,this.state.mapDragging=!1,this.state.mapZooming=!1,this.state.mapDoubleClickZoom=!1,this.state.showCrosshairCursor=!0,this.state.showDragCursor=!1}setPointToPointModeState(){this.state.polygonDragging=!1,this.state.markerDragging=!1,this.state.edgeClicking=!1,this.state.polygonClicking=!1,this.state.canStartDrawing=!0,this.state.canCompletePolygon=!0,this.state.mapDragging=!1,this.state.mapZooming=!1,this.state.mapDoubleClickZoom=!1,this.state.showCrosshairCursor=!0,this.state.showDragCursor=!1}setCloneModeState(){this.state.polygonDragging=this.config.modes.clonePolygons??!1,this.state.markerDragging=!1,this.state.edgeClicking=!1,this.state.polygonClicking=!1,this.state.canStartDrawing=!1,this.state.canCompletePolygon=!1,this.state.mapDragging=!0,this.state.mapZooming=!0,this.state.mapDoubleClickZoom=!0,this.state.showCrosshairCursor=!1,this.state.showDragCursor=!0}setModifierKeyState(t){this.state.isModifierKeyHeld=t,this.state.currentMode,c.Off}canPerformAction(t){switch(t){case"polygonDrag":return this.state.polygonDragging;case"markerDrag":return this.state.markerDragging;case"edgeClick":return this.state.edgeClicking;case"polygonClick":return this.state.polygonClicking;case"startDrawing":return this.state.canStartDrawing;case"completePolygon":return this.state.canCompletePolygon;case"mapDrag":return this.state.mapDragging;case"mapZoom":return this.state.mapZooming;case"mapDoubleClickZoom":return this.state.mapDoubleClickZoom;default:return!1}}isInDrawingMode(){return this.state.isDrawingActive}isInOffMode(){return this.state.currentMode===c.Off}getCurrentMode(){return this.state.currentMode}getState(){return{...this.state}}shouldShowCrosshairCursor(){return this.state.showCrosshairCursor}shouldShowDragCursor(){return this.state.showDragCursor}updateConfig(t){this.config=t,this.updateStateForMode(this.state.currentMode)}}class Lo{constructor(t){i(this,"turfHelper"),i(this,"map"),i(this,"config"),i(this,"modeManager"),i(this,"eventManager"),i(this,"tracer"),i(this,"p2pMarkers",[]),i(this,"isModifierKeyHeld",!1),i(this,"markerModifierHandlers",new WeakMap),this.turfHelper=t.turfHelper,this.map=t.map,this.config=t.config,this.modeManager=t.modeManager,this.eventManager=t.eventManager,this.tracer=t.tracer}mouseMove(t){if("latlng"in t&&t.latlng)this.tracer.addLatLng(t.latlng);else if("touches"in t&&t.touches&&t.touches.length>0){const e=this.map.getContainer().getBoundingClientRect(),n=this.map.containerPointToLatLng([t.touches[0].clientX-e.x,t.touches[0].clientY-e.y]);this.tracer.addLatLng(n)}}async mouseUpLeave(t){const e=this.tracer.toGeoJSON();if(!e||!e.geometry||!e.geometry.coordinates||e.geometry.coordinates.length<3)return{success:!1,error:"Not enough points to form a valid polygon. Event: "+JSON.stringify(t)};let n;try{n=this.turfHelper.createPolygonFromTrace(e)}catch(r){return{success:!1,error:(r instanceof Error?r.message:"Failed to create polygon from trace")+". Event: "+JSON.stringify(t)}}return n&&n.geometry&&n.geometry.coordinates&&0!==n.geometry.coordinates.length?(this.eventManager.emit("polydraw:polygon:created",{polygon:n,mode:this.modeManager.getCurrentMode()}),{success:!0,polygon:n}):{success:!1,error:"Invalid polygon created from trace. Event: "+JSON.stringify(t)}}setModifierKey(t){this.isModifierKeyHeld=t}shouldAllowP2PMarkerDeletion(){if(!this.isModifierKeyHeld||!this.config.modes.edgeDeletion)return!1;if(this.config.modifierSubtractMode){const t=this.modeManager.getCurrentMode();if(t===c.PointToPoint||t===c.PointToPointSubtract)return!1}return!0}handlePointToPointClick(t){if(t){if(this.p2pMarkers.length>=3){const e=this.p2pMarkers[0].getLatLng();if(this.isClickingFirstPoint(t,e))return void this.completePointToPointPolygon()}try{const e=this.isTouchDevice(),n=0===this.p2pMarkers.length,r=n?"leaflet-polydraw-p2p-marker leaflet-polydraw-p2p-first-marker":"leaflet-polydraw-p2p-marker",o=n?e?[24,24]:[20,20]:e?[18,18]:[16,16],i=new a.Marker(t,{icon:mo.createDivIcon({className:r,iconSize:o}),draggable:this.config.modes.dragElbow}).addTo(this.map);i.on("mousedown",t=>{a.DomEvent.stopPropagation(t)}),i.on("drag",()=>{this.updateP2PTracer()}),i.on("click",t=>{this.shouldAllowP2PMarkerDeletion()&&(this.deleteP2PMarker(i),a.DomEvent.stopPropagation(t))}),i.on("mouseover",()=>this.onMarkerHoverForEdgeDeletion(i,!0)),i.on("mouseout",()=>this.onMarkerHoverForEdgeDeletion(i,!1)),n&&(i.on("mouseover",()=>{if(this.p2pMarkers.length>=3){const t=i.getElement();t&&(t.style.backgroundColor=this.config.colors.p2p.closingMarker,t.style.borderColor=this.config.colors.p2p.closingMarker,t.style.cursor="pointer",t.title="Click to close polygon")}}),i.on("mouseout",()=>{const t=i.getElement();t&&(t.style.backgroundColor="",t.style.borderColor="",t.style.cursor="",t.title="")}),i.on("click",t=>{if(this.shouldAllowP2PMarkerDeletion())return this.deleteP2PMarker(i),void a.DomEvent.stopPropagation(t);this.p2pMarkers.length>=3&&(a.DomEvent.stopPropagation(t),this.completePointToPointPolygon())})),this.p2pMarkers.push(i),this.updateP2PTracer(),this.updateFirstMarkerReadyState()}catch{}}}handleDoubleClick(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.p2pMarkers.length>=3&&this.completePointToPointPolygon()}handleDoubleTap(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.p2pMarkers.length>=3&&this.completePointToPointPolygon()}completePointToPointPolygon(){const t=this.p2pMarkers.map(t=>t.getLatLng());if(t.length<3)return;const e=[...t],n=t[0],r=t[t.length-1];n.lat===r.lat&&n.lng===r.lng||e.push(n);try{const t=e.map(t=>[t.lng,t.lat]),n=this.turfHelper.getMultiPolygon([[t]]);this.clearP2pMarkers(),this.resetTracer(),this.eventManager.emit("polydraw:polygon:created",{polygon:n,mode:this.modeManager.getCurrentMode(),isPointToPoint:!0})}catch(o){ao()||console.warn("Error completing point-to-point polygon:",o),this.clearP2pMarkers(),this.resetTracer()}}cancelPointToPointDrawing(){this.clearP2pMarkers(),this.resetTracer(),this.eventManager.emit("polydraw:draw:cancel",{mode:c.PointToPoint})}clearP2pMarkers(){this.p2pMarkers.forEach(t=>{this.detachMarkerModifierHandler(t),this.map.removeLayer(t)}),this.p2pMarkers=[]}resetTracer(){this.tracer.setLatLngs([]);try{this.tracer.setStyle({dashArray:void 0})}catch{}}isClickingFirstPoint(t,e){if(!e)return!1;const n=this.map.latLngToLayerPoint(t),r=this.map.latLngToLayerPoint(e);return n.distanceTo(r)<=(this.isTouchDevice()?36:12)}isTouchDevice(){return so()}updateP2PTracer(){const t=this.p2pMarkers.map(t=>t.getLatLng());if(this.tracer.setLatLngs(t),this.p2pMarkers.length>=2)try{const t=this.modeManager.getCurrentMode()===c.PointToPointSubtract?this.config.colors.subtractLine:this.config.colors.polyline;this.tracer.setStyle({color:t,dashArray:"5, 5"})}catch{}else try{this.tracer.setStyle({dashArray:void 0})}catch{}}deleteP2PMarker(t){const e=this.p2pMarkers.findIndex(e=>e===t);e>-1&&(this.p2pMarkers.splice(e,1),this.detachMarkerModifierHandler(t),this.map.removeLayer(t),this.updateP2PTracer(),0===e&&this.p2pMarkers.length>0&&this.setupFirstMarker(),this.updateFirstMarkerReadyState())}getP2pMarkers(){return[...this.p2pMarkers]}isInPointToPointMode(){const t=this.modeManager.getCurrentMode();return t===c.PointToPoint||t===c.PointToPointSubtract}getTracerPointsCount(){return this.tracer.getLatLngs().length}setupFirstMarker(){if(0===this.p2pMarkers.length)return;const t=this.p2pMarkers[0],e=t.getElement();e&&(e.classList.add("leaflet-polydraw-p2p-first-marker"),e.classList.remove("leaflet-polydraw-p2p-first-marker-ready"),t.setIcon(mo.createDivIcon({className:"leaflet-polydraw-p2p-marker leaflet-polydraw-p2p-first-marker",iconSize:[20,20]}))),t.off("mouseover"),t.off("mouseout"),t.off("click"),t.on("mouseover",()=>{if(this.p2pMarkers.length>=3){const e=t.getElement();e&&(e.style.cursor="pointer",e.title="Click to close polygon")}}),t.on("mouseout",()=>{const e=t.getElement();e&&(e.style.backgroundColor="",e.style.borderColor="",e.style.cursor="",e.title="")}),t.on("click",e=>{if(this.shouldAllowP2PMarkerDeletion())return this.deleteP2PMarker(t),void a.DomEvent.stopPropagation(e);this.p2pMarkers.length>=3&&(a.DomEvent.stopPropagation(e),this.completePointToPointPolygon())})}updateFirstMarkerReadyState(){if(0===this.p2pMarkers.length)return;const t=this.p2pMarkers[0].getElement();t&&(this.p2pMarkers.length>=3?(t.classList.add("leaflet-polydraw-p2p-first-marker-ready"),t.setAttribute("data-p2p-mode",this.modeManager.getCurrentMode()===c.PointToPointSubtract?"subtract":"add"),t.style.cursor="pointer",t.title="Click to close polygon"):(t.classList.remove("leaflet-polydraw-p2p-first-marker-ready"),t.removeAttribute("data-p2p-mode"),t.style.cursor="",t.removeAttribute("title")))}refreshP2PMarkerState(){0!==this.p2pMarkers.length&&this.updateFirstMarkerReadyState()}onMarkerHoverForEdgeDeletion(t,e){const n=t.getElement();if(n)if(e){this.detachMarkerModifierHandler(t);const e=t=>{if(this.shouldAllowP2PMarkerDeletion()){n.classList.add("edge-deletion-hover");try{this.map.getContainer().style.cursor="pointer"}catch{}}else{n.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}}};this.markerModifierHandlers.set(t,e),document.addEventListener("keydown",e),document.addEventListener("keyup",e),n.addEventListener("mousemove",e)}else{n.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}this.detachMarkerModifierHandler(t)}}detachMarkerModifierHandler(t){const e=this.markerModifierHandlers.get(t);if(!e)return;document.removeEventListener("keydown",e),document.removeEventListener("keyup",e);const n=t.getElement();n&&(n.removeEventListener("mousemove",e),n.classList.remove("edge-deletion-hover")),this.markerModifierHandlers.delete(t)}}class Do{constructor(t){i(this,"turfHelper"),i(this,"config"),this.turfHelper=t.turfHelper,this.config=t.config}checkPolygonIntersection(t,e){if(this.isPolygonInsideHole(t,e)||this.isPolygonInsideHole(e,t))return!1;try{const n=this.turfHelper.isPolygonCompletelyWithin(t,e),r=this.turfHelper.isPolygonCompletelyWithin(e,t);if(n||r)return!0}catch{}try{if(this.turfHelper.polygonIntersect(t,e))return!0}catch{}try{const n=this.turfHelper.getIntersection(t,e);if(n&&n.geometry&&("Polygon"===n.geometry.type||"MultiPolygon"===n.geometry.type)){if(this.turfHelper.getPolygonArea(n)>1e-6)return!0}}catch{}try{const n=this.turfHelper.getCoords(t),r=this.turfHelper.getCoords(e);for(const e of r)for(const n of e[0]){const e={type:"Feature",geometry:{type:"Point",coordinates:n},properties:{}};if(this.turfHelper.isPointInsidePolygon(e,t))return!0}for(const t of n)for(const n of t[0]){const t={type:"Feature",geometry:{type:"Point",coordinates:n},properties:{}};if(this.turfHelper.isPointInsidePolygon(t,e))return!0}}catch{}return!1}isPolygonInsideHole(t,e){try{const n=this.turfHelper.getCoords(e);for(const e of n){if(!e||e.length<=1)continue;const n=e.slice(1);for(const e of n)try{const n=this.turfHelper.createPolygon([e]);if(this.turfHelper.isPolygonCompletelyWithin(t,n))return!0}catch{continue}}}catch{}return!1}unionPolygons(t,e){try{let n=e;for(const e of t){const t=this.turfHelper.union(n,e);t&&(n=t)}return{success:!0,result:n}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error in unionPolygons"}}}subtractPolygon(t,e){try{const n=this.turfHelper.polygonDifference(t,e);if(n){const t=this.turfHelper.getCoords(n),e=[];for(const n of t)e.push(this.turfHelper.getMultiPolygon([n]));return{success:!0,results:e}}return{success:!0,results:[]}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error in subtractPolygon"}}}simplifyPolygon(t){var e,n;try{const r=this.turfHelper.getCoords(t);if(!r||0===r.length)return{success:!1,error:"Invalid polygon coordinates"};const o=(null==(n=null==(e=this.config.menuOperations)?void 0:e.simplify)?void 0:n.processHoles)??!0,i=r.map(t=>{const e=[];for(let n=0;n<t.length;n++){const r=t[n];if(0===n||o){if(r.length<=4){e.push(r);continue}const t=[];for(let e=0;e<r.length;e+=2)t.push(r[e]);const n=t[0],o=t[t.length-1];n[0]===o[0]&&n[1]===o[1]||t.push(n),t.length<4?e.push(r):e.push(t)}else e.push(r)}return e}),s=this.turfHelper.getMultiPolygon(i);return{success:!0,result:this.turfHelper.getTurfPolygon(s)}}catch(r){return{success:!1,error:r instanceof Error?r.message:"Unknown error in simplifyPolygon"}}}convertToBoundingBox(t){var e,n,r;try{const o=this.turfHelper.getCoords(t);if(!o||0===o.length)return{success:!1,error:"Invalid polygon coordinates"};if(!((null==(n=null==(e=this.config.menuOperations)?void 0:e.bbox)?void 0:n.processHoles)??!0)){const e=this.turfHelper.convertToBoundingBoxPolygon(t);return{success:!0,result:this.turfHelper.getTurfPolygon(e)}}const i=o.map(t=>{const e=[];for(let n=0;n<t.length;n++){const r=t[n];let o=1/0,i=-1/0,s=1/0,a=-1/0;for(const t of r)if(Array.isArray(t)&&t.length>=2){const e=t[0],n=t[1];"number"!=typeof e||"number"!=typeof n||isNaN(e)||isNaN(n)||(s=Math.min(s,e),a=Math.max(a,e),o=Math.min(o,n),i=Math.max(i,n))}if(o!==1/0&&i!==-1/0&&s!==1/0&&a!==-1/0){const t=[[s,o],[s,i],[a,i],[a,o],[s,o]];e.push(t)}else e.push(r)}return e}),s=this.turfHelper.getMultiPolygon(i);let a=this.turfHelper.getTurfPolygon(s);if(null==(r=this.config.boundingBox)?void 0:r.addMidPointMarkers){const t=this.doubleElbowsPolygon(a);t.success&&t.result&&(a=t.result)}return{success:!0,result:a}}catch(o){return{success:!1,error:o instanceof Error?o.message:"Unknown error in convertToBoundingBox"}}}bezierifyPolygon(t){try{const e=this.turfHelper.getCoords(t),n=this.turfHelper.getBezierMultiPolygon(e);return{success:!0,result:this.turfHelper.getTurfPolygon(n)}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Unknown error in bezierifyPolygon"}}}doubleElbowsPolygon(t){var e,n;try{const r=this.turfHelper.getCoords(t);if(!r||0===r.length)return{success:!1,error:"Invalid polygon coordinates"};const o=(null==(n=null==(e=this.config.menuOperations)?void 0:e.doubleElbows)?void 0:n.processHoles)??!0,i=r.map(t=>{const e=[];for(let n=0;n<t.length;n++){const r=t[n];if(0===n||o){const t=r.map(t=>({lat:t[1],lng:t[0]})),n=this.turfHelper.getDoubleElbowLatLngs(t).map(t=>[t.lng,t.lat]);e.push(n)}else e.push(r)}return e}),s=this.turfHelper.getMultiPolygon(i);return{success:!0,result:this.turfHelper.getTurfPolygon(s)}}catch(r){return{success:!1,error:r instanceof Error?r.message:"Unknown error in doubleElbowsPolygon"}}}}class So{static createDivIcon(t){const e=t.join(" ");return mo.createDivIcon({className:e})}}class Co{static normalizeEvent(t){return fo.getVersion()===l.V2&&(t.layer&&!t.propagatedFrom&&(t.propagatedFrom=t.layer),"mousedown"!==t.type&&"touchstart"!==t.type||(t._isPointerEvent=!0)),t}static getEventName(t){if(fo.getVersion()===l.V2)switch(t){case"mousedown":case"touchstart":return"pointerdown";case"mouseup":case"touchend":return"pointerup";case"mousemove":case"touchmove":return"pointermove";default:return t}return t}static shouldUsePointerEvents(){return fo.getVersion()===l.V2&&"PointerEvent"in window}static extractCoordinates(t,e){if(t.latlng)return t.latlng;if(t.touches&&t.touches.length>0){const n=e.getContainer().getBoundingClientRect();return e.containerPointToLatLng([t.touches[0].clientX-n.x,t.touches[0].clientY-n.y])}if(t.pointerType&&void 0!==t.clientX&&void 0!==t.clientY){const n=e.getContainer().getBoundingClientRect();return e.containerPointToLatLng([t.clientX-n.x,t.clientY-n.y])}if(void 0!==t.clientX&&void 0!==t.clientY){const n=e.getContainer().getBoundingClientRect();return e.containerPointToLatLng([t.clientX-n.x,t.clientY-n.y])}return null}static shouldPreventDefault(t){return!(!t.type||!t.type.startsWith("touch"))||(!t.pointerType||!1!==t.isPrimary)&&!(!("cancelable"in t)||!t.cancelable)}static getEventNames(){return fo.getVersion()===l.V2&&this.shouldUsePointerEvents()?{start:["pointerdown"],move:["pointermove"],end:["pointerup"]}:{start:["mousedown","touchstart"],move:["mousemove","touchmove"],end:["mouseup","touchend"]}}}var Ao=(t=>(t.TopLeft="top-left",t.Top="top",t.TopRight="top-right",t.Right="right",t.BottomRight="bottom-right",t.Bottom="bottom",t.BottomLeft="bottom-left",t.Left="left",t.Rotate="rotate",t.Pivot="pivot",t))(Ao||{});class To{constructor(t,e,n,r,o){var s;i(this,"map"),i(this,"pane"),i(this,"root"),i(this,"draggingHandle",null),i(this,"documentMoveHandler",null),i(this,"documentUpHandler",null),i(this,"pointerCaptureTarget",null),i(this,"activePointerId",null),i(this,"callbacks"),i(this,"rafId",null),i(this,"mode"),i(this,"onCancel"),i(this,"onConfirm"),i(this,"cancelBtn",null),i(this,"confirmBtn",null),i(this,"currentBBox",null),i(this,"currentRotation",0),i(this,"buttonsHidden",!1),i(this,"destroyed",!1),i(this,"supportsPointerEvents","undefined"!=typeof window&&"PointerEvent"in window),this.map=t,this.callbacks=e,this.mode=n,this.onCancel=r,this.onConfirm=o;const a="polydraw-transform",l=this.map;let c=null==(s=l.getPane)?void 0:s.call(l,a);c||(c=this.map.createPane(a)),c.style.zIndex="650",c.style.pointerEvents="auto",this.pane=c,this.root=document.createElement("div"),this.root.className="polydraw-transform-root",this.root.style.position="absolute",this.root.style.left="0px",this.root.style.top="0px",this.root.style.pointerEvents="none",this.pane.appendChild(this.root)}destroy(){this.destroyed||(this.destroyed=!0,null!=this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.draggingHandle=null,this.detachDocumentDragHandlers(),this.root.remove())}update(t,e,n=0){this.destroyed||null==this.rafId&&(this.rafId=requestAnimationFrame(()=>{if(this.rafId=null,!this.destroyed&&(this.render(t,e,n),this.cancelBtn||this.confirmBtn)){this.draggingHandle===Ao.Rotate&&"rotate"===this.mode||this.updateButtonPositions(t,n)}}))}render(t,e,n=0){const r=this.cancelBtn,o=this.confirmBtn;this.root.innerHTML="",this.currentBBox=t,this.currentRotation=n,this.cancelBtn=r,this.confirmBtn=o;const i=t.maxX-t.minX,s=t.maxY-t.minY,l=t.minX+i/2,c=t.minY+s/2,h=document.createElement("div");h.className="polydraw-transform-box",Object.assign(h.style,{position:"absolute",left:`${l}px`,top:`${c}px`,width:`${i}px`,height:`${s}px`,marginLeft:-i/2+"px",marginTop:-s/2+"px",border:"1px dashed #2b90d9",pointerEvents:"none",transformOrigin:"center center",transform:`rotate(${180*n/Math.PI}deg)`}),this.root.appendChild(h);const u=(t,e,r)=>{const o=e-l,i=r-c,s=Math.cos(n),h=Math.sin(n),u=l+o*s-i*h,g=c+o*h+i*s,p=document.createElement("div");p.className=`polydraw-transform-handle handle-${t}`,Object.assign(p.style,{position:"absolute",left:u-5+"px",top:g-5+"px",width:"10px",height:"10px",borderRadius:"2px",background:"#2b90d9",boxShadow:"0 0 0 1px #fff",cursor:this.cursorForHandle(t),pointerEvents:"auto",touchAction:"none"}),this.supportsPointerEvents?a.DomEvent.on(p,"pointerdown",e=>this.startDrag(t,{x:u,y:g},e),this):(a.DomEvent.on(p,"mousedown",e=>this.startDrag(t,{x:u,y:g},e),this),a.DomEvent.on(p,"touchstart",e=>this.startDrag(t,{x:u,y:g},e),this)),this.root.appendChild(p)};"scale"===this.mode?(u(Ao.TopLeft,t.minX,t.minY),u(Ao.TopRight,t.maxX,t.minY),u(Ao.BottomRight,t.maxX,t.maxY),u(Ao.BottomLeft,t.minX,t.maxY),u(Ao.Top,l,t.minY),u(Ao.Right,t.maxX,c),u(Ao.Bottom,l,t.maxY),u(Ao.Left,t.minX,c)):(u(Ao.Rotate,t.minX,t.minY),u(Ao.Rotate,t.maxX,t.minY),u(Ao.Rotate,t.maxX,t.maxY),u(Ao.Rotate,t.minX,t.maxY)),this.cancelBtn||this.confirmBtn?(this.updateButtonPositions(t,n),this.cancelBtn&&this.root.appendChild(this.cancelBtn),this.confirmBtn&&this.root.appendChild(this.confirmBtn)):this.updateButtonPositions(t,n)}cursorForHandle(t){switch(t){case Ao.Top:case Ao.Bottom:return"ns-resize";case Ao.Left:case Ao.Right:return"ew-resize";case Ao.TopLeft:case Ao.BottomRight:return"nwse-resize";case Ao.TopRight:case Ao.BottomLeft:return"nesw-resize";case Ao.Rotate:return"grab";case Ao.Pivot:return"move";default:return"default"}}startDrag(t,e,n){var r,o;if(this.destroyed)return;a.DomEvent.stop(n),this.draggingHandle=t,this.hideButtons(),this.documentMoveHandler=t=>this.onDrag(t),this.documentUpHandler=t=>this.endDrag(t);const i=document,s=this.documentMoveHandler,l=this.documentUpHandler;if(this.supportsPointerEvents&&n instanceof PointerEvent){this.activePointerId=n.pointerId,this.pointerCaptureTarget=this.map.getContainer();try{null==(o=null==(r=this.pointerCaptureTarget)?void 0:r.setPointerCapture)||o.call(r,n.pointerId)}catch{}a.DomEvent.on(i,"pointermove",s),a.DomEvent.on(i,"pointerup",l),a.DomEvent.on(i,"pointercancel",l)}else a.DomEvent.on(i,"mousemove",s),a.DomEvent.on(i,"mouseup",l),a.DomEvent.on(i,"touchmove",s),a.DomEvent.on(i,"touchend",l),a.DomEvent.on(i,"touchcancel",l);this.callbacks.onStartHandleDrag(t,e,n)}onDrag(t){if(null==this.draggingHandle)return;const e=this.getMouseLayerPoint(t);this.callbacks.onDragHandle(this.draggingHandle,e,t)}endDrag(t){if(null==this.draggingHandle)return;const e=this.draggingHandle;this.draggingHandle=null;try{const n=this.getMouseLayerPoint(t);this.callbacks.onEndHandleDrag(e,n,t),this.currentBBox&&this.updateButtonPositions(this.currentBBox,this.currentRotation),this.showButtons()}finally{this.detachDocumentDragHandlers()}}detachDocumentDragHandlers(){var t,e;if(!this.documentMoveHandler&&!this.documentUpHandler&&!this.pointerCaptureTarget)return;const n=document;if(this.supportsPointerEvents&&this.pointerCaptureTarget){if(null!=this.activePointerId)try{null==(e=(t=this.pointerCaptureTarget).releasePointerCapture)||e.call(t,this.activePointerId)}catch{}if(this.documentMoveHandler){const t=this.documentMoveHandler;a.DomEvent.off(n,"pointermove",t)}if(this.documentUpHandler){const t=this.documentUpHandler;a.DomEvent.off(n,"pointerup",t),a.DomEvent.off(n,"pointercancel",t)}this.pointerCaptureTarget=null,this.activePointerId=null}else{if(this.documentMoveHandler){const t=this.documentMoveHandler;a.DomEvent.off(n,"mousemove",t),a.DomEvent.off(n,"touchmove",t)}if(this.documentUpHandler){const t=this.documentUpHandler;a.DomEvent.off(n,"mouseup",t),a.DomEvent.off(n,"touchend",t),a.DomEvent.off(n,"touchcancel",t)}}this.documentMoveHandler=null,this.documentUpHandler=null}getMouseLayerPoint(t){const e=this.map.getContainer();let n=null,r=null;if(t.touches&&t.touches.length>0){const e=t.touches[0];n=e.clientX,r=e.clientY}else if(t.changedTouches&&t.changedTouches.length>0){const e=t.changedTouches[0];n=e.clientX,r=e.clientY}else null!=t.clientX&&(n=t.clientX,r=t.clientY);null!=n&&null!=r||(n=0,r=0);const o=e.getBoundingClientRect(),i=n-o.left,s=r-o.top,a=mo.createPoint(i,s),l=this.map.containerPointToLayerPoint(a);return{x:l.x,y:l.y}}updateButtonPositions(t,e){const n=t.maxX-t.minX,r=t.maxY-t.minY,o=t.minX+n/2,i=t.minY+r/2,s=[{x:t.minX,y:t.minY},{x:t.maxX,y:t.minY},{x:t.maxX,y:t.maxY},{x:t.minX,y:t.maxY}],l=Math.cos(e),c=Math.sin(e);let h={x:0,y:1/0},u=1/0;for(const a of s){const t=a.x-o,e=a.y-i,n=o+t*l-e*c,r=i+t*c+e*l,s=r<u,g=Math.abs(r-u)<1,p=n>h.x;(s||g&&p)&&(u=r,h={x:n,y:r})}const g=h.x,p=h.y-28,d=g+5,f=g-29;if(this.onCancel&&!this.cancelBtn&&(this.cancelBtn=document.createElement("div"),this.cancelBtn.className="polydraw-transform-cancel",this.cancelBtn.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">\n <circle cx="256" cy="256" r="236" fill="#212A32"/>\n <circle cx="256" cy="256" r="190" fill="#ffffff"/>\n <path id="path2" fill="#800000" fill-rule="evenodd" stroke="none"\n d="M 156 373.906311 C 140.875 373.871002 127.9375 373.615112 127.25 373.337708 C 126.5625 373.060303 126 372.072937 126 371.143555 C 126 370.214203 146.628433 343.53772 171.840973 311.862488 C 197.053513 280.187286 217.991867 253.463562 218.370667 252.47644 C 218.806335 251.341125 218.221786 249.464233 216.779678 247.368073 C 215.525864 245.545563 196.612503 221.361847 174.75 193.626465 C 152.887497 165.891052 135 142.531311 135 141.715881 C 135 140.900421 136.012497 139.961914 137.25 139.63028 C 138.487503 139.298645 152.408203 139.021179 168.184906 139.013641 C 184.588272 139.005859 197.976456 139.420746 199.454529 139.982727 C 201.182831 140.639801 210.486664 152.319733 227.533463 175.232727 C 241.555283 194.079712 253.994949 210.166199 255.177185 210.980438 C 257.208252 212.379272 257.562622 212.186401 261.607452 207.480438 C 263.961853 204.74118 276.052643 189 288.47583 172.5 C 300.899048 156 312.286682 141.714874 313.781738 140.75528 C 316.198669 139.203949 319.554993 139.009949 344.058868 139.00528 C 366.27774 139.001007 371.993561 139.274811 373.557343 140.418274 C 375.458923 141.808746 375.448914 141.90155 373.046875 145.150452 C 371.699341 146.973114 352.828827 170.746307 331.112396 197.979767 C 309.395966 225.213257 291.465973 248.396271 291.267914 249.497589 C 291.012512 250.91803 304.435944 268.61731 337.453918 310.395416 C 363.05426 342.787903 384 370.077271 384 371.038422 C 384 371.999603 383.288208 373.059174 382.418213 373.393005 C 381.548218 373.726868 367.485718 373.993347 351.168213 373.98526 C 329.591888 373.974548 320.854309 373.633606 319.132629 372.73526 C 317.830597 372.055847 302.980591 353.049988 286.132629 330.5 C 260.059052 295.602051 255.12793 289.5 253 289.5 C 250.878326 289.5 245.808807 295.701355 219.5 330.479431 C 202.449997 353.018127 187.375 372.023987 186 372.714691 C 184.165009 373.636475 176.184906 373.95343 156 373.906311 Z"/>\n</svg>',a.DomEvent.on(this.cancelBtn,"mousedown",t=>{t.stopPropagation(),t.preventDefault(),this.onCancel&&this.onCancel()}),a.DomEvent.on(this.cancelBtn,"touchstart",t=>{t.stopPropagation(),t.preventDefault(),this.onCancel&&this.onCancel()}),a.DomEvent.on(this.cancelBtn,"pointerdown",t=>{t.stopPropagation(),t.preventDefault(),this.onCancel&&this.onCancel()}),this.root.appendChild(this.cancelBtn)),this.onConfirm&&!this.confirmBtn&&(this.confirmBtn=document.createElement("div"),this.confirmBtn.className="polydraw-transform-confirm",this.confirmBtn.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">\n <circle cx="256" cy="256" r="236" fill="#212A32"/>\n <circle cx="256" cy="256" r="190" fill="#ffffff"/>\n <path id="check" fill="#008000" fill-rule="evenodd" stroke="none"\n d="M 223.844696 360 C 222.79425 360 204.506973 341.170593 178.987274 313.812744 \n C 144.992401 277.369232 135.966232 267.145691 136.201645 265.351257 \n C 136.396179 263.868408 143.092361 257.073425 155.444672 245.824249 \n C 166.363129 235.880859 175.214264 228.571442 176.336426 228.571442 \n C 177.515594 228.571442 181.716553 232.304138 186.987961 238.035706 \n C 191.775406 243.241058 201.629044 254.024994 208.884933 262 \n C 216.140823 269.975006 222.682266 276.635315 223.421478 276.80072 \n C 224.16246 276.966553 247.742722 250.494751 275.976837 217.800751 \n C 304.143097 185.185333 328.050385 157.879608 329.104156 157.121368 \n C 330.785767 155.911316 331.44046 156.0336 334.457672 158.121368 \n C 336.348328 159.429626 345.368622 167.190216 354.502747 175.367126 \n C 367.688812 187.171356 371.047394 190.689819 370.805115 192.445557 \n C 370.635864 193.67218 338.242889 231.469543 298.059082 277.32843 \n C 253.148834 328.581238 224.944153 360 223.844696 360 Z"/>\n</svg>',a.DomEvent.on(this.confirmBtn,"mousedown",t=>{t.stopPropagation(),t.preventDefault(),this.onConfirm&&this.onConfirm()}),a.DomEvent.on(this.confirmBtn,"touchstart",t=>{t.stopPropagation(),t.preventDefault(),this.onConfirm&&this.onConfirm()}),a.DomEvent.on(this.confirmBtn,"pointerdown",t=>{t.stopPropagation(),t.preventDefault(),this.onConfirm&&this.onConfirm()}),this.root.appendChild(this.confirmBtn)),this.cancelBtn){Object.assign(this.cancelBtn.style,{position:"absolute",left:`${f}px`,top:`${p}px`,display:"grid",placeItems:"center",pointerEvents:"auto",width:"28px",height:"28px"});const t=this.cancelBtn.querySelector("svg");t&&(t.setAttribute("width","24"),t.setAttribute("height","24")),this.cancelBtn.style.display=this.buttonsHidden?"none":"grid"}if(this.confirmBtn){Object.assign(this.confirmBtn.style,{position:"absolute",left:`${d}px`,top:`${p}px`,display:"grid",placeItems:"center",pointerEvents:"auto",width:"28px",height:"28px"});const t=this.confirmBtn.querySelector("svg");t&&(t.setAttribute("width","24"),t.setAttribute("height","24")),this.confirmBtn.style.display=this.buttonsHidden?"none":"grid"}}hideButtons(){this.buttonsHidden=!0,this.cancelBtn&&(this.cancelBtn.style.display="none"),this.confirmBtn&&(this.confirmBtn.style.display="none")}showButtons(){this.buttonsHidden=!1,this.cancelBtn&&(this.cancelBtn.style.display="grid"),this.confirmBtn&&(this.confirmBtn.style.display="grid")}}function Io(t,e){const n=t.latLngToLayerPoint(e);return{x:n.x,y:n.y}}function Oo(t,e){const n=t.layerPointToLatLng(mo.createPoint(e.x,e.y));return{lat:n.lat,lng:n.lng}}function _o(t){let e=1/0,n=1/0,r=-1/0,o=-1/0;for(const i of t)for(const t of i)for(const i of t)i.x<e&&(e=i.x),i.y<n&&(n=i.y),i.x>r&&(r=i.x),i.y>o&&(o=i.y);return{minX:e,minY:n,maxX:r,maxY:o}}function Fo(t){return{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2}}function Bo(t,e,n,r){const o=t.x-e.x,i=t.y-e.y;return{x:e.x+o*n,y:e.y+i*r}}function Ho(t,e,n,r,o){return t.map(t=>t.map(t=>t.map(t=>function(t,e,n){const r=Math.cos(n),o=Math.sin(n),i=t.x-e.x,s=t.y-e.y;return{x:e.x+i*r-s*o,y:e.y+i*o+s*r}}(Bo(t,e,n,r),e,o))))}function zo(t){if(0===t.length)return t;const e=t[0],n=t[t.length-1];return e.lat===n.lat&&e.lng===n.lng?t:[...t,{lat:e.lat,lng:e.lng}]}function Go(t){if(!Array.isArray(t))return[[t]];const e=t;return 0===e.length?[]:Array.isArray(e[0])?Array.isArray(e[0][0])?t:[t]:[[t]]}class No{constructor(t,e,n="scale",r){var o,s;i(this,"map"),i(this,"polygon"),i(this,"overlay"),i(this,"state"),i(this,"normalizedLatLngs"),i(this,"wasMapDraggingEnabled",!1),i(this,"mode"),i(this,"onExit"),i(this,"rotateStartAngle",null),i(this,"rotateBaseRotation",0),i(this,"originalTouchAction",null),i(this,"mapDraggingHandler"),i(this,"onKeyDown",t=>{"Escape"===t.key&&this.handleCancel()}),i(this,"updateOverlay",()=>{const t=_o(this.state.originalPixelRings.map(t=>t.map(t=>t.map(t=>Bo(t,this.state.pivot,this.state.scaleX,this.state.scaleY)))));this.overlay.update(t,this.state.pivot,this.state.rotation)}),this.map=t,this.mode=n,this.onExit=r;const l=e.getLayers().find(t=>t instanceof a.Polygon);if(!l)throw new Error("FeatureGroup does not contain a polygon");this.polygon=l;const c=this.polygon.getLatLngs();this.normalizedLatLngs=Go(c);const h=function(t,e){const n=[],r=[];for(const o of e){const e=[],i=[];for(const n of o){const r=n.map(e=>Io(t,{lat:e.lat,lng:e.lng}));e.push(r),i.push(n.length)}n.push(e),r.push(i)}return{rings:n,ringLengths:r}}(this.map,this.normalizedLatLngs),u=Fo(_o(h.rings));this.state={isActive:!0,originalLatLngs:c,originalPixelRings:h.rings,pivot:u,scaleX:1,scaleY:1,rotation:0,uniformScale:!1,snapRotation:!1,scaleFromPivot:!1},this.overlay=new To(this.map,{onStartHandleDrag:(t,e,n)=>this.onStartDrag(t,e,n),onDragHandle:(t,e)=>this.onDrag(t,e),onEndHandleDrag:()=>{}},this.mode,()=>this.handleCancel(),()=>this.handleConfirm()),this.updateOverlay(),this.map.on("zoom viewreset move",this.updateOverlay,this),this.mapDraggingHandler=this.map.dragging,this.mapDraggingHandler&&("function"==typeof this.mapDraggingHandler.enabled&&(this.wasMapDraggingEnabled=this.mapDraggingHandler.enabled()),null==(s=(o=this.mapDraggingHandler).disable)||s.call(o));const g=this.map.getContainer();this.originalTouchAction=g.style.touchAction||null,g.style.touchAction="none",document.addEventListener("keydown",this.onKeyDown)}destroy(){document.removeEventListener("keydown",this.onKeyDown),this.map.off("zoom viewreset move",this.updateOverlay,this),this.overlay.destroy(),this.state.isActive=!1,this.mapDraggingHandler&&this.wasMapDraggingEnabled&&"function"==typeof this.mapDraggingHandler.enable&&this.mapDraggingHandler.enable();const t=this.map.getContainer();null!==this.originalTouchAction?t.style.touchAction=this.originalTouchAction:t.style.touchAction=""}onStartDrag(t,e,n){const r=navigator.userAgent.toLowerCase().includes("mac")?n.metaKey:n.ctrlKey;if(this.state.uniformScale=!!n.shiftKey,this.state.scaleFromPivot=!!n.altKey,this.state.snapRotation=!!r,t===Ao.Rotate){const t=this.state.scaleFromPivot?this.state.pivot:Fo(_o(this.state.originalPixelRings)),n=Math.atan2(e.y-t.y,e.x-t.x);this.rotateStartAngle=n,this.rotateBaseRotation=this.state.rotation||0}}onDrag(t,e){const n=_o(this.state.originalPixelRings);switch(t){case Ao.Rotate:{const t=this.state.scaleFromPivot?this.state.pivot:Fo(n);this.handleRotateDrag(e,t);break}case Ao.Pivot:this.handlePivotDrag(e);break;default:{const r=this.state.scaleFromPivot?this.state.pivot:Fo(n);this.handleScaleDrag(t,e,n,r);break}}this.preview()}handleRotateDrag(t,e){if("rotate"!==this.mode)return;const n=Math.atan2(t.y-e.y,t.x-e.x);let r;if(null!=this.rotateStartAngle){const t=n-this.rotateStartAngle;r=this.rotateBaseRotation+t}else r=n;this.state.rotation=this.state.snapRotation?function(t,e=15){const n=e*Math.PI/180;return Math.round(t/n)*n}(r,15):r}handlePivotDrag(t){this.state.pivot=t}handleScaleDrag(t,e,n,r){if("scale"!==this.mode)return;const o=n.maxX-n.minX,i=n.maxY-n.minY;let s=this.state.scaleX,a=this.state.scaleY;switch(t){case Ao.Left:case Ao.TopLeft:case Ao.BottomLeft:s=(r.x-e.x)/(r.x-n.minX||1);break;case Ao.Right:case Ao.TopRight:case Ao.BottomRight:s=(e.x-r.x)/(n.maxX-r.x||1)}switch(t){case Ao.Top:case Ao.TopLeft:case Ao.TopRight:a=(r.y-e.y)/(r.y-n.minY||1);break;case Ao.Bottom:case Ao.BottomLeft:case Ao.BottomRight:a=(e.y-r.y)/(n.maxY-r.y||1)}if(t!==Ao.Left&&t!==Ao.Right||(a=this.state.scaleY),t!==Ao.Top&&t!==Ao.Bottom||(s=this.state.scaleX),this.state.uniformScale){const t=Math.abs(o)>Math.abs(i)?Math.sign(s)*Math.abs(s):Math.sign(a)*Math.abs(a);s=t,a=t}const l=Number.isFinite(s)&&Math.abs(s)>.001,c=Number.isFinite(a)&&Math.abs(a)>.001;l&&(this.state.scaleX=s),c&&(this.state.scaleY=a)}preview(){const t=Ho(this.state.originalPixelRings,this.state.pivot,this.state.scaleX,this.state.scaleY,this.state.rotation),e=function(t,e,n){const r=[];for(let o=0;o<e.length;o++){const i=[];for(let r=0;r<e[o].length;r++){const s=e[o][r].map(e=>Oo(t,e)),a=n[o][r],l=a.length>2&&a[0].lat===a[a.length-1].lat&&a[0].lng===a[a.length-1].lng;i.push(l?zo(s):s)}r.push(i)}return r}(this.map,t,this.normalizedLatLngs);this.polygon.setLatLngs(e),this.updateOverlay()}apply(){return Go(this.polygon.getLatLngs())}cancel(){this.polygon.setLatLngs(this.state.originalLatLngs)}handleCancel(){this.cancel(),this.onExit&&this.onExit(!1),this.destroy()}handleConfirm(){this.onExit&&this.onExit(!0),this.destroy()}}class Uo{static createMenuButton(t,e,n){const r=document.createElement("div");return r.classList.add("marker-menu-button",...n),r.title=e,r.setAttribute("data-action-id",t),r}static buildMenuPopup(t){const e=document.createElement("div");e.classList.add("alter-marker-outer-wrapper");const n=document.createElement("div");n.classList.add("alter-marker-wrapper");const r=document.createElement("button");r.type="button",r.className="marker-menu-close",r.setAttribute("aria-label","Close menu"),r.innerHTML="×",n.appendChild(r);const o=document.createElement("div");o.classList.add("content");const i=document.createElement("div");return i.classList.add("marker-menu-content"),t.forEach(t=>{i.appendChild(t)}),o.appendChild(i),n.appendChild(o),e.appendChild(n),e}static buildInfoPopup(t){const e=document.createElement("div");e.classList.add("info-marker-outer-wrapper");const n=document.createElement("div");n.classList.add("info-marker-wrapper");const r=document.createElement("div");return r.classList.add("content"),r.appendChild(t),n.appendChild(r),e.appendChild(n),e}}class Ro{constructor(t,e){i(this,"markerFeatureGroupMap",new WeakMap),i(this,"markerModifierHandlers",new WeakMap),i(this,"markerTouchListeners",new WeakMap),i(this,"markerEdgeDeletionListeners",new WeakMap),i(this,"_activeMarker",null),i(this,"isDraggingMarker",!1),i(this,"turfHelper"),i(this,"polygonInformation"),i(this,"map"),i(this,"config"),i(this,"modeManager"),i(this,"eventManager"),i(this,"saveHistoryState"),i(this,"currentDragPolygon",null),i(this,"currentDragIsClone",!1),i(this,"currentModifierDragMode",!1),i(this,"isModifierKeyHeld",!1),i(this,"currentCloneGhost",null),i(this,"dragCancelHandlersAttached",!1),i(this,"_boundDragTouchMove",null),i(this,"_boundDragTouchEnd",null),i(this,"polygonTouchStartListeners",new WeakMap),i(this,"_openMenuPopup",null),i(this,"transformModeActive",!1),i(this,"transformControllers",new WeakMap),i(this,"deleteMarkerSuppressUntil",0),i(this,"getFeatureGroups"),i(this,"removeFeatureGroup"),i(this,"onPolygonMouseMove",t=>{if(!this.currentDragPolygon||!this.currentDragPolygon._polydrawDragData||!this.currentDragPolygon._polydrawDragData.isDragging)return;const e=this.currentDragPolygon,n=e._polydrawDragData;if(!this.currentDragIsClone){const e=t.originalEvent&&"metaKey"in t.originalEvent?t.originalEvent:t;this.detectDragSubtractModifierKey(e)!==this.currentModifierDragMode&&this.handleModifierToggleDuringDrag(e)}const r=n.startPosition,o=t.latlng,i=o.lat-r.lat,s=o.lng-r.lng,a=this.offsetPolygonCoordinates(n.startLatLngs,i,s);e.setLatLngs(a),this.updateMarkersAndHoleLinesDuringDrag(e,i,s)}),i(this,"onPolygonMouseUp",t=>{if(!this.currentDragPolygon||!this.currentDragPolygon._polydrawDragData||!this.currentDragPolygon._polydrawDragData.isDragging)return;const e=this.currentDragPolygon,n=e._polydrawDragData;n.isDragging=!1,this.map.off("mousemove",this.onPolygonMouseMove,this),this.map.off("mouseup",this.onPolygonMouseUp,this),this.map.off("pointermove",this.onPolygonMouseMove,this),this.map.off("pointerup",this.onPolygonMouseUp,this),this.map.dragging&&this.map.dragging.enable(),e._polydrawDragData&&null!=e._polydrawDragData.originalOpacity&&e.setStyle({fillOpacity:e._polydrawDragData.originalOpacity}),this.setMarkerVisibility(e,!0);try{this.map.getContainer().style.cursor=""}catch{}this.clearCloneGhost(),this.detachDragTouchListeners(),this.detachDragCancelHandlers();const r=this.currentDragIsClone;this.currentDragIsClone=!1,r?this.updatePolygonAfterCloneDrag(e,n):this.updatePolygonAfterDrag(e),e._polydrawOriginalMarkerPositions&&(e._polydrawOriginalMarkerPositions.clear(),delete e._polydrawOriginalMarkerPositions),e._polydrawOriginalHoleLinePositions&&(e._polydrawOriginalHoleLinePositions.clear(),delete e._polydrawOriginalHoleLinePositions),e._polydrawCurrentDragSession&&delete e._polydrawCurrentDragSession,this.currentDragPolygon=null}),i(this,"onPolygonDragCancel",()=>{this.cancelActivePolygonDrag()}),i(this,"onPolygonDragKeyDown",t=>{"Escape"===t.key&&this.cancelActivePolygonDrag()}),i(this,"onDragTouchMove",t=>{t.preventDefault();const e=Co.extractCoordinates(t,this.map);e&&this.onPolygonMouseMove({latlng:e})}),i(this,"onDragTouchEnd",t=>{t.preventDefault(),this.onPolygonMouseUp({latlng:null})}),i(this,"onMarkerHoverForEdgeDeletionEvent",t=>{if(!this.isModifierKeyHeld)return;const e=t.target;e&&(e.style.backgroundColor=this.config.colors.edgeDeletion.hover,e.style.borderColor=this.config.colors.edgeDeletion.hover,e.classList.add("edge-deletion-hover"))}),i(this,"onMarkerLeaveForEdgeDeletionEvent",t=>{const e=t.target;e&&(e.style.backgroundColor="",e.style.borderColor="",e.classList.remove("edge-deletion-hover"))}),this.turfHelper=t.turfHelper,this.polygonInformation=t.polygonInformation,this.map=t.map,this.config=t.config,this.modeManager=t.modeManager,this.eventManager=t.eventManager,this.saveHistoryState=t.saveHistoryState,this.getFeatureGroups=e.getFeatureGroups,this.removeFeatureGroup=e.removeFeatureGroup,this.eventManager.on("polydraw:mode:change",()=>{(this.currentCloneGhost||this.isPolygonDragActive())&&this.cancelActivePolygonDrag()})}emitPolygonUpdated(t){const e=this.getHistoryActionForOperation(t.operation);e&&this.saveHistoryState&&this.saveHistoryState(e),this.eventManager.emit("polydraw:polygon:updated",t)}getHistoryActionForOperation(t){switch(t){case"addVertex":case"removeVertex":case"removeHole":case"toggleOptimization":return t;case"modifierSubtract":case"modifierSubtractFallback":return"modifierSubtract";default:return null}}getTimestamp(){return"undefined"!=typeof performance&&"function"==typeof performance.now?performance.now():Date.now()}shouldSuppressDeleteMarkerClick(){return this.getTimestamp()<this.deleteMarkerSuppressUntil}suppressDeleteMarkerClicks(t){this.deleteMarkerSuppressUntil=this.getTimestamp()+Math.max(0,t)}addMarkers(t,e,n={}){let r=this.getMarkerIndex(t,this.config.markers.markerMenuIcon.position),o=this.getMarkerIndex(t,this.config.markers.markerDeleteIcon.position),i=this.getMarkerIndex(t,this.config.markers.markerInfoIcon.position);const s=this.ensureMarkerSeparation(t.length,{menu:{index:r,enabled:this.config.markers.menuMarker},delete:{index:o,enabled:this.config.markers.deleteMarker},info:{index:i,enabled:this.config.markers.infoMarker}});r=s.menu,o=s.delete,i=s.info;const l=n.optimizationLevel??0,c=this.deriveImportantMarkerIndices(t,{menuIndex:r,deleteIndex:o,infoIndex:i,optimizationLevel:l}),h=t.length>2&&this.latLngEquals(t[0],t[t.length-1]);t.forEach((n,s)=>{let u=this.config.markers.markerIcon.styleClasses;s===r&&this.config.markers.menuMarker&&(u=this.config.markers.markerMenuIcon.styleClasses),s===o&&this.config.markers.deleteMarker&&(u=this.config.markers.markerDeleteIcon.styleClasses),s===i&&this.config.markers.infoMarker&&(u=this.config.markers.markerInfoIcon.styleClasses);const g=Array.isArray(u)?u:[u],p=s===r&&this.config.markers.menuMarker||s===o&&this.config.markers.deleteMarker||s===i&&this.config.markers.infoMarker,d=this.normalizeMarkerIndex(s,t.length,h),f=[...g];l<=0||null===d||c.has(d)||p||f.push("polygon-marker-faded");const m=new a.Marker(n,{icon:this.createDivIcon(f),draggable:this.config.modes.dragElbow,title:this.config.markers.coordsTitle?this.getLatLngInfoString(n):"",zIndexOffset:this.config.markers.markerIcon.zIndexOffset??this.config.markers.zIndexOffset});e.addLayer(m).addTo(this.map),this.markerFeatureGroupMap.set(m,e),m.on("add",()=>{const t=m.getElement();t&&(t.style.pointerEvents="auto")}),m.on("click",t=>{var e,n;this.isDraggingMarker&&(null==(n=null==(e=t.originalEvent)?void 0:e.stopPropagation)||n.call(e),a.DomEvent.stopPropagation(t))}),m.on("dragstart",()=>{this.saveHistoryState&&this.saveHistoryState("markerDrag"),this.isDraggingMarker=!0,this._activeMarker=m}),m.on("dragend",t=>{const e=this.markerFeatureGroupMap.get(m);this.modeManager.canPerformAction("markerDrag")&&e&&this.markerDragEnd(e),this._activeMarker=null,a.DomEvent.stopPropagation(t),setTimeout(()=>{this.isDraggingMarker=!1},10)});const y=m.getElement();if(y){const t=t=>{t.stopPropagation()},e=t=>{if(t.preventDefault(),t.stopPropagation(),m.fire("click"),this.isDraggingMarker&&!p){const t=this.markerFeatureGroupMap.get(m);this.modeManager.canPerformAction("markerDrag")&&t&&this.markerDragEnd(t)}this._activeMarker=null};y.addEventListener("touchstart",t,{passive:!0}),y.addEventListener("touchend",e),this.markerTouchListeners.set(m,{touchstart:t,touchend:e})}if(s===r||s===o||s===i){const t=m.getElement();t&&(t.style.zIndex="10000")}if(this.config.modes.dragElbow){const t=t=>()=>{this.modeManager.canPerformAction("markerDrag")&&this.markerDrag(t)};m.on("drag",t(e))}if(s===r&&this.config.markers.menuMarker&&(m.options.zIndexOffset=this.config.markers.markerMenuIcon.zIndexOffset??this.config.markers.zIndexOffset,m.on("click",()=>{const n=this.getPolygonGeoJSONFromFeatureGroup(e),o=wo.getCenterOfPolygonByIndexWithOffsetFromCenterOfMass(n,r);this.generateMenuMarkerPopup(t,e).setLatLng(o).openOn(this.map)}),m.on("popupopen",t=>{const e=t.popup.getElement();if(!e)return;setTimeout(()=>{const t=this.map.getContainer(),n=e.getBoundingClientRect(),r=t.getBoundingClientRect();let o=0,i=0;n.left<r.left?o=r.left-n.left:n.right>r.right&&(o=r.right-n.right),n.top<r.top?i=r.top-n.top:n.bottom>r.bottom&&(i=r.bottom-n.bottom),0===o&&0===i||(e.style.transform=`translate(${o}px, ${i}px)`)},0);const n=this.map.getContainer();n&&(n.style.touchAction="manipulation")}),m.on("popupclose",()=>{const t=this.map.getContainer();t&&(t.style.touchAction="")})),s===i&&this.config.markers.infoMarker){const t=this.getPolygonGeoJSONFromFeatureGroup(e),n=this.turfHelper.getPolygonArea(t),r=this.getTotalPolygonPerimeter(t);m.options.zIndexOffset=this.config.markers.markerInfoIcon.zIndexOffset??this.config.markers.zIndexOffset,m.on("click",()=>{const e=this.generateInfoMarkerPopup(n,r),o=wo.getCenterOfPolygonByIndexWithOffsetFromCenterOfMass(t,i);e.setLatLng(o).openOn(this.map)}),m.on("popupopen",t=>{const e=t.popup.getElement();if(!e)return;setTimeout(()=>{const t=this.map.getContainer().getBoundingClientRect(),n=e.getBoundingClientRect();n.left<t.left?e.style.transform=`translateX(${t.left-n.left}px)`:n.right>t.right&&(e.style.transform=`translateX(${t.right-n.right}px)`)},0);const n=this.map.getContainer();n&&(n.style.touchAction="manipulation")}),m.on("popupclose",()=>{const t=this.map.getContainer();t&&(t.style.touchAction="")})}m.on("mousedown",t=>{this.modeManager.isInOffMode()||(a.DomEvent.stopPropagation(t),this.map.fire("mousedown",t)),this._activeMarker=m}),m.on("click",t=>{var n,r;if(this.modeManager.isInOffMode())if(this.isEdgeDeletionModifierKeyPressed(t.originalEvent)){const n=e.getLayers().find(t=>t instanceof a.Polygon);n&&this.elbowClicked(t,n,m.getLatLng())}else if(s===o&&this.config.markers.deleteMarker){if(this.shouldSuppressDeleteMarkerClick()){const e=t.originalEvent;return null==(n=null==e?void 0:e.preventDefault)||n.call(e),void(null==(r=null==e?void 0:e.stopPropagation)||r.call(e))}this.map.closePopup(),this.saveHistoryState&&this.saveHistoryState("deletePolygon"),this.cleanupFeatureGroup(e),this.removeFeatureGroup(e),this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups()),this.eventManager.emit("polydraw:polygon:deleted",void 0)}}),m.on("mouseover",()=>this.onMarkerHoverForEdgeDeletion(m,!0)),m.on("mouseout",()=>this.onMarkerHoverForEdgeDeletion(m,!1))});const u=this.map.getContainer();u&&(u.style.touchAction="manipulation")}addHoleMarkers(t,e){var n,r,o;const i=(null==(n=this.config.markers.holeMarkers)?void 0:n.menuMarker)??!1,s=(null==(r=this.config.markers.holeMarkers)?void 0:r.deleteMarker)??!1,l=(null==(o=this.config.markers.holeMarkers)?void 0:o.infoMarker)??!1;let c=this.getMarkerIndex(t,this.config.markers.markerMenuIcon.position),h=this.getMarkerIndex(t,this.config.markers.markerDeleteIcon.position),u=this.getMarkerIndex(t,this.config.markers.markerInfoIcon.position);const g=this.ensureMarkerSeparation(t.length,{menu:{index:c,enabled:i},delete:{index:h,enabled:s},info:{index:u,enabled:l}});c=g.menu,h=g.delete,u=g.info,t.forEach((n,r)=>{let o=this.config.markers.holeIcon.styleClasses;r===c&&i&&(o=this.config.markers.markerMenuIcon.styleClasses),r===h&&s&&(o=this.config.markers.markerDeleteIcon.styleClasses),r===u&&l&&(o=this.config.markers.markerInfoIcon.styleClasses);const g=Array.isArray(o)?o:[o],p=r===c&&i||r===h&&s||r===u&&l,d=new a.Marker(n,{icon:this.createDivIcon(g),draggable:this.config.modes.dragElbow,title:this.config.markers.coordsTitle?this.getLatLngInfoString(n):"",zIndexOffset:this.config.markers.holeIcon.zIndexOffset??this.config.markers.zIndexOffset});e.addLayer(d).addTo(this.map),this.markerFeatureGroupMap.set(d,e),d.on("add",()=>{const t=d.getElement();t&&(t.style.pointerEvents="auto")}),d.on("click",t=>{var e,n;this.isDraggingMarker&&(null==(n=null==(e=t.originalEvent)?void 0:e.stopPropagation)||n.call(e),a.DomEvent.stopPropagation(t))}),d.on("dragstart",()=>{this.saveHistoryState&&this.saveHistoryState("markerDrag"),this.isDraggingMarker=!0,this._activeMarker=d}),d.on("dragend",t=>{const e=this.markerFeatureGroupMap.get(d);this.modeManager.canPerformAction("markerDrag")&&e&&this.markerDragEnd(e),this._activeMarker=null,a.DomEvent.stopPropagation(t),setTimeout(()=>{this.isDraggingMarker=!1},10)});const f=d.getElement();if(f){const t=t=>{t.stopPropagation()},e=t=>{if(t.preventDefault(),t.stopPropagation(),d.fire("click"),this.isDraggingMarker&&!p){const t=this.markerFeatureGroupMap.get(d);this.modeManager.canPerformAction("markerDrag")&&t&&this.markerDragEnd(t)}this._activeMarker=null};f.addEventListener("touchstart",t,{passive:!0}),f.addEventListener("touchend",e),this.markerTouchListeners.set(d,{touchstart:t,touchend:e})}if(r===c||r===h||r===u){const t=d.getElement();t&&(t.style.zIndex="10000")}if(this.config.modes.dragElbow){const t=t=>()=>{this.modeManager.canPerformAction("markerDrag")&&this.markerDrag(t)};d.on("drag",t(e))}if(r===c&&i&&(d.options.zIndexOffset=this.config.markers.markerMenuIcon.zIndexOffset??this.config.markers.zIndexOffset,d.on("click",()=>{const n=t.map(t=>[t.lng,t.lat]);n.push(n[0]);const r={type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[n]}},o=wo.getCenterOfMass(r);this.generateMenuMarkerPopup(t,e).setLatLng(o).openOn(this.map)}),d.on("popupopen",t=>{const e=t.popup.getElement();if(!e)return;setTimeout(()=>{const t=this.map.getContainer().getBoundingClientRect(),n=e.getBoundingClientRect();n.left<t.left?e.style.transform=`translateX(${t.left-n.left}px)`:n.right>t.right&&(e.style.transform=`translateX(${t.right-n.right}px)`)},0);const n=this.map.getContainer();n&&(n.style.touchAction="manipulation")}),d.on("popupclose",()=>{const t=this.map.getContainer();t&&(t.style.touchAction="")})),r===u&&l){const e=t.map(t=>[t.lng,t.lat]);e.push(e[0]);const r={type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[e]}},o=this.turfHelper.getPolygonArea(r),i=1e3*this.turfHelper.getPolygonPerimeter(r);d.options.zIndexOffset=this.config.markers.markerInfoIcon.zIndexOffset??this.config.markers.zIndexOffset,d.on("click",()=>{this.generateInfoMarkerPopup(o,i).setLatLng(n).openOn(this.map)})}d.on("mousedown",t=>{this.modeManager.isInOffMode()||(a.DomEvent.stopPropagation(t),this.map.fire("mousedown",t)),this._activeMarker=d}),d.on("click",t=>{if(this.modeManager.isInOffMode())if(this.isEdgeDeletionModifierKeyPressed(t.originalEvent)){const n=e.getLayers().find(t=>t instanceof a.Polygon);n&&this.elbowClicked(t,n,d.getLatLng())}else if(r===h&&s){this.map.closePopup();const t=e.getLayers().find(t=>t instanceof a.Polygon);if(t){const n=t.getLatLngs();let r=[];if(Array.isArray(n)&&n.length>0)if(Array.isArray(n[0])){const t=n[0];r=Array.isArray(t)&&Array.isArray(t[0])?n[0]:n}else r=[n];const o=d.getLatLng();let i=-1;for(let t=1;t<r.length;t++)if(r[t].some(t=>t.lat===o.lat&&t.lng===o.lng)){i=t;break}if(i>0){const t=r.filter((t,e)=>e!==i).map(t=>{const e=t.map(t=>[t.lng,t.lat]);if(e.length>0){const t=e[0],n=e[e.length-1];t[0]===n[0]&&t[1]===n[1]||e.push([t[0],t[1]])}return e}),{level:n,original:o}=this.getOptimizationMetadataFromFeatureGroup(e),s=this.turfHelper.getMultiPolygon([t]);this.cleanupFeatureGroup(e),this.removeFeatureGroup(e),this.emitPolygonUpdated({operation:"removeHole",polygon:s,optimizationLevel:n,originalOptimizationLevel:o})}}}}),d.on("mouseover",()=>this.onMarkerHoverForEdgeDeletion(d,!0)),d.on("mouseout",()=>this.onMarkerHoverForEdgeDeletion(d,!1))})}addEdgeClickListeners(t,e){const n=t.getLatLngs();let r;if(Array.isArray(n)&&n.length>0){if(Array.isArray(n[0]))if(Array.isArray(n[0][0])&&n[0][0].length>0){n[0][0][0];r=n[0]}else r=n[0][0]&&"object"==typeof n[0][0]&&"lat"in n[0][0]?n:n[0];else r=(n[0]&&"object"==typeof n[0]&&n[0],[n]);r.forEach((n,r)=>{for(let o=0;o<n.length;o++){const i=n[o],s=n[(o+1)%n.length];if(i.lat===s.lat&&i.lng===s.lng)continue;const a=mo.createPolyline([i,s],{color:"transparent",weight:10,opacity:0,interactive:!0});a._polydrawEdgeInfo={ringIndex:r,edgeIndex:o,startPoint:i,endPoint:s,parentPolygon:t,parentFeatureGroup:e},a.on("click",t=>{this.onEdgeClick(t,a)}),a.on("mouseover",()=>{this.highlightEdgeOnHover(a,!0)}),a.on("mouseout",()=>{this.highlightEdgeOnHover(a,!1)}),e.addLayer(a)}})}}isPolygonDragModeActive(){const t=this.modeManager.getCurrentMode();return t===c.Off||t===c.Clone}isPolygonDragActive(){return!!(this.currentDragPolygon&&this.currentDragPolygon._polydrawDragData&&this.currentDragPolygon._polydrawDragData.isDragging)}enablePolygonDragging(t,e){if(this.config.modes.dragPolygons||this.config.modes.clonePolygons){if(t._polydrawOriginalLatLngs=e,t._polydrawDragData={isDragging:!1,startPosition:null,startLatLngs:null,originalOpacity:t.options.fillOpacity},t.on("mousedown",e=>{if(!this.isPolygonDragModeActive())return a.DomEvent.stopPropagation(e),void this.map.fire("mousedown",e);if(!this.modeManager.canPerformAction("polygonDrag"))return;a.DomEvent.stopPropagation(e.originalEvent),a.DomEvent.preventDefault(e.originalEvent);const n=this.modeManager.getCurrentMode()===c.Clone,r=!n&&this.detectDragSubtractModifierKey(e.originalEvent);this.currentDragIsClone=n,this.currentModifierDragMode=r,this.isModifierKeyHeld=r,this.saveHistoryState&&this.saveHistoryState(n?"polygonClone":"polygonDrag"),t._polydrawDragData.isDragging=!0,t._polydrawDragData.startPosition=e.latlng,t._polydrawDragData.startLatLngs=t.getLatLngs(),t.setStyle({fillOpacity:this.config.dragPolygons.opacity}),n?this.showCloneGhost(t._polydrawDragData.startLatLngs):this.clearCloneGhost(),this.map.dragging&&this.map.dragging.disable(),this.setSubtractVisualMode(t,r),this.setMarkerVisibility(t,!1);try{this.map.getContainer().style.cursor=this.config.dragPolygons.dragCursor||"move"}catch{}this.map.on("mousemove",this.onPolygonMouseMove,this),this.map.on("mouseup",this.onPolygonMouseUp,this),this.map.on("pointermove",this.onPolygonMouseMove,this),this.map.on("pointerup",this.onPolygonMouseUp,this),this.attachDragCancelHandlers(),this.currentDragPolygon=t}),t.on("pointerdown",e=>{const n=e;if(this.transformModeActive)return;if(!this.isPolygonDragModeActive()){const t=n.originalEvent??n;return a.DomEvent.stopPropagation(t),void this.map.fire("pointerdown",n)}if(!this.modeManager.canPerformAction("polygonDrag"))return;const r=n.originalEvent??n;a.DomEvent.stopPropagation(r),a.DomEvent.preventDefault(r);const o=this.modeManager.getCurrentMode()===c.Clone,i=!o&&this.detectDragSubtractModifierKey(r);this.currentDragIsClone=o,this.currentModifierDragMode=i,this.isModifierKeyHeld=i,this.saveHistoryState&&this.saveHistoryState(o?"polygonClone":"polygonDrag"),t._polydrawDragData.isDragging=!0,t._polydrawDragData.startPosition=n.latlng,t._polydrawDragData.startLatLngs=t.getLatLngs(),t.setStyle({fillOpacity:this.config.dragPolygons.opacity}),o?this.showCloneGhost(t._polydrawDragData.startLatLngs):this.clearCloneGhost(),this.map.dragging&&this.map.dragging.disable(),this.setSubtractVisualMode(t,i),this.setMarkerVisibility(t,!1);try{this.map.getContainer().style.cursor=this.config.dragPolygons.dragCursor||"move"}catch{}this.map.on("mousemove",this.onPolygonMouseMove,this),this.map.on("mouseup",this.onPolygonMouseUp,this),this.map.on("pointermove",this.onPolygonMouseMove,this),this.map.on("pointerup",this.onPolygonMouseUp,this),this.attachDragCancelHandlers(),this.currentDragPolygon=t}),fo.isV1()){const e=e=>{if(this.transformModeActive)return;if(!this.isPolygonDragModeActive())return;if(!this.modeManager.canPerformAction("polygonDrag"))return;e.stopPropagation(),e.preventDefault();const n=Co.extractCoordinates(e,this.map);if(!n)return;const r=this.modeManager.getCurrentMode()===c.Clone;this.currentDragIsClone=r,this.currentModifierDragMode=!1,this.isModifierKeyHeld=!1,this.saveHistoryState&&this.saveHistoryState(r?"polygonClone":"polygonDrag"),t._polydrawDragData.isDragging=!0,t._polydrawDragData.startPosition=n,t._polydrawDragData.startLatLngs=t.getLatLngs(),t.setStyle({fillOpacity:this.config.dragPolygons.opacity}),r?this.showCloneGhost(t._polydrawDragData.startLatLngs):this.clearCloneGhost(),this.map.dragging&&this.map.dragging.disable(),this.setSubtractVisualMode(t,!1),this.setMarkerVisibility(t,!1);try{this.map.getContainer().style.cursor=this.config.dragPolygons.dragCursor||"move"}catch{}this.map.on("mousemove",this.onPolygonMouseMove,this),this.map.on("mouseup",this.onPolygonMouseUp,this),this.attachDragTouchListeners(),this.attachDragCancelHandlers(),this.currentDragPolygon=t};this.polygonTouchStartListeners.set(t,e);const n=()=>{const n=t._path;n&&n.addEventListener("touchstart",e,{passive:!1})};t._path?n():t.once("add",n)}t.on("mouseover",()=>{if(!t._polydrawDragData||!t._polydrawDragData.isDragging)try{this.map.getContainer().style.cursor=this.config.dragPolygons.hoverCursor||"grab"}catch{}}),t.on("mouseout",()=>{if(!t._polydrawDragData||!t._polydrawDragData.isDragging)try{this.map.getContainer().style.cursor=""}catch{}})}}updateMarkerDraggableState(){const t=this.modeManager.canPerformAction("markerDrag");this.getFeatureGroups().forEach(e=>{e.eachLayer(e=>{if(e instanceof a.Marker){const n=e;try{n.options.draggable=t,n.dragging&&(t?n.dragging.enable():n.dragging.disable())}catch{}}})})}updateAllMarkersForEdgeDeletion(t){this.getFeatureGroups().forEach(e=>{e.eachLayer(e=>{e instanceof a.Marker&&this.updateMarkerForEdgeDeletion(e,t)})})}updateMarkerForEdgeDeletion(t,e){const n=t.getElement();n&&(e?(n.addEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),n.addEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent),this.markerEdgeDeletionListeners.set(t,{mouseenter:this.onMarkerHoverForEdgeDeletionEvent,mouseleave:this.onMarkerLeaveForEdgeDeletionEvent})):(n.removeEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),n.removeEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent),n.style.backgroundColor="",n.style.borderColor="",this.markerEdgeDeletionListeners.delete(t)))}setModifierKeyHeld(t){this.isModifierKeyHeld=t}cleanupMarker(t){const e=t.getElement(),n=this.markerModifierHandlers.get(t);n&&(document.removeEventListener("keydown",n),document.removeEventListener("keyup",n),e&&e.removeEventListener("mousemove",n),this.markerModifierHandlers.delete(t));const r=this.markerTouchListeners.get(t);r&&(e&&(e.removeEventListener("touchstart",r.touchstart),e.removeEventListener("touchend",r.touchend)),this.markerTouchListeners.delete(t));const o=this.markerEdgeDeletionListeners.get(t);o&&(e&&(e.removeEventListener("mouseenter",o.mouseenter),e.removeEventListener("mouseleave",o.mouseleave)),this.markerEdgeDeletionListeners.delete(t)),this.markerFeatureGroupMap.delete(t)}cleanupFeatureGroup(t){t.eachLayer(t=>{t instanceof a.Marker?this.cleanupMarker(t):t instanceof a.Polygon&&this.detachPolygonTouchStart(t)}),this.destroyTransformController(t)}destroyTransformController(t){const e=this.transformControllers.get(t);e&&(e.destroy(),this.transformControllers.delete(t),this.transformModeActive=!1)}onEdgeClick(t,e){if(!this.config.modes.attachElbow)return;if(!this.modeManager.isInOffMode())return;const n=e._polydrawEdgeInfo;if(!n)return;const r=t.latlng,o=n.parentPolygon,i=n.parentFeatureGroup;if(o&&i)try{if("function"!=typeof o.toGeoJSON)return;const t=o.toGeoJSON();if("MultiPolygon"===t.geometry.type||"Polygon"===t.geometry.type){const e=this.turfHelper.injectPointToPolygon(t,[r.lng,r.lat],n.ringIndex);if(e){const t=o,n=t._polydrawOptimizationLevel||0,r=t._polydrawOptimizationOriginalLevel||n;this.cleanupFeatureGroup(i),this.removeFeatureGroup(i),this.emitPolygonUpdated({operation:"addVertex",polygon:e,optimizationLevel:n,originalOptimizationLevel:r})}}}catch{}a.DomEvent.stopPropagation(t)}highlightEdgeOnHover(t,e){e?t.setStyle({color:this.config.colors.edgeHover,weight:4,opacity:1}):t.setStyle({color:"transparent",weight:10,opacity:0})}deriveImportantMarkerIndices(t,e){const n=new Set;if(!t||0===t.length)return n;const r=Math.min(Math.max(e.optimizationLevel??0,0),10),o=t.length>2&&this.latLngEquals(t[0],t[t.length-1]),i=o?t.slice(0,-1):[...t],s=i.length,a=e=>{if(null==e||e<0)return;let r=e;o&&e===t.length-1&&(r=0),r>=s&&(r=s>0?r%s:0),r>=0&&r<s&&n.add(r)};if(a(0),a(e.menuIndex),a(e.deleteIndex),a(e.infoIndex),0===s||r<=0||s<=3){for(let t=0;t<s;t++)n.add(t);return n}const l=this.getToleranceForOptimizationLevel(r);let c=l>0?this.turfHelper.simplifyLatLngRing(i,l,!0):[...i];if(c.length>1&&this.latLngEquals(c[0],c[c.length-1])&&(c=c.slice(0,-1)),!c||0===c.length){for(let t=0;t<s;t++)n.add(t);return n}if(c.forEach(t=>{const e=this.findClosestVertexIndex(t,i);null!==e&&n.add(e)}),0===n.size)for(let h=0;h<s;h++)n.add(h);return n}normalizeMarkerIndex(t,e,n){if(null==t||t<0)return null;if(n){const n=Math.max(1,e-1);return t===e-1?0:t>=n?t%n:t}return t>=e?e>0?e-1:null:t}latLngEquals(t,e){return!(!t||!e)&&(Math.abs(t.lat-e.lat)<1e-9&&Math.abs(t.lng-e.lng)<1e-9)}isLatLngLiteral(t){return!!t&&"object"==typeof t&&"lat"in t&&"lng"in t&&"number"==typeof t.lat&&"number"==typeof t.lng}getOrderedMarkers(t){const e=[];return t.eachLayer(t=>{t instanceof a.Marker&&e.push(t)}),e.sort((t,e)=>mo.util.stamp(t)-mo.util.stamp(e))}countLatLngNodes(t){return Array.isArray(t)?0===t.length?0:this.isLatLngLiteral(t[0])?t.length:t.reduce((t,e)=>t+this.countLatLngNodes(e),0):0}rebuildLatLngStructure(t,e,n){if(!Array.isArray(t))return t;if(t.length>0&&this.isLatLngLiteral(t[0])){const r=t,o=r.length>1&&this.latLngEquals(r[0],r[r.length-1]),i=r.map((t,o)=>{const i=e[n.value]??r[o];return n.value+=1,mo.createLatLng(i.lat,i.lng)});return o&&i.length>1&&(i[i.length-1]=i[0]),i}return t.map(t=>this.rebuildLatLngStructure(t,e,n))}getOptimizationMetadataFromFeatureGroup(t){let e=0,n=0;return t.eachLayer(t=>{if(t instanceof a.Polygon){const r=t;"number"==typeof r._polydrawOptimizationLevel&&(e=r._polydrawOptimizationLevel||0),"number"==typeof r._polydrawOptimizationOriginalLevel&&(n=r._polydrawOptimizationOriginalLevel||0)}}),!n&&e>0&&(n=e),{level:e,original:n}}getOptimizationMetadataFromPolygonLayer(t){if(!t)return{level:0,original:0};const e=t,n=e._polydrawOptimizationLevel||0;return{level:n,original:e._polydrawOptimizationOriginalLevel||(n>0?n:0)}}getDistanceMeters(t,e){try{const n=mo.createLatLng(t.lat,t.lng),r=mo.createLatLng(e.lat,e.lng);if("function"==typeof n.distanceTo)return n.distanceTo(r)}catch{}const n=t=>t*Math.PI/180,r=n(e.lat-t.lat),o=n(e.lng-t.lng),i=n(t.lat),s=n(e.lat),a=Math.sin(r/2)*Math.sin(r/2)+Math.sin(o/2)*Math.sin(o/2)*Math.cos(i)*Math.cos(s);return 6371e3*(2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)))}findClosestVertexIndex(t,e){if(!e||0===e.length)return null;let n=0,r=Number.POSITIVE_INFINITY;for(let o=0;o<e.length;o++){const i=this.getDistanceMeters(t,e[o]);if(i<r&&(r=i,n=o,0===i))break}return n}getToleranceForOptimizationLevel(t){const e=Math.min(Math.max(t,0),10)/10,n=this.config.markers.visualOptimization??{},r=Math.max(n.toleranceMin??5e-6,0),o=Math.max(n.toleranceMax??.005,r),i=n.curve??1.35;return r+(o-r)*Math.pow(e,i)}elbowClicked(t,e,n){if(!this.config.modes.edgeDeletion)return;if(!this.isEdgeDeletionModifierKeyPressed(t.originalEvent))return;const r=n??t.latlng,o=e.getLatLngs();let i=[];if(!(Array.isArray(o)&&o.length>0))return;if(Array.isArray(o[0])){const t=o[0];i=Array.isArray(t)&&Array.isArray(t[0])?o[0]:o}else i=[o];let s=-1,a=-1;for(let d=0;d<i.length;d++){const t=i[d];for(let e=0;e<t.length;e++){const n=t[e];if(n.lat===r.lat&&n.lng===r.lng){s=d,a=e;break}}if(-1!==s)break}if(-1===s||-1===a)return;if(i[s].length<=this.config.edgeDeletion.minVertices)return;const l=i.map((t,e)=>{if(e!==s)return t.slice();const n=t.slice();return n.splice(a,1),n}).map(t=>{const e=t.map(t=>[t.lng,t.lat]);if(e.length>0){const t=e[0],n=e[e.length-1];t[0]===n[0]&&t[1]===n[1]||e.push([t[0],t[1]])}return e});let c=null;for(const d of this.getFeatureGroups()){let t=!1;if(d.eachLayer(n=>{n===e&&(t=!0)}),t){c=d;break}}const h=c?this.getOptimizationMetadataFromFeatureGroup(c):this.getOptimizationMetadataFromPolygonLayer(e),{level:u,original:g}=h;c&&this.removeFeatureGroup(c);const p=this.turfHelper.getMultiPolygon([l]);this.emitPolygonUpdated({operation:"removeVertex",polygon:p,optimizationLevel:u,originalOptimizationLevel:g})}markerDrag(t){if(!this._activeMarker)return void(ao()||console.warn("No active marker set for dragging."));const e=t.getLayers().find(t=>t instanceof a.Polygon);if(!e)return void(ao()||console.warn("No polygon found in feature group for marker drag."));const n=this.getOrderedMarkers(t);if(0===n.length)return;const r=n.map(t=>t.getLatLng()),o=this.countLatLngNodes(e.getLatLngs());if(r.length<o)return void(ao()||console.warn("Not enough markers to rebuild polygon during drag. Expected:",o,"got:",r.length));const i=this.rebuildLatLngStructure(e.getLatLngs(),r,{value:0});e.setLatLngs(i)}async markerDragEnd(t){this.polygonInformation.deletePolygonInformationStorage();const e=t.toGeoJSON();if(!e.features||0===e.features.length)return;const{level:n,original:r}=this.getOptimizationMetadataFromFeatureGroup(t);this.cleanupFeatureGroup(t),this.removeFeatureGroup(t);const o=(t,e,n)=>{const r=this.turfHelper.removeDuplicateVertices(t),o=[];if(!this.config.kinks)try{const t=this.turfHelper.getKinks(r);t&&t.length>0&&o.push(...t)}catch{}0===o.length&&("MultiPolygon"===r.geometry.type?r.geometry.coordinates.forEach(t=>o.push(this.turfHelper.getMultiPolygon([t]))):o.push(r)),o.forEach(t=>{this.emitPolygonUpdated({operation:"markerDrag",polygon:t,allowMerge:e,optimizationLevel:n.optimizationLevel,originalOptimizationLevel:n.originalOptimizationLevel})})};if("MultiPolygon"===e.features[0].geometry.type)for(const i of e.features[0].geometry.coordinates){o(this.turfHelper.getMultiPolygon([i]),!0,{optimizationLevel:n,originalOptimizationLevel:r})}else{o(this.turfHelper.getMultiPolygon([e.features[0].geometry.coordinates]),!1,{optimizationLevel:n,originalOptimizationLevel:r})}this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}attachDragTouchListeners(){this.detachDragTouchListeners(),this._boundDragTouchMove=this.onDragTouchMove,this._boundDragTouchEnd=this.onDragTouchEnd;const t=this.map.getContainer();t.addEventListener("touchmove",this._boundDragTouchMove,{passive:!1}),t.addEventListener("touchend",this._boundDragTouchEnd,{passive:!1})}detachDragTouchListeners(){const t=this.map.getContainer();this._boundDragTouchMove&&(t.removeEventListener("touchmove",this._boundDragTouchMove),this._boundDragTouchMove=null),this._boundDragTouchEnd&&(t.removeEventListener("touchend",this._boundDragTouchEnd),this._boundDragTouchEnd=null)}detachPolygonTouchStart(t){const e=this.polygonTouchStartListeners.get(t);if(!e)return;const n=t._path;n&&n.removeEventListener("touchstart",e),this.polygonTouchStartListeners.delete(t)}attachDragCancelHandlers(){this.dragCancelHandlersAttached||(this.dragCancelHandlersAttached=!0,document.addEventListener("keydown",this.onPolygonDragKeyDown),this.map.on("pointercancel",this.onPolygonDragCancel,this),this.map.on("touchcancel",this.onPolygonDragCancel,this))}detachDragCancelHandlers(){this.dragCancelHandlersAttached&&(this.dragCancelHandlersAttached=!1,document.removeEventListener("keydown",this.onPolygonDragKeyDown),this.map.off("pointercancel",this.onPolygonDragCancel,this),this.map.off("touchcancel",this.onPolygonDragCancel,this))}cancelActivePolygonDrag(){if(!this.currentDragPolygon||!this.currentDragPolygon._polydrawDragData)return void this.clearCloneGhost();const t=this.currentDragPolygon,e=t._polydrawDragData;if(e)if(e.isDragging){e.isDragging=!1,this.map.off("mousemove",this.onPolygonMouseMove,this),this.map.off("mouseup",this.onPolygonMouseUp,this),this.map.off("pointermove",this.onPolygonMouseMove,this),this.map.off("pointerup",this.onPolygonMouseUp,this),this.map.dragging&&this.map.dragging.enable(),e.startLatLngs&&t.setLatLngs(e.startLatLngs),t._polydrawOriginalMarkerPositions&&(t._polydrawOriginalMarkerPositions.forEach((t,e)=>{e.setLatLng(t)}),t._polydrawOriginalMarkerPositions.clear(),delete t._polydrawOriginalMarkerPositions),t._polydrawOriginalHoleLinePositions&&(t._polydrawOriginalHoleLinePositions.forEach((t,e)=>{e.setLatLngs(t)}),t._polydrawOriginalHoleLinePositions.clear(),delete t._polydrawOriginalHoleLinePositions),t._polydrawCurrentDragSession&&delete t._polydrawCurrentDragSession,null!=e.originalOpacity&&t.setStyle({fillOpacity:e.originalOpacity}),this.setSubtractVisualMode(t,!1),this.setMarkerVisibility(t,!0);try{this.map.getContainer().style.cursor=""}catch{}this.clearCloneGhost(),this.detachDragTouchListeners(),this.detachDragCancelHandlers(),this.currentDragIsClone=!1,this.currentModifierDragMode=!1,this.isModifierKeyHeld=!1,this.currentDragPolygon=null}else this.clearCloneGhost();else this.clearCloneGhost()}offsetPolygonCoordinates(t,e,n){return t?Array.isArray(t[0])?t.map(t=>this.offsetPolygonCoordinates(t,e,n)):t.map(t=>mo.createLatLng(t.lat+e,t.lng+n)):t}updateMarkersAndHoleLinesDuringDrag(t,e,n){try{let r=null;for(const e of this.getFeatureGroups()){let n=!1;if(e.eachLayer(e=>{e===t&&(n=!0)}),n){r=e;break}}if(!r)return;const o="_polydrawDragSession_"+Date.now()+"_"+mo.util.stamp(t);t._polydrawCurrentDragSession||(t._polydrawCurrentDragSession=o,t._polydrawOriginalMarkerPositions=new Map,t._polydrawOriginalHoleLinePositions=new Map,r.eachLayer(e=>{if(e instanceof a.Marker)t._polydrawOriginalMarkerPositions.set(e,e.getLatLng());else if(e instanceof a.Polyline&&!(e instanceof a.Polygon)){const n=e.getLatLngs();t._polydrawOriginalHoleLinePositions.set(e,n)}})),r.eachLayer(r=>{if(r instanceof a.Marker){const o=t._polydrawOriginalMarkerPositions.get(r);if(o){const t={lat:o.lat+e,lng:o.lng+n};r.setLatLng(t)}}else if(r instanceof a.Polyline&&!(r instanceof a.Polygon)){const o=t._polydrawOriginalHoleLinePositions.get(r);if(o){let t;t=Array.isArray(o[0])?o.map(t=>t.map(t=>mo.createLatLng(t.lat+e,t.lng+n))):o.map(t=>mo.createLatLng(t.lat+e,t.lng+n)),r.setLatLngs(t)}}})}catch(r){console.warn("Error updating markers during drag:",r)}}async updatePolygonAfterDrag(t){try{let e=null;for(const s of this.getFeatureGroups())if(s.eachLayer(n=>{n===t&&(e=s)}),e)break;if(!e)return;const n=t.toGeoJSON();if(this.isModifierDragActive())return this.performModifierSubtract(n,e),this.currentModifierDragMode=!1,void(this.isModifierKeyHeld=!1);const{level:r,original:o}=this.getOptimizationMetadataFromFeatureGroup(e);this.cleanupFeatureGroup(e),this.removeFeatureGroup(e);const i=this.turfHelper.getTurfPolygon(n);this.emitPolygonUpdated({operation:"polygonDrag",polygon:i,allowMerge:!0,optimizationLevel:r,originalOptimizationLevel:o}),this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}catch{}}updatePolygonAfterCloneDrag(t,e){try{let n=null;for(const e of this.getFeatureGroups())if(e.eachLayer(r=>{r===t&&(n=e)}),n)break;if(!n)return;const r=t.toGeoJSON(),o=(null==e?void 0:e.startLatLngs)??null,i=o?this.createPolygonFeatureFromLatLngs(o):null,{level:s,original:a}=this.getOptimizationMetadataFromFeatureGroup(n);this.cleanupFeatureGroup(n),this.removeFeatureGroup(n);const l=this.turfHelper.getTurfPolygon(r);if(this.emitPolygonUpdated({operation:"polygonDrag",polygon:l,allowMerge:!0,optimizationLevel:s,originalOptimizationLevel:a}),i){const t=this.turfHelper.getTurfPolygon(i);this.emitPolygonUpdated({operation:"polygonClone",polygon:t,allowMerge:!0,optimizationLevel:s,originalOptimizationLevel:a})}this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}catch{}finally{this.currentModifierDragMode=!1,this.isModifierKeyHeld=!1}}showCloneGhost(t){if(this.clearCloneGhost(),t)try{const e=mo.createPolygon(t,{color:this.config.colors.polygon.border,weight:this.config.polygonOptions.weight,opacity:.9,fill:!1,fillOpacity:0,dashArray:"4,6",interactive:!1});e.addTo(this.map),this.currentCloneGhost=e}catch{}}clearCloneGhost(){if(this.currentCloneGhost){try{this.map.removeLayer(this.currentCloneGhost)}catch{}this.currentCloneGhost=null}}createPolygonFeatureFromLatLngs(t){try{return mo.createPolygon(t).toGeoJSON()}catch{return null}}getDragSubtractModifierKey(){const{keys:t}=this.config.dragPolygons.modifierSubtract,e=navigator.userAgent.toLowerCase(),n=e.includes("mac"),r=e.includes("windows");return n&&t.mac?t.mac:r&&t.windows?t.windows:t.linux?t.linux:n?"metaKey":"ctrlKey"}detectDragSubtractModifierKey(t){if(so())return!1;return t[this.getDragSubtractModifierKey()]||!1}setSubtractVisualMode(t,e){if(t&&t.setStyle)try{e?t.setStyle({color:this.config.colors.dragPolygons.subtract}):t.setStyle({color:this.config.colors.polygon.border}),this.updateMarkerColorsForSubtractMode(t,e)}catch{}}updateMarkerColorsForSubtractMode(t,e){try{let n=null;for(const e of this.getFeatureGroups())if(e.eachLayer(r=>{r===t&&(n=e)}),n)break;if(!n)return;const r=n,o=this.config.dragPolygons.modifierSubtract.hideMarkersOnDrag;r.eachLayer(t=>{if(t instanceof a.Marker){const n=t.getElement();n&&(e?o?(n.style.display="none",n.classList.add("subtract-mode-hidden")):(n.style.backgroundColor=this.config.colors.dragPolygons.subtract,n.style.borderColor=this.config.colors.dragPolygons.subtract,n.classList.add("subtract-mode")):o?(n.style.display="",n.classList.remove("subtract-mode-hidden")):(n.style.backgroundColor="",n.style.borderColor="",n.classList.remove("subtract-mode")))}})}catch{}}handleModifierToggleDuringDrag(t){const e=this.detectDragSubtractModifierKey(t);this.currentModifierDragMode=e,this.isModifierKeyHeld=e,this.currentDragPolygon&&this.setSubtractVisualMode(this.currentDragPolygon,e)}isModifierDragActive(){return this.currentModifierDragMode}performModifierSubtract(t,e){try{const n=this.turfHelper.getTurfPolygon(t),r=[];this.getFeatureGroups().forEach(t=>{if(t!==e)try{const e=t.toGeoJSON();if(!e||!e.features||!e.features[0])return;const o=e.features[0];if(!o.geometry||!o.geometry.coordinates)return;const i=this.turfHelper.getTurfPolygon(o);try{const e=this.turfHelper.getIntersection(i,n);if(e&&e.geometry&&"coordinates"in e.geometry){e.geometry.coordinates.length>0&&r.push(t)}}catch{try{this.turfHelper.polygonIntersect(i,n)&&r.push(t)}catch{}}}catch{}}),this.removeFeatureGroup(e),r.forEach(t=>{try{const r=t.toGeoJSON(),o=this.turfHelper.getTurfPolygon(r.features[0]),{level:i,original:s}=this.getOptimizationMetadataFromFeatureGroup(t);this.cleanupFeatureGroup(t),this.removeFeatureGroup(t);try{const t=this.turfHelper.polygonDifference(o,n);if(t&&t.geometry){const e=this.turfHelper.getCoords(t);for(const t of e){const e=this.turfHelper.getMultiPolygon([t]);this.emitPolygonUpdated({operation:"modifierSubtract",polygon:this.turfHelper.getTurfPolygon(e),allowMerge:!1,optimizationLevel:i,originalOptimizationLevel:s})}}}catch(e){ao()||console.warn("Failed to perform difference operation:",e),this.emitPolygonUpdated({operation:"modifierSubtractFallback",polygon:o,allowMerge:!1,optimizationLevel:i,originalOptimizationLevel:s})}}catch(r){ao()||console.warn("Error in modifier subtract operation:",r)}}),this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}catch(n){ao()||console.warn("Error in performModifierSubtract:",n)}}getEdgeDeletionModifierKey(){const{keys:t}=this.config.edgeDeletion,e=navigator.userAgent.toLowerCase(),n=e.includes("mac"),r=e.includes("windows");return n&&t.mac?t.mac:r&&t.windows?t.windows:t.linux?t.linux:n?"metaKey":"ctrlKey"}isEdgeDeletionModifierKeyPressed(t){if(so())return!1;return!!t[this.getEdgeDeletionModifierKey()]}onMarkerHoverForEdgeDeletion(t,e){const n=t.getElement();if(n)if(e){const e=t=>{if(this.isEdgeDeletionModifierKeyPressed(t)){n.style.backgroundColor=this.config.colors.edgeDeletion.hover,n.style.borderColor=this.config.colors.edgeDeletion.hover,n.classList.add("edge-deletion-hover");try{this.map.getContainer().style.cursor="pointer"}catch{}}else{n.style.backgroundColor="",n.style.borderColor="",n.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}}};e(new MouseEvent("mouseover")),this.markerModifierHandlers.set(t,e),document.addEventListener("keydown",e),document.addEventListener("keyup",e),n.addEventListener("mousemove",e)}else{n.style.backgroundColor="",n.style.borderColor="",n.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}const e=this.markerModifierHandlers.get(t);e&&(document.removeEventListener("keydown",e),document.removeEventListener("keyup",e),n.removeEventListener("mousemove",e),this.markerModifierHandlers.delete(t))}}getMarkerIndex(t,e){const n=lo.getBounds(t,Math.sqrt(2)/2),r=new co(n.getSouth(),n.getWest(),n.getNorth(),n.getEast()).getDirection(e),o={lat:r.lat,lng:r.lng},i=this.turfHelper.getCoord(o),s=this.turfHelper.getFeaturePointCollection(t);return this.turfHelper.getNearestPointIndex(i,s)}ensureMarkerSeparation(t,e){const n=[];if(e.menu.enabled&&n.push({type:"menu",index:e.menu.index}),e.delete.enabled&&n.push({type:"delete",index:e.delete.index}),e.info.enabled&&n.push({type:"info",index:e.info.index}),n.length<2)return{menu:e.menu.index,delete:e.delete.index,info:e.info.index};const r={...e},o=new Set,i=["info","delete","menu"];for(const s of i){const e=r[s];if(e.enabled)if(o.has(e.index)){const n=this.findAlternativeMarkerPosition(t,e.index,o);r[s].index=n,o.add(n)}else o.add(e.index)}return{menu:r.menu.index,delete:r.delete.index,info:r.info.index}}findAlternativeMarkerPosition(t,e,n){const r=t,o=Math.max(1,Math.floor(t/8));for(let i=1;i<r;i++){const r=[(e+i*o)%t,(e-i*o+t)%t];for(const t of r)if(!n.has(t))return t}for(let i=0;i<t;i++)if(!n.has(i))return i;return e}createDivIcon(t){return So.createDivIcon(t)}getLatLngInfoString(t){return"Latitude: "+t.lat+" Longitude: "+t.lng}setMarkerVisibility(t,e){const n=this.getFeatureGroups().find(e=>e.hasLayer(t));n&&n.eachLayer(t=>{if(t instanceof a.Marker){const n=t.getElement();if(n){const t=this.config.dragPolygons.markerBehavior,r=this.config.dragPolygons.markerAnimationDuration;"hide"===t?n.style.display=e?"":"none":"fade"===t&&(n.style.transition=`opacity ${r}ms ease`,n.style.opacity=e?"1":"0")}}})}generateMenuMarkerPopup(t,e){var n;const r=[],o=this.config.menuOperations;if(o.simplify.enabled&&r.push(Uo.createMenuButton("simplify","Simplify",["simplify"])),o.doubleElbows.enabled&&r.push(Uo.createMenuButton("doubleElbows","DoubleElbows",["double-elbows"])),o.bbox.enabled&&r.push(Uo.createMenuButton("bbox","Bounding box",["bbox"])),o.bezier.enabled&&r.push(Uo.createMenuButton("bezier","Curve",["bezier"])),o.scale.enabled&&r.push(Uo.createMenuButton("scale","Scale",["transform-scale"])),o.rotate.enabled&&r.push(Uo.createMenuButton("rotate","Rotate",["transform-rotate"])),null==(n=o.visualOptimizationToggle)?void 0:n.enabled){const{level:t,original:n}=this.getOptimizationMetadataFromFeatureGroup(e);if(n>0||t>0){const e="number"==typeof t&&t>0,n=["toggle-visual-optimization",e?"visual-optimization-state-hidden":"visual-optimization-state-visible"],o=e?"Show all markers":"Hide extra markers";r.push(Uo.createMenuButton("toggleOptimization",o,n))}}const i=Uo.buildMenuPopup(r),s=i.querySelector(".marker-menu-close");if(s){const t=t=>{t.stopPropagation(),t.preventDefault(),this._openMenuPopup?(this.map.closePopup(this._openMenuPopup),this._openMenuPopup=null):this.map.closePopup()};s.addEventListener("click",t),s.addEventListener("touchend",t,{passive:!1})}const l=()=>{this._openMenuPopup&&(this.map.closePopup(this._openMenuPopup),this._openMenuPopup=null)},c=(n,r)=>{n.addEventListener("touchend",n=>{n.preventDefault(),n.stopPropagation(),this.eventManager.emit("polydraw:menu:action",{action:r,latLngs:t,featureGroup:e}),l()}),n.onclick=()=>{this.eventManager.emit("polydraw:menu:action",{action:r,latLngs:t,featureGroup:e}),l()}},h=t=>{const n=this.transformControllers.get(e);n&&(n.cancel(),n.destroy(),this.transformControllers.delete(e));try{const n=new No(this.map,e,t,r=>{this.transformControllers.get(e)===n&&this.transformControllers.delete(e),this.transformModeActive=!1;const o=e.getLayers().find(t=>t instanceof a.Polygon);if(!o)return;if(!r)return void this.setMarkerVisibility(o,!0);this.saveHistoryState&&this.saveHistoryState(t);const i=o.toGeoJSON(),{level:s,original:l}=this.getOptimizationMetadataFromFeatureGroup(e);this.cleanupFeatureGroup(e),this.removeFeatureGroup(e),this.emitPolygonUpdated({operation:"transform",polygon:this.turfHelper.getTurfPolygon(i),allowMerge:!0,optimizationLevel:s,originalOptimizationLevel:l})});this.transformControllers.set(e,n);const r=e.getLayers().find(t=>t instanceof a.Polygon);r&&this.setMarkerVisibility(r,!1),this.transformModeActive=!0}catch{}},u=(t,e)=>{t.addEventListener("touchend",t=>{t.preventDefault(),t.stopPropagation(),h(e),l()}),t.onclick=()=>{h(e),l()}},g=t=>{const n=t=>{t.preventDefault(),t.stopPropagation(),this.toggleOptimizationVisibility(e),l()};t.addEventListener("touchend",n,{passive:!1}),t.onclick=n};r.forEach(t=>{switch(t.getAttribute("data-action-id")){case"simplify":c(t,"simplify");break;case"doubleElbows":c(t,"doubleElbows");break;case"bbox":c(t,"bbox");break;case"bezier":c(t,"bezier");break;case"scale":u(t,"scale");break;case"rotate":u(t,"rotate");break;case"toggleOptimization":g(t)}}),a.DomEvent.disableClickPropagation(i),i.style.pointerEvents="auto",i.querySelectorAll(".marker-menu-button").forEach(t=>{t.style.pointerEvents="auto",t.addEventListener("click",t=>t.stopPropagation())});const p=window.innerWidth<=600,d=fo.isV1()?" leaflet-v1":" leaflet-v2",f=mo.createPopup({closeButton:!1,autoClose:!0,className:`menu-popup${p?" mobile-popup":""}${d}`}).setContent(i);return this._openMenuPopup=f,f}toggleOptimizationVisibility(t){const e=t.getLayers().find(t=>t instanceof a.Polygon);if(!e)return;const n=this.getOptimizationMetadataFromFeatureGroup(t);if(!n.original&&!n.level)return;const r=n.level>0?0:n.original>0?n.original:n.level;if(r===n.level)return;const o=e.toGeoJSON();this.cleanupFeatureGroup(t),this.removeFeatureGroup(t),this.emitPolygonUpdated({operation:"toggleOptimization",polygon:this.turfHelper.getTurfPolygon(o),allowMerge:!0,optimizationLevel:r,originalOptimizationLevel:n.original||r})}getPolygonGeoJSONFromFeatureGroup(t){try{const e=t.getLayers().find(t=>t instanceof a.Polygon);if(!e)throw new Error("No polygon found in feature group");return e.toGeoJSON()}catch(e){return ao()||(e instanceof Error?console.warn("Error getting polygon GeoJSON from feature group:",e.message):console.warn("Error getting polygon GeoJSON from feature group:",e)),{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,1],[1,1],[1,0],[0,0]]]},properties:{}}}}getTotalPolygonPerimeter(t){try{if(!t||!t.geometry)return 0;let e=0;if("Polygon"===t.geometry.type){const n=t.geometry.coordinates;for(const t of n){const n={type:"Feature",geometry:{type:"Polygon",coordinates:[t]},properties:{}};e+=this.turfHelper.getPolygonPerimeter(n)}}else if("MultiPolygon"===t.geometry.type){const n=t.geometry.coordinates;for(const t of n)for(const n of t){const t={type:"Feature",geometry:{type:"Polygon",coordinates:[n]},properties:{}};e+=this.turfHelper.getPolygonPerimeter(t)}}return 1e3*e}catch(e){return ao()||(e instanceof Error?console.warn("Error calculating total polygon perimeter:",e.message):console.warn("Error calculating total polygon perimeter:",e)),1e3*this.turfHelper.getPolygonPerimeter(t)}}generateInfoMarkerPopup(t,e){var n,r;const o=new ho(e,this.config),i=new uo(t,this.config),s=this.config.markers.markerInfoIcon??{},l=!1!==s.showArea,c=!1!==s.showPerimeter,h=!1!==s.useMetrics,u=null==(n=s.areaLabel)?void 0:n.trim(),g=null==(r=s.perimeterLabel)?void 0:r.trim(),p=document.createElement("div");p.classList.add("info-marker-outer-wrapper");const d=document.createElement("div");d.classList.add("info-marker-wrapper");const f=document.createElement("div");f.classList.add("content");const m=document.createElement("div");if(m.classList.add("info-marker-content"),l){const t=h?`${i.metricArea} ${i.metricUnit}`:`${i.imperialArea} ${i.imperialUnit}`,e=document.createElement("div");e.classList.add("info-item","area"),e.innerHTML=u&&u.length>0?`<strong>${u}:</strong> ${t}`:t,m.appendChild(e)}if(c){const t=h?`${o.metricLength} ${o.metricUnit}`:`${o.imperialLength} ${o.imperialUnit}`,e=document.createElement("div");e.classList.add("info-item","perimeter"),e.innerHTML=g&&g.length>0?`<strong>${g}:</strong> ${t}`:t,m.appendChild(e)}f.appendChild(m),p.appendChild(d),d.appendChild(f),a.DomEvent.disableClickPropagation(p),p.style.pointerEvents="auto",p.querySelectorAll("button").forEach(t=>{t.style.pointerEvents="auto",t.addEventListener("click",t=>t.stopPropagation())});const y=window.innerWidth<=600;return mo.createPopup({closeButton:!0,autoClose:!0,className:"info-popup"+(y?" mobile-popup":"")}).setContent(p)}}class Xo{constructor(t){i(this,"turfHelper"),i(this,"map"),i(this,"config"),i(this,"eventManager"),i(this,"getFeatureGroups"),i(this,"saveHistoryState"),i(this,"geometryManager"),i(this,"interactionManager"),this.turfHelper=t.turfHelper,this.map=t.map,this.config=t.config,this.eventManager=t.eventManager,this.getFeatureGroups=t.getFeatureGroups,this.saveHistoryState=t.saveHistoryState,this.initializeSpecializedManagers(t)}initializeSpecializedManagers(t){this.geometryManager=new Do({turfHelper:t.turfHelper,config:t.config}),this.interactionManager=new Ro({turfHelper:t.turfHelper,polygonInformation:t.polygonInformation,map:t.map,config:t.config,modeManager:t.modeManager,eventManager:this.eventManager,saveHistoryState:t.saveHistoryState},{getFeatureGroups:this.getFeatureGroups,addFeatureGroup:t=>this.addFeatureGroupInternal(t),removeFeatureGroup:t=>this.removeFeatureGroupInternal(t)}),this.setupEventForwarding()}setupEventForwarding(){this.eventManager.on("polydraw:draw:cancel",t=>{this.emit("drawCancelled",t)}),this.eventManager.on("polydraw:polygon:updated",t=>{this.handlePolygonModified(t)}),this.eventManager.on("polydraw:menu:action",t=>{this.handleMenuAction(t)}),this.eventManager.on("polydraw:check:intersection",t=>{const e=this.geometryManager.checkPolygonIntersection(t.polygon1,t.polygon2);t.callback(e)}),this.eventManager.on("polydraw:subtract",t=>{this.subtractPolygon(t.subtractPolygon)}),this.eventManager.on("polydraw:polygon:deleted",()=>{this.emit("polygonDeleted",void 0)})}async handlePolygonModified(t){const e=new Set(["addVertex","markerDrag","polygonDrag","polygonClone","toggleOptimization"]),n=!t.operation||!e.has(t.operation);let r=t.allowMerge;t.intelligentMerge&&"markerDrag"===t.operation&&(r=this.shouldAllowIntelligentMerge(t.polygon));const o={simplify:n,noMerge:!r,visualOptimizationLevel:t.optimizationLevel||0,originalOptimizationLevel:t.originalOptimizationLevel,skipKinkProcessing:"markerDrag"===t.operation};await this.addPolygon(t.polygon,o)}async handleMenuAction(t){var e,n,r,o;this.saveHistoryState&&this.saveHistoryState(t.action);const i=this.getCompletePolygonFromFeatureGroup(t.featureGroup),{level:s,original:l}=this.getOptimizationMetadataFromFeatureGroup(t.featureGroup);let c;switch(this.removeFeatureGroupInternal(t.featureGroup),t.action){case"simplify":c=this.geometryManager.simplifyPolygon(i);break;case"bbox":c=this.geometryManager.convertToBoundingBox(i);break;case"doubleElbows":c=this.geometryManager.doubleElbowsPolygon(i);break;case"bezier":c=this.geometryManager.bezierifyPolygon(i);break;default:return}if(c.success&&c.result){const i="bezier"===t.action?(null==(e=this.config.bezier)?void 0:e.visualOptimizationLevel)??10:s,h="bezier"===t.action?(null==(n=this.config.bezier)?void 0:n.visualOptimizationLevel)??10:l,u=await this.addPolygon(c.result,{simplify:!1,visualOptimizationLevel:i,originalOptimizationLevel:h});if("bezier"===t.action&&(null==(r=this.config.bezier)?void 0:r.ghostMarkers)){const t=.001;null==(o=u.featureGroups)||o.forEach(e=>{e.eachLayer(e=>{if(e instanceof a.Polygon){const n=e;n.setStyle({opacity:t,fillOpacity:t}),n._polydrawDragData&&(n._polydrawDragData.originalOpacity=t)}})})}}}get polygonInteractionManager(){return this.interactionManager}on(t,e){this.eventManager.on(t,e)}emit(t,e){this.eventManager.emit(t,e)}async addPolygon(t,e={}){const{polygons:n,skipMerge:r}=this.preparePolygonsForAddition(t,e),o=[];for(const i of n){const t=await this.addPolygonWithMergeHandling(i,e,r);if(!t.success)return t;t.featureGroups&&t.featureGroups.length>0&&o.push(...t.featureGroups)}return{success:!0,featureGroups:o.length>0?o:void 0}}async addPolygonWithMergeHandling(t,e,n){const{noMerge:r=!1}=e;try{return this.isPolygonInsideExistingHole(t)?await this.addPolygonLayer(t,e):this.config.mergePolygons&&!r&&this.getFeatureGroups().length>0&&!n?await this.mergePolygon(t,e):await this.addPolygonLayer(t,e)}catch(o){return{success:!1,error:o instanceof Error?o.message:"Unknown error in addPolygon"}}}preparePolygonsForAddition(t,e={}){let n=!1;try{n=this.turfHelper.hasKinks(t)}catch(r){ao()||console.warn("Error detecting polygon kinks:",r instanceof Error?r.message:String(r))}if(!(!0===e.skipKinkProcessing)&&!this.config.kinks&&n)try{const e=this.turfHelper.getKinks(t);if(e.length>0)return{polygons:e,skipMerge:!1}}catch(r){ao()||console.warn("Error splitting polygon kinks:",r instanceof Error?r.message:String(r))}return{polygons:[t],skipMerge:this.config.kinks&&n}}async subtractPolygon(t,e={}){const{simplify:n=!0,visualOptimizationLevel:r,originalOptimizationLevel:o}=e;try{const e=[];this.getFeatureGroups().forEach(n=>{try{const r=n.toGeoJSON();if(!r||!r.features||!r.features[0])return;const o=r.features[0];if(!o.geometry||!o.geometry.coordinates)return;const i=this.turfHelper.getTurfPolygon(o);this.geometryManager.checkPolygonIntersection(i,t)&&e.push(n)}catch(r){ao()||console.warn("Skipping feature group during intersection check:",r)}});const s=[];for(const a of e)try{const e=a.toGeoJSON(),i=this.turfHelper.getTurfPolygon(e.features[0]),l=this.geometryManager.subtractPolygon(i,t);if(this.removeFeatureGroupInternal(a),l.success&&l.results)for(const t of l.results){const e=await this.addPolygonLayer(t,{simplify:n,visualOptimizationLevel:r,originalOptimizationLevel:o});e.success&&e.featureGroups&&s.push(...e.featureGroups)}}catch(i){ao()||console.warn("Failed subtract operation for one feature group:",i)}return this.emit("polygonSubtracted",{subtractedPolygon:t,affectedFeatureGroups:e,resultFeatureGroups:s}),this.emit("polygonOperationComplete",{operation:"subtract",polygon:t,resultFeatureGroups:s}),{success:!0,featureGroups:s}}catch(i){return{success:!1,error:i instanceof Error?i.message:"Unknown error in subtractPolygon"}}}async addPolygonLayer(t,e={}){const{simplify:n=!0,dynamicTolerance:r=!1,visualOptimizationLevel:o=0,originalOptimizationLevel:i}=e;try{if(!t||!t.geometry||!t.geometry.coordinates)return{success:!1,error:"Invalid polygon data"};const e=new a.FeatureGroup,s=n?this.turfHelper.getSimplified(t,r):t,l=this.normalizeSinglePolygonFeature(s);let c,h,u=o;try{if(c=this.getPolygon(l),!c)return{success:!1,error:"Failed to create polygon"};c._polydrawOptimizationLevel=o,u=i??c._polydrawOptimizationOriginalLevel??o,c._polydrawOptimizationOriginalLevel=u||0,e.addLayer(c),this.interactionManager.suppressDeleteMarkerClicks(250)}catch{return{success:!1,error:"Failed to create polygon layer"}}try{const t=c.getLatLngs();h=this.normalizePolygonCoordinates(t)}catch{h=[]}try{h.forEach((t,n)=>{if(!t||!Array.isArray(t))return;const r=[];if(t.forEach(t=>{Array.isArray(t)&&t.length>=2?r.push({lat:t[1],lng:t[0]}):"object"==typeof t&&null!==t&&"lat"in t&&"lng"in t&&r.push(t)}),0!==r.length)try{if(0===n)this.interactionManager.addMarkers(r,e,{optimizationLevel:o,originalOptimizationLevel:u});else{const t=mo.createPolyline(r,{color:this.config.colors.hole.border,weight:this.config.holeOptions.weight||2,opacity:this.config.holeOptions.opacity||1,fillColor:this.config.colors.hole.fill,fillOpacity:this.config.holeOptions.fillOpacity||.5});e.addLayer(t),this.interactionManager.addHoleMarkers(r,e)}}catch{}})}catch{}try{this.interactionManager.addEdgeClickListeners(c,e)}catch{}this.getFeatureGroups().push(e);try{e.addTo(this.map)}catch{}return this.emit("polygonAdded",{polygon:l,featureGroup:e}),this.emit("polygonOperationComplete",{operation:"add",polygon:l,featureGroup:e}),{success:!0,featureGroups:[e]}}catch(s){return{success:!1,error:s instanceof Error?s.message:"Unknown error in addPolygonLayer"}}}async mergePolygon(t,e={}){try{const n=[],r=[];let o=!1;return this.getFeatureGroups().forEach(e=>{try{const i=e.toGeoJSON();if(!i||!i.features||!i.features[0])return;const s=i.features[0];if(!s.geometry||!s.geometry.coordinates)return;if(this.isPositionArrayofArrays(s.geometry.coordinates))s.geometry.coordinates.forEach(i=>{try{const s=this.turfHelper.getMultiPolygon([i]);o=this.geometryManager.checkPolygonIntersection(s,t),o&&(r.push(e),n.push(s))}catch{}});else try{const i=this.turfHelper.getTurfPolygon(s);o=this.geometryManager.checkPolygonIntersection(i,t),o&&(r.push(e),n.push(i))}catch{}}catch{}}),r.length>0?await this.unionPolygons(r,t,n,e):await this.addPolygonLayer(t,e)}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error in mergePolygon"}}}async unionPolygons(t,e,n,r={}){try{t.forEach(t=>{this.removeFeatureGroupInternal(t)});const o=this.geometryManager.unionPolygons(n,e);if(o.success&&o.result){const t=await this.addPolygonLayer(o.result,r);return this.emit("polygonsUnioned",{originalPolygons:n,resultPolygon:o.result,featureGroups:t.featureGroups}),t}return{success:!1,error:o.error||"Failed to union polygons"}}catch(o){return{success:!1,error:o instanceof Error?o.message:"Unknown error in unionPolygons"}}}shouldAllowIntelligentMerge(t){try{for(const e of this.getFeatureGroups())try{const n=e.toGeoJSON();if(!n||!n.features||!n.features[0])continue;const r=n.features[0];if(!r.geometry||!r.geometry.coordinates)continue;const o=this.turfHelper.getTurfPolygon(r);if(this.geometryManager.checkPolygonIntersection(o,t))return!0}catch{continue}return!1}catch{return!1}}isPolygonInsideExistingHole(t){try{for(const e of this.getFeatureGroups())try{const n=e.toGeoJSON();if(!n||!n.features||!n.features[0])continue;const r=n.features[0];if(!r.geometry||!r.geometry.coordinates)continue;let o=!1,i=[];if("Polygon"===r.geometry.type)o=r.geometry.coordinates.length>1,o&&(i=r.geometry.coordinates.slice(1));else if("MultiPolygon"===r.geometry.type)for(const t of r.geometry.coordinates)t.length>1&&(o=!0,i.push(...t.slice(1)));if(o&&i.length>0)for(const e of i)try{const n=this.turfHelper.createPolygon([e]);if(this.turfHelper.isPolygonCompletelyWithin(t,n))return!0}catch{continue}}catch{continue}return!1}catch{return!1}}normalizePolygonCoordinates(t){if(!Array.isArray(t)||0===t.length)return[];const e=t=>null!==t&&"object"==typeof t&&"lat"in t&&"lng"in t&&"number"==typeof t.lat&&"number"==typeof t.lng,n=t=>{if(!Array.isArray(t))return[];if(t.length>0&&e(t[0]))return[t];const r=[];for(const o of t)if(Array.isArray(o))if(o.length>0&&e(o[0]))r.push(o);else{const t=n(o);r.push(...t)}return r};try{return n(t)}catch{return[]}}isPositionArrayofArrays(t){if(!Array.isArray(t)||0===t.length)return!1;const e=t[0];if(!Array.isArray(e)||0===e.length)return!1;const n=e[0];if(!Array.isArray(n)||0===n.length)return!1;const r=n[0];return this.isPosition(r)}isPosition(t){return Array.isArray(t)&&t.length>=2&&t.every(t=>"number"==typeof t)}getPolygon(t){const e=a.GeoJSON.geometryToLayer(t),n={...this.config.polygonOptions,color:this.config.colors.polygon.border,fillColor:this.config.colors.polygon.fill,weight:this.config.polygonOptions.weight||2,opacity:this.config.polygonOptions.opacity||1,fillOpacity:this.config.polygonOptions.fillOpacity||.2};return e.setStyle(n),e._polydrawUniqueId=mo.util.stamp(e)+"_"+Date.now(),delete e._polydrawDragData,delete e._polydrawOriginalLatLngs,delete e._polydrawCurrentDragSession,delete e._polydrawOriginalMarkerPositions,delete e._polydrawOriginalHoleLinePositions,this.config.modes.dragPolygons&&this.interactionManager.enablePolygonDragging(e,t),e}normalizeSinglePolygonFeature(t){if("MultiPolygon"===t.geometry.type&&1===t.geometry.coordinates.length){const[e]=t.geometry.coordinates;try{return this.turfHelper.createPolygon(e)}catch{return t}}return t}addFeatureGroupInternal(t){this.getFeatureGroups().push(t)}removeFeatureGroupInternal(t){this.cleanupFeatureGroup(t),t.clearLayers();const e=this.getFeatureGroups(),n=e.indexOf(t);n>-1&&e.splice(n,1),this.map.removeLayer(t)}getCompletePolygonFromFeatureGroup(t){try{let e=null;if(t.eachLayer(t=>{t instanceof a.Polygon&&(e=t)}),!e)throw new Error("No polygon found in feature group");return e.toGeoJSON()}catch(e){return ao()||e instanceof Error&&console.warn("Error getting complete polygon GeoJSON from feature group:",e.message),{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,1],[1,1],[1,0],[0,0]]]},properties:{}}}}getOptimizationMetadataFromFeatureGroup(t){if(!t)return{level:0,original:0};let e=0,n=0;return t.eachLayer(t=>{if(t instanceof a.Polygon){const r=t;"number"==typeof r._polydrawOptimizationLevel&&(e=r._polydrawOptimizationLevel||0),"number"==typeof r._polydrawOptimizationOriginalLevel&&(n=r._polydrawOptimizationOriginalLevel||0)}}),!n&&e>0&&(n=e),{level:e,original:n}}updateMarkerDraggableState(){this.interactionManager.updateMarkerDraggableState()}updateAllMarkersForEdgeDeletion(t){this.interactionManager.updateAllMarkersForEdgeDeletion(t)}setModifierKeyHeld(t){this.interactionManager.setModifierKeyHeld(t)}checkPolygonIntersection(t,e){return this.geometryManager.checkPolygonIntersection(t,e)}getPolygonCenter(t){try{if(!t||!t.geometry||!t.geometry.coordinates)return null;let e;if("Polygon"===t.geometry.type)e=t.geometry.coordinates[0];else{if("MultiPolygon"!==t.geometry.type)return null;e=t.geometry.coordinates[0][0]}if(!Array.isArray(e)||0===e.length)return null;let n=0,r=0,o=0;for(const t of e)if(Array.isArray(t)&&t.length>=2){const e=t[0],i=t[1];"number"!=typeof e||"number"!=typeof i||isNaN(e)||isNaN(i)||(r+=e,n+=i,o++)}return 0===o?null:{lat:n/o,lng:r/o}}catch{return null}}getBoundingBox(t){try{if(!t||!t.geometry||!t.geometry.coordinates)return null;let e;if("Polygon"===t.geometry.type)e=t.geometry.coordinates[0];else{if("MultiPolygon"!==t.geometry.type)return null;e=t.geometry.coordinates[0][0]}if(!Array.isArray(e)||0===e.length)return null;let n=1/0,r=-1/0,o=1/0,i=-1/0;for(const t of e)if(Array.isArray(t)&&t.length>=2){const e=t[0],s=t[1];"number"!=typeof e||"number"!=typeof s||isNaN(e)||isNaN(s)||(o=Math.min(o,e),i=Math.max(i,e),n=Math.min(n,s),r=Math.max(r,s))}return n===1/0||r===-1/0||o===1/0||i===-1/0?null:{minLat:n,maxLat:r,minLng:o,maxLng:i}}catch{return null}}addMarker(t,e,n){this.interactionManager.addMarkers(t,e,n)}addHoleMarker(t,e){this.interactionManager.addHoleMarkers(t,e)}addEdgeClickListeners(t,e){this.interactionManager.addEdgeClickListeners(t,e)}enablePolygonDragging(t,e){this.interactionManager.enablePolygonDragging(t,e)}getMarkerIndex(t,e){return 0}ensureMarkerSeparation(t,e){var n,r,o;return{menu:(null==(n=e.menu)?void 0:n.index)??0,delete:(null==(r=e.delete)?void 0:r.index)??1,info:(null==(o=e.info)?void 0:o.index)??2}}findAlternativeMarkerPosition(t,e,n){return(e+1)%t}createDivIcon(t){return mo.createDivIcon({className:t.join(" ")})}getLatLngInfoString(t){return"Latitude: "+t.lat+" Longitude: "+t.lng}generateMenuMarkerPopup(t,e){const n=document.createElement("div");return n.innerHTML="Menu",n}getPolygonGeoJSONFromFeatureGroup(t){return{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,1],[1,1],[1,0],[0,0]]]},properties:{}}}getTotalPolygonPerimeter(t){return 1e3}generateInfoMarkerPopup(t,e){const n=document.createElement("div");return n.innerHTML=`Area: ${t}, Perimeter: ${e}`,n}onMarkerHoverForEdgeDeletion(t,e){}highlightEdgeOnHover(t,e){}onEdgeClick(t,e){}removeFeatureGroup(t){this.removeFeatureGroupInternal(t)}cleanupFeatureGroup(t){this.interactionManager.cleanupFeatureGroup(t)}onPolygonMouseMove(t){}onPolygonMouseUp(t){}updatePolygonAfterDrag(t){}setSubtractVisualMode(t,e){}performModifierSubtract(t,e){try{const n=this.turfHelper.getTurfPolygon(t),r=[];this.getFeatureGroups().forEach(t=>{if(t!==e)try{const e=t.toGeoJSON();if(!e||!e.features||!e.features[0])return;const o=e.features[0];if(!o.geometry||!o.geometry.coordinates)return;const i=this.turfHelper.getTurfPolygon(o);this.geometryManager.checkPolygonIntersection(i,n)&&r.push(t)}catch{}}),this.removeFeatureGroupInternal(e),r.forEach(t=>{try{const e=t.toGeoJSON(),r=this.turfHelper.getTurfPolygon(e.features[0]);this.removeFeatureGroupInternal(t);const o=this.geometryManager.subtractPolygon(r,n);if(o.success&&o.results)for(const t of o.results)this.addPolygonLayer(t,{simplify:!0})}catch{}})}catch{}}}class Yo{constructor(t,e=50){i(this,"undoStack",[]),i(this,"redoStack",[]),i(this,"maxHistorySize",50),i(this,"maxSnapshotSize",5e5),i(this,"maxTotalMemory",5e6),i(this,"currentMemoryUsage",0),i(this,"eventManager"),i(this,"isRestoring",!1),this.eventManager=t,this.maxHistorySize=e}saveState(t,e){if(this.isRestoring)return;const n=this.createSnapshot(t,e),r=this.calculateSnapshotSize(n);n.size=r,this.redoStack=[],r>this.maxSnapshotSize?console.warn(`History snapshot too large (${r} bytes, limit ${this.maxSnapshotSize} bytes). Skipping save.`):(this.undoStack.push(n),this.currentMemoryUsage+=r,this.enforceMemoryBudget(),this.eventManager.emit("polydraw:history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()}))}calculateSnapshotSize(t){try{return 2*JSON.stringify(t).length}catch(e){return console.warn("Error calculating snapshot size:",e),0}}enforceMemoryBudget(){for(;this.undoStack.length>this.maxHistorySize;){const t=this.undoStack.shift();t&&(this.currentMemoryUsage-=this.getSnapshotSize(t))}for(;this.currentMemoryUsage>this.maxTotalMemory&&this.undoStack.length>0;){const t=this.undoStack.shift();t&&(this.currentMemoryUsage-=this.getSnapshotSize(t))}}enforceRedoMemoryBudget(){const t=Math.floor(this.maxHistorySize/2);for(;this.redoStack.length>t;)this.redoStack.shift()}undo(t){if(!this.canUndo())return null;const e=this.createSnapshot(t,"redo-point"),n=this.calculateSnapshotSize(e);e.size=n,n<=this.maxSnapshotSize?(this.redoStack.push(e),this.enforceRedoMemoryBudget()):console.warn(`Current state too large (${n} bytes) to save to redo stack.`);const r=this.undoStack.pop();return this.currentMemoryUsage-=this.getSnapshotSize(r),this.eventManager.emit("polydraw:history:undo",{canUndo:this.canUndo(),canRedo:this.canRedo(),action:r.action}),r}redo(t){if(!this.canRedo())return null;const e=this.createSnapshot(t,"undo-point"),n=this.calculateSnapshotSize(e);e.size=n,n<=this.maxSnapshotSize?(this.undoStack.push(e),this.currentMemoryUsage+=n,this.enforceMemoryBudget()):console.warn(`Current state too large (${n} bytes) to save to undo stack.`),this.enforceRedoMemoryBudget();const r=this.redoStack.pop();return this.eventManager.emit("polydraw:history:redo",{canUndo:this.canUndo(),canRedo:this.canRedo(),action:r.action}),r}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}clear(){this.undoStack=[],this.redoStack=[],this.currentMemoryUsage=0,this.eventManager.emit("polydraw:history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()})}setRestoring(t){this.isRestoring=t}createSnapshot(t,e){const n=[];return t.forEach(t=>{t.eachLayer(t=>{var e;const r=t;if(null==r?void 0:r.toGeoJSON)try{const t=r.toGeoJSON();if(!t)return;const o=null==(e=null==t?void 0:t.geometry)?void 0:e.type;"Polygon"!==o&&"MultiPolygon"!==o||n.push(t)}catch(o){console.warn("Error converting polygon to GeoJSON:",o)}})}),{features:n,timestamp:Date.now(),action:e}}getSnapshotSize(t){if("number"==typeof t.size)return t.size;const e=this.calculateSnapshotSize(t);return t.size=e,e}}class Vo{static calculateAngle(t,e,n){const r=t.lng-e.lng,o=t.lat-e.lat,i=n.lng-e.lng,s=n.lat-e.lat,a=r*i+o*s,l=Math.sqrt(r*r+o*o),c=Math.sqrt(i*i+s*s);if(0===l||0===c)return 0;const h=a/(l*c);return Math.acos(Math.max(-1,Math.min(1,h)))}static calculateDistanceFromLine(t,e,n){const r=e.lng-t.lng,o=e.lat-t.lat,i=n.lng-t.lng,s=n.lat-t.lat,a=r*i+o*s,l=i*i+s*s;if(0===l)return Math.sqrt(r*r+o*o);const c=a/l;let h,u;c<0?(h=t.lng,u=t.lat):c>1?(h=n.lng,u=n.lat):(h=t.lng+c*i,u=t.lat+c*s);const g=e.lng-h,p=e.lat-u;return Math.sqrt(g*g+p*p)}static calculateCentroid(t){return wo.getCenter(t)}static calculateDistance(t,e){const n=t.lng-e.lng,r=t.lat-e.lat;return Math.sqrt(n*n+r*r)}static offsetPolygonCoordinates(t,e,n){return t?Array.isArray(t[0])?t.map(t=>Vo.offsetPolygonCoordinates(t,e,n)):void 0!==t.lat&&void 0!==t.lng?{lat:t.lat+e,lng:t.lng+n}:t.map(t=>Vo.offsetPolygonCoordinates(t,e,n)):t}}class Ko{static convertToCoords(t,e){const n=[];if(t.length>1&&t.length<3){const r=[];e.isWithin(a.GeoJSON.latLngsToCoords(t[t.length-1]),a.GeoJSON.latLngsToCoords(t[0]))?t.forEach(t=>{r.push(a.GeoJSON.latLngsToCoords(t))}):t.forEach(t=>{n.push([a.GeoJSON.latLngsToCoords(t)])}),r.length>=1&&n.push(r)}else if(t.length>2){const r=[];for(let o=1;o<t.length-1;o++){e.isWithin(a.GeoJSON.latLngsToCoords(t[o]),a.GeoJSON.latLngsToCoords(t[0]))?(t.forEach(t=>{r.push(a.GeoJSON.latLngsToCoords(t))}),n.push(r)):t.forEach(t=>{n.push([a.GeoJSON.latLngsToCoords(t)])})}}else n.push([a.GeoJSON.latLngsToCoords(t[0])]);return n}static offsetPolygonCoordinates(t,e,n){return Vo.offsetPolygonCoordinates(t,e,n)}static getLatLngInfoString(t){return"Latitude: "+t.lat+" Longitude: "+t.lng}static convertToLatLng(t){if("object"==typeof t&&null!==t){if("lat"in t&&"lng"in t)return mo.createLatLng(t.lat,t.lng);if("latitude"in t&&"longitude"in t)return mo.createLatLng(t.latitude,t.longitude);if("longitude"in t&&"latitude"in t)return mo.createLatLng(t.latitude,t.longitude);if("lng"in t&&"lat"in t)return mo.createLatLng(t.lat,t.lng)}if(Array.isArray(t)&&t.length>=2){const[e,n]=t;if("number"==typeof e&&"number"==typeof n){const t=Math.abs(e),r=Math.abs(n);return t>90&&r<=90?mo.createLatLng(n,e):r>90&&t<=90?mo.createLatLng(e,n):t>90||r>90?mo.createLatLng(n,e):mo.createLatLng(e,n)}}if("string"==typeof t){const e=t.trim();if(e.includes(",")&&!e.includes("°")&&!e.includes("'")&&!e.includes('"')){const t=e.split(",").map(t=>parseFloat(t.trim()));if(t.length>=2&&!isNaN(t[0])&&!isNaN(t[1]))return this.convertToLatLng(t)}const n=e.match(/(\d+)°(\d+)'(?:(\d+(?:\.\d+)?)")?([NS])\s*,?\s*(\d+)°(\d+)'(?:(\d+(?:\.\d+)?)")?([EW])/i);if(n){const[,t,e,r,o,i,s,a,l]=n,c=parseFloat(t)+parseFloat(e)/60+parseFloat(r||"0")/3600,h=parseFloat(i)+parseFloat(s)/60+parseFloat(a||"0")/3600,u="S"===o.toUpperCase()?-c:c,g="W"===l.toUpperCase()?-h:h;return mo.createLatLng(u,g)}const r=e.match(/(\d+)°(\d+(?:\.\d+)?)'([NS])\s*,?\s*(\d+)°(\d+(?:\.\d+)?)'([EW])/i);if(r){const[,t,e,n,o,i,s]=r,a=parseFloat(t)+parseFloat(e)/60,l=parseFloat(o)+parseFloat(i)/60,c="S"===n.toUpperCase()?-a:a,h="W"===s.toUpperCase()?-l:l;return mo.createLatLng(c,h)}const o=e.match(/(\d+(?:\.\d+)?)°?\s*([NS])\s*,\s*(\d+(?:\.\d+)?)°?\s*([EW])/i);if(o){const[,t,e,n,r]=o,i="S"===e.toUpperCase()?-parseFloat(t):parseFloat(t),s="W"===r.toUpperCase()?-parseFloat(n):parseFloat(n);return mo.createLatLng(i,s)}const i=e.match(/N\s*(\d+(?:\.\d+)?)\s+E\s*(\d+(?:\.\d+)?)/i);if(i){const[,t,e]=i;return mo.createLatLng(parseFloat(t),parseFloat(e))}if(e.match(/(?:UTM\s+)?(\d+)([NS])\s+(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)/i))throw new Error(`UTM coordinates detected: ${e}. UTM conversion requires specialized libraries like proj4js. Please convert to decimal degrees first.`);if(e.match(/(\d+)([A-Z])\s+([A-Z]{2})\s+(\d+)\s+(\d+)/i))throw new Error(`MGRS coordinates detected: ${e}. MGRS conversion requires specialized libraries. Please convert to decimal degrees first.`);if(e.match(/^[23456789CFGHJMPQRVWX]{2,3}[23456789CFGHJMPQRVWX]{3,7}\+[23456789CFGHJMPQRVWX]{2,3}$/i))throw new Error(`Plus Code detected: ${e}. Plus Code conversion requires specialized libraries. Please convert to decimal degrees first.`)}throw new Error(`Unable to convert coordinate: ${JSON.stringify(t)}`)}static convertToLatLngArray(t){return t.map(t=>t.map(t=>t.map(t=>this.convertToLatLng(t))))}}function qo(t,...e){if(!e.length)return t;for(const n of e)if(n)for(const e in n){const r=n[e],o=t[e];if(r&&"object"==typeof r&&!Array.isArray(r)){const n=o&&"object"==typeof o&&!Array.isArray(o)?o:{};t[e]=qo(n,r)}else void 0!==r&&(t[e]=r)}return t}class jo extends a.Control{constructor(t){super(t),i(this,"map"),i(this,"tracer",null),i(this,"turfHelper"),i(this,"subContainer"),i(this,"config"),i(this,"mapStateService"),i(this,"eventManager"),i(this,"polygonInformation"),i(this,"modeManager"),i(this,"polygonDrawManager"),i(this,"polygonMutationManager"),i(this,"historyManager"),i(this,"arrayOfFeatureGroups",[]),i(this,"drawMode",c.Off),i(this,"drawModeListeners",[]),i(this,"_boundKeyDownHandler"),i(this,"_boundKeyUpHandler"),i(this,"isModifierKeyHeld",!1),i(this,"modifierModeOverride",null),i(this,"isDrawingInProgress",!1),i(this,"mapEventsAttached",!1),i(this,"drawEventsAttached",!1),i(this,"controlEvents",new WeakSet),i(this,"lastControlPointerDown",null),i(this,"_boundTouchMove"),i(this,"_boundTouchEnd"),i(this,"_boundTouchStart"),i(this,"_boundPointerDown"),i(this,"_boundPointerMove"),i(this,"_boundPointerUp"),i(this,"_lastTapTime",0),i(this,"_lastTapLatLng",null),i(this,"_tapTimeout",null),i(this,"pointerEventsHandled","undefined"!=typeof window&&"PointerEvent"in window&&fo.isV2()),i(this,"_configReady",null),i(this,"_componentsInitialized",!1),i(this,"_isControlMounted",!1),i(this,"_initRequestId",0),i(this,"_handleActivateToggle",()=>{const t=this.getContainer();if(!t)return;const e=t.querySelector(".icon-activate");if(mo.domUtil.hasClass(e,"active"))mo.domUtil.removeClass(e,"active"),this.subContainer&&(this.subContainer.style.maxHeight="0px");else if(mo.domUtil.addClass(e,"active"),this.subContainer){const t=this.subContainer.scrollHeight;this.subContainer.style.maxHeight=`${t||250}px`}this.updateActivateButtonIndicator()}),i(this,"_handleDrawClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.Add?(this.setDrawMode(c.Add),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handleSubtractClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.Subtract?(this.setDrawMode(c.Subtract),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handleCloneClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.Clone?(this.setDrawMode(c.Clone),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handleEraseClick",t=>{this.map.closePopup(),t&&(t.preventDefault(),t.stopPropagation()),0!==this.arrayOfFeatureGroups.length&&(this.saveHistory("eraseAll"),this.removeAllFeatureGroups())}),i(this,"_handlePointToPointClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.PointToPoint?(this.setDrawMode(c.PointToPoint),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handlePointToPointSubtractClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.PointToPointSubtract?(this.setDrawMode(c.PointToPointSubtract),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handleUndoClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.undo()}),i(this,"_handleRedoClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.redo()}),i(this,"onMarkerHoverForEdgeDeletionEvent",t=>{if(!this.isModifierKeyHeld)return;const e=t.target;e&&(e.style.backgroundColor=this.config.colors.edgeDeletion.hover,e.style.borderColor=this.config.colors.edgeDeletion.hover,e.classList.add("edge-deletion-hover"))}),i(this,"onMarkerLeaveForEdgeDeletionEvent",t=>{const e=t.target;e&&(e.style.backgroundColor="",e.style.borderColor="",e.classList.remove("edge-deletion-hover"))});const e=structuredClone(u);this.config=qo(e,(null==t?void 0:t.config)??{}),this.warnIfUsingDeprecatedConfiguration(null==t?void 0:t.config),(null==t?void 0:t.configPath)?this._configReady=this.loadExternalConfig(t.configPath,null==t?void 0:t.config):(this.initializeComponents(),this._configReady=Promise.resolve())}onAdd(t){const e=t,n=a.Browser;e._onResize=()=>{},n.touch&&n.mobile&&(e.tap=!1),this.map=t,this._isControlMounted=!0;const r=++this._initRequestId;this.setupKeyboardHandlers();const o=mo.domUtil.create("div","leaflet-control leaflet-bar");return this.initializeUI(o),this.createTracer(),this.completeInitialization(r),o}completeInitialization(t){var e;const n=()=>{this._isControlMounted&&t===this._initRequestId&&(this.initializeManagers(),this.setDrawMode(this.config.defaultMode),this.setupEventListeners())};this._componentsInitialized?n():null==(e=this._configReady)||e.then(()=>{n()}).catch(()=>{})}onRemove(t){this._isControlMounted=!1,this._initRequestId+=1,this.comprehensiveCleanup()}comprehensiveCleanup(){this.events(!1),this.drawStartedEvents(!1),this.removeKeyboardHandlers(),this.tracer&&(this.map.removeLayer(this.tracer),this.tracer=null),this.arrayOfFeatureGroups.forEach(t=>{try{this.polygonMutationManager&&this.polygonMutationManager.cleanupFeatureGroup(t),this.map.removeLayer(t)}catch(e){console.warn("Error cleaning up feature group:",e)}}),this.arrayOfFeatureGroups.length=0,this.polygonInformation&&this.polygonInformation.deletePolygonInformationStorage(),this.drawModeListeners.length=0,this._boundKeyDownHandler&&(this._boundKeyDownHandler=void 0),this._boundKeyUpHandler&&(this._boundKeyUpHandler=void 0),this._boundTouchMove&&(this._boundTouchMove=void 0),this._boundTouchEnd&&(this._boundTouchEnd=void 0),this._boundTouchStart&&(this._boundTouchStart=void 0),this._boundPointerDown&&(this._boundPointerDown=void 0),this._boundPointerMove&&(this._boundPointerMove=void 0),this._boundPointerUp&&(this._boundPointerUp=void 0),this._tapTimeout&&(clearTimeout(this._tapTimeout),this._tapTimeout=null),this.drawMode=c.Off,this.isModifierKeyHeld=!1,this._lastTapTime=0,this.subContainer=void 0}addTo(t){return super.addTo(t),this}getFeatureGroups(){return this.arrayOfFeatureGroups}async undo(){if(!this.historyManager.canUndo())return;const t=this.historyManager.undo(this.arrayOfFeatureGroups);t&&await this.restoreFromSnapshot(t)}isPolygonAction(t){return"simplify"===t||"doubleElbows"===t||"bbox"===t||"bezier"===t||"scale"===t||"rotate"===t||"toggleOptimization"===t}shouldCaptureHistory(t){var e,n;const r=null==(e=this.config.history)?void 0:e.capture;return!r||(this.isPolygonAction(t)?!1!==(null==(n=r.polygonActions)?void 0:n[t]):!1!==r[t])}saveHistory(t){this.shouldCaptureHistory(t)&&this.historyManager.saveState(this.arrayOfFeatureGroups,t)}async redo(){if(!this.historyManager.canRedo())return;const t=this.historyManager.redo(this.arrayOfFeatureGroups);t&&await this.restoreFromSnapshot(t)}async addPredefinedPolygon(t,e){const n=Ko.convertToLatLngArray(t);if(!n||0===n.length)throw new Error("Cannot add empty polygon array");if(!this.map)throw new Error("Map not initialized");if(!this.polygonMutationManager)throw new Error("PolygonMutationManager not initialized");const r=(null==e?void 0:e.visualOptimizationLevel)??0;for(const[i,s]of n.entries()){if(!s||!s[0]||s[0].length<4)throw new Error(`Invalid polygon data at index ${i}: A polygon must have at least 3 unique vertices.`);try{const t=s.map(t=>t.map(t=>[t.lng,t.lat])),e=this.turfHelper.getMultiPolygon([t]);this.saveHistory("addPredefinedPolygon");const n=await this.polygonMutationManager.addPolygon(e,{simplify:!1,noMerge:!1,visualOptimizationLevel:r});if(!n.success)throw console.error("Error adding polygon via manager:",n.error),new Error(n.error||"Failed to add polygon");this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups)}catch(o){throw console.error("Error adding auto polygon:",o),o}}}async addPredefinedGeoJSONs(t,e){for(const n of t){const{type:t,coordinates:r}=n.geometry;if("MultiPolygon"===t)for(const n of r){const t=n.map(t=>t.map(t=>mo.createLatLng(t[1],t[0])));await this.addPredefinedPolygon([t],e)}else if("Polygon"===t){const t=r.map(t=>t.map(t=>mo.createLatLng(t[1],t[0])));await this.addPredefinedPolygon([t],e)}}}setDrawMode(t,e){const n=this.drawMode;this._updateDrawModeState(t);if(!((null==e?void 0:e.preserveActiveDraw)&&this.isDrawingInProgress&&(n===c.Add&&t===c.Subtract||n===c.Subtract&&t===c.Add))){(t===c.PointToPoint||t===c.PointToPointSubtract)&&n!==c.PointToPoint&&n!==c.PointToPointSubtract&&this.isDrawingInProgress&&this.stopDraw(),n!==c.PointToPoint&&n!==c.PointToPointSubtract||t===c.PointToPoint||t===c.PointToPointSubtract?(t===c.Off||t!==c.PointToPoint&&t!==c.PointToPointSubtract)&&this.stopDraw():(this.polygonDrawManager.clearP2pMarkers(),this.stopDraw())}this.map&&(this._updateUIAfterDrawModeChange(t),this._updateMapInteractions())}getDrawMode(){return this.modeManager.getCurrentMode()}on(t,e){this.eventManager.on(t,e)}off(t,e){this.eventManager.off(t,e)}removeAllFeatureGroups(){this.arrayOfFeatureGroups.forEach(t=>{try{this.polygonMutationManager&&this.polygonMutationManager.cleanupFeatureGroup(t),this.map.removeLayer(t)}catch{}}),this.arrayOfFeatureGroups.length=0,this.polygonInformation.deletePolygonInformationStorage(),this.polygonInformation.updatePolygons(),this.updateActivateButtonIndicator()}cleanup(){this.map&&this.comprehensiveCleanup()}initializeUI(t){!function(t){const e=document.createElement("style");e.innerHTML=`\n .leaflet-control a { background-color: ${t.colors.styles.controlButton.backgroundColor}; color: ${t.colors.styles.controlButton.color}; display: flex; align-items: center; justify-content: center; }\n .leaflet-control a:hover { background-color: ${t.colors.styles.controlButtonHover.backgroundColor}; }\n .leaflet-control a.active { background-color: ${t.colors.styles.controlButtonActive.backgroundColor}; color: ${t.colors.styles.controlButtonActive.color}; }\n .polydraw-indicator-active { background-color: ${t.colors.styles.indicatorActive.backgroundColor} !important; }\n .crosshair-cursor-enabled { cursor: crosshair !important; }\n .crosshair-cursor-enabled * { cursor: crosshair !important; }\n .leaflet-polydraw-p2p-marker { background-color: ${t.colors.styles.p2pMarker.backgroundColor}; border: 2px solid ${t.colors.styles.p2pMarker.borderColor}; border-radius: 50%; box-sizing: border-box; }\n .leaflet-polydraw-p2p-first-marker { position: relative; }\n .leaflet-polydraw-p2p-first-marker:hover { transform: scale(1.5); transition: all 0.2s ease; }\n .leaflet-polydraw-p2p-first-marker-ready[data-p2p-mode="add"]:hover { background-color: ${t.colors.p2p.closingMarker}; border-color: ${t.colors.p2p.closingMarker}; cursor: pointer; }\n .leaflet-polydraw-p2p-first-marker-ready[data-p2p-mode="subtract"]:hover { background-color: ${t.colors.dragPolygons.subtract}; border-color: ${t.colors.dragPolygons.subtract}; cursor: pointer; }\n `,document.head.appendChild(e)}(this.config),a.DomEvent.disableClickPropagation(t),a.DomEvent.on(t,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(t,"pointerdown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"pointerup",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stopPropagation);const e=t=>{this.controlEvents.add(t),this.markControlPointerDown(t)},n=t=>{this.clearControlPointerDown(t)};this.pointerEventsHandled?(t.addEventListener("pointerdown",e,{capture:!0,passive:!0}),t.addEventListener("pointerup",n,{capture:!0,passive:!0}),t.addEventListener("pointercancel",n,{capture:!0,passive:!0})):(t.addEventListener("mousedown",e,{capture:!0,passive:!0}),t.addEventListener("mouseup",n,{capture:!0,passive:!0}),t.addEventListener("touchstart",e,{capture:!0,passive:!0}),t.addEventListener("touchend",n,{capture:!0,passive:!0}),t.addEventListener("touchcancel",n,{capture:!0,passive:!0})),t.style.display="flex",t.style.flexDirection="column-reverse",t.style.pointerEvents="auto",t.style.position="relative",t.style.zIndex="1000",this.subContainer=mo.domUtil.create("div","sub-buttons",t),this.subContainer.setAttribute("data-polydraw","sub-buttons"),this.subContainer.style.maxHeight="0px",this.subContainer.style.overflow="hidden",this.subContainer.style.transition="max-height 0.3s ease",this.subContainer.style.pointerEvents="auto",this.subContainer.style.position="relative",function(t,e,n,r,o,i,s,l,c,h,u,g,p,d){const f=mo.domUtil.create("a","icon-activate",t);if(f.href="#",f.title="Activate",f.setAttribute("data-polydraw","activate-button"),Mo(f,vo.activate),f.dataset.activeIcon=vo.activate,f.dataset.collapsedIcon=vo.collapse,a.DomEvent.on(f,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(f,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(f,"click",a.DomEvent.stop).on(f,"click",r),n.modes.draw){const t=mo.domUtil.create("a","icon-draw",e);t.href="#",t.title="Draw",t.setAttribute("data-polydraw","draw-button"),Mo(t,vo.draw),a.DomEvent.on(t,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stop),a.DomEvent.on(t,"click",o)}if(n.modes.subtract){const t=mo.domUtil.create("a","icon-subtract",e);t.href="#",t.title="Subtract",t.setAttribute("data-polydraw","subtract-button"),Mo(t,vo.subtract),a.DomEvent.on(t,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stop),a.DomEvent.on(t,"click",i)}if(n.modes.clonePolygons){const t=mo.domUtil.create("a","icon-clone",e);t.href="#",t.title="Clone",t.setAttribute("data-polydraw","clone-button"),Mo(t,vo.clone),a.DomEvent.on(t,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stop),a.DomEvent.on(t,"click",s)}if(n.modes.p2p){const t=mo.domUtil.create("a","icon-p2p",e);t.href="#",t.title="Point to Point",t.setAttribute("data-polydraw","p2p-button"),Mo(t,vo.p2p),a.DomEvent.on(t,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stop),a.DomEvent.on(t,"click",c)}if(n.modes.p2pSubtract){const t=mo.domUtil.create("a","icon-p2p-subtract",e);t.href="#",t.title="Point to Point Subtract",t.setAttribute("data-polydraw","p2p-subtract-button"),Mo(t,vo.p2pSubtract),a.DomEvent.on(t,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stop),a.DomEvent.on(t,"click",h)}if(n.modes.deleteAll){const t=mo.domUtil.create("a","icon-erase",e);t.href="#",t.title="Erase All",t.setAttribute("data-polydraw","erase-button"),Mo(t,vo.erase),a.DomEvent.on(t,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(t,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stopPropagation),a.DomEvent.on(t,"click",a.DomEvent.stop),a.DomEvent.on(t,"click",l)}const m=mo.domUtil.create("a","icon-undo",e);m.href="#",m.title="Undo (Ctrl+Z / Cmd+Z)",Mo(m,vo.undo),a.DomEvent.on(m,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(m,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(m,"click",a.DomEvent.stopPropagation),a.DomEvent.on(m,"click",a.DomEvent.stop),a.DomEvent.on(m,"click",u);const y=mo.domUtil.create("a","icon-redo",e);y.href="#",y.title="Redo (Ctrl+Y / Cmd+Shift+Z)",Mo(y,vo.redo),a.DomEvent.on(y,"mousedown",a.DomEvent.stopPropagation),a.DomEvent.on(y,"touchstart",a.DomEvent.stopPropagation),a.DomEvent.on(y,"click",a.DomEvent.stopPropagation),a.DomEvent.on(y,"click",a.DomEvent.stop),a.DomEvent.on(y,"click",g);const v=(t,e)=>{t?(m.style.opacity="1",m.style.pointerEvents="auto"):(m.style.opacity="0.3",m.style.pointerEvents="none"),e?(y.style.opacity="1",y.style.pointerEvents="auto"):(y.style.opacity="0.3",y.style.pointerEvents="none")};p.on("polydraw:history:changed",t=>{v(t.canUndo,t.canRedo)}),p.on("polydraw:history:undo",t=>{v(t.canUndo,t.canRedo)}),p.on("polydraw:history:redo",t=>{v(t.canUndo,t.canRedo)}),v(d.canUndo(),d.canRedo())}(t,this.subContainer,this.config,this._handleActivateToggle,this._handleDrawClick,this._handleSubtractClick,this._handleCloneClick,this._handleEraseClick,this._handlePointToPointClick,this._handlePointToPointSubtractClick,this._handleUndoClick,this._handleRedoClick,this.eventManager,this.historyManager),this.ensureButtonTouchResponsiveness(t);this.drawModeListeners.push(e=>{const n=t.querySelector(".icon-draw"),r=t.querySelector(".icon-subtract"),o=t.querySelector(".icon-clone");n&&n.classList.toggle("active",e===c.Add),r&&r.classList.toggle("active",e===c.Subtract),o&&o.classList.toggle("active",e===c.Clone)})}setupEventListeners(){this.polygonMutationManager.on("polygonOperationComplete",()=>{this.updateActivateButtonIndicator(),this.modeManager.updateStateForMode(c.Off),this.drawMode=c.Off,this.emitDrawModeChanged(),this.updateMarkerDraggableState();const t=this.modeManager.shouldShowCrosshairCursor(),e=this.modeManager.canPerformAction("mapDrag"),n=this.modeManager.canPerformAction("mapZoom"),r=this.modeManager.canPerformAction("mapDoubleClickZoom");t?mo.domUtil.addClass(this.map.getContainer(),"crosshair-cursor-enabled"):mo.domUtil.removeClass(this.map.getContainer(),"crosshair-cursor-enabled"),this.events(!1),this.setLeafletMapEvents(e,r,n),this.applyTracerStyle(c.Off)}),this.polygonMutationManager.on("polygonDeleted",()=>{this.updateActivateButtonIndicator()}),this.eventManager.on("polydraw:polygon:created",async t=>{this.stopDraw(),t.isPointToPoint?(this.saveHistory("pointToPoint"),t.mode===c.PointToPointSubtract?await this.polygonMutationManager.subtractPolygon(t.polygon,{simplify:!1}):await this.polygonMutationManager.addPolygon(t.polygon,{simplify:!1,noMerge:!1})):await this.handleFreehandDrawCompletion(t.polygon),this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups)}),this.eventManager.on("polydraw:draw:cancel",()=>{this.stopDraw(),this.setDrawMode(this.config.defaultMode)})}createTracer(){this.tracer=mo.createPolyline([],{...this.config.polyLineOptions,color:this.config.colors.polyline});try{this.tracer.addTo(this.map)}catch{}}applyTracerStyle(t){if(this.tracer)try{const e=t===c.Subtract||t===c.PointToPointSubtract,n=this.getTracerBaseStyle(e);let r,o="";switch(t){case c.Add:o=this.config.colors.polyline,r=void 0;break;case c.Subtract:o=this.config.colors.subtractLine,r=void 0;break;case c.PointToPoint:o=this.config.colors.polyline,r="5, 5";break;case c.PointToPointSubtract:o=this.config.colors.subtractLine,r="5, 5";break;case c.Off:default:o="",r=void 0}this.tracer.setStyle({...n,color:o,dashArray:r})}catch{}}getTracerBaseStyle(t){const e=t?this.config.subtractLineOptions:this.config.polyLineOptions;return{weight:e.weight,opacity:e.opacity}}initializeManagers(){this.polygonDrawManager=new Lo({turfHelper:this.turfHelper,map:this.map,config:this.config,modeManager:this.modeManager,eventManager:this.eventManager,tracer:this.tracer}),this.polygonMutationManager=new Xo({turfHelper:this.turfHelper,polygonInformation:this.polygonInformation,map:this.map,config:this.config,modeManager:this.modeManager,eventManager:this.eventManager,getFeatureGroups:()=>this.arrayOfFeatureGroups,saveHistoryState:t=>{this.saveHistory(t)}})}async loadExternalConfig(t,e){try{const n=await fetch(t);if(!n.ok)throw new Error(`Failed to load config from ${t}: ${n.status} ${n.statusText}`);const r=await n.json();this.warnIfUsingDeprecatedConfiguration(r),e&&this.warnIfUsingDeprecatedConfiguration(e),this.config=qo(structuredClone(u),r??{},e??{}),this.initializeComponents()}catch(n){console.warn("Failed to load external config, falling back to default + inline config:",n),this.config=qo(structuredClone(u),e??{}),this.initializeComponents()}}_updateDrawModeState(t){var e;this.drawMode=t,this.modeManager.updateStateForMode(t),this.emitDrawModeChanged(),this.updateMarkerDraggableState(),(null==(e=this.polygonDrawManager)?void 0:e.refreshP2PMarkerState)&&this.polygonDrawManager.refreshP2PMarkerState()}_updateUIAfterDrawModeChange(t){this.modeManager.shouldShowCrosshairCursor()?mo.domUtil.addClass(this.map.getContainer(),"crosshair-cursor-enabled"):mo.domUtil.removeClass(this.map.getContainer(),"crosshair-cursor-enabled"),this.applyTracerStyle(t)}shouldEnableDrawEvents(t){return t===c.Add||t===c.Subtract||t===c.PointToPoint||t===c.PointToPointSubtract}_updateMapInteractions(){const t=this.modeManager.canPerformAction("mapDrag"),e=this.modeManager.canPerformAction("mapZoom"),n=this.modeManager.canPerformAction("mapDoubleClickZoom");this.events(this.shouldEnableDrawEvents(this.drawMode)),this.setLeafletMapEvents(t,n,e)}async restoreFromSnapshot(t){this.historyManager.setRestoring(!0);try{this.removeAllFeatureGroups();for(const e of t.features)await this.polygonMutationManager.addPolygon(e,{noMerge:!0,simplify:!1});this.polygonInformation.updatePolygons()}finally{this.historyManager.setRestoring(!1)}}initializeComponents(){this._componentsInitialized||(this._componentsInitialized=!0,this.turfHelper=new go(this.config),this.mapStateService=new xo,this.eventManager=new ko,this.polygonInformation=new bo(this.mapStateService),this.modeManager=new Eo(this.config,this.eventManager),this.historyManager=new Yo(this.eventManager,this.config.maxHistorySize),this.polygonInformation.onPolygonInfoUpdated(t=>{this.updateActivateButtonIndicator()}),this._boundKeyDownHandler=this.handleKeyDown.bind(this))}emitDrawModeChanged(){this.eventManager.emit("polydraw:mode:change",{mode:this.modeManager.getCurrentMode()});for(const t of this.drawModeListeners)t(this.modeManager.getCurrentMode())}updateMarkerDraggableState(){const t=this.modeManager.canPerformAction("markerDrag");this.arrayOfFeatureGroups.forEach(e=>{e.eachLayer(e=>{if(e instanceof a.Marker){const n=e;try{n.options.draggable=t,n.dragging&&(t?n.dragging.enable():n.dragging.disable())}catch{}}})})}stopDraw(){this.isDrawingInProgress=!1,this.resetTracker(),this.drawStartedEvents(!1)}setLeafletMapEvents(t,e,n){t?this.map.dragging.enable():this.map.dragging.disable(),e?this.map.doubleClickZoom.enable():this.map.doubleClickZoom.disable(),n?this.map.scrollWheelZoom.enable():this.map.scrollWheelZoom.disable()}resetTracker(){var t;null==(t=this.tracer)||t.setLatLngs([])}drawStartedEvents(t){if(this.drawEventsAttached===t)return;this.drawEventsAttached=t;const e=this.pointerEventsHandled,n=t?"on":"off";e||(this.map[n]("mousemove",this.mouseMove,this),this.map[n]("mouseup",this.mouseUpLeave,this)),t?(e||(this._boundTouchMove||(this._boundTouchMove=t=>this.mouseMove(t)),this._boundTouchEnd||(this._boundTouchEnd=t=>this.mouseUpLeave(t)),this.map.getContainer().addEventListener("touchmove",this._boundTouchMove,{passive:!1}),this.map.getContainer().addEventListener("touchend",this._boundTouchEnd,{passive:!1})),e&&(this._boundPointerMove||(this._boundPointerMove=t=>this.mouseMove(t)),this._boundPointerUp||(this._boundPointerUp=t=>this.mouseUpLeave(t)),this.map.getContainer().addEventListener("pointermove",this._boundPointerMove,{passive:!1}),this.map.getContainer().addEventListener("pointerup",this._boundPointerUp,{passive:!1}))):(this._boundTouchMove&&this.map.getContainer().removeEventListener("touchmove",this._boundTouchMove),this._boundTouchEnd&&this.map.getContainer().removeEventListener("touchend",this._boundTouchEnd),this._boundPointerMove&&this.map.getContainer().removeEventListener("pointermove",this._boundPointerMove),this._boundPointerUp&&this.map.getContainer().removeEventListener("pointerup",this._boundPointerUp))}events(t){if(this.mapEventsAttached===t)return;this.mapEventsAttached=t;const e=this.pointerEventsHandled,n=t?"on":"off";e||this.map[n]("mousedown",this.mouseDown,this),this.map[n]("dblclick",this.handleDoubleClick,this),t?(e||(this._boundTouchStart||(this._boundTouchStart=t=>this.handleTouchStart(t)),this.map.getContainer().addEventListener("touchstart",this._boundTouchStart,{passive:!1})),e&&(this._boundPointerDown||(this._boundPointerDown=t=>this.mouseDown(t)),this.map.getContainer().addEventListener("pointerdown",this._boundPointerDown,{passive:!1}))):(this._boundTouchStart&&this.map.getContainer().removeEventListener("touchstart",this._boundTouchStart),this._boundPointerDown&&this.map.getContainer().removeEventListener("pointerdown",this._boundPointerDown))}handleTouchStart(t){const e=Date.now(),n=e-this._lastTapTime;if(this.modeManager.getCurrentMode()===c.PointToPoint||this.modeManager.getCurrentMode()===c.PointToPointSubtract){this._tapTimeout&&(clearTimeout(this._tapTimeout),this._tapTimeout=null);const r=Co.extractCoordinates(t,this.map);return this.isP2PDoubleTapClose(r,n)?(this.handleDoubleTap(t),this._lastTapTime=0,void(this._lastTapLatLng=null)):(this._lastTapTime=e,this._lastTapLatLng=r,void this.mouseDown(t))}this._tapTimeout&&(clearTimeout(this._tapTimeout),this._tapTimeout=null),n<300&&n>0?(this.handleDoubleTap(t),this._lastTapTime=0):(this._lastTapTime=e,this._lastTapLatLng=Co.extractCoordinates(t,this.map),this.pointerEventsHandled||(this._tapTimeout=window.setTimeout(()=>{this.mouseDown(t),this._tapTimeout=null},300)))}isP2PDoubleTapClose(t,e){if(!t||!this._lastTapLatLng)return!1;if(e<=0||e>300)return!1;const n=this.map.latLngToLayerPoint(this._lastTapLatLng),r=this.map.latLngToLayerPoint(t);return n.distanceTo(r)<=36}handleDoubleTap(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.polygonDrawManager.handleDoubleTap(t)}mouseDown(t){var e;const n=Co.normalizeEvent(t);if(this.isEventFromControl(n))return;if(Co.shouldPreventDefault(n)&&(null==(e=n.preventDefault)||e.call(n)),this.modeManager.isInOffMode())return;const r=Co.extractCoordinates(n,this.map);if(!r)return;const o=this.modeManager.getCurrentMode()===c.PointToPoint||this.modeManager.getCurrentMode()===c.PointToPointSubtract;if(o&&"touch"===n.pointerType){const e=Date.now(),n=e-this._lastTapTime;if(this.isP2PDoubleTapClose(r,n))return this.handleDoubleTap(t),this._lastTapTime=0,void(this._lastTapLatLng=null);this._lastTapTime=e,this._lastTapLatLng=r}o?this.polygonDrawManager.handlePointToPointClick(r):this.tracer&&(this.isDrawingInProgress||(this.tracer.setLatLngs([r]),this.startDraw()))}isEventFromControl(t){var e,n;const r=this.getContainer();if(!r)return!1;const o=null==t?void 0:t.originalEvent;if(o&&this.controlEvents.has(o))return!0;if(t instanceof Event&&this.controlEvents.has(t))return!0;if(this.isRecentControlPointer(t))return!0;const i=(null==(e=null==o?void 0:o.composedPath)?void 0:e.call(o))??(null==(n=null==t?void 0:t.composedPath)?void 0:n.call(t));if(i&&i.some(t=>t instanceof Node&&r.contains(t)))return!0;const s=(null==o?void 0:o.target)??(null==t?void 0:t.target);if(s instanceof Node&&r.contains(s))return!0;const a=t=>{if(!t||"object"!=typeof t)return null;const e=t;if(e.touches&&e.touches.length>0)return{x:e.touches[0].clientX,y:e.touches[0].clientY};const n=t;if("number"==typeof n.clientX&&"number"==typeof n.clientY)return{x:n.clientX,y:n.clientY};const r=t;if(r.containerPoint&&this.map){const t=this.map.getContainer().getBoundingClientRect();return{x:t.left+r.containerPoint.x,y:t.top+r.containerPoint.y}}const o=t;if(o.latlng&&this.map){const t=this.map.latLngToContainerPoint(o.latlng),e=this.map.getContainer().getBoundingClientRect();return{x:e.left+t.x,y:e.top+t.y}}return null},l=a(null==t?void 0:t.originalEvent)??a(t);if(!l)return!1;const c=r.getBoundingClientRect();if(l.x>=c.left&&l.x<=c.right&&l.y>=c.top&&l.y<=c.bottom)return!0;const h=document.elementFromPoint(l.x,l.y);return!(!h||!r.contains(h))}extractPointerInfo(t){if(!t||"object"!=typeof t)return null;const e=t;if("number"==typeof e.pointerId)return{id:e.pointerId,pointerType:"string"==typeof e.pointerType?e.pointerType:"unknown"};if("string"==typeof e.type){if(e.type.startsWith("touch"))return{id:-2,pointerType:"touch"};if(e.type.startsWith("mouse"))return{id:-1,pointerType:"mouse"}}return null}markControlPointerDown(t){const e=this.extractPointerInfo(t);e&&(this.lastControlPointerDown={...e,time:Date.now()})}clearControlPointerDown(t){if(!this.lastControlPointerDown)return;const e=this.extractPointerInfo(t);e&&e.id===this.lastControlPointerDown.id&&(this.lastControlPointerDown=null)}isRecentControlPointer(t){if(!this.lastControlPointerDown)return!1;const e=null==t?void 0:t.originalEvent,n=this.extractPointerInfo(e)??this.extractPointerInfo(t);if(!n)return!1;const r="touch"===this.lastControlPointerDown.pointerType?450:80;return!(Date.now()-this.lastControlPointerDown.time>r)&&(n.pointerType===this.lastControlPointerDown.pointerType&&("mouse"===n.pointerType||n.id===this.lastControlPointerDown.id))}mouseMove(t){var e;if(!this.isDrawingInProgress)return;const n=Co.normalizeEvent(t);Co.shouldPreventDefault(n)&&(null==(e=n.preventDefault)||e.call(n));const r=Co.extractCoordinates(n,this.map);r&&this.tracer&&this.tracer.addLatLng(r)}async mouseUpLeave(t){var e;if(!this.isDrawingInProgress)return;const n=Co.normalizeEvent(t);if(Co.shouldPreventDefault(n)&&(null==(e=n.preventDefault)||e.call(n)),this.polygonInformation.deletePolygonInformationStorage(),!this.tracer)return void this.stopDraw();const r=this.tracer.toGeoJSON();if(!r||!r.geometry||!r.geometry.coordinates||r.geometry.coordinates.length<3)return void this.stopDraw();let o;try{o=this.turfHelper.createPolygonFromTrace(r)}catch{return void this.stopDraw()}if(o&&o.geometry&&o.geometry.coordinates&&0!==o.geometry.coordinates.length){this.stopDraw();try{switch(this.modeManager.getCurrentMode()){case c.Add:{const t=await this.polygonMutationManager.addPolygon(o,{simplify:!0,noMerge:!1});t.success||console.error("Error adding polygon via manager:",t.error);break}case c.Subtract:{const t=await this.polygonMutationManager.subtractPolygon(o);t.success||console.error("Error subtracting polygon via manager:",t.error);break}}}catch(i){console.error("Error in mouseUpLeave polygon operation:",i)}this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups)}else this.stopDraw()}async handleFreehandDrawCompletion(t){try{switch(this.saveHistory("freehand"),this.modeManager.getCurrentMode()){case c.Add:{const e=await this.polygonMutationManager.addPolygon(t,{simplify:!0,noMerge:!1});e.success||console.error("Error adding polygon via manager:",e.error);break}case c.Subtract:{const e=await this.polygonMutationManager.subtractPolygon(t);e.success||console.error("Error subtracting polygon via manager:",e.error);break}}}catch(e){console.error("Error in mouseUpLeave polygon operation:",e)}}startDraw(){this.isDrawingInProgress||(this.isDrawingInProgress=!0,this.drawStartedEvents(!0))}setupKeyboardHandlers(){this._boundKeyDownHandler||(this._boundKeyDownHandler=this.handleKeyDown.bind(this)),this._boundKeyUpHandler||(this._boundKeyUpHandler=this.handleKeyUp.bind(this)),document.addEventListener("keydown",this._boundKeyDownHandler),document.addEventListener("keyup",this._boundKeyUpHandler)}removeKeyboardHandlers(){this._boundKeyDownHandler&&document.removeEventListener("keydown",this._boundKeyDownHandler),this._boundKeyUpHandler&&document.removeEventListener("keyup",this._boundKeyUpHandler)}handleKeyDown(t){const e=t.ctrlKey||t.metaKey;if(e&&"z"===t.key&&!t.shiftKey)return t.preventDefault(),void this.undo();if(e&&("y"===t.key||"z"===t.key&&t.shiftKey))return t.preventDefault(),void this.redo();"Escape"===t.key&&(this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.polygonDrawManager.cancelPointToPointDrawing());this.isModifierKeyPressed(t)&&!this.isModifierKeyHeld&&(this.isModifierKeyHeld=!0,this.polygonDrawManager.setModifierKey(!0),this.updateAllMarkersForEdgeDeletion(!0),this.applyModifierModeOverride(!0))}handleKeyUp(t){!this.isModifierKeyPressed(t)&&this.isModifierKeyHeld&&(this.isModifierKeyHeld=!1,this.polygonDrawManager.setModifierKey(!1),this.updateAllMarkersForEdgeDeletion(!1),this.applyModifierModeOverride(!1))}applyModifierModeOverride(t){if(t){if(this.modifierModeOverride)return;if(!this.config.modifierSubtractMode)return;const t=this.modeManager.getCurrentMode();return void(t===c.Add?(this.modifierModeOverride={from:t,to:c.Subtract},this.setDrawMode(c.Subtract,{preserveActiveDraw:!0})):t===c.PointToPoint&&(this.modifierModeOverride={from:t,to:c.PointToPointSubtract},this.setDrawMode(c.PointToPointSubtract,{preserveActiveDraw:!0})))}if(!this.modifierModeOverride)return;const{from:e,to:n}=this.modifierModeOverride;this.modifierModeOverride=null,this.modeManager.getCurrentMode()===n&&this.setDrawMode(e,{preserveActiveDraw:!0})}updateAllMarkersForEdgeDeletion(t){this.arrayOfFeatureGroups.forEach(e=>{e.eachLayer(e=>{e instanceof a.Marker&&this.updateMarkerForEdgeDeletion(e,t)})})}updateMarkerForEdgeDeletion(t,e){const n=t.getElement();n&&(e?(n.addEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),n.addEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent)):(n.removeEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),n.removeEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent),n.style.backgroundColor="",n.style.borderColor=""))}handleDoubleClick(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||(a.DomEvent.stop(t),this.polygonDrawManager.handleDoubleClick(t))}isModifierKeyPressed(t){return navigator.userAgent.toLowerCase().includes("mac")?t.metaKey:t.ctrlKey}ensureButtonTouchResponsiveness(t){t.querySelectorAll("a").forEach(t=>{t.style.pointerEvents="auto",t.style.touchAction="manipulation",t.style.position="relative",t.style.zIndex="1";const e=t=>{t.stopPropagation(),t.target.style.pointerEvents="auto"};t.addEventListener("touchstart",e,{passive:!0}),t.addEventListener("touchend",e,{passive:!0})})}updateActivateButtonIndicator(){if("function"!=typeof this.getContainer)return;const t=this.getContainer();if(!t)return;const e=t.querySelector(".icon-activate");if(!e)return;const n=this.arrayOfFeatureGroups.length>0,r=!mo.domUtil.hasClass(e,"active"),o=mo.domUtil.hasClass(e,"active")?e.dataset.collapsedIcon:e.dataset.activeIcon;o&&this.applyActivateButtonIcon(e,o);const i=n&&r;i?mo.domUtil.addClass(e,"polydraw-indicator-active"):mo.domUtil.removeClass(e,"polydraw-indicator-active");const s=this.config.colors.styles.controlButton.backgroundColor,a=this.config.colors.styles.controlButton.color,l=this.config.colors.styles.indicatorActive.backgroundColor;e.style.backgroundColor=i?l:s,e.style.color=a}applyActivateButtonIcon(t,e){yo(t,e)}warnIfUsingDeprecatedConfiguration(t){var e,n,r;if(!t)return;const o=null==(e=t.polygonCreation)?void 0:e.simplification,i=t.simplification,s=!!i&&(Object.prototype.hasOwnProperty.call(i,"simplifyTolerance")||Object.prototype.hasOwnProperty.call(i,"dynamicMode"));(o||s)&&console.warn("[Leaflet.Polydraw] Legacy simplification settings detected. Please migrate to `config.simplification` with `mode`, `simple`, and `dynamic` blocks.");const a=null==(n=t.markers)?void 0:n.visualOptimization;a&&(void 0!==a.useAngles||void 0!==a.useBoundingBox||void 0!==a.useDistance||void 0!==a.thresholdBoundingBox||void 0!==a.thresholdDistance||void 0!==a.sharpAngleThreshold)&&console.warn("[Leaflet.Polydraw] `markers.visualOptimization` is deprecated. Prefer `visualOptimizationLevel` when adding predefined polygons."),"buffer"===(null==(r=t.polygonCreation)?void 0:r.method)&&console.warn('[Leaflet.Polydraw] `polygonCreation.method: "buffer"` is deprecated and no longer supported. Falling back to "concaveman". Use "concaveman" or "direct" instead.')}}const Wo=t=>{if(t){if("undefined"!=typeof globalThis){globalThis.L||(globalThis.L=t)}t.control&&(t.control.polydraw=function(t){return new jo(t)}),fo.reset()}};if("undefined"!=typeof globalThis){const t=globalThis.L;t&&Wo(t)}t.default=jo,t.leafletAdapter=mo,t.registerWithLeaflet=Wo,Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("leaflet")):"function"==typeof define&&define.amd?define(["exports","leaflet"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).LeafletPolydraw={},t.L)}(this,function(t,e){"use strict";var r,o,n=Object.defineProperty,i=(t,e,r)=>((t,e,r)=>e in t?n(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r)(t,"symbol"!=typeof e?e+"":e,r);function a(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const r in t)if("default"!==r){const o=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,o.get?o:{enumerable:!0,get:()=>t[r]})}return e.default=t,Object.freeze(e)}const s=a(e);var l=(t=>(t.V1="1.x",t.V2="2.x",t))(l||{}),c=(t=>(t[t.Off=0]="Off",t[t.Add=1]="Add",t[t.Edit=2]="Edit",t[t.Subtract=4]="Subtract",t[t.AppendMarker=8]="AppendMarker",t[t.LoadPredefined=16]="LoadPredefined",t[t.PointToPoint=32]="PointToPoint",t[t.PointToPointSubtract=64]="PointToPointSubtract",t[t.Clone=128]="Clone",t))(c||{}),h=(t=>(t[t.SouthWest=0]="SouthWest",t[t.South=1]="South",t[t.SouthEast=2]="SouthEast",t[t.East=3]="East",t[t.NorthEast=4]="NorthEast",t[t.North=5]="North",t[t.NorthWest=6]="NorthWest",t[t.West=7]="West",t[t.Hole=8]="Hole",t))(h||{});const u={mergePolygons:!0,kinks:!1,tools:{default:c.Off,draw:!0,subtract:!0,p2p:!0,p2pSubtract:!0,clone:!0,erase:!0},modes:{attachElbow:!0,dragElbow:!0,dragPolygons:!0,edgeDeletion:!0},modifierSubtractMode:!0,interaction:{drag:{opacity:.7,dragCursor:"move",hoverCursor:"grab",markerBehavior:"hide",markerAnimationDuration:200,modifierSubtract:{keys:{windows:"ctrlKey",mac:"metaKey",linux:"ctrlKey"},hideMarkersOnDrag:!0}},edgeDeletion:{keys:{windows:"ctrlKey",mac:"metaKey",linux:"ctrlKey"},minVertices:3}},markers:{deleteMarker:!0,infoMarker:!0,menuMarker:!0,coordsTitle:!0,zIndexOffset:0,markerIcon:{styleClasses:["polygon-marker"],zIndexOffset:null},holeIcon:{styleClasses:["polygon-marker","hole"],zIndexOffset:null},markerInfoIcon:{position:h.East,showArea:!0,showPerimeter:!0,useMetrics:!0,usePerimeterMinValue:!1,areaLabel:"Area",perimeterLabel:"Perimeter",values:{min:{metric:"50",imperial:"100"},unknown:{metric:"-",imperial:"-"}},units:{unknownUnit:"",metric:{onlyMetrics:!0,perimeter:{m:"m",km:"km"},area:{m2:"m²",km2:"km²",daa:"daa",ha:"ha"}},imperial:{perimeter:{feet:"ft",yards:"yd",miles:"mi"},area:{feet2:"ft²",yards2:"yd²",acres:"ac",miles2:"mi²"}}},styleClasses:["polygon-marker","info"],zIndexOffset:1e4},markerMenuIcon:{position:h.South,styleClasses:["polygon-marker","menu"],zIndexOffset:1e4},markerDeleteIcon:{position:h.North,styleClasses:["polygon-marker","delete"],zIndexOffset:1e4},holeMarkers:{menuMarker:!1,deleteMarker:!0,infoMarker:!1},visualOptimization:{toleranceMin:5e-6,toleranceMax:.005,curve:1.35}},styles:{polyline:{weight:2,opacity:1,color:"#50622b"},subtractLine:{weight:2,opacity:1,color:"#D9460F"},polygon:{weight:2,opacity:1,fillOpacity:.2,smoothFactor:.3,noClip:!0,color:"#50622b",fillColor:"#b4cd8a"},hole:{weight:2,opacity:1,fillOpacity:.5,color:"#aa0000",fillColor:"#ffcccc"},ui:{controlButton:{backgroundColor:"#fff",color:"#000"},controlButtonHover:{backgroundColor:"#f4f4f4"},controlButtonActive:{backgroundColor:"rgb(128, 218, 255)",color:"#fff"},indicatorActive:{backgroundColor:"#ffcc00"},p2pMarker:{backgroundColor:"#fff",borderColor:"#50622b"},p2pClosingMarker:{color:"#4CAF50"},edgeHover:{color:"#7a9441"},edgeDeletion:{color:"#D9460F"},dragSubtract:{color:"#D9460F"}}},polygonCreation:{algorithm:"concaveman"},simplification:{strategy:"simple",simple:{tolerance:1e-4,highQuality:!1},dynamic:{baseTolerance:1e-4,highQuality:!1,fractionGuard:.9,multiplier:2}},polygonTools:{simplify:{enabled:!0,processHoles:!0},doubleElbows:{enabled:!0,processHoles:!0},bbox:{enabled:!0,processHoles:!0,addMidPointMarkers:!0},bezier:{enabled:!0,resolution:1e4,sharpness:.75,resampleMultiplier:10,maxNodes:1e3,visualOptimizationLevel:10,ghostMarkers:!1},scale:{enabled:!0},rotate:{enabled:!0},visualOptimizationToggle:{enabled:!0}},tooltips:{enabled:!0,delayMs:500,direction:"left",backgroundColor:"#645d5d",color:"#ffffff"},history:{capture:{batch:!0,freehand:!0,pointToPoint:!0,addPredefinedPolygon:!0,eraseAll:!0,markerDrag:!0,polygonDrag:!0,polygonClone:!0,addVertex:!0,removeVertex:!0,removeHole:!0,modifierSubtract:!0,deletePolygon:!0,layerDelete:!0,layerReorder:!0,polygonActions:{simplify:!0,doubleElbows:!0,bbox:!0,bezier:!0,scale:!0,rotate:!0,toggleOptimization:!0}},maxSize:50}},g=6371e3,d=6371,p=3959,f=Math.PI/180,y=180/Math.PI;Math.PI;function m(t,e={}){return{type:"Feature",geometry:{type:"Point",coordinates:t},properties:e}}function v(t,e={}){return{type:"Feature",geometry:{type:"LineString",coordinates:t},properties:e}}function M(t,e={}){return{type:"Feature",geometry:{type:"Polygon",coordinates:t},properties:e}}function w(t,e={}){return{type:"Feature",geometry:{type:"MultiPolygon",coordinates:t},properties:e}}function b(t){return{type:"FeatureCollection",features:t}}function P(t){if("Polygon"===t.geometry.type)return[t.geometry.coordinates];if("MultiPolygon"===t.geometry.type)return t.geometry.coordinates;throw new Error("Feature must be a Polygon or MultiPolygon")}function L(t){let e=1/0,r=1/0,o=-1/0,n=-1/0;const i=t=>{if(Array.isArray(t[0]))t.forEach(t=>i(t));else{const[i,a]=t;e=Math.min(e,i),r=Math.min(r,a),o=Math.max(o,i),n=Math.max(n,a)}},a=t=>{if("GeometryCollection"===t.type){return void t.geometries.forEach(a)}i(t.coordinates)};return a(t.geometry),[e,r,o,n]}function k(t,e,r="kilometers"){const o=Array.isArray(t)?t:t.geometry.coordinates,n=Array.isArray(e)?e:e.geometry.coordinates,[i,a]=o,[s,l]=n,c="miles"===r?p:"meters"===r?g:d,h=S(l-a),u=S(s-i),f=Math.sin(h/2)*Math.sin(h/2)+Math.cos(S(a))*Math.cos(S(l))*Math.sin(u/2)*Math.sin(u/2);return c*(2*Math.atan2(Math.sqrt(f),Math.sqrt(1-f)))}function x(t,e){const r=Array.isArray(t)?t:t.geometry.coordinates,o=Array.isArray(e)?e:e.geometry.coordinates,[n,i]=r,[a,s]=o;return m([(n+a)/2,(i+s)/2])}function E(t){const e=P(t);let r=0,o=0,n=0;for(const i of e)for(const t of i)for(const e of t)r+=e[0],o+=e[1],n++;return m([r/n,o/n])}function S(t){return t*f}var D=6371008.8,C={centimeters:637100880,centimetres:637100880,degrees:360/(2*Math.PI),feet:20902260.511392,inches:39.37*D,kilometers:6371.0088,kilometres:6371.0088,meters:D,metres:D,miles:3958.761333810546,millimeters:6371008800,millimetres:6371008800,nauticalmiles:D/1852,radians:1,yards:6967335.223679999};function I(t,e,r={}){const o={type:"Feature"};return(0===r.id||r.id)&&(o.id=r.id),r.bbox&&(o.bbox=r.bbox),o.properties=e||{},o.geometry=t,o}function A(t,e,r={}){if(!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!B(t[0])||!B(t[1]))throw new Error("coordinates must contain numbers");return I({type:"Point",coordinates:t},e,r)}function O(t,e,r={}){for(const o of t){if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(o[o.length-1].length!==o[0].length)throw new Error("First and last Position are not equivalent.");for(let t=0;t<o[o.length-1].length;t++)if(o[o.length-1][t]!==o[0][t])throw new Error("First and last Position are not equivalent.")}return I({type:"Polygon",coordinates:t},e,r)}function F(t,e,r={}){if(t.length<2)throw new Error("coordinates must be an array of two or more positions");return I({type:"LineString",coordinates:t},e,r)}function T(t,e={}){const r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function _(t,e,r={}){return I({type:"MultiPolygon",coordinates:t},e,r)}function H(t){return 180*(t%(2*Math.PI))/Math.PI}function G(t){return t%360*Math.PI/180}function B(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}function z(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function N(t,e,r){if(null!==t)for(var o,n,i,a,s,l,c,h,u=0,g=0,d=t.type,p="FeatureCollection"===d,f="Feature"===d,y=p?t.features.length:1,m=0;m<y;m++){s=(h=!!(c=p?t.features[m].geometry:f?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var v=0;v<s;v++){var M=0,w=0;if(null!==(a=h?c.geometries[v]:c)){l=a.coordinates;var b=a.type;switch(u=!r||"Polygon"!==b&&"MultiPolygon"!==b?0:1,b){case null:break;case"Point":if(!1===e(l,g,m,M,w))return!1;g++,M++;break;case"LineString":case"MultiPoint":for(o=0;o<l.length;o++){if(!1===e(l[o],g,m,M,w))return!1;g++,"MultiPoint"===b&&M++}"LineString"===b&&M++;break;case"Polygon":case"MultiLineString":for(o=0;o<l.length;o++){for(n=0;n<l[o].length-u;n++){if(!1===e(l[o][n],g,m,M,w))return!1;g++}"MultiLineString"===b&&M++,"Polygon"===b&&w++}"Polygon"===b&&M++;break;case"MultiPolygon":for(o=0;o<l.length;o++){for(w=0,n=0;n<l[o].length;n++){for(i=0;i<l[o][n].length-u;i++){if(!1===e(l[o][n][i],g,m,M,w))return!1;g++}w++}M++}break;case"GeometryCollection":for(o=0;o<a.geometries.length;o++)if(!1===N(a.geometries[o],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function U(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function R(t,e){var r,o,n,i,a,s,l,c,h,u,g=0,d="FeatureCollection"===t.type,p="Feature"===t.type,f=d?t.features.length:1;for(r=0;r<f;r++){for(s=d?t.features[r].geometry:p?t.geometry:t,c=d?t.features[r].properties:p?t.properties:{},h=d?t.features[r].bbox:p?t.bbox:void 0,u=d?t.features[r].id:p?t.id:void 0,a=(l=!!s&&"GeometryCollection"===s.type)?s.geometries.length:1,n=0;n<a;n++)if(null!==(i=l?s.geometries[n]:s))switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(i,g,c,h,u))return!1;break;case"GeometryCollection":for(o=0;o<i.geometries.length;o++)if(!1===e(i.geometries[o],g,c,h,u))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,g,c,h,u))return!1;g++}}function X(t,e){R(t,function(t,r,o,n,i){var a,s=null===t?null:t.type;switch(s){case null:case"Point":case"LineString":case"Polygon":return!1!==e(I(t,o,{bbox:n,id:i}),r,0)&&void 0}switch(s){case"MultiPoint":a="Point";break;case"MultiLineString":a="LineString";break;case"MultiPolygon":a="Polygon"}for(var l=0;l<t.coordinates.length;l++){var c=t.coordinates[l];if(!1===e(I({type:a,coordinates:c},o),r,l))return!1}})}function Y(t,e,r){var o=r,n=!1;return function(t,e){X(t,function(t,r,o){var n=0;if(t.geometry){var i=t.geometry.type;if("Point"!==i&&"MultiPoint"!==i){var a,s=0,l=0,c=0;return!1!==N(t,function(i,h,u,g,d){if(void 0===a||r>s||g>l||d>c)return a=i,s=r,l=g,c=d,void(n=0);var p=F([a,i],t.properties);if(!1===e(p,r,o,d,n))return!1;n++,a=i})&&void 0}}})}(t,function(t,i,a,s,l){o=!1===n&&void 0===r?t:e(o,t,i,a,s,l),n=!0}),o}function V(t){return function(t,e,r){var o=r;return R(t,function(t,r,n,i,a){o=e(o,t,r,n,i,a)}),o}(t,(t,e)=>t+function(t){let e,r=0;switch(t.type){case"Polygon":return q(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)r+=q(t.coordinates[e]);return r;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e),0)}function q(t){let e=0;if(t&&t.length>0){e+=Math.abs($(t[0]));for(let r=1;r<t.length;r++)e-=Math.abs($(t[r]))}return e}var j=20294876564838.72,K=Math.PI/180;function $(t){const e=t.length-1;if(e<=2)return 0;let r=0,o=0;for(;o<e;){const n=t[o],i=t[o+1===e?0:o+1],a=t[o+2>=e?(o+2)%e:o+2],s=n[0]*K,l=i[1]*K;r+=(a[0]*K-s)*Math.sin(l),o++}return r*j}var W=V;function J(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function Z(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var e=t.default;if("function"==typeof e){var r=function t(){return this instanceof t?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};r.prototype=e.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(e){var o=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(r,e,o.get?o:{enumerable:!0,get:function(){return t[e]}})}),r}var Q,tt={exports:{}},et={exports:{}};function rt(){return Q||(Q=1,et.exports=function(){function t(t,o,n,i,a){!function t(r,o,n,i,a){for(;i>n;){if(i-n>600){var s=i-n+1,l=o-n+1,c=Math.log(s),h=.5*Math.exp(2*c/3),u=.5*Math.sqrt(c*h*(s-h)/s)*(l-s/2<0?-1:1);t(r,o,Math.max(n,Math.floor(o-l*h/s+u)),Math.min(i,Math.floor(o+(s-l)*h/s+u)),a)}var g=r[o],d=n,p=i;for(e(r,n,o),a(r[i],g)>0&&e(r,n,i);d<p;){for(e(r,d,p),d++,p--;a(r[d],g)<0;)d++;for(;a(r[p],g)>0;)p--}0===a(r[n],g)?e(r,n,p):e(r,++p,i),p<=o&&(n=p+1),o<=p&&(i=p-1)}}(t,o,n||0,i||t.length-1,a||r)}function e(t,e,r){var o=t[e];t[e]=t[r],t[r]=o}function r(t,e){return t<e?-1:t>e?1:0}var o=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function n(t,e,r){if(!r)return e.indexOf(t);for(var o=0;o<e.length;o++)if(r(t,e[o]))return o;return-1}function i(t,e){a(t,0,t.children.length,e,t)}function a(t,e,r,o,n){n||(n=p(null)),n.minX=1/0,n.minY=1/0,n.maxX=-1/0,n.maxY=-1/0;for(var i=e;i<r;i++){var a=t.children[i];s(n,t.leaf?o(a):a)}return n}function s(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function l(t,e){return t.minX-e.minX}function c(t,e){return t.minY-e.minY}function h(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function u(t){return t.maxX-t.minX+(t.maxY-t.minY)}function g(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function d(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function f(e,r,o,n,i){for(var a=[r,o];a.length;)if(!((o=a.pop())-(r=a.pop())<=n)){var s=r+Math.ceil((o-r)/n/2)*n;t(e,s,r,o,i),a.push(r,s,s,o)}}return o.prototype.all=function(){return this._all(this.data,[])},o.prototype.search=function(t){var e=this.data,r=[];if(!d(t,e))return r;for(var o=this.toBBox,n=[];e;){for(var i=0;i<e.children.length;i++){var a=e.children[i],s=e.leaf?o(a):a;d(t,s)&&(e.leaf?r.push(a):g(t,s)?this._all(a,r):n.push(a))}e=n.pop()}return r},o.prototype.collides=function(t){var e=this.data;if(!d(t,e))return!1;for(var r=[];e;){for(var o=0;o<e.children.length;o++){var n=e.children[o],i=e.leaf?this.toBBox(n):n;if(d(t,i)){if(e.leaf||g(t,i))return!0;r.push(n)}}e=r.pop()}return!1},o.prototype.load=function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var e=0;e<t.length;e++)this.insert(t[e]);return this}var r=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===r.height)this._splitRoot(this.data,r);else{if(this.data.height<r.height){var o=this.data;this.data=r,r=o}this._insert(r,this.data.height-r.height-1,!0)}else this.data=r;return this},o.prototype.insert=function(t){return t&&this._insert(t,this.data.height-1),this},o.prototype.clear=function(){return this.data=p([]),this},o.prototype.remove=function(t,e){if(!t)return this;for(var r,o,i,a=this.data,s=this.toBBox(t),l=[],c=[];a||l.length;){if(a||(a=l.pop(),o=l[l.length-1],r=c.pop(),i=!0),a.leaf){var h=n(t,a.children,e);if(-1!==h)return a.children.splice(h,1),l.push(a),this._condense(l),this}i||a.leaf||!g(a,s)?o?(r++,a=o.children[r],i=!1):a=null:(l.push(a),c.push(r),r=0,o=a,a=a.children[0])}return this},o.prototype.toBBox=function(t){return t},o.prototype.compareMinX=function(t,e){return t.minX-e.minX},o.prototype.compareMinY=function(t,e){return t.minY-e.minY},o.prototype.toJSON=function(){return this.data},o.prototype.fromJSON=function(t){return this.data=t,this},o.prototype._all=function(t,e){for(var r=[];t;)t.leaf?e.push.apply(e,t.children):r.push.apply(r,t.children),t=r.pop();return e},o.prototype._build=function(t,e,r,o){var n,a=r-e+1,s=this._maxEntries;if(a<=s)return i(n=p(t.slice(e,r+1)),this.toBBox),n;o||(o=Math.ceil(Math.log(a)/Math.log(s)),s=Math.ceil(a/Math.pow(s,o-1))),(n=p([])).leaf=!1,n.height=o;var l=Math.ceil(a/s),c=l*Math.ceil(Math.sqrt(s));f(t,e,r,c,this.compareMinX);for(var h=e;h<=r;h+=c){var u=Math.min(h+c-1,r);f(t,h,u,l,this.compareMinY);for(var g=h;g<=u;g+=l){var d=Math.min(g+l-1,u);n.children.push(this._build(t,g,d,o-1))}}return i(n,this.toBBox),n},o.prototype._chooseSubtree=function(t,e,r,o){for(;o.push(e),!e.leaf&&o.length-1!==r;){for(var n=1/0,i=1/0,a=void 0,s=0;s<e.children.length;s++){var l=e.children[s],c=h(l),u=(g=t,d=l,(Math.max(d.maxX,g.maxX)-Math.min(d.minX,g.minX))*(Math.max(d.maxY,g.maxY)-Math.min(d.minY,g.minY))-c);u<i?(i=u,n=c<n?c:n,a=l):u===i&&c<n&&(n=c,a=l)}e=a||e.children[0]}var g,d;return e},o.prototype._insert=function(t,e,r){var o=r?t:this.toBBox(t),n=[],i=this._chooseSubtree(o,this.data,e,n);for(i.children.push(t),s(i,o);e>=0&&n[e].children.length>this._maxEntries;)this._split(n,e),e--;this._adjustParentBBoxes(o,n,e)},o.prototype._split=function(t,e){var r=t[e],o=r.children.length,n=this._minEntries;this._chooseSplitAxis(r,n,o);var a=this._chooseSplitIndex(r,n,o),s=p(r.children.splice(a,r.children.length-a));s.height=r.height,s.leaf=r.leaf,i(r,this.toBBox),i(s,this.toBBox),e?t[e-1].children.push(s):this._splitRoot(r,s)},o.prototype._splitRoot=function(t,e){this.data=p([t,e]),this.data.height=t.height+1,this.data.leaf=!1,i(this.data,this.toBBox)},o.prototype._chooseSplitIndex=function(t,e,r){for(var o,n,i,s,l,c,u,g=1/0,d=1/0,p=e;p<=r-e;p++){var f=a(t,0,p,this.toBBox),y=a(t,p,r,this.toBBox),m=(n=f,i=y,s=void 0,l=void 0,c=void 0,u=void 0,s=Math.max(n.minX,i.minX),l=Math.max(n.minY,i.minY),c=Math.min(n.maxX,i.maxX),u=Math.min(n.maxY,i.maxY),Math.max(0,c-s)*Math.max(0,u-l)),v=h(f)+h(y);m<g?(g=m,o=p,d=v<d?v:d):m===g&&v<d&&(d=v,o=p)}return o||r-e},o.prototype._chooseSplitAxis=function(t,e,r){var o=t.leaf?this.compareMinX:l,n=t.leaf?this.compareMinY:c;this._allDistMargin(t,e,r,o)<this._allDistMargin(t,e,r,n)&&t.children.sort(o)},o.prototype._allDistMargin=function(t,e,r,o){t.children.sort(o);for(var n=this.toBBox,i=a(t,0,e,n),l=a(t,r-e,r,n),c=u(i)+u(l),h=e;h<r-e;h++){var g=t.children[h];s(i,t.leaf?n(g):g),c+=u(i)}for(var d=r-e-1;d>=e;d--){var p=t.children[d];s(l,t.leaf?n(p):p),c+=u(l)}return c},o.prototype._adjustParentBBoxes=function(t,e,r){for(var o=r;o>=0;o--)s(e[o],t)},o.prototype._condense=function(t){for(var e=t.length-1,r=void 0;e>=0;e--)0===t[e].children.length?e>0?(r=t[e-1].children).splice(r.indexOf(t[e]),1):this.clear():i(t[e],this.toBBox)},o}()),et.exports}function ot(t,e){return t<e?-1:t>e?1:0}const nt=Z(Object.freeze(Object.defineProperty({__proto__:null,default:class{constructor(t=[],e=ot){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let r=(this.length>>1)-1;r>=0;r--)this._down(r)}push(t){this.data.push(t),this.length++,this._up(this.length-1)}pop(){if(0===this.length)return;const t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){const{data:e,compare:r}=this,o=e[t];for(;t>0;){const n=t-1>>1,i=e[n];if(r(o,i)>=0)break;e[t]=i,t=n}e[t]=o}_down(t){const{data:e,compare:r}=this,o=this.length>>1,n=e[t];for(;t<o;){let o=1+(t<<1),i=e[o];const a=o+1;if(a<this.length&&r(e[a],i)<0&&(o=a,i=e[a]),r(i,n)>=0)break;e[t]=i,t=o}e[t]=n}}},Symbol.toStringTag,{value:"Module"})));var it,at,st,lt,ct,ht={exports:{}};function ut(){if(ct)return ht.exports;ct=1;var t=at?it:(at=1,it=function(t,e,r,o){var n=t[0],i=t[1],a=!1;void 0===r&&(r=0),void 0===o&&(o=e.length);for(var s=(o-r)/2,l=0,c=s-1;l<s;c=l++){var h=e[r+2*l+0],u=e[r+2*l+1],g=e[r+2*c+0],d=e[r+2*c+1];u>i!=d>i&&n<(g-h)*(i-u)/(d-u)+h&&(a=!a)}return a}),e=lt?st:(lt=1,st=function(t,e,r,o){var n=t[0],i=t[1],a=!1;void 0===r&&(r=0),void 0===o&&(o=e.length);for(var s=o-r,l=0,c=s-1;l<s;c=l++){var h=e[l+r][0],u=e[l+r][1],g=e[c+r][0],d=e[c+r][1];u>i!=d>i&&n<(g-h)*(i-u)/(d-u)+h&&(a=!a)}return a});return ht.exports=function(r,o,n,i){return o.length>0&&Array.isArray(o[0])?e(r,o,n,i):t(r,o,n,i)},ht.exports.nested=e,ht.exports.flat=t,ht.exports}var gt,dt,pt={exports:{}};function ft(){return gt||(gt=1,function(t){const e=134217729,r=33306690738754706e-32;function o(t,e,r,o,n){let i,a,s,l,c=e[0],h=o[0],u=0,g=0;h>c==h>-c?(i=c,c=e[++u]):(i=h,h=o[++g]);let d=0;if(u<t&&g<r)for(h>c==h>-c?(s=i-((a=c+i)-c),c=e[++u]):(s=i-((a=h+i)-h),h=o[++g]),i=a,0!==s&&(n[d++]=s);u<t&&g<r;)h>c==h>-c?(s=i-((a=i+c)-(l=a-i))+(c-l),c=e[++u]):(s=i-((a=i+h)-(l=a-i))+(h-l),h=o[++g]),i=a,0!==s&&(n[d++]=s);for(;u<t;)s=i-((a=i+c)-(l=a-i))+(c-l),c=e[++u],i=a,0!==s&&(n[d++]=s);for(;g<r;)s=i-((a=i+h)-(l=a-i))+(h-l),h=o[++g],i=a,0!==s&&(n[d++]=s);return 0===i&&0!==d||(n[d++]=i),d}function n(t){return new Float64Array(t)}const i=33306690738754716e-32,a=22204460492503146e-32,s=11093356479670487e-47,l=n(4),c=n(8),h=n(12),u=n(16),g=n(4);t.orient2d=function(t,n,d,p,f,y){const m=(n-y)*(d-f),v=(t-f)*(p-y),M=m-v;if(0===m||0===v||m>0!=v>0)return M;const w=Math.abs(m+v);return Math.abs(M)>=i*w?M:-function(t,n,i,d,p,f,y){let m,v,M,w,b,P,L,k,x,E,S,D,C,I,A,O,F,T;const _=t-p,H=i-p,G=n-f,B=d-f;b=(A=(k=_-(L=(P=e*_)-(P-_)))*(E=B-(x=(P=e*B)-(P-B)))-((I=_*B)-L*x-k*x-L*E))-(S=A-(F=(k=G-(L=(P=e*G)-(P-G)))*(E=H-(x=(P=e*H)-(P-H)))-((O=G*H)-L*x-k*x-L*E))),l[0]=A-(S+b)+(b-F),b=(C=I-((D=I+S)-(b=D-I))+(S-b))-(S=C-O),l[1]=C-(S+b)+(b-O),b=(T=D+S)-D,l[2]=D-(T-b)+(S-b),l[3]=T;let z=function(t,e){let r=e[0];for(let o=1;o<t;o++)r+=e[o];return r}(4,l),N=a*y;if(z>=N||-z>=N)return z;if(m=t-(_+(b=t-_))+(b-p),M=i-(H+(b=i-H))+(b-p),v=n-(G+(b=n-G))+(b-f),w=d-(B+(b=d-B))+(b-f),0===m&&0===v&&0===M&&0===w)return z;if(N=s*y+r*Math.abs(z),(z+=_*w+B*m-(G*M+H*v))>=N||-z>=N)return z;b=(A=(k=m-(L=(P=e*m)-(P-m)))*(E=B-(x=(P=e*B)-(P-B)))-((I=m*B)-L*x-k*x-L*E))-(S=A-(F=(k=v-(L=(P=e*v)-(P-v)))*(E=H-(x=(P=e*H)-(P-H)))-((O=v*H)-L*x-k*x-L*E))),g[0]=A-(S+b)+(b-F),b=(C=I-((D=I+S)-(b=D-I))+(S-b))-(S=C-O),g[1]=C-(S+b)+(b-O),b=(T=D+S)-D,g[2]=D-(T-b)+(S-b),g[3]=T;const U=o(4,l,4,g,c);b=(A=(k=_-(L=(P=e*_)-(P-_)))*(E=w-(x=(P=e*w)-(P-w)))-((I=_*w)-L*x-k*x-L*E))-(S=A-(F=(k=G-(L=(P=e*G)-(P-G)))*(E=M-(x=(P=e*M)-(P-M)))-((O=G*M)-L*x-k*x-L*E))),g[0]=A-(S+b)+(b-F),b=(C=I-((D=I+S)-(b=D-I))+(S-b))-(S=C-O),g[1]=C-(S+b)+(b-O),b=(T=D+S)-D,g[2]=D-(T-b)+(S-b),g[3]=T;const R=o(U,c,4,g,h);b=(A=(k=m-(L=(P=e*m)-(P-m)))*(E=w-(x=(P=e*w)-(P-w)))-((I=m*w)-L*x-k*x-L*E))-(S=A-(F=(k=v-(L=(P=e*v)-(P-v)))*(E=M-(x=(P=e*M)-(P-M)))-((O=v*M)-L*x-k*x-L*E))),g[0]=A-(S+b)+(b-F),b=(C=I-((D=I+S)-(b=D-I))+(S-b))-(S=C-O),g[1]=C-(S+b)+(b-O),b=(T=D+S)-D,g[2]=D-(T-b)+(S-b),g[3]=T;const X=o(R,h,4,g,u);return u[X-1]}(t,n,d,p,f,y,w)},t.orient2dfast=function(t,e,r,o,n,i){return(e-i)*(r-n)-(t-n)*(o-i)},Object.defineProperty(t,"__esModule",{value:!0})}(pt.exports)),pt.exports}const yt=J(function(){if(dt)return tt.exports;dt=1;var t=rt(),e=nt,r=ut(),o=ft().orient2d;function n(e,o,n){o=Math.max(0,void 0===o?2:o),n=n||0;var a=function(t){for(var e=t[0],o=t[0],n=t[0],i=t[0],a=0;a<t.length;a++){var s=t[a];s[0]<e[0]&&(e=s),s[0]>n[0]&&(n=s),s[1]<o[1]&&(o=s),s[1]>i[1]&&(i=s)}var l=[e,o,n,i],c=l.slice();for(a=0;a<t.length;a++)r(t[a],l)||c.push(t[a]);return function(t){t.sort(m);for(var e=[],r=0;r<t.length;r++){for(;e.length>=2&&h(e[e.length-2],e[e.length-1],t[r])<=0;)e.pop();e.push(t[r])}for(var o=[],n=t.length-1;n>=0;n--){for(;o.length>=2&&h(o[o.length-2],o[o.length-1],t[n])<=0;)o.pop();o.push(t[n])}return o.pop(),e.pop(),e.concat(o)}(c)}(e),s=new t(16);s.toBBox=function(t){return{minX:t[0],minY:t[1],maxX:t[0],maxY:t[1]}},s.compareMinX=function(t,e){return t[0]-e[0]},s.compareMinY=function(t,e){return t[1]-e[1]},s.load(e);for(var l,c=[],u=0;u<a.length;u++){var f=a[u];s.remove(f),l=d(f,l),c.push(l)}var y=new t(16);for(u=0;u<c.length;u++)y.insert(g(c[u]));for(var v=o*o,M=n*n;c.length;){var w=c.shift(),b=w.p,P=w.next.p,L=p(b,P);if(!(L<M)){var k=L/v;(f=i(s,w.prev.p,b,P,w.next.next.p,k,y))&&Math.min(p(f,b),p(f,P))<=k&&(c.push(w),c.push(d(f,w)),s.remove(f),y.remove(w),y.insert(g(w)),y.insert(g(w.next)))}}w=l;var x=[];do{x.push(w.p),w=w.next}while(w!==l);return x.push(w.p),x}function i(t,r,o,n,i,l,h){for(var u=new e([],a),g=t.data;g;){for(var d=0;d<g.children.length;d++){var p=g.children[d],y=g.leaf?f(p,o,n):s(o,n,p);y>l||u.push({node:p,dist:y})}for(;u.length&&!u.peek().node.children;){var m=u.pop(),v=m.node,M=f(v,r,o),w=f(v,n,i);if(m.dist<M&&m.dist<w&&c(o,v,h)&&c(n,v,h))return v}(g=u.pop())&&(g=g.node)}return null}function a(t,e){return t.dist-e.dist}function s(t,e,r){if(l(t,r)||l(e,r))return 0;var o=y(t[0],t[1],e[0],e[1],r.minX,r.minY,r.maxX,r.minY);if(0===o)return 0;var n=y(t[0],t[1],e[0],e[1],r.minX,r.minY,r.minX,r.maxY);if(0===n)return 0;var i=y(t[0],t[1],e[0],e[1],r.maxX,r.minY,r.maxX,r.maxY);if(0===i)return 0;var a=y(t[0],t[1],e[0],e[1],r.minX,r.maxY,r.maxX,r.maxY);return 0===a?0:Math.min(o,n,i,a)}function l(t,e){return t[0]>=e.minX&&t[0]<=e.maxX&&t[1]>=e.minY&&t[1]<=e.maxY}function c(t,e,r){for(var o=Math.min(t[0],e[0]),n=Math.min(t[1],e[1]),i=Math.max(t[0],e[0]),a=Math.max(t[1],e[1]),s=r.search({minX:o,minY:n,maxX:i,maxY:a}),l=0;l<s.length;l++)if(u(s[l].p,s[l].next.p,t,e))return!1;return!0}function h(t,e,r){return o(t[0],t[1],e[0],e[1],r[0],r[1])}function u(t,e,r,o){return t!==o&&e!==r&&h(t,e,r)>0!=h(t,e,o)>0&&h(r,o,t)>0!=h(r,o,e)>0}function g(t){var e=t.p,r=t.next.p;return t.minX=Math.min(e[0],r[0]),t.minY=Math.min(e[1],r[1]),t.maxX=Math.max(e[0],r[0]),t.maxY=Math.max(e[1],r[1]),t}function d(t,e){var r={p:t,prev:null,next:null,minX:0,minY:0,maxX:0,maxY:0};return e?(r.next=e.next,r.prev=e,e.next.prev=r,e.next=r):(r.prev=r,r.next=r),r}function p(t,e){var r=t[0]-e[0],o=t[1]-e[1];return r*r+o*o}function f(t,e,r){var o=e[0],n=e[1],i=r[0]-o,a=r[1]-n;if(0!==i||0!==a){var s=((t[0]-o)*i+(t[1]-n)*a)/(i*i+a*a);s>1?(o=r[0],n=r[1]):s>0&&(o+=i*s,n+=a*s)}return(i=t[0]-o)*i+(a=t[1]-n)*a}function y(t,e,r,o,n,i,a,s){var l,c,h,u,g=r-t,d=o-e,p=a-n,f=s-i,y=t-n,m=e-i,v=g*g+d*d,M=g*p+d*f,w=p*p+f*f,b=g*y+d*m,P=p*y+f*m,L=v*w-M*M,k=L,x=L;0===L?(c=0,k=1,u=P,x=w):(u=v*P-M*b,(c=M*P-w*b)<0?(c=0,u=P,x=w):c>k&&(c=k,u=P+M,x=w)),u<0?(u=0,-b<0?c=0:-b>v?c=k:(c=-b,k=v)):u>x&&(u=x,-b+M<0?c=0:-b+M>v?c=k:(c=-b+M,k=v));var E=(1-(h=0===u?0:u/x))*n+h*a-((1-(l=0===c?0:c/k))*t+l*r),S=(1-h)*i+h*s-((1-l)*e+l*o);return E*E+S*S}function m(t,e){return t[0]===e[0]?t[1]-e[1]:t[0]-e[0]}return e.default&&(e=e.default),tt.exports=n,tt.exports.default=n,tt.exports}());function mt(t,e={}){e.concavity=e.concavity||1/0;const r=[];if(N(t,t=>{r.push([t[0],t[1]])}),!r.length)return null;const o=yt(r,e.concavity);return o.length>3?O([o]):null}var vt=mt;function Mt(t,e={}){let r=0,o=0,n=0;return N(t,function(t){r+=t[0],o+=t[1],n++},!0),A([r/n,o/n],e.properties)}function wt(t){if(!t)throw new Error("coord is required");if(!Array.isArray(t)){if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return[...t.geometry.coordinates];if("Point"===t.type)return[...t.coordinates]}if(Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1]))return[...t];throw new Error("coord must be GeoJSON Point or an Array of numbers")}function bt(t){if(Array.isArray(t))return t;if("Feature"===t.type){if(null!==t.geometry)return t.geometry.coordinates}else if(t.coordinates)return t.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}function Pt(t){return"Feature"===t.type?t.geometry:t}function Lt(t,e){return"FeatureCollection"===t.type?"FeatureCollection":"GeometryCollection"===t.type?"GeometryCollection":"Feature"===t.type&&null!==t.geometry?t.geometry.type:t.type}var kt=function t(e,r={}){switch(Lt(e)){case"Point":return A(wt(e),r.properties);case"Polygon":var o=[];N(e,function(t){o.push(t)});var n,i,a,s,l,c,h,u,g=Mt(e,{properties:r.properties}),d=g.geometry.coordinates,p=0,f=0,y=0,m=o.map(function(t){return[t[0]-d[0],t[1]-d[1]]});for(n=0;n<o.length-1;n++)s=(i=m[n])[0],c=i[1],l=(a=m[n+1])[0],y+=u=s*(h=a[1])-l*c,p+=(s+l)*u,f+=(c+h)*u;if(0===y)return g;var v=1/(6*(.5*y));return A([d[0]+v*p,d[1]+v*f],r.properties);default:var M=mt(e);return M?t(M,{properties:r.properties}):Mt(e,{properties:r.properties})}};let xt=class{constructor(t=[],e=Et){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let r=(this.length>>1)-1;r>=0;r--)this._down(r)}push(t){this.data.push(t),this.length++,this._up(this.length-1)}pop(){if(0===this.length)return;const t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){const{data:e,compare:r}=this,o=e[t];for(;t>0;){const n=t-1>>1,i=e[n];if(r(o,i)>=0)break;e[t]=i,t=n}e[t]=o}_down(t){const{data:e,compare:r}=this,o=this.length>>1,n=e[t];for(;t<o;){let o=1+(t<<1),i=e[o];const a=o+1;if(a<this.length&&r(e[a],i)<0&&(o=a,i=e[a]),r(i,n)>=0)break;e[t]=i,t=o}e[t]=n}};function Et(t,e){return t<e?-1:t>e?1:0}function St(t,e){return t.p.x>e.p.x?1:t.p.x<e.p.x?-1:t.p.y!==e.p.y?t.p.y>e.p.y?1:-1:1}function Dt(t,e){return t.rightSweepEvent.p.x>e.rightSweepEvent.p.x?1:t.rightSweepEvent.p.x<e.rightSweepEvent.p.x?-1:t.rightSweepEvent.p.y!==e.rightSweepEvent.p.y?t.rightSweepEvent.p.y<e.rightSweepEvent.p.y?1:-1:1}let Ct=class{constructor(t,e,r,o){this.p={x:t[0],y:t[1]},this.featureId=e,this.ringId=r,this.eventId=o,this.otherEvent=null,this.isLeftEndpoint=null}isSamePoint(t){return this.p.x===t.p.x&&this.p.y===t.p.y}};let It=0,At=0,Ot=0;function Ft(t,e){const r="Feature"===t.type?t.geometry:t;let o=r.coordinates;"Polygon"!==r.type&&"MultiLineString"!==r.type||(o=[o]),"LineString"===r.type&&(o=[[o]]);for(let n=0;n<o.length;n++)for(let t=0;t<o[n].length;t++){let r=o[n][t][0],i=null;At+=1;for(let a=0;a<o[n][t].length-1;a++){i=o[n][t][a+1];const s=new Ct(r,It,At,Ot),l=new Ct(i,It,At,Ot+1);s.otherEvent=l,l.otherEvent=s,St(s,l)>0?(l.isLeftEndpoint=!0,s.isLeftEndpoint=!1):(s.isLeftEndpoint=!0,l.isLeftEndpoint=!1),e.push(s),e.push(l),r=i,Ot+=1}}It+=1}let Tt=class{constructor(t){this.leftSweepEvent=t,this.rightSweepEvent=t.otherEvent}};function _t(t,e){if(null===t||null===e)return!1;if(t.leftSweepEvent.ringId===e.leftSweepEvent.ringId&&(t.rightSweepEvent.isSamePoint(e.leftSweepEvent)||t.rightSweepEvent.isSamePoint(e.leftSweepEvent)||t.rightSweepEvent.isSamePoint(e.rightSweepEvent)||t.leftSweepEvent.isSamePoint(e.leftSweepEvent)||t.leftSweepEvent.isSamePoint(e.rightSweepEvent)))return!1;const r=t.leftSweepEvent.p.x,o=t.leftSweepEvent.p.y,n=t.rightSweepEvent.p.x,i=t.rightSweepEvent.p.y,a=e.leftSweepEvent.p.x,s=e.leftSweepEvent.p.y,l=e.rightSweepEvent.p.x,c=e.rightSweepEvent.p.y,h=(c-s)*(n-r)-(l-a)*(i-o),u=(l-a)*(o-s)-(c-s)*(r-a),g=(n-r)*(o-s)-(i-o)*(r-a);if(0===h)return!1;const d=u/h,p=g/h;if(d>=0&&d<=1&&p>=0&&p<=1){return[r+d*(n-r),o+d*(i-o)]}return!1}var Ht=function(t,e){const r=new xt([],St);return function(t,e){if("FeatureCollection"===t.type){const r=t.features;for(let t=0;t<r.length;t++)Ft(r[t],e)}else Ft(t,e)}(t,r),function(t,e){e=e||!1;const r=[],o=new xt([],Dt);for(;t.length;){const n=t.pop();if(n.isLeftEndpoint){const t=new Tt(n);for(let i=0;i<o.data.length;i++){const a=o.data[i];if(e&&a.leftSweepEvent.featureId===n.featureId)continue;const s=_t(t,a);!1!==s&&r.push(s)}o.push(t)}else!1===n.isLeftEndpoint&&o.pop()}return r}(r,e)};function Gt(t,e,r={}){const{removeDuplicates:o=!0,ignoreSelfIntersections:n=!0}=r;let i=[];"FeatureCollection"===t.type?i=i.concat(t.features):"Feature"===t.type?i.push(t):"LineString"!==t.type&&"Polygon"!==t.type&&"MultiLineString"!==t.type&&"MultiPolygon"!==t.type||i.push(I(t)),"FeatureCollection"===e.type?i=i.concat(e.features):"Feature"===e.type?i.push(e):"LineString"!==e.type&&"Polygon"!==e.type&&"MultiLineString"!==e.type&&"MultiPolygon"!==e.type||i.push(I(e));const a=Ht(T(i),n);let s=[];if(o){const t={};a.forEach(e=>{const r=e.join(",");t[r]||(t[r]=!0,s.push(e))})}else s=a;return T(s.map(t=>A(t)))}var Bt=Gt,zt=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,Nt=Math.ceil,Ut=Math.floor,Rt="[BigNumber Error] ",Xt=Rt+"Number primitive has more than 15 significant digits: ",Yt=1e14,Vt=14,qt=9007199254740991,jt=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],Kt=1e7,$t=1e9;function Wt(t){var e=0|t;return t>0||t===e?e:e-1}function Jt(t){for(var e,r,o=1,n=t.length,i=t[0]+"";o<n;){for(e=t[o++]+"",r=Vt-e.length;r--;e="0"+e);i+=e}for(n=i.length;48===i.charCodeAt(--n););return i.slice(0,n+1||1)}function Zt(t,e){var r,o,n=t.c,i=e.c,a=t.s,s=e.s,l=t.e,c=e.e;if(!a||!s)return null;if(r=n&&!n[0],o=i&&!i[0],r||o)return r?o?0:-s:a;if(a!=s)return a;if(r=a<0,o=l==c,!n||!i)return o?0:!n^r?1:-1;if(!o)return l>c^r?1:-1;for(s=(l=n.length)<(c=i.length)?l:c,a=0;a<s;a++)if(n[a]!=i[a])return n[a]>i[a]^r?1:-1;return l==c?0:l>c^r?1:-1}function Qt(t,e,r,o){if(t<e||t>r||t!==Ut(t))throw Error(Rt+(o||"Argument")+("number"==typeof t?t<e||t>r?" out of range: ":" not an integer: ":" not a primitive number: ")+String(t))}function te(t){var e=t.c.length-1;return Wt(t.e/Vt)==e&&t.c[e]%2!=0}function ee(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(e<0?"e":"e+")+e}function re(t,e,r){var o,n;if(e<0){for(n=r+".";++e;n+=r);t=n+t}else if(++e>(o=t.length)){for(n=r,e-=o;--e;n+=r);t+=n}else e<o&&(t=t.slice(0,e)+"."+t.slice(e));return t}var oe=function t(e){var r,o,n,i,a,s=b.prototype={constructor:b,toString:null,valueOf:null},l=new b(1),c=20,h=4,u=-7,g=21,d=-1e7,p=1e7,f=!1,y=1,m=0,v={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},M="0123456789abcdefghijklmnopqrstuvwxyz",w=!0;function b(t,e){var r,i,a,s,l,u,g,f,y=this;if(!(y instanceof b))return new b(t,e);if(null==e){if(t&&!0===t._isBigNumber)return y.s=t.s,void(!t.c||t.e>p?y.c=y.e=null:t.e<d?y.c=[y.e=0]:(y.e=t.e,y.c=t.c.slice()));if((u="number"==typeof t)&&0*t==0){if(y.s=1/t<0?(t=-t,-1):1,t===~~t){for(s=0,l=t;l>=10;l/=10,s++);return void(s>p?y.c=y.e=null:(y.e=s,y.c=[t]))}f=String(t)}else{if(!zt.test(f=String(t)))return n(y,f,u);y.s=45==f.charCodeAt(0)?(f=f.slice(1),-1):1}(s=f.indexOf("."))>-1&&(f=f.replace(".","")),(l=f.search(/e/i))>0?(s<0&&(s=l),s+=+f.slice(l+1),f=f.substring(0,l)):s<0&&(s=f.length)}else{if(Qt(e,2,M.length,"Base"),10==e&&w)return x(y=new b(t),c+y.e+1,h);if(f=String(t),u="number"==typeof t){if(0*t!=0)return n(y,f,u,e);if(y.s=1/t<0?(f=f.slice(1),-1):1,b.DEBUG&&f.replace(/^0\.0*|\./,"").length>15)throw Error(Xt+t)}else y.s=45===f.charCodeAt(0)?(f=f.slice(1),-1):1;for(r=M.slice(0,e),s=l=0,g=f.length;l<g;l++)if(r.indexOf(i=f.charAt(l))<0){if("."==i){if(l>s){s=g;continue}}else if(!a&&(f==f.toUpperCase()&&(f=f.toLowerCase())||f==f.toLowerCase()&&(f=f.toUpperCase()))){a=!0,l=-1,s=0;continue}return n(y,String(t),u,e)}u=!1,(s=(f=o(f,e,10,y.s)).indexOf("."))>-1?f=f.replace(".",""):s=f.length}for(l=0;48===f.charCodeAt(l);l++);for(g=f.length;48===f.charCodeAt(--g););if(f=f.slice(l,++g)){if(g-=l,u&&b.DEBUG&&g>15&&(t>qt||t!==Ut(t)))throw Error(Xt+y.s*t);if((s=s-l-1)>p)y.c=y.e=null;else if(s<d)y.c=[y.e=0];else{if(y.e=s,y.c=[],l=(s+1)%Vt,s<0&&(l+=Vt),l<g){for(l&&y.c.push(+f.slice(0,l)),g-=Vt;l<g;)y.c.push(+f.slice(l,l+=Vt));l=Vt-(f=f.slice(l)).length}else l-=g;for(;l--;f+="0");y.c.push(+f)}}else y.c=[y.e=0]}function P(t,e,r,o){var n,i,a,s,l;if(null==r?r=h:Qt(r,0,8),!t.c)return t.toString();if(n=t.c[0],a=t.e,null==e)l=Jt(t.c),l=1==o||2==o&&(a<=u||a>=g)?ee(l,a):re(l,a,"0");else if(i=(t=x(new b(t),e,r)).e,s=(l=Jt(t.c)).length,1==o||2==o&&(e<=i||i<=u)){for(;s<e;l+="0",s++);l=ee(l,i)}else if(e-=a+(2===o&&i>a),l=re(l,i,"0"),i+1>s){if(--e>0)for(l+=".";e--;l+="0");}else if((e+=i-s)>0)for(i+1==s&&(l+=".");e--;l+="0");return t.s<0&&n?"-"+l:l}function L(t,e){for(var r,o,n=1,i=new b(t[0]);n<t.length;n++)(!(o=new b(t[n])).s||(r=Zt(i,o))===e||0===r&&i.s===e)&&(i=o);return i}function k(t,e,r){for(var o=1,n=e.length;!e[--n];e.pop());for(n=e[0];n>=10;n/=10,o++);return(r=o+r*Vt-1)>p?t.c=t.e=null:r<d?t.c=[t.e=0]:(t.e=r,t.c=e),t}function x(t,e,r,o){var n,i,a,s,l,c,h,u=t.c,g=jt;if(u){t:{for(n=1,s=u[0];s>=10;s/=10,n++);if((i=e-n)<0)i+=Vt,a=e,l=u[c=0],h=Ut(l/g[n-a-1]%10);else if((c=Nt((i+1)/Vt))>=u.length){if(!o)break t;for(;u.length<=c;u.push(0));l=h=0,n=1,a=(i%=Vt)-Vt+1}else{for(l=s=u[c],n=1;s>=10;s/=10,n++);h=(a=(i%=Vt)-Vt+n)<0?0:Ut(l/g[n-a-1]%10)}if(o=o||e<0||null!=u[c+1]||(a<0?l:l%g[n-a-1]),o=r<4?(h||o)&&(0==r||r==(t.s<0?3:2)):h>5||5==h&&(4==r||o||6==r&&(i>0?a>0?l/g[n-a]:0:u[c-1])%10&1||r==(t.s<0?8:7)),e<1||!u[0])return u.length=0,o?(e-=t.e+1,u[0]=g[(Vt-e%Vt)%Vt],t.e=-e||0):u[0]=t.e=0,t;if(0==i?(u.length=c,s=1,c--):(u.length=c+1,s=g[Vt-i],u[c]=a>0?Ut(l/g[n-a]%g[a])*s:0),o)for(;;){if(0==c){for(i=1,a=u[0];a>=10;a/=10,i++);for(a=u[0]+=s,s=1;a>=10;a/=10,s++);i!=s&&(t.e++,u[0]==Yt&&(u[0]=1));break}if(u[c]+=s,u[c]!=Yt)break;u[c--]=0,s=1}for(i=u.length;0===u[--i];u.pop());}t.e>p?t.c=t.e=null:t.e<d&&(t.c=[t.e=0])}return t}function E(t){var e,r=t.e;return null===r?t.toString():(e=Jt(t.c),e=r<=u||r>=g?ee(e,r):re(e,r,"0"),t.s<0?"-"+e:e)}return b.clone=t,b.ROUND_UP=0,b.ROUND_DOWN=1,b.ROUND_CEIL=2,b.ROUND_FLOOR=3,b.ROUND_HALF_UP=4,b.ROUND_HALF_DOWN=5,b.ROUND_HALF_EVEN=6,b.ROUND_HALF_CEIL=7,b.ROUND_HALF_FLOOR=8,b.EUCLID=9,b.config=b.set=function(t){var e,r;if(null!=t){if("object"!=typeof t)throw Error(Rt+"Object expected: "+t);if(t.hasOwnProperty(e="DECIMAL_PLACES")&&(Qt(r=t[e],0,$t,e),c=r),t.hasOwnProperty(e="ROUNDING_MODE")&&(Qt(r=t[e],0,8,e),h=r),t.hasOwnProperty(e="EXPONENTIAL_AT")&&((r=t[e])&&r.pop?(Qt(r[0],-$t,0,e),Qt(r[1],0,$t,e),u=r[0],g=r[1]):(Qt(r,-$t,$t,e),u=-(g=r<0?-r:r))),t.hasOwnProperty(e="RANGE"))if((r=t[e])&&r.pop)Qt(r[0],-$t,-1,e),Qt(r[1],1,$t,e),d=r[0],p=r[1];else{if(Qt(r,-$t,$t,e),!r)throw Error(Rt+e+" cannot be zero: "+r);d=-(p=r<0?-r:r)}if(t.hasOwnProperty(e="CRYPTO")){if((r=t[e])!==!!r)throw Error(Rt+e+" not true or false: "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw f=!r,Error(Rt+"crypto unavailable");f=r}else f=r}if(t.hasOwnProperty(e="MODULO_MODE")&&(Qt(r=t[e],0,9,e),y=r),t.hasOwnProperty(e="POW_PRECISION")&&(Qt(r=t[e],0,$t,e),m=r),t.hasOwnProperty(e="FORMAT")){if("object"!=typeof(r=t[e]))throw Error(Rt+e+" not an object: "+r);v=r}if(t.hasOwnProperty(e="ALPHABET")){if("string"!=typeof(r=t[e])||/^.?$|[+\-.\s]|(.).*\1/.test(r))throw Error(Rt+e+" invalid: "+r);w="0123456789"==r.slice(0,10),M=r}}return{DECIMAL_PLACES:c,ROUNDING_MODE:h,EXPONENTIAL_AT:[u,g],RANGE:[d,p],CRYPTO:f,MODULO_MODE:y,POW_PRECISION:m,FORMAT:v,ALPHABET:M}},b.isBigNumber=function(t){if(!t||!0!==t._isBigNumber)return!1;if(!b.DEBUG)return!0;var e,r,o=t.c,n=t.e,i=t.s;t:if("[object Array]"=={}.toString.call(o)){if((1===i||-1===i)&&n>=-$t&&n<=$t&&n===Ut(n)){if(0===o[0]){if(0===n&&1===o.length)return!0;break t}if((e=(n+1)%Vt)<1&&(e+=Vt),String(o[0]).length==e){for(e=0;e<o.length;e++)if((r=o[e])<0||r>=Yt||r!==Ut(r))break t;if(0!==r)return!0}}}else if(null===o&&null===n&&(null===i||1===i||-1===i))return!0;throw Error(Rt+"Invalid BigNumber: "+t)},b.maximum=b.max=function(){return L(arguments,-1)},b.minimum=b.min=function(){return L(arguments,1)},b.random=(i=9007199254740992,a=Math.random()*i&2097151?function(){return Ut(Math.random()*i)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(t){var e,r,o,n,i,s=0,h=[],u=new b(l);if(null==t?t=c:Qt(t,0,$t),n=Nt(t/Vt),f)if(crypto.getRandomValues){for(e=crypto.getRandomValues(new Uint32Array(n*=2));s<n;)(i=131072*e[s]+(e[s+1]>>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),e[s]=r[0],e[s+1]=r[1]):(h.push(i%1e14),s+=2);s=n/2}else{if(!crypto.randomBytes)throw f=!1,Error(Rt+"crypto unavailable");for(e=crypto.randomBytes(n*=7);s<n;)(i=281474976710656*(31&e[s])+1099511627776*e[s+1]+4294967296*e[s+2]+16777216*e[s+3]+(e[s+4]<<16)+(e[s+5]<<8)+e[s+6])>=9e15?crypto.randomBytes(7).copy(e,s):(h.push(i%1e14),s+=7);s=n/7}if(!f)for(;s<n;)(i=a())<9e15&&(h[s++]=i%1e14);for(n=h[--s],t%=Vt,n&&t&&(i=jt[Vt-t],h[s]=Ut(n/i)*i);0===h[s];h.pop(),s--);if(s<0)h=[o=0];else{for(o=-1;0===h[0];h.splice(0,1),o-=Vt);for(s=1,i=h[0];i>=10;i/=10,s++);s<Vt&&(o-=Vt-s)}return u.e=o,u.c=h,u}),b.sum=function(){for(var t=1,e=arguments,r=new b(e[0]);t<e.length;)r=r.plus(e[t++]);return r},o=function(){var t="0123456789";function e(t,e,r,o){for(var n,i,a=[0],s=0,l=t.length;s<l;){for(i=a.length;i--;a[i]*=e);for(a[0]+=o.indexOf(t.charAt(s++)),n=0;n<a.length;n++)a[n]>r-1&&(null==a[n+1]&&(a[n+1]=0),a[n+1]+=a[n]/r|0,a[n]%=r)}return a.reverse()}return function(o,n,i,a,s){var l,u,g,d,p,f,y,v,w=o.indexOf("."),P=c,L=h;for(w>=0&&(d=m,m=0,o=o.replace(".",""),f=(v=new b(n)).pow(o.length-w),m=d,v.c=e(re(Jt(f.c),f.e,"0"),10,i,t),v.e=v.c.length),g=d=(y=e(o,n,i,s?(l=M,t):(l=t,M))).length;0==y[--d];y.pop());if(!y[0])return l.charAt(0);if(w<0?--g:(f.c=y,f.e=g,f.s=a,y=(f=r(f,v,P,L,i)).c,p=f.r,g=f.e),w=y[u=g+P+1],d=i/2,p=p||u<0||null!=y[u+1],p=L<4?(null!=w||p)&&(0==L||L==(f.s<0?3:2)):w>d||w==d&&(4==L||p||6==L&&1&y[u-1]||L==(f.s<0?8:7)),u<1||!y[0])o=p?re(l.charAt(1),-P,l.charAt(0)):l.charAt(0);else{if(y.length=u,p)for(--i;++y[--u]>i;)y[u]=0,u||(++g,y=[1].concat(y));for(d=y.length;!y[--d];);for(w=0,o="";w<=d;o+=l.charAt(y[w++]));o=re(o,g,l.charAt(0))}return o}}(),r=function(){function t(t,e,r){var o,n,i,a,s=0,l=t.length,c=e%Kt,h=e/Kt|0;for(t=t.slice();l--;)s=((n=c*(i=t[l]%Kt)+(o=h*i+(a=t[l]/Kt|0)*c)%Kt*Kt+s)/r|0)+(o/Kt|0)+h*a,t[l]=n%r;return s&&(t=[s].concat(t)),t}function e(t,e,r,o){var n,i;if(r!=o)i=r>o?1:-1;else for(n=i=0;n<r;n++)if(t[n]!=e[n]){i=t[n]>e[n]?1:-1;break}return i}function r(t,e,r,o){for(var n=0;r--;)t[r]-=n,n=t[r]<e[r]?1:0,t[r]=n*o+t[r]-e[r];for(;!t[0]&&t.length>1;t.splice(0,1));}return function(o,n,i,a,s){var l,c,h,u,g,d,p,f,y,m,v,M,w,P,L,k,E,S=o.s==n.s?1:-1,D=o.c,C=n.c;if(!(D&&D[0]&&C&&C[0]))return new b(o.s&&n.s&&(D?!C||D[0]!=C[0]:C)?D&&0==D[0]||!C?0*S:S/0:NaN);for(y=(f=new b(S)).c=[],S=i+(c=o.e-n.e)+1,s||(s=Yt,c=Wt(o.e/Vt)-Wt(n.e/Vt),S=S/Vt|0),h=0;C[h]==(D[h]||0);h++);if(C[h]>(D[h]||0)&&c--,S<0)y.push(1),u=!0;else{for(P=D.length,k=C.length,h=0,S+=2,(g=Ut(s/(C[0]+1)))>1&&(C=t(C,g,s),D=t(D,g,s),k=C.length,P=D.length),w=k,v=(m=D.slice(0,k)).length;v<k;m[v++]=0);E=C.slice(),E=[0].concat(E),L=C[0],C[1]>=s/2&&L++;do{if(g=0,(l=e(C,m,k,v))<0){if(M=m[0],k!=v&&(M=M*s+(m[1]||0)),(g=Ut(M/L))>1)for(g>=s&&(g=s-1),p=(d=t(C,g,s)).length,v=m.length;1==e(d,m,p,v);)g--,r(d,k<p?E:C,p,s),p=d.length,l=1;else 0==g&&(l=g=1),p=(d=C.slice()).length;if(p<v&&(d=[0].concat(d)),r(m,d,v,s),v=m.length,-1==l)for(;e(C,m,k,v)<1;)g++,r(m,k<v?E:C,v,s),v=m.length}else 0===l&&(g++,m=[0]);y[h++]=g,m[0]?m[v++]=D[w]||0:(m=[D[w]],v=1)}while((w++<P||null!=m[0])&&S--);u=null!=m[0],y[0]||y.splice(0,1)}if(s==Yt){for(h=1,S=y[0];S>=10;S/=10,h++);x(f,i+(f.e=h+c*Vt-1)+1,a,u)}else f.e=c,f.r=+u;return f}}(),n=function(){var t=/^(-?)0([xbo])(?=\w[\w.]*$)/i,e=/^([^.]+)\.$/,r=/^\.([^.]+)$/,o=/^-?(Infinity|NaN)$/,n=/^\s*\+(?=[\w.])|^\s+|\s+$/g;return function(i,a,s,l){var c,h=s?a:a.replace(n,"");if(o.test(h))i.s=isNaN(h)?null:h<0?-1:1;else{if(!s&&(h=h.replace(t,function(t,e,r){return c="x"==(r=r.toLowerCase())?16:"b"==r?2:8,l&&l!=c?t:e}),l&&(c=l,h=h.replace(e,"$1").replace(r,"0.$1")),a!=h))return new b(h,c);if(b.DEBUG)throw Error(Rt+"Not a"+(l?" base "+l:"")+" number: "+a);i.s=null}i.c=i.e=null}}(),s.absoluteValue=s.abs=function(){var t=new b(this);return t.s<0&&(t.s=1),t},s.comparedTo=function(t,e){return Zt(this,new b(t,e))},s.decimalPlaces=s.dp=function(t,e){var r,o,n,i=this;if(null!=t)return Qt(t,0,$t),null==e?e=h:Qt(e,0,8),x(new b(i),t+i.e+1,e);if(!(r=i.c))return null;if(o=((n=r.length-1)-Wt(this.e/Vt))*Vt,n=r[n])for(;n%10==0;n/=10,o--);return o<0&&(o=0),o},s.dividedBy=s.div=function(t,e){return r(this,new b(t,e),c,h)},s.dividedToIntegerBy=s.idiv=function(t,e){return r(this,new b(t,e),0,1)},s.exponentiatedBy=s.pow=function(t,e){var r,o,n,i,a,s,c,u,g=this;if((t=new b(t)).c&&!t.isInteger())throw Error(Rt+"Exponent not an integer: "+E(t));if(null!=e&&(e=new b(e)),a=t.e>14,!g.c||!g.c[0]||1==g.c[0]&&!g.e&&1==g.c.length||!t.c||!t.c[0])return u=new b(Math.pow(+E(g),a?t.s*(2-te(t)):+E(t))),e?u.mod(e):u;if(s=t.s<0,e){if(e.c?!e.c[0]:!e.s)return new b(NaN);(o=!s&&g.isInteger()&&e.isInteger())&&(g=g.mod(e))}else{if(t.e>9&&(g.e>0||g.e<-1||(0==g.e?g.c[0]>1||a&&g.c[1]>=24e7:g.c[0]<8e13||a&&g.c[0]<=9999975e7)))return i=g.s<0&&te(t)?-0:0,g.e>-1&&(i=1/i),new b(s?1/i:i);m&&(i=Nt(m/Vt+2))}for(a?(r=new b(.5),s&&(t.s=1),c=te(t)):c=(n=Math.abs(+E(t)))%2,u=new b(l);;){if(c){if(!(u=u.times(g)).c)break;i?u.c.length>i&&(u.c.length=i):o&&(u=u.mod(e))}if(n){if(0===(n=Ut(n/2)))break;c=n%2}else if(x(t=t.times(r),t.e+1,1),t.e>14)c=te(t);else{if(0===(n=+E(t)))break;c=n%2}g=g.times(g),i?g.c&&g.c.length>i&&(g.c.length=i):o&&(g=g.mod(e))}return o?u:(s&&(u=l.div(u)),e?u.mod(e):i?x(u,m,h,void 0):u)},s.integerValue=function(t){var e=new b(this);return null==t?t=h:Qt(t,0,8),x(e,e.e+1,t)},s.isEqualTo=s.eq=function(t,e){return 0===Zt(this,new b(t,e))},s.isFinite=function(){return!!this.c},s.isGreaterThan=s.gt=function(t,e){return Zt(this,new b(t,e))>0},s.isGreaterThanOrEqualTo=s.gte=function(t,e){return 1===(e=Zt(this,new b(t,e)))||0===e},s.isInteger=function(){return!!this.c&&Wt(this.e/Vt)>this.c.length-2},s.isLessThan=s.lt=function(t,e){return Zt(this,new b(t,e))<0},s.isLessThanOrEqualTo=s.lte=function(t,e){return-1===(e=Zt(this,new b(t,e)))||0===e},s.isNaN=function(){return!this.s},s.isNegative=function(){return this.s<0},s.isPositive=function(){return this.s>0},s.isZero=function(){return!!this.c&&0==this.c[0]},s.minus=function(t,e){var r,o,n,i,a=this,s=a.s;if(e=(t=new b(t,e)).s,!s||!e)return new b(NaN);if(s!=e)return t.s=-e,a.plus(t);var l=a.e/Vt,c=t.e/Vt,u=a.c,g=t.c;if(!l||!c){if(!u||!g)return u?(t.s=-e,t):new b(g?a:NaN);if(!u[0]||!g[0])return g[0]?(t.s=-e,t):new b(u[0]?a:3==h?-0:0)}if(l=Wt(l),c=Wt(c),u=u.slice(),s=l-c){for((i=s<0)?(s=-s,n=u):(c=l,n=g),n.reverse(),e=s;e--;n.push(0));n.reverse()}else for(o=(i=(s=u.length)<(e=g.length))?s:e,s=e=0;e<o;e++)if(u[e]!=g[e]){i=u[e]<g[e];break}if(i&&(n=u,u=g,g=n,t.s=-t.s),(e=(o=g.length)-(r=u.length))>0)for(;e--;u[r++]=0);for(e=Yt-1;o>s;){if(u[--o]<g[o]){for(r=o;r&&!u[--r];u[r]=e);--u[r],u[o]+=Yt}u[o]-=g[o]}for(;0==u[0];u.splice(0,1),--c);return u[0]?k(t,u,c):(t.s=3==h?-1:1,t.c=[t.e=0],t)},s.modulo=s.mod=function(t,e){var o,n,i=this;return t=new b(t,e),!i.c||!t.s||t.c&&!t.c[0]?new b(NaN):!t.c||i.c&&!i.c[0]?new b(i):(9==y?(n=t.s,t.s=1,o=r(i,t,0,3),t.s=n,o.s*=n):o=r(i,t,0,y),(t=i.minus(o.times(t))).c[0]||1!=y||(t.s=i.s),t)},s.multipliedBy=s.times=function(t,e){var r,o,n,i,a,s,l,c,h,u,g,d,p,f,y,m=this,v=m.c,M=(t=new b(t,e)).c;if(!(v&&M&&v[0]&&M[0]))return!m.s||!t.s||v&&!v[0]&&!M||M&&!M[0]&&!v?t.c=t.e=t.s=null:(t.s*=m.s,v&&M?(t.c=[0],t.e=0):t.c=t.e=null),t;for(o=Wt(m.e/Vt)+Wt(t.e/Vt),t.s*=m.s,(l=v.length)<(u=M.length)&&(p=v,v=M,M=p,n=l,l=u,u=n),n=l+u,p=[];n--;p.push(0));for(f=Yt,y=Kt,n=u;--n>=0;){for(r=0,g=M[n]%y,d=M[n]/y|0,i=n+(a=l);i>n;)r=((c=g*(c=v[--a]%y)+(s=d*c+(h=v[a]/y|0)*g)%y*y+p[i]+r)/f|0)+(s/y|0)+d*h,p[i--]=c%f;p[i]=r}return r?++o:p.splice(0,1),k(t,p,o)},s.negated=function(){var t=new b(this);return t.s=-t.s||null,t},s.plus=function(t,e){var r,o=this,n=o.s;if(e=(t=new b(t,e)).s,!n||!e)return new b(NaN);if(n!=e)return t.s=-e,o.minus(t);var i=o.e/Vt,a=t.e/Vt,s=o.c,l=t.c;if(!i||!a){if(!s||!l)return new b(n/0);if(!s[0]||!l[0])return l[0]?t:new b(s[0]?o:0*n)}if(i=Wt(i),a=Wt(a),s=s.slice(),n=i-a){for(n>0?(a=i,r=l):(n=-n,r=s),r.reverse();n--;r.push(0));r.reverse()}for((n=s.length)-(e=l.length)<0&&(r=l,l=s,s=r,e=n),n=0;e;)n=(s[--e]=s[e]+l[e]+n)/Yt|0,s[e]=Yt===s[e]?0:s[e]%Yt;return n&&(s=[n].concat(s),++a),k(t,s,a)},s.precision=s.sd=function(t,e){var r,o,n,i=this;if(null!=t&&t!==!!t)return Qt(t,1,$t),null==e?e=h:Qt(e,0,8),x(new b(i),t,e);if(!(r=i.c))return null;if(o=(n=r.length-1)*Vt+1,n=r[n]){for(;n%10==0;n/=10,o--);for(n=r[0];n>=10;n/=10,o++);}return t&&i.e+1>o&&(o=i.e+1),o},s.shiftedBy=function(t){return Qt(t,-9007199254740991,qt),this.times("1e"+t)},s.squareRoot=s.sqrt=function(){var t,e,o,n,i,a=this,s=a.c,l=a.s,u=a.e,g=c+4,d=new b("0.5");if(1!==l||!s||!s[0])return new b(!l||l<0&&(!s||s[0])?NaN:s?a:1/0);if(0==(l=Math.sqrt(+E(a)))||l==1/0?(((e=Jt(s)).length+u)%2==0&&(e+="0"),l=Math.sqrt(+e),u=Wt((u+1)/2)-(u<0||u%2),o=new b(e=l==1/0?"5e"+u:(e=l.toExponential()).slice(0,e.indexOf("e")+1)+u)):o=new b(l+""),o.c[0])for((l=(u=o.e)+g)<3&&(l=0);;)if(i=o,o=d.times(i.plus(r(a,i,g,1))),Jt(i.c).slice(0,l)===(e=Jt(o.c)).slice(0,l)){if(o.e<u&&--l,"9999"!=(e=e.slice(l-3,l+1))&&(n||"4999"!=e)){+e&&(+e.slice(1)||"5"!=e.charAt(0))||(x(o,o.e+c+2,1),t=!o.times(o).eq(a));break}if(!n&&(x(i,i.e+c+2,0),i.times(i).eq(a))){o=i;break}g+=4,l+=4,n=1}return x(o,o.e+c+1,h,t)},s.toExponential=function(t,e){return null!=t&&(Qt(t,0,$t),t++),P(this,t,e,1)},s.toFixed=function(t,e){return null!=t&&(Qt(t,0,$t),t=t+this.e+1),P(this,t,e)},s.toFormat=function(t,e,r){var o,n=this;if(null==r)null!=t&&e&&"object"==typeof e?(r=e,e=null):t&&"object"==typeof t?(r=t,t=e=null):r=v;else if("object"!=typeof r)throw Error(Rt+"Argument not an object: "+r);if(o=n.toFixed(t,e),n.c){var i,a=o.split("."),s=+r.groupSize,l=+r.secondaryGroupSize,c=r.groupSeparator||"",h=a[0],u=a[1],g=n.s<0,d=g?h.slice(1):h,p=d.length;if(l&&(i=s,s=l,l=i,p-=i),s>0&&p>0){for(i=p%s||s,h=d.substr(0,i);i<p;i+=s)h+=c+d.substr(i,s);l>0&&(h+=c+d.slice(i)),g&&(h="-"+h)}o=u?h+(r.decimalSeparator||"")+((l=+r.fractionGroupSize)?u.replace(new RegExp("\\d{"+l+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):u):h}return(r.prefix||"")+o+(r.suffix||"")},s.toFraction=function(t){var e,o,n,i,a,s,c,u,g,d,f,y,m=this,v=m.c;if(null!=t&&(!(c=new b(t)).isInteger()&&(c.c||1!==c.s)||c.lt(l)))throw Error(Rt+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+E(c));if(!v)return new b(m);for(e=new b(l),g=o=new b(l),n=u=new b(l),y=Jt(v),a=e.e=y.length-m.e-1,e.c[0]=jt[(s=a%Vt)<0?Vt+s:s],t=!t||c.comparedTo(e)>0?a>0?e:g:c,s=p,p=1/0,c=new b(y),u.c[0]=0;d=r(c,e,0,1),1!=(i=o.plus(d.times(n))).comparedTo(t);)o=n,n=i,g=u.plus(d.times(i=g)),u=i,e=c.minus(d.times(i=e)),c=i;return i=r(t.minus(o),n,0,1),u=u.plus(i.times(g)),o=o.plus(i.times(n)),u.s=g.s=m.s,f=r(g,n,a*=2,h).minus(m).abs().comparedTo(r(u,o,a,h).minus(m).abs())<1?[g,n]:[u,o],p=s,f},s.toNumber=function(){return+E(this)},s.toPrecision=function(t,e){return null!=t&&Qt(t,1,$t),P(this,t,e,2)},s.toString=function(t){var e,r=this,n=r.s,i=r.e;return null===i?n?(e="Infinity",n<0&&(e="-"+e)):e="NaN":(null==t?e=i<=u||i>=g?ee(Jt(r.c),i):re(Jt(r.c),i,"0"):10===t&&w?e=re(Jt((r=x(new b(r),c+i+1,h)).c),r.e,"0"):(Qt(t,2,M.length,"Base"),e=o(re(Jt(r.c),i,"0"),10,t,n,!0)),n<0&&r.c[0]&&(e="-"+e)),e},s.valueOf=s.toJSON=function(){return E(this)},s._isBigNumber=!0,s[Symbol.toStringTag]="BigNumber",s[Symbol.for("nodejs.util.inspect.custom")]=s.valueOf,null!=e&&b.set(e),b}(),ne=class{constructor(t){i(this,"key"),i(this,"left",null),i(this,"right",null),this.key=t}},ie=class extends ne{constructor(t){super(t)}},ae=class{constructor(){i(this,"size",0),i(this,"modificationCount",0),i(this,"splayCount",0)}splay(t){const e=this.root;if(null==e)return this.compare(t,t),-1;let r=null,o=null,n=null,i=null,a=e;const s=this.compare;let l;for(;;)if(l=s(a.key,t),l>0){let e=a.left;if(null==e)break;if(l=s(e.key,t),l>0&&(a.left=e.right,e.right=a,a=e,e=a.left,null==e))break;null==r?o=a:r.left=a,r=a,a=e}else{if(!(l<0))break;{let e=a.right;if(null==e)break;if(l=s(e.key,t),l<0&&(a.right=e.left,e.left=a,a=e,e=a.right,null==e))break;null==n?i=a:n.right=a,n=a,a=e}}return null!=n&&(n.right=a.left,a.left=i),null!=r&&(r.left=a.right,a.right=o),this.root!==a&&(this.root=a,this.splayCount++),l}splayMin(t){let e=t,r=e.left;for(;null!=r;){const t=r;e.left=t.right,t.right=e,e=t,r=e.left}return e}splayMax(t){let e=t,r=e.right;for(;null!=r;){const t=r;e.right=t.left,t.left=e,e=t,r=e.right}return e}_delete(t){if(null==this.root)return null;if(0!=this.splay(t))return null;let e=this.root;const r=e,o=e.left;if(this.size--,null==o)this.root=e.right;else{const t=e.right;e=this.splayMax(o),e.right=t,this.root=e}return this.modificationCount++,r}addNewRoot(t,e){this.size++,this.modificationCount++;const r=this.root;null!=r?(e<0?(t.left=r,t.right=r.right,r.right=null):(t.right=r,t.left=r.left,r.left=null),this.root=t):this.root=t}_first(){const t=this.root;return null==t?null:(this.root=this.splayMin(t),this.root)}_last(){const t=this.root;return null==t?null:(this.root=this.splayMax(t),this.root)}clear(){this.root=null,this.size=0,this.modificationCount++}has(t){return this.validKey(t)&&0==this.splay(t)}defaultCompare(){return(t,e)=>t<e?-1:t>e?1:0}wrap(){return{getRoot:()=>this.root,setRoot:t=>{this.root=t},getSize:()=>this.size,getModificationCount:()=>this.modificationCount,getSplayCount:()=>this.splayCount,setSplayCount:t=>{this.splayCount=t},splay:t=>this.splay(t),has:t=>this.has(t)}}},se=class t extends ae{constructor(t,e){super(),i(this,"root",null),i(this,"compare"),i(this,"validKey"),i(this,r,"[object Set]"),this.compare=t??this.defaultCompare(),this.validKey=e??(t=>null!=t&&null!=t)}delete(t){return!!this.validKey(t)&&null!=this._delete(t)}deleteAll(t){for(const e of t)this.delete(e)}forEach(t){const e=this[Symbol.iterator]();let r;for(;r=e.next(),!r.done;)t(r.value,r.value,this)}add(t){const e=this.splay(t);return 0!=e&&this.addNewRoot(new ie(t),e),this}addAndReturn(t){const e=this.splay(t);return 0!=e&&this.addNewRoot(new ie(t),e),this.root.key}addAll(t){for(const e of t)this.add(e)}isEmpty(){return null==this.root}isNotEmpty(){return null!=this.root}single(){if(0==this.size)throw"Bad state: No element";if(this.size>1)throw"Bad state: Too many element";return this.root.key}first(){if(0==this.size)throw"Bad state: No element";return this._first().key}last(){if(0==this.size)throw"Bad state: No element";return this._last().key}lastBefore(t){if(null==t)throw"Invalid arguments(s)";if(null==this.root)return null;if(this.splay(t)<0)return this.root.key;let e=this.root.left;if(null==e)return null;let r=e.right;for(;null!=r;)e=r,r=e.right;return e.key}firstAfter(t){if(null==t)throw"Invalid arguments(s)";if(null==this.root)return null;if(this.splay(t)>0)return this.root.key;let e=this.root.right;if(null==e)return null;let r=e.left;for(;null!=r;)e=r,r=e.left;return e.key}retainAll(e){const r=new t(this.compare,this.validKey),o=this.modificationCount;for(const t of e){if(o!=this.modificationCount)throw"Concurrent modification during iteration.";this.validKey(t)&&0==this.splay(t)&&r.add(this.root.key)}r.size!=this.size&&(this.root=r.root,this.size=r.size,this.modificationCount++)}lookup(t){if(!this.validKey(t))return null;return 0!=this.splay(t)?null:this.root.key}intersection(e){const r=new t(this.compare,this.validKey);for(const t of this)e.has(t)&&r.add(t);return r}difference(e){const r=new t(this.compare,this.validKey);for(const t of this)e.has(t)||r.add(t);return r}union(t){const e=this.clone();return e.addAll(t),e}clone(){const e=new t(this.compare,this.validKey);return e.size=this.size,e.root=this.copyNode(this.root),e}copyNode(t){if(null==t)return null;const e=new ie(t.key);return function t(e,r){let o,n;do{if(o=e.left,n=e.right,null!=o){const e=new ie(o.key);r.left=e,t(o,e)}if(null!=n){const t=new ie(n.key);r.right=t,e=n,r=t}}while(null!=n)}(t,e),e}toSet(){return this.clone()}entries(){return new he(this.wrap())}keys(){return this[Symbol.iterator]()}values(){return this[Symbol.iterator]()}[(o=Symbol.iterator,r=Symbol.toStringTag,o)](){return new ce(this.wrap())}},le=class{constructor(t){i(this,"tree"),i(this,"path",new Array),i(this,"modificationCount",null),i(this,"splayCount"),this.tree=t,this.splayCount=t.getSplayCount()}[Symbol.iterator](){return this}next(){return this.moveNext()?{done:!1,value:this.current()}:{done:!0,value:null}}current(){if(!this.path.length)return null;const t=this.path[this.path.length-1];return this.getValue(t)}rebuildPath(t){this.path.splice(0,this.path.length),this.tree.splay(t),this.path.push(this.tree.getRoot()),this.splayCount=this.tree.getSplayCount()}findLeftMostDescendent(t){for(;null!=t;)this.path.push(t),t=t.left}moveNext(){if(this.modificationCount!=this.tree.getModificationCount()){if(null==this.modificationCount){this.modificationCount=this.tree.getModificationCount();let t=this.tree.getRoot();for(;null!=t;)this.path.push(t),t=t.left;return this.path.length>0}throw"Concurrent modification during iteration."}if(!this.path.length)return!1;this.splayCount!=this.tree.getSplayCount()&&this.rebuildPath(this.path[this.path.length-1].key);let t=this.path[this.path.length-1],e=t.right;if(null!=e){for(;null!=e;)this.path.push(e),e=e.left;return!0}for(this.path.pop();this.path.length&&this.path[this.path.length-1].right===t;)t=this.path.pop();return this.path.length>0}},ce=class extends le{getValue(t){return t.key}},he=class extends le{getValue(t){return[t.key,t.key]}},ue=t=>()=>t,ge=t=>{const e=t?(e,r)=>r.minus(e).abs().isLessThanOrEqualTo(t):ue(!1);return(t,r)=>e(t,r)?0:t.comparedTo(r)};function de(t){const e=t?(e,r,o,n,i)=>e.exponentiatedBy(2).isLessThanOrEqualTo(n.minus(r).exponentiatedBy(2).plus(i.minus(o).exponentiatedBy(2)).times(t)):ue(!1);return(t,r,o)=>{const n=t.x,i=t.y,a=o.x,s=o.y,l=i.minus(s).times(r.x.minus(a)).minus(n.minus(a).times(r.y.minus(s)));return e(l,n,i,a,s)?0:l.comparedTo(0)}}var pe=t=>t,fe=t=>{if(t){const e=new se(ge(t)),r=new se(ge(t)),o=(t,e)=>e.addAndReturn(t),n=t=>({x:o(t.x,e),y:o(t.y,r)});return n({x:new oe(0),y:new oe(0)}),n}return pe},ye=t=>({set:t=>{me=ye(t)},reset:()=>ye(t),compare:ge(t),snap:fe(t),orient:de(t)}),me=ye(),ve=(t,e)=>t.ll.x.isLessThanOrEqualTo(e.x)&&e.x.isLessThanOrEqualTo(t.ur.x)&&t.ll.y.isLessThanOrEqualTo(e.y)&&e.y.isLessThanOrEqualTo(t.ur.y),Me=(t,e)=>{if(e.ur.x.isLessThan(t.ll.x)||t.ur.x.isLessThan(e.ll.x)||e.ur.y.isLessThan(t.ll.y)||t.ur.y.isLessThan(e.ll.y))return null;const r=t.ll.x.isLessThan(e.ll.x)?e.ll.x:t.ll.x,o=t.ur.x.isLessThan(e.ur.x)?t.ur.x:e.ur.x;return{ll:{x:r,y:t.ll.y.isLessThan(e.ll.y)?e.ll.y:t.ll.y},ur:{x:o,y:t.ur.y.isLessThan(e.ur.y)?t.ur.y:e.ur.y}}},we=(t,e)=>t.x.times(e.y).minus(t.y.times(e.x)),be=(t,e)=>t.x.times(e.x).plus(t.y.times(e.y)),Pe=t=>be(t,t).sqrt(),Le=(t,e,r)=>{const o={x:e.x.minus(t.x),y:e.y.minus(t.y)},n={x:r.x.minus(t.x),y:r.y.minus(t.y)};return we(n,o).div(Pe(n)).div(Pe(o))},ke=(t,e,r)=>{const o={x:e.x.minus(t.x),y:e.y.minus(t.y)},n={x:r.x.minus(t.x),y:r.y.minus(t.y)};return be(n,o).div(Pe(n)).div(Pe(o))},xe=(t,e,r)=>e.y.isZero()?null:{x:t.x.plus(e.x.div(e.y).times(r.minus(t.y))),y:r},Ee=(t,e,r)=>e.x.isZero()?null:{x:r,y:t.y.plus(e.y.div(e.x).times(r.minus(t.x)))},Se=class t{constructor(t,e){i(this,"point"),i(this,"isLeft"),i(this,"segment"),i(this,"otherSE"),i(this,"consumedBy"),void 0===t.events?t.events=[this]:t.events.push(this),this.point=t,this.isLeft=e}static compare(e,r){const o=t.comparePoints(e.point,r.point);return 0!==o?o:(e.point!==r.point&&e.link(r),e.isLeft!==r.isLeft?e.isLeft?1:-1:_e.compare(e.segment,r.segment))}static comparePoints(t,e){return t.x.isLessThan(e.x)?-1:t.x.isGreaterThan(e.x)?1:t.y.isLessThan(e.y)?-1:t.y.isGreaterThan(e.y)?1:0}link(t){if(t.point===this.point)throw new Error("Tried to link already linked events");const e=t.point.events;for(let r=0,o=e.length;r<o;r++){const t=e[r];this.point.events.push(t),t.point=this.point}this.checkForConsuming()}checkForConsuming(){const t=this.point.events.length;for(let e=0;e<t;e++){const r=this.point.events[e];if(void 0===r.segment.consumedBy)for(let o=e+1;o<t;o++){const t=this.point.events[o];void 0===t.consumedBy&&(r.otherSE.point.events===t.otherSE.point.events&&r.segment.consume(t.segment))}}}getAvailableLinkedEvents(){const t=[];for(let e=0,r=this.point.events.length;e<r;e++){const r=this.point.events[e];r!==this&&!r.segment.ringOut&&r.segment.isInResult()&&t.push(r)}return t}getLeftmostComparator(t){const e=new Map,r=r=>{const o=r.otherSE;e.set(r,{sine:Le(this.point,t.point,o.point),cosine:ke(this.point,t.point,o.point)})};return(t,o)=>{e.has(t)||r(t),e.has(o)||r(o);const{sine:n,cosine:i}=e.get(t),{sine:a,cosine:s}=e.get(o);return n.isGreaterThanOrEqualTo(0)&&a.isGreaterThanOrEqualTo(0)?i.isLessThan(s)?1:i.isGreaterThan(s)?-1:0:n.isLessThan(0)&&a.isLessThan(0)?i.isLessThan(s)?-1:i.isGreaterThan(s)?1:0:a.isLessThan(n)?-1:a.isGreaterThan(n)?1:0}}},De=class t{constructor(t){i(this,"events"),i(this,"poly"),i(this,"_isExteriorRing"),i(this,"_enclosingRing"),this.events=t;for(let e=0,r=t.length;e<r;e++)t[e].segment.ringOut=this;this.poly=null}static factory(e){const r=[];for(let o=0,n=e.length;o<n;o++){const n=e[o];if(!n.isInResult()||n.ringOut)continue;let i=null,a=n.leftSE,s=n.rightSE;const l=[a],c=a.point,h=[];for(;i=a,a=s,l.push(a),a.point!==c;)for(;;){const e=a.getAvailableLinkedEvents();if(0===e.length){const t=l[0].point,e=l[l.length-1].point;throw new Error(`Unable to complete output ring starting at [${t.x}, ${t.y}]. Last matching segment found ends at [${e.x}, ${e.y}].`)}if(1===e.length){s=e[0].otherSE;break}let o=null;for(let t=0,r=h.length;t<r;t++)if(h[t].point===a.point){o=t;break}if(null!==o){const e=h.splice(o)[0],n=l.splice(e.index);n.unshift(n[0].otherSE),r.push(new t(n.reverse()));continue}h.push({index:l.length,point:a.point});const n=a.getLeftmostComparator(i);s=e.sort(n)[0].otherSE;break}r.push(new t(l))}return r}getGeom(){let t=this.events[0].point;const e=[t];for(let l=1,c=this.events.length-1;l<c;l++){const r=this.events[l].point,o=this.events[l+1].point;0!==me.orient(r,t,o)&&(e.push(r),t=r)}if(1===e.length)return null;const r=e[0],o=e[1];0===me.orient(r,t,o)&&e.shift(),e.push(e[0]);const n=this.isExteriorRing()?1:-1,i=this.isExteriorRing()?0:e.length-1,a=this.isExteriorRing()?e.length:-1,s=[];for(let l=i;l!=a;l+=n)s.push([e[l].x.toNumber(),e[l].y.toNumber()]);return s}isExteriorRing(){if(void 0===this._isExteriorRing){const t=this.enclosingRing();this._isExteriorRing=!t||!t.isExteriorRing()}return this._isExteriorRing}enclosingRing(){return void 0===this._enclosingRing&&(this._enclosingRing=this._calcEnclosingRing()),this._enclosingRing}_calcEnclosingRing(){var t,e;let r=this.events[0];for(let i=1,a=this.events.length;i<a;i++){const t=this.events[i];Se.compare(r,t)>0&&(r=t)}let o=r.segment.prevInResult(),n=o?o.prevInResult():null;for(;;){if(!o)return null;if(!n)return o.ringOut;if(n.ringOut!==o.ringOut)return(null==(t=n.ringOut)?void 0:t.enclosingRing())!==o.ringOut?o.ringOut:null==(e=o.ringOut)?void 0:e.enclosingRing();o=n.prevInResult(),n=o?o.prevInResult():null}}},Ce=class{constructor(t){i(this,"exteriorRing"),i(this,"interiorRings"),this.exteriorRing=t,t.poly=this,this.interiorRings=[]}addInterior(t){this.interiorRings.push(t),t.poly=this}getGeom(){const t=this.exteriorRing.getGeom();if(null===t)return null;const e=[t];for(let r=0,o=this.interiorRings.length;r<o;r++){const t=this.interiorRings[r].getGeom();null!==t&&e.push(t)}return e}},Ie=class{constructor(t){i(this,"rings"),i(this,"polys"),this.rings=t,this.polys=this._composePolys(t)}getGeom(){const t=[];for(let e=0,r=this.polys.length;e<r;e++){const r=this.polys[e].getGeom();null!==r&&t.push(r)}return t}_composePolys(t){var e;const r=[];for(let o=0,n=t.length;o<n;o++){const n=t[o];if(!n.poly)if(n.isExteriorRing())r.push(new Ce(n));else{const t=n.enclosingRing();(null==t?void 0:t.poly)||r.push(new Ce(t)),null==(e=null==t?void 0:t.poly)||e.addInterior(n)}}return r}},Ae=class{constructor(t,e=_e.compare){i(this,"queue"),i(this,"tree"),i(this,"segments"),this.queue=t,this.tree=new se(e),this.segments=[]}process(t){const e=t.segment,r=[];if(t.consumedBy)return t.isLeft?this.queue.delete(t.otherSE):this.tree.delete(e),r;t.isLeft&&this.tree.add(e);let o=e,n=e;do{o=this.tree.lastBefore(o)}while(null!=o&&null!=o.consumedBy);do{n=this.tree.firstAfter(n)}while(null!=n&&null!=n.consumedBy);if(t.isLeft){let i=null;if(o){const t=o.getIntersection(e);if(null!==t&&(e.isAnEndpoint(t)||(i=t),!o.isAnEndpoint(t))){const e=this._splitSafely(o,t);for(let t=0,o=e.length;t<o;t++)r.push(e[t])}}let a=null;if(n){const t=n.getIntersection(e);if(null!==t&&(e.isAnEndpoint(t)||(a=t),!n.isAnEndpoint(t))){const e=this._splitSafely(n,t);for(let t=0,o=e.length;t<o;t++)r.push(e[t])}}if(null!==i||null!==a){let t=null;if(null===i)t=a;else if(null===a)t=i;else{t=Se.comparePoints(i,a)<=0?i:a}this.queue.delete(e.rightSE),r.push(e.rightSE);const o=e.split(t);for(let e=0,n=o.length;e<n;e++)r.push(o[e])}r.length>0?(this.tree.delete(e),r.push(t)):(this.segments.push(e),e.prev=o)}else{if(o&&n){const t=o.getIntersection(n);if(null!==t){if(!o.isAnEndpoint(t)){const e=this._splitSafely(o,t);for(let t=0,o=e.length;t<o;t++)r.push(e[t])}if(!n.isAnEndpoint(t)){const e=this._splitSafely(n,t);for(let t=0,o=e.length;t<o;t++)r.push(e[t])}}}this.tree.delete(e)}return r}_splitSafely(t,e){this.tree.delete(t);const r=t.rightSE;this.queue.delete(r);const o=t.split(e);return o.push(r),void 0===t.consumedBy&&this.tree.add(t),o}},Oe=new class{constructor(){i(this,"type"),i(this,"numMultiPolys")}run(t,e,r){Oe.type=t;const o=[new Be(e,!0)];for(let l=0,c=r.length;l<c;l++)o.push(new Be(r[l],!1));if(Oe.numMultiPolys=o.length,"difference"===Oe.type){const t=o[0];let e=1;for(;e<o.length;)null!==Me(o[e].bbox,t.bbox)?e++:o.splice(e,1)}if("intersection"===Oe.type)for(let l=0,c=o.length;l<c;l++){const t=o[l];for(let e=l+1,r=o.length;e<r;e++)if(null===Me(t.bbox,o[e].bbox))return[]}const n=new se(Se.compare);for(let l=0,c=o.length;l<c;l++){const t=o[l].getSweepEvents();for(let e=0,r=t.length;e<r;e++)n.add(t[e])}const i=new Ae(n);let a=null;for(0!=n.size&&(a=n.first(),n.delete(a));a;){const t=i.process(a);for(let e=0,r=t.length;e<r;e++){const r=t[e];void 0===r.consumedBy&&n.add(r)}0!=n.size?(a=n.first(),n.delete(a)):a=null}me.reset();const s=De.factory(i.segments);return new Ie(s).getGeom()}},Fe=Oe,Te=0,_e=class t{constructor(t,e,r,o){i(this,"id"),i(this,"leftSE"),i(this,"rightSE"),i(this,"rings"),i(this,"windings"),i(this,"ringOut"),i(this,"consumedBy"),i(this,"prev"),i(this,"_prevInResult"),i(this,"_beforeState"),i(this,"_afterState"),i(this,"_isInResult"),this.id=++Te,this.leftSE=t,t.segment=this,t.otherSE=e,this.rightSE=e,e.segment=this,e.otherSE=t,this.rings=r,this.windings=o}static compare(t,e){const r=t.leftSE.point.x,o=e.leftSE.point.x,n=t.rightSE.point.x,i=e.rightSE.point.x;if(i.isLessThan(r))return 1;if(n.isLessThan(o))return-1;const a=t.leftSE.point.y,s=e.leftSE.point.y,l=t.rightSE.point.y,c=e.rightSE.point.y;if(r.isLessThan(o)){if(s.isLessThan(a)&&s.isLessThan(l))return 1;if(s.isGreaterThan(a)&&s.isGreaterThan(l))return-1;const r=t.comparePoint(e.leftSE.point);if(r<0)return 1;if(r>0)return-1;const o=e.comparePoint(t.rightSE.point);return 0!==o?o:-1}if(r.isGreaterThan(o)){if(a.isLessThan(s)&&a.isLessThan(c))return-1;if(a.isGreaterThan(s)&&a.isGreaterThan(c))return 1;const r=e.comparePoint(t.leftSE.point);if(0!==r)return r;const o=t.comparePoint(e.rightSE.point);return o<0?1:o>0?-1:1}if(a.isLessThan(s))return-1;if(a.isGreaterThan(s))return 1;if(n.isLessThan(i)){const r=e.comparePoint(t.rightSE.point);if(0!==r)return r}if(n.isGreaterThan(i)){const r=t.comparePoint(e.rightSE.point);if(r<0)return 1;if(r>0)return-1}if(!n.eq(i)){const t=l.minus(a),e=n.minus(r),h=c.minus(s),u=i.minus(o);if(t.isGreaterThan(e)&&h.isLessThan(u))return 1;if(t.isLessThan(e)&&h.isGreaterThan(u))return-1}return n.isGreaterThan(i)?1:n.isLessThan(i)||l.isLessThan(c)?-1:l.isGreaterThan(c)?1:t.id<e.id?-1:t.id>e.id?1:0}static fromRing(e,r,o){let n,i,a;const s=Se.comparePoints(e,r);if(s<0)n=e,i=r,a=1;else{if(!(s>0))throw new Error(`Tried to create degenerate segment at [${e.x}, ${e.y}]`);n=r,i=e,a=-1}const l=new Se(n,!0),c=new Se(i,!1);return new t(l,c,[o],[a])}replaceRightSE(t){this.rightSE=t,this.rightSE.segment=this,this.rightSE.otherSE=this.leftSE,this.leftSE.otherSE=this.rightSE}bbox(){const t=this.leftSE.point.y,e=this.rightSE.point.y;return{ll:{x:this.leftSE.point.x,y:t.isLessThan(e)?t:e},ur:{x:this.rightSE.point.x,y:t.isGreaterThan(e)?t:e}}}vector(){return{x:this.rightSE.point.x.minus(this.leftSE.point.x),y:this.rightSE.point.y.minus(this.leftSE.point.y)}}isAnEndpoint(t){return t.x.eq(this.leftSE.point.x)&&t.y.eq(this.leftSE.point.y)||t.x.eq(this.rightSE.point.x)&&t.y.eq(this.rightSE.point.y)}comparePoint(t){return me.orient(this.leftSE.point,t,this.rightSE.point)}getIntersection(t){const e=this.bbox(),r=t.bbox(),o=Me(e,r);if(null===o)return null;const n=this.leftSE.point,i=this.rightSE.point,a=t.leftSE.point,s=t.rightSE.point,l=ve(e,a)&&0===this.comparePoint(a),c=ve(r,n)&&0===t.comparePoint(n),h=ve(e,s)&&0===this.comparePoint(s),u=ve(r,i)&&0===t.comparePoint(i);if(c&&l)return u&&!h?i:!u&&h?s:null;if(c)return h&&n.x.eq(s.x)&&n.y.eq(s.y)?null:n;if(l)return u&&i.x.eq(a.x)&&i.y.eq(a.y)?null:a;if(u&&h)return null;if(u)return i;if(h)return s;const g=((t,e,r,o)=>{if(e.x.isZero())return Ee(r,o,t.x);if(o.x.isZero())return Ee(t,e,r.x);if(e.y.isZero())return xe(r,o,t.y);if(o.y.isZero())return xe(t,e,r.y);const n=we(e,o);if(n.isZero())return null;const i={x:r.x.minus(t.x),y:r.y.minus(t.y)},a=we(i,e).div(n),s=we(i,o).div(n),l=t.x.plus(s.times(e.x)),c=r.x.plus(a.times(o.x)),h=t.y.plus(s.times(e.y)),u=r.y.plus(a.times(o.y));return{x:l.plus(c).div(2),y:h.plus(u).div(2)}})(n,this.vector(),a,t.vector());return null===g?null:ve(o,g)?me.snap(g):null}split(e){const r=[],o=void 0!==e.events,n=new Se(e,!0),i=new Se(e,!1),a=this.rightSE;this.replaceRightSE(i),r.push(i),r.push(n);const s=new t(n,a,this.rings.slice(),this.windings.slice());return Se.comparePoints(s.leftSE.point,s.rightSE.point)>0&&s.swapEvents(),Se.comparePoints(this.leftSE.point,this.rightSE.point)>0&&this.swapEvents(),o&&(n.checkForConsuming(),i.checkForConsuming()),r}swapEvents(){const t=this.rightSE;this.rightSE=this.leftSE,this.leftSE=t,this.leftSE.isLeft=!0,this.rightSE.isLeft=!1;for(let e=0,r=this.windings.length;e<r;e++)this.windings[e]*=-1}consume(e){let r=this,o=e;for(;r.consumedBy;)r=r.consumedBy;for(;o.consumedBy;)o=o.consumedBy;const n=t.compare(r,o);if(0!==n){if(n>0){const t=r;r=o,o=t}if(r.prev===o){const t=r;r=o,o=t}for(let t=0,e=o.rings.length;t<e;t++){const e=o.rings[t],n=o.windings[t],i=r.rings.indexOf(e);-1===i?(r.rings.push(e),r.windings.push(n)):r.windings[i]+=n}o.rings=null,o.windings=null,o.consumedBy=r,o.leftSE.consumedBy=r.leftSE,o.rightSE.consumedBy=r.rightSE}}prevInResult(){return void 0!==this._prevInResult||(this.prev?this.prev.isInResult()?this._prevInResult=this.prev:this._prevInResult=this.prev.prevInResult():this._prevInResult=null),this._prevInResult}beforeState(){if(void 0!==this._beforeState)return this._beforeState;if(this.prev){const t=this.prev.consumedBy||this.prev;this._beforeState=t.afterState()}else this._beforeState={rings:[],windings:[],multiPolys:[]};return this._beforeState}afterState(){if(void 0!==this._afterState)return this._afterState;const t=this.beforeState();this._afterState={rings:t.rings.slice(0),windings:t.windings.slice(0),multiPolys:[]};const e=this._afterState.rings,r=this._afterState.windings,o=this._afterState.multiPolys;for(let a=0,s=this.rings.length;a<s;a++){const t=this.rings[a],o=this.windings[a],n=e.indexOf(t);-1===n?(e.push(t),r.push(o)):r[n]+=o}const n=[],i=[];for(let a=0,s=e.length;a<s;a++){if(0===r[a])continue;const t=e[a],o=t.poly;if(-1===i.indexOf(o))if(t.isExterior)n.push(o);else{-1===i.indexOf(o)&&i.push(o);const e=n.indexOf(t.poly);-1!==e&&n.splice(e,1)}}for(let a=0,s=n.length;a<s;a++){const t=n[a].multiPoly;-1===o.indexOf(t)&&o.push(t)}return this._afterState}isInResult(){if(this.consumedBy)return!1;if(void 0!==this._isInResult)return this._isInResult;const t=this.beforeState().multiPolys,e=this.afterState().multiPolys;switch(Fe.type){case"union":{const r=0===t.length,o=0===e.length;this._isInResult=r!==o;break}case"intersection":{let r,o;t.length<e.length?(r=t.length,o=e.length):(r=e.length,o=t.length),this._isInResult=o===Fe.numMultiPolys&&r<o;break}case"xor":{const r=Math.abs(t.length-e.length);this._isInResult=r%2==1;break}case"difference":{const r=t=>1===t.length&&t[0].isSubject;this._isInResult=r(t)!==r(e);break}}return this._isInResult}},He=class{constructor(t,e,r){if(i(this,"poly"),i(this,"isExterior"),i(this,"segments"),i(this,"bbox"),!Array.isArray(t)||0===t.length)throw new Error("Input geometry is not a valid Polygon or MultiPolygon");if(this.poly=e,this.isExterior=r,this.segments=[],"number"!=typeof t[0][0]||"number"!=typeof t[0][1])throw new Error("Input geometry is not a valid Polygon or MultiPolygon");const o=me.snap({x:new oe(t[0][0]),y:new oe(t[0][1])});this.bbox={ll:{x:o.x,y:o.y},ur:{x:o.x,y:o.y}};let n=o;for(let i=1,a=t.length;i<a;i++){if("number"!=typeof t[i][0]||"number"!=typeof t[i][1])throw new Error("Input geometry is not a valid Polygon or MultiPolygon");const e=me.snap({x:new oe(t[i][0]),y:new oe(t[i][1])});e.x.eq(n.x)&&e.y.eq(n.y)||(this.segments.push(_e.fromRing(n,e,this)),e.x.isLessThan(this.bbox.ll.x)&&(this.bbox.ll.x=e.x),e.y.isLessThan(this.bbox.ll.y)&&(this.bbox.ll.y=e.y),e.x.isGreaterThan(this.bbox.ur.x)&&(this.bbox.ur.x=e.x),e.y.isGreaterThan(this.bbox.ur.y)&&(this.bbox.ur.y=e.y),n=e)}o.x.eq(n.x)&&o.y.eq(n.y)||this.segments.push(_e.fromRing(n,o,this))}getSweepEvents(){const t=[];for(let e=0,r=this.segments.length;e<r;e++){const r=this.segments[e];t.push(r.leftSE),t.push(r.rightSE)}return t}},Ge=class{constructor(t,e){if(i(this,"multiPoly"),i(this,"exteriorRing"),i(this,"interiorRings"),i(this,"bbox"),!Array.isArray(t))throw new Error("Input geometry is not a valid Polygon or MultiPolygon");this.exteriorRing=new He(t[0],this,!0),this.bbox={ll:{x:this.exteriorRing.bbox.ll.x,y:this.exteriorRing.bbox.ll.y},ur:{x:this.exteriorRing.bbox.ur.x,y:this.exteriorRing.bbox.ur.y}},this.interiorRings=[];for(let r=1,o=t.length;r<o;r++){const e=new He(t[r],this,!1);e.bbox.ll.x.isLessThan(this.bbox.ll.x)&&(this.bbox.ll.x=e.bbox.ll.x),e.bbox.ll.y.isLessThan(this.bbox.ll.y)&&(this.bbox.ll.y=e.bbox.ll.y),e.bbox.ur.x.isGreaterThan(this.bbox.ur.x)&&(this.bbox.ur.x=e.bbox.ur.x),e.bbox.ur.y.isGreaterThan(this.bbox.ur.y)&&(this.bbox.ur.y=e.bbox.ur.y),this.interiorRings.push(e)}this.multiPoly=e}getSweepEvents(){const t=this.exteriorRing.getSweepEvents();for(let e=0,r=this.interiorRings.length;e<r;e++){const r=this.interiorRings[e].getSweepEvents();for(let e=0,o=r.length;e<o;e++)t.push(r[e])}return t}},Be=class{constructor(t,e){if(i(this,"isSubject"),i(this,"polys"),i(this,"bbox"),!Array.isArray(t))throw new Error("Input geometry is not a valid Polygon or MultiPolygon");try{"number"==typeof t[0][0][0]&&(t=[t])}catch(r){}this.polys=[],this.bbox={ll:{x:new oe(Number.POSITIVE_INFINITY),y:new oe(Number.POSITIVE_INFINITY)},ur:{x:new oe(Number.NEGATIVE_INFINITY),y:new oe(Number.NEGATIVE_INFINITY)}};for(let o=0,n=t.length;o<n;o++){const e=new Ge(t[o],this);e.bbox.ll.x.isLessThan(this.bbox.ll.x)&&(this.bbox.ll.x=e.bbox.ll.x),e.bbox.ll.y.isLessThan(this.bbox.ll.y)&&(this.bbox.ll.y=e.bbox.ll.y),e.bbox.ur.x.isGreaterThan(this.bbox.ur.x)&&(this.bbox.ur.x=e.bbox.ur.x),e.bbox.ur.y.isGreaterThan(this.bbox.ur.y)&&(this.bbox.ur.y=e.bbox.ur.y),this.polys.push(e)}this.isSubject=e}getSweepEvents(){const t=[];for(let e=0,r=this.polys.length;e<r;e++){const r=this.polys[e].getSweepEvents();for(let e=0,o=r.length;e<o;e++)t.push(r[e])}return t}};me.set;var ze=function(t,e={}){const r=[];if(R(t,t=>{r.push(t.coordinates)}),r.length<2)throw new Error("Must have at least 2 geometries");const o=((t,...e)=>Fe.run("union",t,e))(r[0],...r.slice(1));return 0===o.length?null:1===o.length?O(o[0],e.properties):_(o,e.properties)};var Ne=function(t,e={}){const r=[];if(R(t,t=>{r.push(t.coordinates)}),r.length<2)throw new Error("Must specify at least 2 geometries");const o=((t,...e)=>Fe.run("intersection",t,e))(r[0],...r.slice(1));return 0===o.length?null:1===o.length?O(o[0],e.properties):_(o,e.properties)};var Ue=function(t){const e=[];if(R(t,t=>{e.push(t.coordinates)}),e.length<2)throw new Error("Must have at least two features");const r=t.features[0].properties||{},o=((t,...e)=>Fe.run("difference",t,e))(e[0],...e.slice(1));return 0===o.length?null:1===o.length?O(o[0],r):_(o,r)};var Re=function(t){const e=[];return"FeatureCollection"===t.type?U(t,function(t){N(t,function(r){e.push(A(r,t.properties))})}):"Feature"===t.type?N(t,function(r){e.push(A(r,t.properties))}):N(t,function(t){e.push(A(t))}),T(e)};function Xe(t,e,r={}){const o=wt(t),n=bt(e);for(let i=0;i<n.length-1;i++){let t=!1;if(r.ignoreEndVertices&&(0===i&&(t="start"),i===n.length-2&&(t="end"),0===i&&i+1===n.length-1&&(t="both")),Ye(n[i],n[i+1],o,t,void 0===r.epsilon?null:r.epsilon))return!0}return!1}function Ye(t,e,r,o,n){const i=r[0],a=r[1],s=t[0],l=t[1],c=e[0],h=e[1],u=c-s,g=h-l,d=(r[0]-s)*g-(r[1]-l)*u;if(null!==n){if(Math.abs(d)>n)return!1}else if(0!==d)return!1;return Math.abs(u)===Math.abs(g)&&0===Math.abs(u)?!o&&(r[0]===t[0]&&r[1]===t[1]):o?"start"===o?Math.abs(u)>=Math.abs(g)?u>0?s<i&&i<=c:c<=i&&i<s:g>0?l<a&&a<=h:h<=a&&a<l:"end"===o?Math.abs(u)>=Math.abs(g)?u>0?s<=i&&i<c:c<i&&i<=s:g>0?l<=a&&a<h:h<a&&a<=l:"both"===o&&(Math.abs(u)>=Math.abs(g)?u>0?s<i&&i<c:c<i&&i<s:g>0?l<a&&a<h:h<a&&a<l):Math.abs(u)>=Math.abs(g)?u>0?s<=i&&i<=c:c<=i&&i<=s:g>0?l<=a&&a<=h:h<=a&&a<=l}function Ve(t,e={}){var r="object"==typeof e?e.mutate:e;if(!t)throw new Error("geojson is required");var o=Lt(t),n=[];switch(o){case"LineString":n=qe(t,o);break;case"MultiLineString":case"Polygon":bt(t).forEach(function(t){n.push(qe(t,o))});break;case"MultiPolygon":bt(t).forEach(function(t){var e=[];t.forEach(function(t){e.push(qe(t,o))}),n.push(e)});break;case"Point":return t;case"MultiPoint":var i={};bt(t).forEach(function(t){var e=t.join("-");Object.prototype.hasOwnProperty.call(i,e)||(n.push(t),i[e]=!0)});break;default:throw new Error(o+" geometry not supported")}return t.coordinates?!0===r?(t.coordinates=n,t):{type:o,coordinates:n}:!0===r?(t.geometry.coordinates=n,t):I({type:o,coordinates:n},t.properties,{bbox:t.bbox,id:t.id})}function qe(t,e){const r=bt(t);if(2===r.length&&!je(r[0],r[1]))return r;const o=[];let n=0,i=1,a=2;for(o.push(r[n]);a<r.length;)Xe(r[i],F([r[n],r[a]]))?i=a:(o.push(r[i]),n=i,i++,a=i),a++;if(o.push(r[i]),"Polygon"===e||"MultiPolygon"===e){if(Xe(o[0],F([o[1],o[o.length-2]]))&&(o.shift(),o.pop(),o.push(o[0])),o.length<4)throw new Error("invalid polygon, fewer than 4 points");if(!je(o[0],o[o.length-1]))throw new Error("invalid polygon, first and last points not equal")}return o}function je(t,e){return t[0]===e[0]&&t[1]===e[1]}function Ke(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return $e(t);case"FeatureCollection":return function(t){const e={type:"FeatureCollection"};return Object.keys(t).forEach(r=>{switch(r){case"type":case"features":return;default:e[r]=t[r]}}),e.features=t.features.map(t=>$e(t)),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return Je(t);default:throw new Error("unknown GeoJSON type")}}function $e(t){const e={type:"Feature"};return Object.keys(t).forEach(r=>{switch(r){case"type":case"properties":case"geometry":return;default:e[r]=t[r]}}),e.properties=We(t.properties),null==t.geometry?e.geometry=null:e.geometry=Je(t.geometry),e}function We(t){const e={};return t?(Object.keys(t).forEach(r=>{const o=t[r];"object"==typeof o?null===o?e[r]=null:Array.isArray(o)?e[r]=o.map(t=>t):e[r]=We(o):e[r]=o}),e):e}function Je(t){const e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map(t=>Je(t)),e):(e.coordinates=Ze(t.coordinates),e)}function Ze(t){const e=t;return"object"!=typeof e[0]?e.slice():e.map(t=>Ze(t))}function Qe(t,e){var r=t[0]-e[0],o=t[1]-e[1];return r*r+o*o}function tr(t,e,r){var o=e[0],n=e[1],i=r[0]-o,a=r[1]-n;if(0!==i||0!==a){var s=((t[0]-o)*i+(t[1]-n)*a)/(i*i+a*a);s>1?(o=r[0],n=r[1]):s>0&&(o+=i*s,n+=a*s)}return(i=t[0]-o)*i+(a=t[1]-n)*a}function er(t,e,r,o,n){for(var i,a=o,s=e+1;s<r;s++){var l=tr(t[s],t[e],t[r]);l>a&&(i=s,a=l)}a>o&&(i-e>1&&er(t,e,i,o,n),n.push(t[i]),r-i>1&&er(t,i,r,o,n))}function rr(t,e){var r=t.length-1,o=[t[0]];return er(t,0,r,e,o),o.push(t[r]),o}function or(t,e,r){if(t.length<=2)return t;var o=void 0!==e?e*e:1;return t=r?t:function(t,e){for(var r,o=t[0],n=[o],i=1,a=t.length;i<a;i++)Qe(r=t[i],o)>e&&(n.push(r),o=r);return o!==r&&n.push(r),n}(t,o),t=rr(t,o)}function nr(t,e,r){return t.map(function(t){if(t.length<4)throw new Error("invalid polygon");let o=e,n=or(t,o,r);for(;!ir(n)&&o>=Number.EPSILON;)o-=.01*o,n=or(t,o,r);return ir(n)?(n[n.length-1][0]===n[0][0]&&n[n.length-1][1]===n[0][1]||n.push(n[0]),n):t})}function ir(t){return!(t.length<3)&&!(3===t.length&&t[2][0]===t[0][0]&&t[2][1]===t[0][1])}var ar=function(t,e={}){var r,o,n;if(!z(e=null!=e?e:{}))throw new Error("options is invalid");const i=null!=(r=e.tolerance)?r:1,a=null!=(o=e.highQuality)&&o,s=null!=(n=e.mutate)&&n;if(!t)throw new Error("geojson is required");if(i&&i<0)throw new Error("invalid tolerance");return!0!==s&&(t=Ke(t)),R(t,function(t){!function(t,e,r){const o=t.type;if("Point"===o||"MultiPoint"===o)return t;if(Ve(t,{mutate:!0}),"GeometryCollection"!==o)switch(o){case"LineString":t.coordinates=or(t.coordinates,e,r);break;case"MultiLineString":t.coordinates=t.coordinates.map(t=>or(t,e,r));break;case"Polygon":t.coordinates=nr(t.coordinates,e,r);break;case"MultiPolygon":t.coordinates=t.coordinates.map(t=>nr(t,e,r))}}(t,i,a)}),t};function sr(t,e,r,o,n,i,a,s){let l,c,h,u,g;const d={x:null,y:null,onLine1:!1,onLine2:!1};return l=(s-i)*(r-t)-(a-n)*(o-e),0===l?null!==d.x&&null!==d.y&&d:(c=e-i,h=t-n,u=(a-n)*c-(s-i)*h,g=(r-t)*c-(o-e)*h,c=u/l,h=g/l,d.x=t+c*(r-t),d.y=e+c*(o-e),c>=0&&c<=1&&(d.onLine1=!0),h>=0&&h<=1&&(d.onLine2=!0),!(!d.onLine1||!d.onLine2)&&[d.x,d.y])}var lr=function(t){let e,r;const o={type:"FeatureCollection",features:[]};if(r="Feature"===t.type?t.geometry:t,"LineString"===r.type)e=[r.coordinates];else if("MultiLineString"===r.type)e=r.coordinates;else if("MultiPolygon"===r.type)e=[].concat(...r.coordinates);else{if("Polygon"!==r.type)throw new Error("Input must be a LineString, MultiLineString, Polygon, or MultiPolygon Feature or Geometry");e=r.coordinates}return e.forEach(t=>{e.forEach(e=>{for(let r=0;r<t.length-1;r++)for(let n=r;n<e.length-1;n++){if(t===e){if(1===Math.abs(r-n))continue;if(0===r&&n===t.length-2&&t[r][0]===t[t.length-1][0]&&t[r][1]===t[t.length-1][1])continue}const i=sr(t[r][0],t[r][1],t[r+1][0],t[r+1][1],e[n][0],e[n][1],e[n+1][0],e[n+1][1]);i&&o.features.push(A([i[0],i[1]]))}})}),o};function cr(t,e,r,o,n){hr(t,e,r||0,o||t.length-1,n||gr)}function hr(t,e,r,o,n){for(;o>r;){if(o-r>600){var i=o-r+1,a=e-r+1,s=Math.log(i),l=.5*Math.exp(2*s/3),c=.5*Math.sqrt(s*l*(i-l)/i)*(a-i/2<0?-1:1);hr(t,e,Math.max(r,Math.floor(e-a*l/i+c)),Math.min(o,Math.floor(e+(i-a)*l/i+c)),n)}var h=t[e],u=r,g=o;for(ur(t,r,e),n(t[o],h)>0&&ur(t,r,o);u<g;){for(ur(t,u,g),u++,g--;n(t[u],h)<0;)u++;for(;n(t[g],h)>0;)g--}0===n(t[r],h)?ur(t,r,g):ur(t,++g,o),g<=e&&(r=g+1),e<=g&&(o=g-1)}}function ur(t,e,r){var o=t[e];t[e]=t[r],t[r]=o}function gr(t,e){return t<e?-1:t>e?1:0}let dr=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const r=[];if(!xr(t,e))return r;const o=this.toBBox,n=[];for(;e;){for(let i=0;i<e.children.length;i++){const a=e.children[i],s=e.leaf?o(a):a;xr(t,s)&&(e.leaf?r.push(a):kr(t,s)?this._all(a,r):n.push(a))}e=n.pop()}return r}collides(t){let e=this.data;if(!xr(t,e))return!1;const r=[];for(;e;){for(let o=0;o<e.children.length;o++){const n=e.children[o],i=e.leaf?this.toBBox(n):n;if(xr(t,i)){if(e.leaf||kr(t,i))return!0;r.push(n)}}e=r.pop()}return!1}load(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return this}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e;return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=Er([]),this}remove(t,e){if(!t)return this;let r=this.data;const o=this.toBBox(t),n=[],i=[];let a,s,l;for(;r||n.length;){if(r||(r=n.pop(),s=n[n.length-1],a=i.pop(),l=!0),r.leaf){const o=pr(t,r.children,e);if(-1!==o)return r.children.splice(o,1),n.push(r),this._condense(n),this}l||r.leaf||!kr(r,o)?s?(a++,r=s.children[a],l=!1):r=null:(n.push(r),i.push(a),a=0,s=r,r=r.children[0])}return this}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,e){const r=[];for(;t;)t.leaf?e.push(...t.children):r.push(...t.children),t=r.pop();return e}_build(t,e,r,o){const n=r-e+1;let i,a=this._maxEntries;if(n<=a)return i=Er(t.slice(e,r+1)),fr(i,this.toBBox),i;o||(o=Math.ceil(Math.log(n)/Math.log(a)),a=Math.ceil(n/Math.pow(a,o-1))),i=Er([]),i.leaf=!1,i.height=o;const s=Math.ceil(n/a),l=s*Math.ceil(Math.sqrt(a));Sr(t,e,r,l,this.compareMinX);for(let c=e;c<=r;c+=l){const e=Math.min(c+l-1,r);Sr(t,c,e,s,this.compareMinY);for(let r=c;r<=e;r+=s){const n=Math.min(r+s-1,e);i.children.push(this._build(t,r,n,o-1))}}return fr(i,this.toBBox),i}_chooseSubtree(t,e,r,o){for(;o.push(e),!e.leaf&&o.length-1!==r;){let r,o=1/0,n=1/0;for(let i=0;i<e.children.length;i++){const a=e.children[i],s=wr(a),l=Pr(t,a)-s;l<n?(n=l,o=s<o?s:o,r=a):l===n&&s<o&&(o=s,r=a)}e=r||e.children[0]}return e}_insert(t,e,r){const o=r?t:this.toBBox(t),n=[],i=this._chooseSubtree(o,this.data,e,n);for(i.children.push(t),mr(i,o);e>=0&&n[e].children.length>this._maxEntries;)this._split(n,e),e--;this._adjustParentBBoxes(o,n,e)}_split(t,e){const r=t[e],o=r.children.length,n=this._minEntries;this._chooseSplitAxis(r,n,o);const i=this._chooseSplitIndex(r,n,o),a=Er(r.children.splice(i,r.children.length-i));a.height=r.height,a.leaf=r.leaf,fr(r,this.toBBox),fr(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(r,a)}_splitRoot(t,e){this.data=Er([t,e]),this.data.height=t.height+1,this.data.leaf=!1,fr(this.data,this.toBBox)}_chooseSplitIndex(t,e,r){let o,n=1/0,i=1/0;for(let a=e;a<=r-e;a++){const e=yr(t,0,a,this.toBBox),s=yr(t,a,r,this.toBBox),l=Lr(e,s),c=wr(e)+wr(s);l<n?(n=l,o=a,i=c<i?c:i):l===n&&c<i&&(i=c,o=a)}return o||r-e}_chooseSplitAxis(t,e,r){const o=t.leaf?this.compareMinX:vr,n=t.leaf?this.compareMinY:Mr;this._allDistMargin(t,e,r,o)<this._allDistMargin(t,e,r,n)&&t.children.sort(o)}_allDistMargin(t,e,r,o){t.children.sort(o);const n=this.toBBox,i=yr(t,0,e,n),a=yr(t,r-e,r,n);let s=br(i)+br(a);for(let l=e;l<r-e;l++){const e=t.children[l];mr(i,t.leaf?n(e):e),s+=br(i)}for(let l=r-e-1;l>=e;l--){const e=t.children[l];mr(a,t.leaf?n(e):e),s+=br(a)}return s}_adjustParentBBoxes(t,e,r){for(let o=r;o>=0;o--)mr(e[o],t)}_condense(t){for(let e,r=t.length-1;r>=0;r--)0===t[r].children.length?r>0?(e=t[r-1].children,e.splice(e.indexOf(t[r]),1)):this.clear():fr(t[r],this.toBBox)}};function pr(t,e,r){if(!r)return e.indexOf(t);for(let o=0;o<e.length;o++)if(r(t,e[o]))return o;return-1}function fr(t,e){yr(t,0,t.children.length,e,t)}function yr(t,e,r,o,n){n||(n=Er(null)),n.minX=1/0,n.minY=1/0,n.maxX=-1/0,n.maxY=-1/0;for(let i=e;i<r;i++){const e=t.children[i];mr(n,t.leaf?o(e):e)}return n}function mr(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function vr(t,e){return t.minX-e.minX}function Mr(t,e){return t.minY-e.minY}function wr(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function br(t){return t.maxX-t.minX+(t.maxY-t.minY)}function Pr(t,e){return(Math.max(e.maxX,t.maxX)-Math.min(e.minX,t.minX))*(Math.max(e.maxY,t.maxY)-Math.min(e.minY,t.minY))}function Lr(t,e){const r=Math.max(t.minX,e.minX),o=Math.max(t.minY,e.minY),n=Math.min(t.maxX,e.maxX),i=Math.min(t.maxY,e.maxY);return Math.max(0,n-r)*Math.max(0,i-o)}function kr(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function xr(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function Er(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function Sr(t,e,r,o,n){const i=[e,r];for(;i.length;){if((r=i.pop())-(e=i.pop())<=o)continue;const a=e+Math.ceil((r-e)/o/2)*o;cr(t,a,e,r,n),i.push(e,a,a,r)}}const Dr=11102230246251565e-32,Cr=134217729,Ir=(3+8*Dr)*Dr;function Ar(t,e,r,o,n){let i,a,s,l,c=e[0],h=o[0],u=0,g=0;h>c==h>-c?(i=c,c=e[++u]):(i=h,h=o[++g]);let d=0;if(u<t&&g<r)for(h>c==h>-c?(a=c+i,s=i-(a-c),c=e[++u]):(a=h+i,s=i-(a-h),h=o[++g]),i=a,0!==s&&(n[d++]=s);u<t&&g<r;)h>c==h>-c?(a=i+c,l=a-i,s=i-(a-l)+(c-l),c=e[++u]):(a=i+h,l=a-i,s=i-(a-l)+(h-l),h=o[++g]),i=a,0!==s&&(n[d++]=s);for(;u<t;)a=i+c,l=a-i,s=i-(a-l)+(c-l),c=e[++u],i=a,0!==s&&(n[d++]=s);for(;g<r;)a=i+h,l=a-i,s=i-(a-l)+(h-l),h=o[++g],i=a,0!==s&&(n[d++]=s);return 0===i&&0!==d||(n[d++]=i),d}function Or(t){return new Float64Array(t)}const Fr=Or(4),Tr=Or(8),_r=Or(12),Hr=Or(16),Gr=Or(4);function Br(t,e,r,o,n,i){const a=(e-i)*(r-n),s=(t-n)*(o-i),l=a-s,c=Math.abs(a+s);return Math.abs(l)>=33306690738754716e-32*c?l:-function(t,e,r,o,n,i,a){let s,l,c,h,u,g,d,p,f,y,m,v,M,w,b,P,L,k;const x=t-n,E=r-n,S=e-i,D=o-i;w=x*D,g=Cr*x,d=g-(g-x),p=x-d,g=Cr*D,f=g-(g-D),y=D-f,b=p*y-(w-d*f-p*f-d*y),P=S*E,g=Cr*S,d=g-(g-S),p=S-d,g=Cr*E,f=g-(g-E),y=E-f,L=p*y-(P-d*f-p*f-d*y),m=b-L,u=b-m,Fr[0]=b-(m+u)+(u-L),v=w+m,u=v-w,M=w-(v-u)+(m-u),m=M-P,u=M-m,Fr[1]=M-(m+u)+(u-P),k=v+m,u=k-v,Fr[2]=v-(k-u)+(m-u),Fr[3]=k;let C=function(t,e){let r=e[0];for(let o=1;o<t;o++)r+=e[o];return r}(4,Fr),I=22204460492503146e-32*a;if(C>=I||-C>=I)return C;if(u=t-x,s=t-(x+u)+(u-n),u=r-E,c=r-(E+u)+(u-n),u=e-S,l=e-(S+u)+(u-i),u=o-D,h=o-(D+u)+(u-i),0===s&&0===l&&0===c&&0===h)return C;if(I=11093356479670487e-47*a+Ir*Math.abs(C),C+=x*h+D*s-(S*c+E*l),C>=I||-C>=I)return C;w=s*D,g=Cr*s,d=g-(g-s),p=s-d,g=Cr*D,f=g-(g-D),y=D-f,b=p*y-(w-d*f-p*f-d*y),P=l*E,g=Cr*l,d=g-(g-l),p=l-d,g=Cr*E,f=g-(g-E),y=E-f,L=p*y-(P-d*f-p*f-d*y),m=b-L,u=b-m,Gr[0]=b-(m+u)+(u-L),v=w+m,u=v-w,M=w-(v-u)+(m-u),m=M-P,u=M-m,Gr[1]=M-(m+u)+(u-P),k=v+m,u=k-v,Gr[2]=v-(k-u)+(m-u),Gr[3]=k;const A=Ar(4,Fr,4,Gr,Tr);w=x*h,g=Cr*x,d=g-(g-x),p=x-d,g=Cr*h,f=g-(g-h),y=h-f,b=p*y-(w-d*f-p*f-d*y),P=S*c,g=Cr*S,d=g-(g-S),p=S-d,g=Cr*c,f=g-(g-c),y=c-f,L=p*y-(P-d*f-p*f-d*y),m=b-L,u=b-m,Gr[0]=b-(m+u)+(u-L),v=w+m,u=v-w,M=w-(v-u)+(m-u),m=M-P,u=M-m,Gr[1]=M-(m+u)+(u-P),k=v+m,u=k-v,Gr[2]=v-(k-u)+(m-u),Gr[3]=k;const O=Ar(A,Tr,4,Gr,_r);w=s*h,g=Cr*s,d=g-(g-s),p=s-d,g=Cr*h,f=g-(g-h),y=h-f,b=p*y-(w-d*f-p*f-d*y),P=l*c,g=Cr*l,d=g-(g-l),p=l-d,g=Cr*c,f=g-(g-c),y=c-f,L=p*y-(P-d*f-p*f-d*y),m=b-L,u=b-m,Gr[0]=b-(m+u)+(u-L),v=w+m,u=v-w,M=w-(v-u)+(m-u),m=M-P,u=M-m,Gr[1]=M-(m+u)+(u-P),k=v+m,u=k-v,Gr[2]=v-(k-u)+(m-u),Gr[3]=k;const F=Ar(O,_r,4,Gr,Hr);return Hr[F-1]}(t,e,r,o,n,i,c)}function zr(t,e){var r,o,n,i,a,s,l,c,h,u=0,g=t[0],d=t[1],p=e.length;for(r=0;r<p;r++){o=0;var f=e[r],y=f.length-1;if((c=f[0])[0]!==f[y][0]&&c[1]!==f[y][1])throw new Error("First and last coordinates in a ring must be the same");for(i=c[0]-g,a=c[1]-d;o<y;o++){if(s=(h=f[o+1])[0]-g,l=h[1]-d,0===a&&0===l){if(s<=0&&i>=0||i<=0&&s>=0)return 0}else if(l>=0&&a<=0||l<=0&&a>=0){if(0===(n=Br(i,s,a,l,0,0)))return 0;(n>0&&l>0&&a<=0||n<0&&l<=0&&a>0)&&u++}c=h,a=l,i=s}}return u%2!=0}function Nr(t,e,r={}){if(!t)throw new Error("point is required");if(!e)throw new Error("polygon is required");const o=wt(t),n=Pt(e),i=n.type,a=e.bbox;let s=n.coordinates;if(a&&!1===function(t,e){return e[0]<=t[0]&&e[1]<=t[1]&&e[2]>=t[0]&&e[3]>=t[1]}(o,a))return!1;"Polygon"===i&&(s=[s]);let l=!1;for(var c=0;c<s.length;++c){const t=zr(o,s[c]);if(0===t)return!r.ignoreBoundary;t&&(l=!0)}return l}var Ur=Nr;function Rr(t,e){if("Polygon"!==t.geometry.type)throw new Error("The input feature must be a Polygon");for(var r=t.geometry.coordinates,o=[],n={},i=[],a=0;a<r.length;a++)for(var s=0;s<r[a].length-1;s++)i.push(g(a,s));var l=new dr;l.load(i);for(var c=0;c<r.length;c++)for(var h=0;h<r[c].length-1;h++){l.search(g(c,h)).forEach(function(t){var e=t.ring,r=t.edge;u(c,h,e,r)})}return o;function u(t,i,a,s){var l,c,h=r[t][i],u=r[t][i+1],g=r[a][s],d=r[a][s+1],p=function(t,e,r,o){if(Xr(t,r)||Xr(t,o)||Xr(e,r)||Xr(o,r))return null;var n=t[0],i=t[1],a=e[0],s=e[1],l=r[0],c=r[1],h=o[0],u=o[1],g=(n-a)*(c-u)-(i-s)*(l-h);return 0===g?null:[((n*s-i*a)*(l-h)-(n-a)*(l*u-c*h))/g,((n*s-i*a)*(c-u)-(i-s)*(l*u-c*h))/g]}(h,u,g,d);if(null!==p&&(l=u[0]!==h[0]?(p[0]-h[0])/(u[0]-h[0]):(p[1]-h[1])/(u[1]-h[1]),c=d[0]!==g[0]?(p[0]-g[0])/(d[0]-g[0]):(p[1]-g[1])/(d[1]-g[1]),!(l>=1||l<=0||c>=1||c<=0))){var f=p,y=!n[f.toString()];y&&(n[f.toString()]=!0),e&&o.push(e(p,t,i,h,u,l,a,s,g,d,c,y))}}function g(t,e){var o,n,i,a,s=r[t][e],l=r[t][e+1];return s[0]<l[0]?(o=s[0],n=l[0]):(o=l[0],n=s[0]),s[1]<l[1]?(i=s[1],a=l[1]):(i=l[1],a=s[1]),{minX:o,minY:i,maxX:n,maxY:a,ring:t,edge:e}}}function Xr(t,e){if(!t||!e)return!1;if(t.length!==e.length)return!1;for(var r=0,o=t.length;r<o;r++)if(t[r]instanceof Array&&e[r]instanceof Array){if(!Xr(t[r],e[r]))return!1}else if(t[r]!==e[r])return!1;return!0}function Yr(t){if("Feature"!=t.type)throw new Error("The input must a geojson object of type Feature");if(void 0===t.geometry||null==t.geometry)throw new Error("The input must a geojson object with a non-empty geometry");if("Polygon"!=t.geometry.type)throw new Error("The input must be a geojson Polygon");for(var e=t.geometry.coordinates.length,r=[],o=0;o<e;o++){var n=t.geometry.coordinates[o];$r(n[0],n[n.length-1])||n.push(n[0]);for(var i=0;i<n.length-1;i++)r.push(n[i])}if(!function(t){for(var e={},r=1,o=0,n=t.length;o<n;++o){if(Object.prototype.hasOwnProperty.call(e,t[o].toString())){r=0;break}e[t[o].toString()]=1}return r}(r))throw new Error("The input polygon may not have duplicate vertices (except for the first and last vertex of each ring)");var a=r.length,s=Rr(t,function(t,e,r,o,n,i,a,s,l,c,h,u){return[t,e,r,o,n,i,a,s,l,c,h,u]}),l=s.length;if(0==l){var c=[];for(o=0;o<e;o++)c.push(O([t.geometry.coordinates[o]],{parent:-1,winding:Kr(t.geometry.coordinates[o])}));let r=T(c);return G(r),B(r),r}var h=[],u=[];for(o=0;o<e;o++){h.push([]);for(i=0;i<t.geometry.coordinates[o].length-1;i++)h[o].push([new Vr(t.geometry.coordinates[o][Wr(i+1,t.geometry.coordinates[o].length-1)],1,[o,i],[o,Wr(i+1,t.geometry.coordinates[o].length-1)],void 0)]),u.push(new qr(t.geometry.coordinates[o][i],[o,Wr(i-1,t.geometry.coordinates[o].length-1)],[o,i],void 0,void 0,!1,!0))}for(o=0;o<l;o++)h[s[o][1]][s[o][2]].push(new Vr(s[o][0],s[o][5],[s[o][1],s[o][2]],[s[o][6],s[o][7]],void 0)),s[o][11]&&u.push(new qr(s[o][0],[s[o][1],s[o][2]],[s[o][6],s[o][7]],void 0,void 0,!0,!0));var g=u.length;for(o=0;o<h.length;o++)for(i=0;i<h[o].length;i++)h[o][i].sort(function(t,e){return t.param<e.param?-1:1});var d=[];for(o=0;o<g;o++)d.push({minX:u[o].coord[0],minY:u[o].coord[1],maxX:u[o].coord[0],maxY:u[o].coord[1],index:o});var p=new dr;p.load(d);for(o=0;o<h.length;o++)for(i=0;i<h[o].length;i++)for(var f=0;f<h[o][i].length;f++){let e;e=f==h[o][i].length-1?h[o][Wr(i+1,t.geometry.coordinates[o].length-1)][0].coord:h[o][i][f+1].coord;var y=p.search({minX:e[0],minY:e[1],maxX:e[0],maxY:e[1]})[0];h[o][i][f].nxtIsectAlongEdgeIn=y.index}for(o=0;o<h.length;o++)for(i=0;i<h[o].length;i++)for(f=0;f<h[o][i].length;f++){let t=h[o][i][f].coord;var m=(y=p.search({minX:t[0],minY:t[1],maxX:t[0],maxY:t[1]})[0]).index;m<a?u[m].nxtIsectAlongRingAndEdge2=h[o][i][f].nxtIsectAlongEdgeIn:$r(u[m].ringAndEdge1,h[o][i][f].ringAndEdgeIn)?u[m].nxtIsectAlongRingAndEdge1=h[o][i][f].nxtIsectAlongEdgeIn:u[m].nxtIsectAlongRingAndEdge2=h[o][i][f].nxtIsectAlongEdgeIn}var v=[];for(o=0,i=0;i<e;i++){var M=o;for(f=0;f<t.geometry.coordinates[i].length-1;f++)u[o].coord[0]<u[M].coord[0]&&(M=o),o++;var w=u[M].nxtIsectAlongRingAndEdge2;for(f=0;f<u.length;f++)if(u[f].nxtIsectAlongRingAndEdge1==M||u[f].nxtIsectAlongRingAndEdge2==M){var b=f;break}var P=jr([u[b].coord,u[M].coord,u[w].coord],!0)?1:-1;v.push({isect:M,parent:-1,winding:P})}v.sort(function(t,e){return u[t.isect].coord>u[e.isect].coord?-1:1});for(c=[];v.length>0;){var L=v.pop(),k=L.isect,x=L.parent,E=L.winding,S=c.length,D=[u[k].coord],C=k;if(u[k].ringAndEdge1Walkable)var I=u[k].ringAndEdge1,A=u[k].nxtIsectAlongRingAndEdge1;else I=u[k].ringAndEdge2,A=u[k].nxtIsectAlongRingAndEdge2;for(;!$r(u[k].coord,u[A].coord);){D.push(u[A].coord);var F=void 0;for(o=0;o<v.length;o++)if(v[o].isect==A){F=o;break}if(null!=F&&v.splice(F,1),$r(I,u[A].ringAndEdge1)){if(I=u[A].ringAndEdge2,u[A].ringAndEdge2Walkable=!1,u[A].ringAndEdge1Walkable){var _={isect:A};jr([u[C].coord,u[A].coord,u[u[A].nxtIsectAlongRingAndEdge2].coord],1==E)?(_.parent=x,_.winding=-E):(_.parent=S,_.winding=E),v.push(_)}C=A,A=u[A].nxtIsectAlongRingAndEdge2}else{if(I=u[A].ringAndEdge1,u[A].ringAndEdge1Walkable=!1,u[A].ringAndEdge2Walkable){_={isect:A};jr([u[C].coord,u[A].coord,u[u[A].nxtIsectAlongRingAndEdge1].coord],1==E)?(_.parent=x,_.winding=-E):(_.parent=S,_.winding=E),v.push(_)}C=A,A=u[A].nxtIsectAlongRingAndEdge1}}D.push(u[A].coord),c.push(O([D],{index:S,parent:x,winding:E,netWinding:void 0}))}let H=T(c);function G(t){for(var e=[],r=0;r<t.features.length;r++)-1==t.features[r].properties.parent&&e.push(r);if(e.length>1)for(r=0;r<e.length;r++){for(var o=-1,n=1/0,i=0;i<t.features.length;i++)e[r]!=i&&Nr(t.features[e[r]].geometry.coordinates[0][0],t.features[i],{ignoreBoundary:!0})&&V(t.features[i])<n&&(o=i);t.features[e[r]].properties.parent=o}}function B(t){for(var e=0;e<t.features.length;e++)if(-1==t.features[e].properties.parent){var r=t.features[e].properties.winding;t.features[e].properties.netWinding=r,z(t,e,r)}}function z(t,e,r){for(var o=0;o<t.features.length;o++)if(t.features[o].properties.parent==e){var n=r+t.features[o].properties.winding;t.features[o].properties.netWinding=n,z(t,o,n)}}return G(H),B(H),H}var Vr=class{constructor(t,e,r,o,n){this.coord=t,this.param=e,this.ringAndEdgeIn=r,this.ringAndEdgeOut=o,this.nxtIsectAlongEdgeIn=n}},qr=class{constructor(t,e,r,o,n,i,a){this.coord=t,this.ringAndEdge1=e,this.ringAndEdge2=r,this.nxtIsectAlongRingAndEdge1=o,this.nxtIsectAlongRingAndEdge2=n,this.ringAndEdge1Walkable=i,this.ringAndEdge2Walkable=a}};function jr(t,e){if(void 0===e&&(e=!0),3!=t.length)throw new Error("This function requires an array of three points [x,y]");return(t[1][0]-t[0][0])*(t[2][1]-t[0][1])-(t[1][1]-t[0][1])*(t[2][0]-t[0][0])>=0==e}function Kr(t){for(var e=0,r=0;r<t.length-1;r++)t[r][0]<t[e][0]&&(e=r);if(jr([t[Wr(e-1,t.length-1)],t[e],t[Wr(e+1,t.length-1)]],!0))var o=1;else o=-1;return o}function $r(t,e){if(!t||!e)return!1;if(t.length!=e.length)return!1;for(var r=0,o=t.length;r<o;r++)if(t[r]instanceof Array&&e[r]instanceof Array){if(!$r(t[r],e[r]))return!1}else if(t[r]!=e[r])return!1;return!0}function Wr(t,e){return(t%e+e)%e}var Jr=function(t){var e=[];return X(t,function(t){"Polygon"===t.geometry.type&&U(Yr(t),function(r){e.push(O(r.geometry.coordinates,t.properties))})}),T(e)};function Zr(t,e={}){if(null!=t.bbox&&!0!==e.recompute)return t.bbox;const r=[1/0,1/0,-1/0,-1/0];return N(t,t=>{r[0]>t[0]&&(r[0]=t[0]),r[1]>t[1]&&(r[1]=t[1]),r[2]<t[0]&&(r[2]=t[0]),r[3]<t[1]&&(r[3]=t[1])}),r}function Qr(t){var e;if(t.bbox)e=t.bbox;else if(Array.isArray(t)&&4===t.length)e=t;else if(Array.isArray(t)&&6===t.length)e=[t[0],t[1],t[3],t[4]];else if("Feature"===t.type)e=Zr(t);else{if("FeatureCollection"!==t.type)throw new Error("invalid geojson");e=Zr(t)}return{minX:e[0],minY:e[1],maxX:e[2],maxY:e[3]}}var to=class{constructor(t=9){this.tree=new dr(t),this.tree.toBBox=Qr}insert(t){if("Feature"!==t.type)throw new Error("invalid feature");return t.bbox=t.bbox?t.bbox:Zr(t),this.tree.insert(t),this}load(t){var e=[];return Array.isArray(t)?t.forEach(function(t){if("Feature"!==t.type)throw new Error("invalid features");t.bbox=t.bbox?t.bbox:Zr(t),e.push(t)}):U(t,function(t){if("Feature"!==t.type)throw new Error("invalid features");t.bbox=t.bbox?t.bbox:Zr(t),e.push(t)}),this.tree.load(e),this}remove(t,e){if("Feature"!==t.type)throw new Error("invalid feature");return t.bbox=t.bbox?t.bbox:Zr(t),this.tree.remove(t,e),this}clear(){return this.tree.clear(),this}search(t){return T(this.tree.search(Qr(t)))}collides(t){return this.tree.collides(Qr(t))}all(){return T(this.tree.all())}toJSON(){return this.tree.toJSON()}fromJSON(t){return this.tree.fromJSON(t),this}};function eo(t){return new to(t)}function ro(t,e){if(!z(e=null!=e?e:{}))throw new Error("options is invalid");var r=e.precision,o=e.coordinates,n=e.mutate;if(r=null==r||isNaN(r)?6:r,o=null==o||isNaN(o)?3:o,!t)throw new Error("<geojson> is required");if("number"!=typeof r)throw new Error("<precision> must be a number");if("number"!=typeof o)throw new Error("<coordinates> must be a number");!1!==n&&void 0!==n||(t=JSON.parse(JSON.stringify(t)));var i=Math.pow(10,r);return N(t,function(t){!function(t,e,r){t.length>r&&t.splice(r,t.length);for(var o=0;o<t.length;o++)t[o]=Math.round(t[o]*e)/e}(t,i,o)}),t}function oo(t){if(!t)throw new Error("geojson is required");const e=[];return X(t,t=>{!function(t,e){let r=[];const o=t.geometry;if(null!==o){switch(o.type){case"Polygon":r=bt(o);break;case"LineString":r=[bt(o)]}r.forEach(r=>{const o=function(t,e){const r=[];return t.reduce((t,o)=>{const n=F([t,o],e);return n.bbox=function(t,e){const r=t[0],o=t[1],n=e[0],i=e[1];return[r<n?r:n,o<i?o:i,r>n?r:n,o>i?o:i]}(t,o),r.push(n),o}),r}(r,t.properties);o.forEach(t=>{t.id=e.length,e.push(t)})})}}(t,e)}),T(e)}function no(t,e,r={}){var o=wt(t),n=wt(e),i=G(n[1]-o[1]),a=G(n[0]-o[0]),s=G(o[1]),l=G(n[1]),c=Math.pow(Math.sin(i/2),2)+Math.pow(Math.sin(a/2),2)*Math.cos(s)*Math.cos(l);return function(t,e="kilometers"){const r=C[e];if(!r)throw new Error(e+" units is invalid");return t*r}(2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c)),r.units)}var io=Object.defineProperty,ao=Object.defineProperties,so=Object.getOwnPropertyDescriptors,lo=Object.getOwnPropertySymbols,co=Object.prototype.hasOwnProperty,ho=Object.prototype.propertyIsEnumerable,uo=(t,e,r)=>e in t?io(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,go=(t,e)=>{for(var r in e||(e={}))co.call(e,r)&&uo(t,r,e[r]);if(lo)for(var r of lo(e))ho.call(e,r)&&uo(t,r,e[r]);return t},po=(t,e)=>ao(t,so(e));function fo(t,e){const[r,o,n]=t,[i,a,s]=e;return r*i+o*a+n*s}function yo(t,e){const[r,o,n]=t,[i,a,s]=e;return[o*s-n*a,n*i-r*s,r*a-o*i]}function mo(t){const e=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2))}(t);return[t[0]/e,t[1]/e,t[2]/e]}function vo(t){const e=G(t[1]),r=G(t[0]);return[Math.cos(e)*Math.cos(r),Math.cos(e)*Math.sin(r),Math.sin(e)]}function Mo(t){const[e,r,o]=t,n=Math.min(Math.max(o,-1),1),i=H(Math.asin(n));return[H(Math.atan2(r,e)),i]}function wo(t,e,r){const o=vo(t),n=vo(e),i=vo(r),a=yo(o,n);if(0===a[0]&&0===a[1]&&0===a[2])return fo(o,n)>0?[[...e],!0]:[[...r],!1];const s=yo(a,i);if(0===s[0]&&0===s[1]&&0===s[2])return[[...e],!0];const l=mo(yo(s,a)),c=[-l[0],-l[1],-l[2]],h=fo(i,l)>fo(i,c)?l:c,u=mo(a),g=fo(yo(o,h),u),d=fo(yo(h,n),u);return g>=0&&d>=0?[Mo(h),!1]:fo(o,i)>fo(n,i)?[[...t],!1]:[[...e],!0]}function bo(t,e){if(!t)throw new Error("line is required");if(!e)throw new Error("splitter is required");const r=Lt(t),o=Lt(e);if("LineString"!==r)throw new Error("line must be LineString");if("FeatureCollection"===o)throw new Error("splitter cannot be a FeatureCollection");if("GeometryCollection"===o)throw new Error("splitter cannot be a GeometryCollection");var n=ro(e,{precision:7});switch("Feature"!==t.type&&(t=I(t)),o){case"Point":return Lo(t,n);case"MultiPoint":return Po(t,n);case"LineString":case"MultiLineString":case"Polygon":case"MultiPolygon":return Po(t,Gt(t,n,{ignoreSelfIntersections:!0}))}}function Po(t,e){var r=[],o=eo();return X(e,function(e){if(r.forEach(function(t,e){t.id=e}),r.length){var n=o.search(e);if(n.features.length){var i=ko(e,n);r=r.filter(function(t){return t.id!==i.id}),o.remove(i),U(Lo(i,e),function(t){r.push(t),o.insert(t)})}}else r=Lo(t,e).features,o.load(T(r))}),T(r)}function Lo(t,e){var r=[],o=bt(t)[0],n=bt(t)[t.geometry.coordinates.length-1];if(xo(o,wt(e))||xo(n,wt(e)))return T([t]);var i=eo(),a=oo(t);i.load(a);var s=i.search(e);if(!s.features.length)return T([t]);var l=ko(e,s),c=function(t,e,r){var o=r;return U(t,function(t,n){o=0===n&&void 0===r?t:e(o,t,n)}),o}(a,function(t,o,n){var i=bt(o)[1],a=wt(e);return n===l.id?(t.push(a),r.push(F(t)),xo(a,i)?[a]:[a,i]):(t.push(i),t)},[o]);return c.length>1&&r.push(F(c)),T(r)}function ko(t,e){if(!e.features.length)throw new Error("lines must contain features");if(1===e.features.length)return e.features[0];var r,o=1/0;return U(e,function(e){var n=function(t,e,r={}){if(!t||!e)throw new Error("lines and inputPoint are required arguments");const o=wt(e);let n=A([1/0,1/0],{lineStringIndex:-1,segmentIndex:-1,totalDistance:-1,lineDistance:-1,segmentDistance:-1,pointDistance:1/0,multiFeatureIndex:-1,index:-1,location:-1,dist:1/0}),i=0,a=0,s=-1;return X(t,function(t,l,c){s!==c&&(s=c,a=0);const h=bt(t);for(let s=0;s<h.length-1;s++){const t=A(h[s]),l=wt(t),u=A(h[s+1]),g=wt(u),d=no(t,u,r);let p,f;g[0]===o[0]&&g[1]===o[1]?[p,f]=[g,!0]:l[0]===o[0]&&l[1]===o[1]?[p,f]=[l,!1]:[p,f]=wo(l,g,o);const y=no(e,p,r);if(y<n.properties.pointDistance){const e=no(t,p,r);n=A(p,{lineStringIndex:c,segmentIndex:f?s+1:s,totalDistance:i+e,lineDistance:a+e,segmentDistance:e,pointDistance:y,multiFeatureIndex:-1,index:-1,location:-1,dist:1/0}),n.properties=po(go({},n.properties),{multiFeatureIndex:n.properties.lineStringIndex,index:n.properties.segmentIndex,location:n.properties.totalDistance,dist:n.properties.pointDistance})}i+=d,a+=d}}),n}(e,t),i=n.properties.dist;i<o&&(r=e,o=i)}),r}function xo(t,e){return t[0]===e[0]&&t[1]===e[1]}function Eo(t,e){return!(t[0]>e[0])&&(!(t[2]<e[2])&&(!(t[1]>e[1])&&!(t[3]<e[3])))}function So(t,e){return t[0]===e[0]&&t[1]===e[1]}function Do(t,e){return[(t[0]+e[0])/2,(t[1]+e[1])/2]}var Co=function(t,e){var r=Pt(t),o=Pt(e),n=r.type,i=o.type;switch(n){case"Point":switch(i){case"MultiPoint":return function(t,e){var r,o=!1;for(r=0;r<e.coordinates.length;r++)if(So(e.coordinates[r],t.coordinates)){o=!0;break}return o}(r,o);case"LineString":return Xe(r,o,{ignoreEndVertices:!0});case"Polygon":case"MultiPolygon":return Nr(r,o,{ignoreBoundary:!0});default:throw new Error("feature2 "+i+" geometry not supported")}case"MultiPoint":switch(i){case"MultiPoint":return function(t,e){for(var r=0;r<t.coordinates.length;r++){for(var o=!1,n=0;n<e.coordinates.length;n++)So(t.coordinates[r],e.coordinates[n])&&(o=!0);if(!o)return!1}return!0}(r,o);case"LineString":return function(t,e){for(var r=!1,o=0;o<t.coordinates.length;o++){if(!Xe(t.coordinates[o],e))return!1;r||(r=Xe(t.coordinates[o],e,{ignoreEndVertices:!0}))}return r}(r,o);case"Polygon":case"MultiPolygon":return function(t,e){for(var r=!0,o=!1,n=0;n<t.coordinates.length;n++){if(!(o=Nr(t.coordinates[n],e))){r=!1;break}o=Nr(t.coordinates[n],e,{ignoreBoundary:!0})}return r&&o}(r,o);default:throw new Error("feature2 "+i+" geometry not supported")}case"LineString":switch(i){case"LineString":return function(t,e){for(var r=0;r<t.coordinates.length;r++)if(!Xe(t.coordinates[r],e))return!1;return!0}(r,o);case"Polygon":case"MultiPolygon":return function(t,e){const r=Zr(e),o=Zr(t);if(!Eo(r,o))return!1;for(const a of t.coordinates)if(!Nr(a,e))return!1;let n=!1;const i=function(t,e){const r=t.coordinates,o=[];for(let n=0;n<r.length-1;n++){const t=F([r[n],r[n+1]]),i=bo(t,I(e));0===i.features.length?o.push(t):o.push(...i.features)}return T(o)}(t,e);for(const a of i.features){const t=Do(a.geometry.coordinates[0],a.geometry.coordinates[1]);if(!Nr(t,e))return!1;!n&&Nr(t,e,{ignoreBoundary:!0})&&(n=!0)}return n}(r,o);default:throw new Error("feature2 "+i+" geometry not supported")}case"Polygon":switch(i){case"Polygon":case"MultiPolygon":return function(t,e){var r=Zr(t);if(!Eo(Zr(e),r))return!1;for(var o=0;o<t.coordinates[0].length;o++)if(!Nr(t.coordinates[0][o],e))return!1;return!0}(r,o);default:throw new Error("feature2 "+i+" geometry not supported")}default:throw new Error("feature1 "+n+" geometry not supported")}},Io=Object.defineProperty,Ao=(t,e)=>Io(t,"name",{value:e,configurable:!0}),Oo=class{constructor(t){var e,r,o;this.direction=!1,this.compareProperties=!0,this.precision=10**-(null!=(e=null==t?void 0:t.precision)?e:17),this.direction=null!=(r=null==t?void 0:t.direction)&&r,this.compareProperties=null==(o=null==t?void 0:t.compareProperties)||o}compare(t,e){if(t.type!==e.type)return!1;if(!To(t,e))return!1;switch(t.type){case"Point":return this.compareCoord(t.coordinates,e.coordinates);case"LineString":return this.compareLine(t.coordinates,e.coordinates);case"Polygon":return this.comparePolygon(t,e);case"GeometryCollection":return this.compareGeometryCollection(t,e);case"Feature":return this.compareFeature(t,e);case"FeatureCollection":return this.compareFeatureCollection(t,e);default:if(t.type.startsWith("Multi")){const r=_o(t),o=_o(e);return r.every(t=>o.some(e=>this.compare(t,e)))}}return!1}compareCoord(t,e){return t.length===e.length&&t.every((t,r)=>Math.abs(t-e[r])<this.precision)}compareLine(t,e,r=0,o=!1){if(!To(t,e))return!1;const n=t;let i=e;if(o&&!this.compareCoord(n[0],i[0])){const t=this.fixStartIndex(i,n);if(!t)return!1;i=t}const a=this.compareCoord(n[r],i[r]);return this.direction||a?this.comparePath(n,i):!!this.compareCoord(n[r],i[i.length-(1+r)])&&this.comparePath(n.slice().reverse(),i)}fixStartIndex(t,e){let r,o=-1;for(let n=0;n<t.length;n++)if(this.compareCoord(t[n],e[0])){o=n;break}return o>=0&&(r=[].concat(t.slice(o,t.length),t.slice(1,o+1))),r}comparePath(t,e){return t.every((t,r)=>this.compareCoord(t,e[r]))}comparePolygon(t,e){if(this.compareLine(t.coordinates[0],e.coordinates[0],1,!0)){const r=t.coordinates.slice(1,t.coordinates.length),o=e.coordinates.slice(1,e.coordinates.length);return r.every(t=>o.some(e=>this.compareLine(t,e,1,!0)))}return!1}compareGeometryCollection(t,e){return To(t.geometries,e.geometries)&&this.compareBBox(t,e)&&t.geometries.every((t,r)=>this.compare(t,e.geometries[r]))}compareFeature(t,e){return t.id===e.id&&(!this.compareProperties||Go(t.properties,e.properties))&&this.compareBBox(t,e)&&this.compare(t.geometry,e.geometry)}compareFeatureCollection(t,e){return To(t.features,e.features)&&this.compareBBox(t,e)&&t.features.every((t,r)=>this.compare(t,e.features[r]))}compareBBox(t,e){return Boolean(!t.bbox&&!e.bbox)||!(!t.bbox||!e.bbox)&&this.compareCoord(t.bbox,e.bbox)}};Ao(Oo,"GeojsonEquality");var Fo=Oo;function To(t,e){return t.coordinates?t.coordinates.length===e.coordinates.length:t.length===e.length}function _o(t){return t.coordinates.map(e=>({type:t.type.replace("Multi",""),coordinates:e}))}function Ho(t,e,r){return new Fo(r).compare(t,e)}function Go(t,e){if(null===t&&null===e)return!0;if(null===t||null===e)return!1;const r=Object.keys(t),o=Object.keys(e);if(r.length!==o.length)return!1;for(var n of r){const r=t[n],o=e[n],i=Bo(r)&&Bo(o);if(i&&!Go(r,o)||!i&&r!==o)return!1}return!0}Ao(To,"sameLength"),Ao(_o,"explode"),Ao(Ho,"geojsonEquality"),Ao(Go,"equal");var Bo=Ao(t=>null!=t&&"object"==typeof t,"isObject");var zo=function(t,e,r={}){let o=r.precision;if(o=null==o||isNaN(o)?6:o,"number"!=typeof o||!(o>=0))throw new Error("precision must be a positive number");return Pt(t).type===Pt(e).type&&Ho(Ve(t),Ve(e),{precision:o})},No=Object.defineProperty,Uo=Object.defineProperties,Ro=Object.getOwnPropertyDescriptors,Xo=Object.getOwnPropertySymbols,Yo=Object.prototype.hasOwnProperty,Vo=Object.prototype.propertyIsEnumerable,qo=(t,e,r)=>e in t?No(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,jo=(t,e)=>{for(var r in e||(e={}))Yo.call(e,r)&&qo(t,r,e[r]);if(Xo)for(var r of Xo(e))Vo.call(e,r)&&qo(t,r,e[r]);return t},Ko=(t,e)=>Uo(t,Ro(e));var $o=function(t,e,r={}){if(!t)throw new Error("targetPoint is required");if(!e)throw new Error("points is required");let o=1/0,n=0;U(e,(e,i)=>{const a=no(t,e,r);a<o&&(n=i,o=a)});const i=Ke(e.features[n]);return Ko(jo({},i),{properties:Ko(jo({},i.properties),{featureIndex:n,distanceToPoint:o})})},Wo=class{constructor(t){this.points=t.points||[],this.duration=t.duration||1e4,this.sharpness=t.sharpness||.85,this.centers=[],this.controls=[],this.stepLength=t.stepLength||60,this.length=this.points.length,this.delay=0;for(let e=0;e<this.length;e++)this.points[e].z=this.points[e].z||0;for(let e=0;e<this.length-1;e++){const t=this.points[e],r=this.points[e+1];this.centers.push({x:(t.x+r.x)/2,y:(t.y+r.y)/2,z:(t.z+r.z)/2})}this.controls.push([this.points[0],this.points[0]]);for(let e=0;e<this.centers.length-1;e++){const t=this.points[e+1].x-(this.centers[e].x+this.centers[e+1].x)/2,r=this.points[e+1].y-(this.centers[e].y+this.centers[e+1].y)/2,o=this.points[e+1].z-(this.centers[e].y+this.centers[e+1].z)/2;this.controls.push([{x:(1-this.sharpness)*this.points[e+1].x+this.sharpness*(this.centers[e].x+t),y:(1-this.sharpness)*this.points[e+1].y+this.sharpness*(this.centers[e].y+r),z:(1-this.sharpness)*this.points[e+1].z+this.sharpness*(this.centers[e].z+o)},{x:(1-this.sharpness)*this.points[e+1].x+this.sharpness*(this.centers[e+1].x+t),y:(1-this.sharpness)*this.points[e+1].y+this.sharpness*(this.centers[e+1].y+r),z:(1-this.sharpness)*this.points[e+1].z+this.sharpness*(this.centers[e+1].z+o)}])}return this.controls.push([this.points[this.length-1],this.points[this.length-1]]),this.steps=this.cacheSteps(this.stepLength),this}cacheSteps(t){const e=[];let r=this.pos(0);e.push(0);for(let o=0;o<this.duration;o+=10){const n=this.pos(o);Math.sqrt((n.x-r.x)*(n.x-r.x)+(n.y-r.y)*(n.y-r.y)+(n.z-r.z)*(n.z-r.z))>t&&(e.push(o),r=n)}return e}vector(t){const e=this.pos(t+10),r=this.pos(t-10);return{angle:180*Math.atan2(e.y-r.y,e.x-r.x)/3.14,speed:Math.sqrt((r.x-e.x)*(r.x-e.x)+(r.y-e.y)*(r.y-e.y)+(r.z-e.z)*(r.z-e.z))}}pos(t){let e=t-this.delay;e<0&&(e=0),e>this.duration&&(e=this.duration-1);const r=e/this.duration;if(r>=1)return this.points[this.length-1];const o=Math.floor((this.points.length-1)*r);return function(t,e,r,o,n){const i=function(t){const e=t*t,r=e*t;return[r,3*e*(1-t),3*t*(1-t)*(1-t),(1-t)*(1-t)*(1-t)]}(t);return{x:n.x*i[0]+o.x*i[1]+r.x*i[2]+e.x*i[3],y:n.y*i[0]+o.y*i[1]+r.y*i[2]+e.y*i[3],z:n.z*i[0]+o.z*i[1]+r.z*i[2]+e.z*i[3]}}((this.length-1)*r-o,this.points[o],this.controls[o][1],this.controls[o+1][0],this.points[o+1])}};var Jo=function(t,e={}){const r=e.resolution||1e4,o=e.sharpness||.85,n=[],i=Pt(t).coordinates.map(t=>({x:t[0],y:t[1]})),a=new Wo({duration:r,points:i,sharpness:o}),s=t=>{var e=a.pos(t);Math.floor(t/100)%2==0&&n.push([e.x,e.y])};for(var l=0;l<a.duration;l+=10)s(l);return s(a.duration),F(n,e.properties)};var Zo=function(t,e={}){return Y(t,(t,r)=>{const o=r.geometry.coordinates;return t+no(o[0],o[1],e)},0)};function Qo(t,e,r=0,o=t.length-1,n=en){for(;o>r;){if(o-r>600){const i=o-r+1,a=e-r+1,s=Math.log(i),l=.5*Math.exp(2*s/3),c=.5*Math.sqrt(s*l*(i-l)/i)*(a-i/2<0?-1:1);Qo(t,e,Math.max(r,Math.floor(e-a*l/i+c)),Math.min(o,Math.floor(e+(i-a)*l/i+c)),n)}const i=t[e];let a=r,s=o;for(tn(t,r,e),n(t[o],i)>0&&tn(t,r,o);a<s;){for(tn(t,a,s),a++,s--;n(t[a],i)<0;)a++;for(;n(t[s],i)>0;)s--}0===n(t[r],i)?tn(t,r,s):(s++,tn(t,s,o)),s<=e&&(r=s+1),e<=s&&(o=s-1)}}function tn(t,e,r){const o=t[e];t[e]=t[r],t[r]=o}function en(t,e){return t<e?-1:t>e?1:0}class rn{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const r=[];if(!fn(t,e))return r;const o=this.toBBox,n=[];for(;e;){for(let i=0;i<e.children.length;i++){const a=e.children[i],s=e.leaf?o(a):a;fn(t,s)&&(e.leaf?r.push(a):pn(t,s)?this._all(a,r):n.push(a))}e=n.pop()}return r}collides(t){let e=this.data;if(!fn(t,e))return!1;const r=[];for(;e;){for(let o=0;o<e.children.length;o++){const n=e.children[o],i=e.leaf?this.toBBox(n):n;if(fn(t,i)){if(e.leaf||pn(t,i))return!0;r.push(n)}}e=r.pop()}return!1}load(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return this}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e;return this}insert(t){return t&&this._insert(t,this.data.height-1),this}clear(){return this.data=yn([]),this}remove(t,e){if(!t)return this;let r=this.data;const o=this.toBBox(t),n=[],i=[];let a,s,l;for(;r||n.length;){if(r||(r=n.pop(),s=n[n.length-1],a=i.pop(),l=!0),r.leaf){const o=on(t,r.children,e);if(-1!==o)return r.children.splice(o,1),n.push(r),this._condense(n),this}l||r.leaf||!pn(r,o)?s?(a++,r=s.children[a],l=!1):r=null:(n.push(r),i.push(a),a=0,s=r,r=r.children[0])}return this}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}toJSON(){return this.data}fromJSON(t){return this.data=t,this}_all(t,e){const r=[];for(;t;)t.leaf?e.push(...t.children):r.push(...t.children),t=r.pop();return e}_build(t,e,r,o){const n=r-e+1;let i,a=this._maxEntries;if(n<=a)return i=yn(t.slice(e,r+1)),nn(i,this.toBBox),i;o||(o=Math.ceil(Math.log(n)/Math.log(a)),a=Math.ceil(n/Math.pow(a,o-1))),i=yn([]),i.leaf=!1,i.height=o;const s=Math.ceil(n/a),l=s*Math.ceil(Math.sqrt(a));mn(t,e,r,l,this.compareMinX);for(let c=e;c<=r;c+=l){const e=Math.min(c+l-1,r);mn(t,c,e,s,this.compareMinY);for(let r=c;r<=e;r+=s){const n=Math.min(r+s-1,e);i.children.push(this._build(t,r,n,o-1))}}return nn(i,this.toBBox),i}_chooseSubtree(t,e,r,o){for(;o.push(e),!e.leaf&&o.length-1!==r;){let r,o=1/0,n=1/0;for(let i=0;i<e.children.length;i++){const a=e.children[i],s=hn(a),l=gn(t,a)-s;l<n?(n=l,o=s<o?s:o,r=a):l===n&&s<o&&(o=s,r=a)}e=r||e.children[0]}return e}_insert(t,e,r){const o=r?t:this.toBBox(t),n=[],i=this._chooseSubtree(o,this.data,e,n);for(i.children.push(t),sn(i,o);e>=0&&n[e].children.length>this._maxEntries;)this._split(n,e),e--;this._adjustParentBBoxes(o,n,e)}_split(t,e){const r=t[e],o=r.children.length,n=this._minEntries;this._chooseSplitAxis(r,n,o);const i=this._chooseSplitIndex(r,n,o),a=yn(r.children.splice(i,r.children.length-i));a.height=r.height,a.leaf=r.leaf,nn(r,this.toBBox),nn(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(r,a)}_splitRoot(t,e){this.data=yn([t,e]),this.data.height=t.height+1,this.data.leaf=!1,nn(this.data,this.toBBox)}_chooseSplitIndex(t,e,r){let o,n=1/0,i=1/0;for(let a=e;a<=r-e;a++){const e=an(t,0,a,this.toBBox),s=an(t,a,r,this.toBBox),l=dn(e,s),c=hn(e)+hn(s);l<n?(n=l,o=a,i=c<i?c:i):l===n&&c<i&&(i=c,o=a)}return o||r-e}_chooseSplitAxis(t,e,r){const o=t.leaf?this.compareMinX:ln,n=t.leaf?this.compareMinY:cn;this._allDistMargin(t,e,r,o)<this._allDistMargin(t,e,r,n)&&t.children.sort(o)}_allDistMargin(t,e,r,o){t.children.sort(o);const n=this.toBBox,i=an(t,0,e,n),a=an(t,r-e,r,n);let s=un(i)+un(a);for(let l=e;l<r-e;l++){const e=t.children[l];sn(i,t.leaf?n(e):e),s+=un(i)}for(let l=r-e-1;l>=e;l--){const e=t.children[l];sn(a,t.leaf?n(e):e),s+=un(a)}return s}_adjustParentBBoxes(t,e,r){for(let o=r;o>=0;o--)sn(e[o],t)}_condense(t){for(let e,r=t.length-1;r>=0;r--)0===t[r].children.length?r>0?(e=t[r-1].children,e.splice(e.indexOf(t[r]),1)):this.clear():nn(t[r],this.toBBox)}}function on(t,e,r){if(!r)return e.indexOf(t);for(let o=0;o<e.length;o++)if(r(t,e[o]))return o;return-1}function nn(t,e){an(t,0,t.children.length,e,t)}function an(t,e,r,o,n){n||(n=yn(null)),n.minX=1/0,n.minY=1/0,n.maxX=-1/0,n.maxY=-1/0;for(let i=e;i<r;i++){const e=t.children[i];sn(n,t.leaf?o(e):e)}return n}function sn(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function ln(t,e){return t.minX-e.minX}function cn(t,e){return t.minY-e.minY}function hn(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function un(t){return t.maxX-t.minX+(t.maxY-t.minY)}function gn(t,e){return(Math.max(e.maxX,t.maxX)-Math.min(e.minX,t.minX))*(Math.max(e.maxY,t.maxY)-Math.min(e.minY,t.minY))}function dn(t,e){const r=Math.max(t.minX,e.minX),o=Math.max(t.minY,e.minY),n=Math.min(t.maxX,e.maxX),i=Math.min(t.maxY,e.maxY);return Math.max(0,n-r)*Math.max(0,i-o)}function pn(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function fn(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function yn(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function mn(t,e,r,o,n){const i=[e,r];for(;i.length;){if((r=i.pop())-(e=i.pop())<=o)continue;const a=e+Math.ceil((r-e)/o/2)*o;Qo(t,a,e,r,n),i.push(e,a,a,r)}}class vn{constructor(t=[],e=(t,e)=>t<e?-1:t>e?1:0){if(this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(let r=(this.length>>1)-1;r>=0;r--)this._down(r)}push(t){this.data.push(t),this._up(this.length++)}pop(){if(0===this.length)return;const t=this.data[0],e=this.data.pop();return--this.length>0&&(this.data[0]=e,this._down(0)),t}peek(){return this.data[0]}_up(t){const{data:e,compare:r}=this,o=e[t];for(;t>0;){const n=t-1>>1,i=e[n];if(r(o,i)>=0)break;e[t]=i,t=n}e[t]=o}_down(t){const{data:e,compare:r}=this,o=this.length>>1,n=e[t];for(;t<o;){let o=1+(t<<1);const i=o+1;if(i<this.length&&r(e[i],e[o])<0&&(o=i),r(e[o],n)>=0)break;e[t]=e[o],t=o}e[t]=n}}const Mn=J(ut());function wn(t,e,r){e=Math.max(0,void 0===e?2:e),r=r||0;const o=function(t){let e=t[0],r=t[0],o=t[0],n=t[0];for(let s=0;s<t.length;s++){const i=t[s];i[0]<e[0]&&(e=i),i[0]>o[0]&&(o=i),i[1]<r[1]&&(r=i),i[1]>n[1]&&(n=i)}const i=[e,r,o,n],a=i.slice();for(let s=0;s<t.length;s++)Mn(t[s],i)||a.push(t[s]);return function(t){t.sort(Fn);const e=[];for(let o=0;o<t.length;o++){for(;e.length>=2&&En(e[e.length-2],e[e.length-1],t[o])<=0;)e.pop();e.push(t[o])}const r=[];for(let o=t.length-1;o>=0;o--){for(;r.length>=2&&En(r[r.length-2],r[r.length-1],t[o])<=0;)r.pop();r.push(t[o])}return r.pop(),e.pop(),e.concat(r)}(a)}(t),n=new rn(16);n.toBBox=function(t){return{minX:t[0],minY:t[1],maxX:t[0],maxY:t[1]}},n.compareMinX=function(t,e){return t[0]-e[0]},n.compareMinY=function(t,e){return t[1]-e[1]},n.load(t);const i=[];let a;for(let g=0;g<o.length;g++){const t=o[g];n.remove(t),a=Cn(t,a),i.push(a)}const s=new rn(16);for(let g=0;g<i.length;g++)s.insert(Dn(i[g]));const l=e*e,c=r*r;for(;i.length;){const t=i.shift(),e=t.p,r=t.next.p,o=In(e,r);if(o<c)continue;const a=o/l,h=bn(n,t.prev.p,e,r,t.next.next.p,a,s);h&&Math.min(In(h,e),In(h,r))<=a&&(i.push(t),i.push(Cn(h,t)),n.remove(h),s.remove(t),s.insert(Dn(t)),s.insert(Dn(t.next)))}let h=a;const u=[];do{u.push(h.p),h=h.next}while(h!==a);return u.push(h.p),u}function bn(t,e,r,o,n,i,a){const s=new vn([],Pn);let l=t.data;for(;l;){for(let t=0;t<l.children.length;t++){const e=l.children[t],n=l.leaf?An(e,r,o):Ln(r,o,e);n>i||s.push({node:e,dist:n})}for(;s.length&&!s.peek().node.children;){const t=s.pop(),i=t.node,l=An(i,e,r),c=An(i,o,n);if(t.dist<l&&t.dist<c&&xn(r,i,a)&&xn(o,i,a))return i}l=s.pop(),l&&(l=l.node)}return null}function Pn(t,e){return t.dist-e.dist}function Ln(t,e,r){if(kn(t,r)||kn(e,r))return 0;const o=On(t[0],t[1],e[0],e[1],r.minX,r.minY,r.maxX,r.minY);if(0===o)return 0;const n=On(t[0],t[1],e[0],e[1],r.minX,r.minY,r.minX,r.maxY);if(0===n)return 0;const i=On(t[0],t[1],e[0],e[1],r.maxX,r.minY,r.maxX,r.maxY);if(0===i)return 0;const a=On(t[0],t[1],e[0],e[1],r.minX,r.maxY,r.maxX,r.maxY);return 0===a?0:Math.min(o,n,i,a)}function kn(t,e){return t[0]>=e.minX&&t[0]<=e.maxX&&t[1]>=e.minY&&t[1]<=e.maxY}function xn(t,e,r){const o=Math.min(t[0],e[0]),n=Math.min(t[1],e[1]),i=Math.max(t[0],e[0]),a=Math.max(t[1],e[1]),s=r.search({minX:o,minY:n,maxX:i,maxY:a});for(let l=0;l<s.length;l++)if(Sn(s[l].p,s[l].next.p,t,e))return!1;return!0}function En(t,e,r){return Br(t[0],t[1],e[0],e[1],r[0],r[1])}function Sn(t,e,r,o){return t!==o&&e!==r&&En(t,e,r)>0!=En(t,e,o)>0&&En(r,o,t)>0!=En(r,o,e)>0}function Dn(t){const e=t.p,r=t.next.p;return t.minX=Math.min(e[0],r[0]),t.minY=Math.min(e[1],r[1]),t.maxX=Math.max(e[0],r[0]),t.maxY=Math.max(e[1],r[1]),t}function Cn(t,e){const r={p:t,prev:null,next:null,minX:0,minY:0,maxX:0,maxY:0};return e?(r.next=e.next,r.prev=e,e.next.prev=r,e.next=r):(r.prev=r,r.next=r),r}function In(t,e){const r=t[0]-e[0],o=t[1]-e[1];return r*r+o*o}function An(t,e,r){let o=e[0],n=e[1],i=r[0]-o,a=r[1]-n;if(0!==i||0!==a){const e=((t[0]-o)*i+(t[1]-n)*a)/(i*i+a*a);e>1?(o=r[0],n=r[1]):e>0&&(o+=i*e,n+=a*e)}return i=t[0]-o,a=t[1]-n,i*i+a*a}function On(t,e,r,o,n,i,a,s){const l=r-t,c=o-e,h=a-n,u=s-i,g=t-n,d=e-i,p=l*l+c*c,f=l*h+c*u,y=h*h+u*u,m=l*g+c*d,v=h*g+u*d,M=p*y-f*f;let w,b,P=M,L=M;0===M?(w=0,P=1,b=v,L=y):(w=f*v-y*m,b=p*v-f*m,w<0?(w=0,b=v,L=y):w>P&&(w=P,b=v+f,L=y)),b<0?(b=0,-m<0?w=0:-m>p?w=P:(w=-m,P=p)):b>L&&(b=L,-m+f<0?w=0:-m+f>p?w=P:(w=-m+f,P=p));const k=0===w?0:w/P,x=0===b?0:b/L,E=(1-x)*n+x*a-((1-k)*t+k*r),S=(1-x)*i+x*s-((1-k)*e+k*o);return E*E+S*S}function Fn(t,e){return t[0]===e[0]?t[1]-e[1]:t[0]-e[0]}const Tn=()=>"ontouchstart"in window||navigator.maxTouchPoints>0;function _n(){return"undefined"!=typeof vitest}class Hn{static getBounds(t,e=0){const r=[];t.forEach(t=>{isNaN(t.lat)||isNaN(t.lng),r.push(t)});const o=new s.Polyline(r).getBounds();return 0!==e?o.pad(e):o}}class Gn{constructor(t=0,e=0,r=0,o=0){i(this,"direction",{East:new s.LatLng(0,0),North:new s.LatLng(0,0),NorthEast:new s.LatLng(0,0),NorthWest:new s.LatLng(0,0),South:new s.LatLng(0,0),SouthEast:new s.LatLng(0,0),SouthWest:new s.LatLng(0,0),West:new s.LatLng(0,0)}),this.direction.North=new s.LatLng(r,(e+o)/2),this.direction.NorthEast=new s.LatLng(r,o),this.direction.East=new s.LatLng((t+r)/2,o),this.direction.SouthEast=new s.LatLng(t,o),this.direction.South=new s.LatLng(t,(e+o)/2),this.direction.SouthWest=new s.LatLng(t,e),this.direction.West=new s.LatLng((t+r)/2,e),this.direction.NorthWest=new s.LatLng(r,e)}getDirection(t){switch(t){case h.SouthWest:return this.direction.SouthWest;case h.West:return this.direction.West;case h.NorthWest:return this.direction.NorthWest;case h.North:return this.direction.North;case h.NorthEast:return this.direction.NorthEast;case h.East:return this.direction.East;case h.SouthEast:return this.direction.SouthEast;case h.South:return this.direction.South;default:throw new Error}}getPositions(t=h.SouthWest,e=!1,r=!0){const o=[],n=this.getPositionAsArray(t,e);return n.forEach(t=>{o.push([t.lng,t.lat])}),r&&o.push([n[0].lng,n[0].lat]),o}getPositionAsArray(t=h.NorthEast,e=!1){const r=[];if(e?(r.push(this.direction.SouthWest),r.push(this.direction.West),r.push(this.direction.NorthWest),r.push(this.direction.North),r.push(this.direction.NorthEast),r.push(this.direction.East),r.push(this.direction.SouthEast),r.push(this.direction.South)):(r.push(this.direction.SouthWest),r.push(this.direction.South),r.push(this.direction.SouthEast),r.push(this.direction.East),r.push(this.direction.NorthEast),r.push(this.direction.North),r.push(this.direction.NorthWest),r.push(this.direction.West)),t!==h.SouthWest){r.splice(0,t).forEach((e,o)=>{r.splice(t+o,0,e)})}return r}}class Bn{constructor(t,e){if(i(this,"metricLength",""),i(this,"metricUnit",""),i(this,"imperialLength",""),i(this,"imperialUnit",""),null!==t||void 0!==t){0===t?e.markers.markerInfoIcon.usePerimeterMinValue?(this.metricLength=e.markers.markerInfoIcon.values.min.metric,this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m,this.imperialLength=e.markers.markerInfoIcon.values.min.imperial,this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.feet):(this.metricLength=e.markers.markerInfoIcon.values.unknown.metric,this.metricUnit=e.markers.markerInfoIcon.units.unknownUnit,this.imperialLength=e.markers.markerInfoIcon.values.unknown.imperial,this.imperialUnit=e.markers.markerInfoIcon.units.unknownUnit):t<100?(this.metricLength=(10*Math.ceil(t/10)).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m):t<500?(this.metricLength=(50*Math.ceil(t/50)).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m):t<1e3?(this.metricLength=(100*Math.ceil(t/100)).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.m):t<1e4?(this.metricLength=(100*Math.ceil(t/100)/1e3).toFixed(1),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.km):(this.metricLength=(1e3*Math.ceil(t/1e3)/1e3).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.perimeter.km);const r=t/.0254/12,o=r/3,n=o/1760;t<1e3/2.54?(this.imperialLength=(10*Math.ceil(r/10)).toString(),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.feet):t<1e3/2.54*3?(this.imperialLength=(10*Math.ceil(o/10)).toString(),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.yards):t<1609?(this.imperialLength=n.toFixed(2),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.miles):t<16093?(this.imperialLength=n.toFixed(1),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.miles):(this.imperialLength=n.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.perimeter.miles)}}}class zn{constructor(t,e){i(this,"metricArea",""),i(this,"metricUnit",""),i(this,"imperialArea",""),i(this,"imperialUnit","");const r=t,o=e.markers.markerInfoIcon.units.metric.onlyMetrics;if(null!==r||void 0!==r){0===r?(this.metricArea="-",this.metricUnit=e.markers.markerInfoIcon.units.unknownUnit,this.imperialArea="-",this.imperialUnit=e.markers.markerInfoIcon.units.unknownUnit):r<1e4?(this.metricArea=Math.round(r).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.m2):r<1e5?o?(this.metricArea=(r/1e6).toFixed(2),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2):(this.metricArea=(r/1e3).toFixed(1),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.daa):r<1e7?o?(this.metricArea=(r/1e6).toFixed(2),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2):(this.metricArea=Math.round(r/1e3).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.daa):r<1e8?o?(this.metricArea=(r/1e6).toFixed(1),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2):(this.metricArea=Math.round(r/1e4).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.ha):(this.metricArea=Math.round(r/1e6).toString(),this.metricUnit=e.markers.markerInfoIcon.units.metric.area.km2);const t=.0069444*(1550*r),n=.11111*t,i=20661e-8*n,a=3.2283e-7*n;r<92.9?(this.imperialArea=Math.round(t).toString(),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.feet2):r<836.14?(this.imperialArea=n.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.yards2):r<40469.6?(this.imperialArea=i.toFixed(2),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.acres):r<404696?(this.imperialArea=i.toFixed(1),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.acres):r<4046960?(this.imperialArea=i.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.acres):r<25900404?(this.imperialArea=a.toFixed(2),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.miles2):r<259004040?(this.imperialArea=a.toFixed(1),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.miles2):(this.imperialArea=a.toFixed(0),this.imperialUnit=e.markers.markerInfoIcon.units.imperial.area.miles2)}}}function Nn(t,...e){if(!e.length)return t;for(const r of e)if(r)for(const e in r){const o=r[e],n=t[e];if(o&&"object"==typeof o&&!Array.isArray(o)){const r=n&&"object"==typeof n&&!Array.isArray(n)?n:{};t[e]=Nn(r,o)}else void 0!==o&&(t[e]=o)}return t}class Un{constructor(t){i(this,"config",u),i(this,"fallbackWarnings",new Set),this.config=Nn(structuredClone(u),t)}warnFallbackOnce(t,e){_n()||this.fallbackWarnings.has(t)||(this.fallbackWarnings.add(t),console.warn(e))}toProjectedTolerance(t,e){if(t<=0)return 0;try{const r=g*f,o=t*r,n=Math.cos(e.lat*f);return 0===n?t:o/(r*n)}catch{return t}}getFeatureDiagonal(t){try{const[e,r,o,n]=L(t);return Math.hypot(o-e,n-r)}catch{return 0}}getRingDiagonal(t){if(!t||0===t.length)return 0;let e=t[0].lat,r=t[0].lat,o=t[0].lng,n=t[0].lng;for(const i of t)e=Math.min(e,i.lat),r=Math.max(r,i.lat),o=Math.min(o,i.lng),n=Math.max(n,i.lng);return Math.hypot(n-o,r-e)}getAdaptiveTolerance(t,e){if(t<=0)return 0;if(e<=0)return t;const r=.02*e;return Math.min(t,r)}union(t,e){try{const r=b([t,e]),o=ze(r);return o?this.getTurfPolygon(o):null}catch(r){return _n()||console.warn("Error in union:",r instanceof Error?r.message:String(r)),null}}createPolygonFromTrace(t){var e;const r=null==(e=this.config.polygonCreation)?void 0:e.algorithm;void 0!==r&&"string"!=typeof r&&this.warnFallbackOnce("polygonCreation.algorithm.type",'[Leaflet.Polydraw] Invalid `polygonCreation.algorithm` type. Using "concaveman" as fallback.');const o="string"==typeof r?r:"concaveman";switch(o){case"concaveman":return this.turfConcaveman(t);case"convex":return this.createConvexPolygon(t);case"direct":return this.createDirectPolygon(t);case"buffer":return this.warnFallbackOnce("polygonCreation.algorithm.buffer",'[Leaflet.Polydraw] `polygonCreation.algorithm: "buffer"` is deprecated. Using "concaveman" as fallback.'),this.turfConcaveman(t);default:return this.warnFallbackOnce(`polygonCreation.algorithm.unknown:${o}`,`[Leaflet.Polydraw] Unknown polygon creation algorithm "${o}". Using "concaveman" as fallback.`),this.turfConcaveman(t)}}turfConcaveman(t){return w([[wn(Re(t).features.map(t=>t.geometry.coordinates))]])}createConvexPolygon(t){const e=Re(t),r=vt(e);return r?this.getTurfPolygon(r):(this.warnFallbackOnce("polygonCreation.algorithm.convex.noHull",'[Leaflet.Polydraw] Convex hull generation failed. Using "direct" polygon creation as fallback.'),this.createDirectPolygon(t))}createDirectPolygon(t){let e;if("LineString"===t.geometry.type)e=t.geometry.coordinates;else if("Polygon"===t.geometry.type)e=t.geometry.coordinates[0];else{e=Re(t).features.map(t=>t.geometry.coordinates)}if(e.length>0){const t=e[0],r=e[e.length-1];t[0]===r[0]&&t[1]===r[1]||e.push([t[0],t[1]])}return e.length<4?(_n()||console.warn("Not enough points for direct polygon, falling back to concaveman"),this.turfConcaveman(t)):w([[e]])}getSimplified(t,e=!1){const r=this.resolveSimplificationConfig();if("none"===r.strategy)return t;if("simple"===r.strategy){const e=this.getAdaptiveTolerance(r.simple.tolerance,this.getFeatureDiagonal(t));return ar(t,{tolerance:this.toProjectedTolerance(e,this.getReferenceLatLng(t)),highQuality:r.simple.highQuality,mutate:!1})}const o=t.geometry.coordinates[0][0].length,n=r.dynamic.fractionGuard,i=r.dynamic.multiplier,a=this.getAdaptiveTolerance(r.dynamic.baseTolerance,this.getFeatureDiagonal(t)),s={highQuality:r.dynamic.highQuality,mutate:!1},l=e=>ar(t,{...s,tolerance:this.toProjectedTolerance(e,this.getReferenceLatLng(t))});if(!e)return l(a);let c=a,h=l(c);for(;h.geometry.coordinates[0][0].length>4&&h.geometry.coordinates[0][0].length/(o+2)>n;)c*=i,h=l(c);return h}simplifyLatLngRing(t,e,r=!0){var o,n;if(!t||0===t.length||e<=0)return t?[...t]:[];const i=[...t],a=i[0],s=i[i.length-1];s&&a&&s.lat===a.lat&&s.lng===a.lng||i.push({lat:a.lat,lng:a.lng});const l=i.map(t=>[t.lng,t.lat]),c=this.getAdaptiveTolerance(e,this.getRingDiagonal(i));try{const e=M([l]),i=ar(e,{tolerance:this.toProjectedTolerance(c,t[0]),highQuality:r,mutate:!1}),a=null==(n=null==(o=null==i?void 0:i.geometry)?void 0:o.coordinates)?void 0:n[0];return a&&0!==a.length?a.map(t=>({lat:t[1],lng:t[0]})):[...t]}catch(h){return _n()||console.warn("Error simplifying ring:",h instanceof Error?h.message:String(h)),[...t]}}resolveSimplificationConfig(){const t=this.config.simplification,e=null==t?void 0:t.simple,r=null==t?void 0:t.dynamic,o=null==t?void 0:t.strategy,n=(t,e)=>"number"!=typeof t||!Number.isFinite(t)||t<0?(void 0!==t&&this.warnFallbackOnce(`simplification.invalidNumber:${String(t)}`,"[Leaflet.Polydraw] Invalid simplification numeric value. Using fallback default."),e):t,i=(t,e)=>"boolean"!=typeof t?(void 0!==t&&this.warnFallbackOnce(`simplification.invalidBoolean:${String(t)}`,"[Leaflet.Polydraw] Invalid simplification boolean value. Using fallback default."),e):t;let a="simple";"simple"===o||"dynamic"===o||"none"===o?a=o:void 0!==o&&this.warnFallbackOnce(`simplification.invalidStrategy:${String(o)}`,'[Leaflet.Polydraw] Invalid `simplification.strategy`. Using "simple" as fallback.');return{strategy:a,simple:{tolerance:n(null==e?void 0:e.tolerance,1e-4),highQuality:i(null==e?void 0:e.highQuality,!1)},dynamic:{baseTolerance:n(null==r?void 0:r.baseTolerance,1e-4),highQuality:i(null==r?void 0:r.highQuality,!1),fractionGuard:((t,e)=>"number"==typeof t&&Number.isFinite(t)?((t<0||t>1)&&this.warnFallbackOnce(`simplification.outOfRangeFraction:${t}`,"[Leaflet.Polydraw] `simplification.dynamic.fractionGuard` is out of range [0, 1]. Clamping to nearest valid value."),Math.max(0,Math.min(1,t))):(void 0!==t&&this.warnFallbackOnce(`simplification.invalidFraction:${String(t)}`,"[Leaflet.Polydraw] Invalid `simplification.dynamic.fractionGuard`. Using fallback default."),e))(null==r?void 0:r.fractionGuard,.9),multiplier:((t,e)=>"number"!=typeof t||!Number.isFinite(t)||t<=1?(void 0!==t&&this.warnFallbackOnce(`simplification.invalidMultiplier:${String(t)}`,"[Leaflet.Polydraw] Invalid `simplification.dynamic.multiplier` (must be > 1). Using fallback default."),e):t)(null==r?void 0:r.multiplier,2)}}}getTurfPolygon(t){let e;return e="Polygon"===t.geometry.type?w([t.geometry.coordinates]):w(t.geometry.coordinates),e}getMultiPolygon(t){return w(t)}getKinks(t){try{if(!t||!t.geometry||!t.geometry.coordinates)return[t];const e=this.removeDuplicateVertices(t);if(!e||!e.geometry||!e.geometry.coordinates)return _n()||console.warn("Feature became invalid after cleaning in getKinks"),[t];if(this.polygonHasHoles(e))return this.getKinksWithHolePreservation(e);{const t=Jr(e),r=[];return U(t,t=>{r.push(t)}),r}}catch(e){return _n()||console.warn("Error processing kinks:",e instanceof Error?e.message:String(e)),[t]}}getCoords(t){return P(t)}getReferenceLatLng(t){var e,r;try{const o=P(t),n=null==(r=null==(e=null==o?void 0:o[0])?void 0:e[0])?void 0:r[0];if(n&&Array.isArray(n)&&n.length>=2)return{lat:n[1],lng:n[0]}}catch{}return{lat:0,lng:0}}hasKinks(t){return lr(t).features.length>0}getConvexHull(t){try{const e=b([t]);return vt(e)}catch(e){return _n()||console.warn("Error in getConvexHull:",e instanceof Error?e.message:String(e)),null}}getMidpoint(t,e){const r=x(m([t.lng,t.lat]),m([e.lng,e.lat]));return{lat:r.geometry.coordinates[1],lng:r.geometry.coordinates[0]}}polygonIntersect(t,e){try{if(!(t&&t.geometry&&t.geometry.coordinates&&e&&e.geometry&&e.geometry.coordinates))return _n()||console.warn("Invalid features passed to polygonIntersect"),!1;const r=t=>{var e,r;return Array.isArray(null==(r=null==(e=t[0])?void 0:e[0])?void 0:r[0])},o=t=>{if(!Array.isArray(t))return!1;const e=r(t)?t.flat():t;for(const r of e){if(!Array.isArray(r))return!1;for(const t of r){if(!Array.isArray(t)||t.length<2)return!1;if(t.some(t=>null==t||!isFinite(t)))return!1}}return!0};if(!o(t.geometry.coordinates)||!o(e.geometry.coordinates))return!1;try{const r=b([t,e]),o=Ne(r);if(o&&o.geometry&&("Polygon"===o.geometry.type||"MultiPolygon"===o.geometry.type)){if(W(o)>1e-6)return!0}}catch{}try{const r=Re(t),o=Re(e);for(const e of o.features)if(Ur(e,t))return!0;for(const t of r.features)if(Ur(t,e))return!0}catch{}try{const r=P(t),o=P(e);for(const t of r){const e=t[0];if(e&&!(e.length<2))for(let t=0;t<e.length-1;t++){const r=e[t],n=e[t+1];if(!r||!n||!Array.isArray(r)||!Array.isArray(n)||r.length<2||n.length<2||r.some(t=>null==t||!isFinite(t))||n.some(t=>null==t||!isFinite(t)))continue;const i=v([r,n]);for(const t of o){const e=t[0];if(e&&!(e.length<2))for(let t=0;t<e.length-1;t++){const r=e[t],o=e[t+1];if(!r||!o||!Array.isArray(r)||!Array.isArray(o)||r.length<2||o.length<2||r.some(t=>null==t||!isFinite(t))||o.some(t=>null==t||!isFinite(t)))continue;const n=v([r,o]);try{const t=Bt(i,n);if(t&&t.features&&t.features.length>0)return!0}catch{}}}}}}catch{}return!1}catch(r){return _n()||console.warn("Error in polygonIntersect:",r instanceof Error?r.message:String(r)),!1}}getIntersection(t,e){try{const r=b([t,e]),o=Ne(r);return o&&o.geometry&&("Polygon"===o.geometry.type||"MultiPolygon"===o.geometry.type)?o:null}catch(r){return _n()||console.warn("Error in getIntersection:",r instanceof Error?r.message:String(r)),null}}getDistance(t,e){return k(t,e)}isWithin(t,e){return Co(M([t]),M([e]))}isPolygonCompletelyWithin(t,e){try{return Co(t,e)}catch{const r=P(t),o=P(e);for(const t of r)for(const e of t)for(const t of e){const e=m(t);let r=!1;for(const t of o){for(const o of t){const t=M([o]);if(Ur(e,t)){r=!0;break}}if(r)break}if(!r)return!1}return!0}}toPointFeature(t){if((t=>{var e;if(!t||"object"!=typeof t)return!1;const r=t;return"Feature"===r.type&&"Point"===(null==(e=r.geometry)?void 0:e.type)})(t))return t;if(Array.isArray(t)&&t.length>=2&&"number"==typeof t[0]&&"number"==typeof t[1])return m(t);if((e=t)&&"object"==typeof e&&"number"==typeof e.lat&&"number"==typeof e.lng){const e=t;return m([e.lng,e.lat])}var e;if((t=>{if(!t||"object"!=typeof t)return!1;const e=t.geometry;return!!e&&Array.isArray(e.coordinates)})(t))return m(t.geometry.coordinates);throw new Error("Unsupported point format provided to toPointFeature")}isPointInsidePolygon(t,e){try{const r=this.toPointFeature(t);return Ur(r,e)}catch{return!1}}equalPolygons(t,e){return zo(t,e)}convertToBoundingBoxPolygon(t){const e=function(t){const[e,r,o,n]=t;return M([[[e,r],[o,r],[o,n],[e,n],[e,r]]])}(L(t));return e}polygonToMultiPolygon(t){return w([t.geometry.coordinates])}injectPointToPolygon(t,e,r){const o=JSON.parse(JSON.stringify(t));let n;if("MultiPolygon"===o.geometry.type)n=o.geometry.coordinates[0][r];else{if("Polygon"!==o.geometry.type)return o;n=o.geometry.coordinates[r]}if(!n)return o;let i=1/0,a=0;for(let s=0;s<n.length-1;s++){const t=n[s],r=n[s+1],o=this.distanceToLineSegment(e,t,r);o<i&&(i=o,a=s+1)}return n.splice(a,0,e),o}distanceToLineSegment(t,e,r){const o=t[0]-e[0],n=t[1]-e[1],i=r[0]-e[0],a=r[1]-e[1],s=o*i+n*a,l=i*i+a*a;if(0===l)return Math.sqrt(o*o+n*n);const c=s/l;let h,u;c<0?(h=e[0],u=e[1]):c>1?(h=r[0],u=r[1]):(h=e[0]+c*i,u=e[1]+c*a);const g=t[0]-h,d=t[1]-u;return Math.sqrt(g*g+d*d)}polygonDifference(t,e){try{const r=b([t,e]),o=Ue(r);return o?this.getTurfPolygon(o):null}catch(r){return _n()||console.warn("Error in polygonDifference:",r instanceof Error?r.message:String(r)),null}}getBoundingBoxCompassPosition(t,e,r,o){return null}getNearestPointIndex(t,e){return $o(t,e).properties.featureIndex??0}getCoord(t){return[t.lng,t.lat]}createPolygon(t){return M(t)}getFeaturePointCollection(t){const e=[];t.forEach(t=>{const r=m([t.lng,t.lat],{});e.push(r)});return b(e)}getPolygonArea(t){return W(t)}getPolygonPerimeter(t){return Zo(t,{units:"kilometers"})}getCenterOfMass(t){return kt(t)}getDoubleElbowLatLngs(t){const e=[],r=t.length,o=t[0].lat===t[r-1].lat&&t[0].lng===t[r-1].lng?r-1:r;for(let n=0;n<o;n++){const r=t[n],i=t[(n+1)%o];e.push(new s.LatLng(r.lat,r.lng));const a=x(m([r.lng,r.lat]),m([i.lng,i.lat]));e.push(new s.LatLng(a.geometry.coordinates[1],a.geometry.coordinates[0]))}return e}getBezierMultiPolygon(t){const e=t=>{if(!t||0===t.length)return t;const e=t[0],r=t[t.length-1];return e[0]===r[0]&&e[1]===r[1]?t:[...t,[e[0],e[1]]]},r=t.map(t=>t.map(t=>{const r=e(t);try{const t=v(r),o=Jo(t,{resolution:this.config.polygonTools.bezier.resolution,sharpness:this.config.polygonTools.bezier.sharpness}).geometry.coordinates??r,n=Math.max(2,r.length-1),i=Math.max(1,this.config.polygonTools.bezier.resampleMultiplier??10),a=Math.max(4,this.config.polygonTools.bezier.maxNodes??o.length),s=((t,r)=>{const o=e(t);if(!o||o.length<2)return o;const n=(t,e)=>{const r=t[0]-e[0],o=t[1]-e[1];return Math.sqrt(r*r+o*o)};let i=0;for(let e=1;e<o.length;e++)i+=n(o[e-1],o[e]);if(!Number.isFinite(i)||i<=0)return o;const a=i/Math.max(r,4),s=[o[0]];let l=0;for(let e=1;e<o.length;e++){let t=o[e-1];const r=o[e];let i=n(t,r);for(;l+i>=a&&i>0;){const e=(a-l)/i,o=[t[0]+(r[0]-t[0])*e,t[1]+(r[1]-t[1])*e];s.push(o),t=o,i=n(t,r),l=0}l+=i}return e(s)})(o,Math.max(4,Math.min(a,n*i))),l=(t=>{if(!t||0===t.length)return t;const r=1e-6,o=new Set,n=[];for(let e=0;e<t.length;e++){const i=t[e];if(!Array.isArray(i)||i.length<2)continue;const a=`${Math.round(i[0]/r)}:${Math.round(i[1]/r)}`;o.has(a)||(o.add(a),n.push(i))}return e(n)})(s);return l.length>=4?l:r}catch(o){return _n()||console.warn("Bezier smoothing failed for ring, falling back to original:",o),r}}));return this.getMultiPolygon(r)}polygonHasHoles(t){try{return"Polygon"===t.geometry.type?t.geometry.coordinates.length>1:"MultiPolygon"===t.geometry.type&&t.geometry.coordinates.some(t=>t.length>1)}catch(e){return _n()||console.warn("Error checking for holes:",e instanceof Error?e.message:String(e)),!1}}getKinksWithHolePreservation(t){try{if("Polygon"===t.geometry.type){const e=t.geometry.coordinates,r=e[0],o=e.slice(1),n={type:"Feature",geometry:{type:"Polygon",coordinates:[r]},properties:t.properties||{}},i=this.hasKinks(n),a=this.checkOuterRingHoleIntersection(r,o);if(i||a){if(this.checkIfDragCompletelyThroughHole(r,o))return this.handleCompleteHoleTraversal(n,o);const t=Jr(n),e=[];return U(t,t=>{const r=this.subtractIntersectingHoles(t,o);e.push(r)}),e}return[t]}if("MultiPolygon"===t.geometry.type){const e=[];for(const r of t.geometry.coordinates){const o={type:"Feature",geometry:{type:"Polygon",coordinates:r},properties:t.properties||{}},n=this.getKinksWithHolePreservation(o);e.push(...n)}return e}return[t]}catch(e){return _n()||console.warn("Error in getKinksWithHolePreservation:",e instanceof Error?e.message:String(e)),[t]}}checkIfDragCompletelyThroughHole(t,e){try{if(this.findDuplicatePoints(t).length>0)return!0;const r=this.findSelfIntersectionLine(t);if(r&&e.length>0)for(const t of e)if(this.lineCompletelyTraversesHole(r,t))return!0;if(this.hasKinks({type:"Feature",geometry:{type:"Polygon",coordinates:[t]},properties:{}}))for(const o of e)if(this.holeIsCutByKinks(t,o))return!0;return!1}catch(r){return _n()||console.warn("Error checking complete hole traversal:",r instanceof Error?r.message:String(r)),!1}}findSelfIntersectionLine(t){try{const e=new Map;for(let r=0;r<t.length-1;r++){const o=t[r],n=`${o[0]},${o[1]}`;e.has(n)?e.get(n).indices.push(r):e.set(n,{point:o,indices:[r]})}for(const[,r]of e)if(r.indices.length>=2){const e=r.indices[0],o=r.indices[1],n=[];for(let r=e;r<=o;r++)n.push(t[r]);return n}return null}catch(e){return _n()||console.warn("Error finding self-intersection line:",e instanceof Error?e.message:String(e)),null}}lineCompletelyTraversesHole(t,e){try{if(t.length<2)return!1;const r=t[0],o=t[t.length-1],n=M([e]),i=Ur(m(r),n);return i!==Ur(m(o),n)}catch(r){return _n()||console.warn("Error checking line hole traversal:",r instanceof Error?r.message:String(r)),!1}}holeIsCutByKinks(t,e){try{const r=M([t]),o=M([e]),n=lr(r);if(0===n.features.length)return!1;for(const t of n.features){const e=t.geometry.coordinates;try{if(k(m(e),E(o))<.01)return!0;if(Ur(m(e),o))return!0}catch{if(Ur(m(e),o))return!0}}return!1}catch(r){return _n()||console.warn("Error checking hole cut by kinks:",r.message),!1}}findDuplicatePoints(t){const e=[],r=new Set;for(let o=0;o<t.length-1;o++){const n=t[o],i=`${n[0]},${n[1]}`;r.has(i)?e.push(n):r.add(i)}return e}checkOuterRingHoleIntersection(t,e){try{if(0===e.length)return!1;const r=M([t]);for(const o of e){const e=M([o]);if(this.getIntersection(r,e))return!0;for(let r=0;r<t.length-1;r++){const o=t[r];if(Ur(m(o),e))return!0}}return!1}catch{return!1}}handleCompleteHoleTraversal(t,e){try{const e={type:"Feature",geometry:{type:"Polygon",coordinates:[t.geometry.coordinates[0]]},properties:t.properties||{}},r=Jr(e),o=[];return U(r,t=>{t._polydrawHoleTraversalOccurred=!0,o.push(t)}),o}catch(r){_n()||console.warn("Error handling complete hole traversal:",r instanceof Error?r.message:String(r));try{const e={...t,geometry:{...t.geometry,coordinates:[t.geometry.coordinates[0]]}};return e._polydrawHoleTraversalOccurred=!0,[e]}catch{return[t]}}}subtractIntersectingHoles(t,e){try{let r=t;for(const t of e){const e=M([t]);if(this.getIntersection(e,r)){const t=this.polygonDifference(r,e);if(t)if("Polygon"===t.geometry.type)r=t;else if("MultiPolygon"===t.geometry.type){const e=t;let o=0,n=null;for(const t of e.geometry.coordinates){const e={type:"Feature",geometry:{type:"Polygon",coordinates:t},properties:{}},r=W(e);r>o&&(o=r,n=e)}n&&(r=n)}}}return r}catch(r){return _n()||console.warn("Error subtracting intersecting holes:",r instanceof Error?r.message:String(r)),t}}removeDuplicateVertices(t){if(!t||!t.geometry||!t.geometry.coordinates)return _n()||console.warn("Invalid feature passed to removeDuplicateVertices"),t;const e=t=>{if(!t||t.length<3)return _n()||console.warn("Invalid coordinates array - need at least 3 points for a polygon"),t||[];const e=[],r=1e-6,o=new Set;for(let n=0;n<t.length;n++){const i=t[n],a=t[(n+1)%t.length];if(!i||!Array.isArray(i)||i.length<2||!a||!Array.isArray(a)||a.length<2)continue;const s=Math.abs(i[1]-a[1]),l=Math.abs(i[0]-a[0]),c=`${Math.round(i[0]/r)}:${Math.round(i[1]/r)}`,h=o.has(c);(s>r||l>r)&&!h&&(e.push(i),o.add(c))}if(e.length<3)return _n()||console.warn("After cleaning, polygon has less than 3 points"),t;if(e.length>0){const t=e[0],o=e[e.length-1],n=Math.abs(t[1]-o[1]),i=Math.abs(t[0]-o[0]);(n>r||i>r)&&e.push([t[0],t[1]])}return e};try{if("Polygon"===t.geometry.type){const r=t.geometry.coordinates.map(t=>e(t));return r.some(t=>t.length<4)?(_n()||console.warn("Cleaned polygon has invalid ring with less than 4 coordinates"),t):{...t,geometry:{...t.geometry,coordinates:r}}}if("MultiPolygon"===t.geometry.type){const r=t.geometry.coordinates.map(t=>t.map(t=>e(t)));return r.some(t=>t.some(t=>t.length<4))?(_n()||console.warn("Cleaned multipolygon has invalid ring with less than 4 coordinates"),t):{...t,geometry:{...t.geometry,coordinates:r}}}}catch(r){return _n()||console.warn("Error in removeDuplicateVertices:",r instanceof Error?r.message:String(r)),t}return t}}const Rn=()=>{if("undefined"!=typeof globalThis)return globalThis.L};class Xn{static getVersion(){if(this._detectedVersion)return this._detectedVersion;const t=Rn();return t?(this._detectedVersion=this.detectVersion(t),this._detectedVersion):l.V2}static detectVersion(t){const e=t??Rn();if(!e)return l.V2;if(e.version){if(e.version.startsWith("2."))return l.V2;if(e.version.startsWith("1."))return l.V1}return"function"!=typeof e.marker?l.V2:"function"==typeof e.marker&&"function"==typeof e.polyline&&"function"==typeof e.polygon?l.V1:e.Marker&&"function"==typeof e.Marker&&e.Polyline&&"function"==typeof e.Polyline?l.V2:l.V1}static isV1(){return this.getVersion()===l.V1}static isV2(){return this.getVersion()===l.V2}static reset(){this._detectedVersion=null}static getVersionInfo(){const t=this.getVersion(),e=Rn();return{version:t,leafletVersion:null==e?void 0:e.version,hasFactoryMethods:"function"==typeof(null==e?void 0:e.marker),hasConstructors:!!(null==e?void 0:e.Marker)&&"function"==typeof e.Marker,globalLAvailable:!!e}}}i(Xn,"_detectedVersion",null);const Yn=new class{constructor(){i(this,"domUtil",{create:(t,e,r)=>{if(void 0!==s&&s.DomUtil)return s.DomUtil.create(t,e,r);{const o=document.createElement(t);return e&&(o.className=e),r&&r.appendChild(o),o}},addClass:(t,e)=>{this.version===l.V1?s.DomUtil.addClass(t,e):t.classList.add(e)},removeClass:(t,e)=>{this.version===l.V1?s.DomUtil.removeClass(t,e):t.classList.remove(e)},hasClass:(t,e)=>this.version===l.V1?s.DomUtil.hasClass(t,e):t.classList.contains(e),setPosition:(t,e)=>{s.DomUtil.setPosition(t,e)},getPosition:t=>s.DomUtil.getPosition(t)}),i(this,"domEvent",{on:(t,e,r,o)=>(s.DomEvent.on(t,e,r,o),this),off:(t,e,r,o)=>(s.DomEvent.off(t,e,r,o),this),stopPropagation:t=>(s.DomEvent.stopPropagation(t),this),preventDefault:t=>(s.DomEvent.preventDefault(t),this),stop:t=>(s.DomEvent.stop(t),this),disableClickPropagation:t=>(s.DomEvent.disableClickPropagation(t),this),disableScrollPropagation:t=>(s.DomEvent.disableScrollPropagation(t),this),getMousePosition:(t,e)=>{if(this.version===l.V1)return s.DomEvent.getMousePosition(t,e);{const r=s.DomEvent;return r.getPointerPosition?r.getPointerPosition(t,e):s.DomEvent.getMousePosition(t,e)}}}),i(this,"util",{extend:(t,...e)=>this.version===l.V1?s.Util.extend(t,...e):Object.assign(t,...e),bind:(t,e)=>this.version===l.V1?s.Util.bind(t,e):t.bind(e),stamp:t=>s.Util.stamp(t),throttle:(t,e,r)=>s.Util.throttle(t,e,r),wrapNum:(t,e,r)=>s.Util.wrapNum(t,e,r),falseFn:()=>s.Util.falseFn(),formatNum:(t,e)=>s.Util.formatNum(t,e),trim:t=>this.version===l.V1?s.Util.trim(t):t.trim(),splitWords:t=>s.Util.splitWords(t),setOptions:(t,e)=>s.Util.setOptions(t,e),getParamString:(t,e,r)=>{if(this.version===l.V1)return s.Util.getParamString(t,e,r);{const o=new URLSearchParams;for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const n=r?e.toUpperCase():e;o.set(n,String(t[e]))}const n=o.toString();if(e){const t=-1===e.indexOf("?")?"?":"&";return e+t+n}return n?"?"+n:""}},template:(t,e)=>s.Util.template(t,e),isArray:t=>this.version===l.V1?s.Util.isArray(t):Array.isArray(t),indexOf:(t,e)=>s.Util.indexOf(t,e),requestAnimFrame:(t,e,r)=>this.version===l.V1?s.Util.requestAnimFrame(t,e,r):requestAnimationFrame(e?t.bind(e):t),cancelAnimFrame:t=>{this.version===l.V1?s.Util.cancelAnimFrame(t):cancelAnimationFrame(t)}})}get version(){return Xn.getVersion()}createTileLayer(t,e){return new s.TileLayer(t,e)}createMap(t,e){return new s.Map(t,e)}createMarker(t,e){return new s.Marker(t,e)}createPolyline(t,e){return new s.Polyline(t,e)}createPolygon(t,e){return new s.Polygon(t,e)}createDivIcon(t){return new s.DivIcon(t)}createLatLng(t,e,r){return new s.LatLng(t,e,r)}createLatLngBounds(t,e){return t&&e?new s.LatLngBounds(t,e):t?new s.LatLngBounds(t,t):new s.LatLngBounds([])}createPoint(t,e,r){return new s.Point(t,e,r)}createPopup(t,e){return new s.Popup(t,e)}createFeatureGroup(t){return new s.FeatureGroup(t)}createLayerGroup(t){return new s.LayerGroup(t)}getBrowser(){const t=this,e=s.Browser;return{get ie(){return t.version===l.V1&&s.Browser.ie},get ielt9(){return t.version===l.V1&&s.Browser.ielt9},get edge(){return t.version===l.V1&&s.Browser.edge},get webkit(){return t.version===l.V1&&s.Browser.webkit},get android(){return t.version===l.V1?s.Browser.android:/Android/.test(navigator.userAgent)},get android23(){return t.version===l.V1&&s.Browser.android23},get androidStock(){return t.version===l.V1&&s.Browser.androidStock},get opera(){return t.version===l.V1&&s.Browser.opera},get chrome(){return t.version===l.V1?s.Browser.chrome:/Chrome/.test(navigator.userAgent)},get gecko(){return t.version===l.V1&&s.Browser.gecko},get safari(){return t.version===l.V1?s.Browser.safari:/Safari/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)},get phantom(){return t.version===l.V1&&(e.phantom??!1)},get opera12(){return t.version===l.V1&&s.Browser.opera12},get win(){return t.version===l.V1?s.Browser.win:/Win/.test(navigator.platform)},get ie3d(){return t.version===l.V1&&s.Browser.ie3d},get webkit3d(){return t.version===l.V1&&s.Browser.webkit3d},get gecko3d(){return t.version===l.V1&&s.Browser.gecko3d},get any3d(){return t.version!==l.V1||s.Browser.any3d},get mobile(){return s.Browser.mobile},get mobileWebkit(){return t.version===l.V1&&s.Browser.mobileWebkit},get mobileWebkit3d(){return t.version===l.V1&&s.Browser.mobileWebkit3d},get msPointer(){return t.version===l.V1&&s.Browser.msPointer},get pointer(){return s.Browser.pointer||!0},get touch(){return s.Browser.touch},get touchNative(){return t.version===l.V1&&(e.touchNative??!1)},get mobileOpera(){return t.version===l.V1&&s.Browser.mobileOpera},get mobileGecko(){return t.version===l.V1&&s.Browser.mobileGecko},get retina(){return s.Browser.retina},get passiveEvents(){return t.version!==l.V1||(e.passiveEvents??!0)},get canvas(){return t.version!==l.V1||s.Browser.canvas},get svg(){return t.version!==l.V1||s.Browser.svg},get vml(){return t.version===l.V1&&s.Browser.vml},get inlineSvg(){return t.version!==l.V1||(e.inlineSvg??!0)}}}getVersion(){return this.version}isV1(){return this.version===l.V1}isV2(){return this.version===l.V2}};function Vn(t,e){t.innerHTML=e;const r=t.querySelector("svg");r&&(!function(t){if(t.hasAttribute("viewBox"))return;const e=t.getAttribute("width"),r=t.getAttribute("height"),o=e?parseFloat(e):NaN,n=r?parseFloat(r):NaN;Number.isFinite(o)&&Number.isFinite(n)&&o>0&&n>0&&t.setAttribute("viewBox",`0 0 ${o} ${n}`)}(r),function(t){const e=Array.from(t.querySelectorAll("style"));if(0===e.length)return;const r=new Set;if(e.forEach(e=>{const o=e.textContent;if(!o)return void e.remove();const n=/([^{]+)\{([^}]*)\}/g;let i;for(;null!==(i=n.exec(o));){const e=i[1].split(",").map(t=>t.trim()).filter(Boolean),o=i[2];e.forEach(e=>{if(!e.startsWith("."))return;const n=e.slice(1);r.add(n),t.querySelectorAll(`.${n}`).forEach(t=>{o.split(";").forEach(e=>{const[r,o]=e.split(":");r&&o&&t.style.setProperty(r.trim(),o.trim())})})})}e.remove()}),0===r.size)return;t.querySelectorAll("[class]").forEach(t=>{const e=Array.from(t.classList).filter(t=>!r.has(t));e.length>0?t.setAttribute("class",e.join(" ")):t.removeAttribute("class")})}(r),r.setAttribute("width","24"),r.setAttribute("height","24"),r.style.pointerEvents="none",r.querySelectorAll("*").forEach(t=>{t.style.pointerEvents="none"}))}const qn='<?xml version="1.0" encoding="utf-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" style="enable-background:new 0 0 48 48" version="1.1" viewBox="0 0 48 48">\n <style>\n .st0{fill:#000}\n </style>\n <path d="M0 0h48v48H0z" style="fill:#333;fill-opacity:0"/>\n <path d="M26.6 10V7.8h-5.2V10h-8.8v2.8h22.8V10zM35.4 15.4H12.6v4.3h1.8V37c0 1.1.9 2 2 2h15.2c1.1 0 2-.9 2-2V19.7h1.8v-4.3zM19.7 34.2c0 .5-.4 1-1 1-.5 0-1-.4-1-1V22.6c0-.5.4-1 1-1 .5 0 1 .4 1 1v11.6zm5.6-.4c0 .7-.6 1.3-1.3 1.3-.7 0-1.3-.6-1.3-1.3V23c0-.7.6-1.3 1.3-1.3.7 0 1.3.6 1.3 1.3v10.8zm5 .4c0 .5-.4 1-1 1-.5 0-1-.4-1-1V22.6c0-.5.4-1 1-1 .5 0 1 .4 1 1v11.6z" class="st0"/>\n</svg>',jn={activate:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="Shape" fill="#000" fill-rule="evenodd" stroke="none" d="M73.574 425.687c-1.14.188-4.099-.592-6.574-1.735-2.475-1.142-5.513-3.027-6.75-4.188C58 417.65 58 417.65 58 348.144c0-69.506 0-69.506 6.152-80.075a1599.57 1599.57 0 0 1 12.84-21.569c3.677-6.05 12.679-21.125 20.004-33.5 7.324-12.375 15.666-26.325 18.538-31 2.87-4.675 13.163-21.88 22.872-38.233a33686.921 33686.921 0 0 1 34.229-57.5c9.117-15.272 18.261-30.022 20.322-32.777 2.298-3.074 5.78-6.117 9.008-7.874 3.583-1.95 7.22-3.017 11.399-3.342 4.972-.388 7.445.018 13.04 2.137 3.799 1.439 10.999 4.919 16 7.733 5.003 2.814 13.371 7.613 18.596 10.663s13.775 8.134 19 11.297c5.225 3.163 12.061 7.246 15.192 9.073 3.13 1.828 9.402 5.521 13.936 8.208 4.535 2.686 10.397 6.897 13.027 9.357 3.265 3.054 5.457 6.261 6.912 10.115 1.672 4.43 2.036 7.161 1.694 12.704-.324 5.244-1.186 8.511-3.349 12.695-1.601 3.098-9.388 16.57-17.303 29.939-7.915 13.368-16.24 27.326-18.5 31.019a3087.099 3087.099 0 0 0-9.697 16c-3.073 5.107-11.2 18.736-18.061 30.286-6.86 11.55-16.45 27.75-21.312 36-4.86 8.25-11.179 18.825-14.04 23.5-2.862 4.675-8.308 13.83-12.101 20.343-3.794 6.513-10.508 17.762-14.92 24.997-7.721 12.664-8.263 13.29-14.5 16.77-3.563 1.987-15.357 8.416-26.21 14.286-10.851 5.87-28.851 15.66-40 21.756-11.147 6.096-25.86 14.032-32.694 17.638-6.834 3.605-13.359 6.709-14.5 6.897ZM116 376.754c2.096-.21 12.525-5.28 26-12.636 12.375-6.757 23.394-13.153 24.486-14.215 1.495-1.453 1.734-2.331.966-3.548-.56-.889-7.304-5.352-14.986-9.918-7.681-4.565-17.116-10.268-20.966-12.672-3.85-2.405-15.046-9.073-24.88-14.818-9.834-5.746-19.087-10.976-20.561-11.623-1.641-.72-3.24-.831-4.12-.287-.981.606-1.598 3.444-1.939 8.924-.275 4.42-.347 17.312-.16 28.65.341 20.616.341 20.616 3.5 23.908 1.738 1.81 9.01 6.733 16.16 10.94 10.754 6.327 13.605 7.587 16.5 7.295ZM184.98 329c.9 0 2.342-.563 3.204-1.25.86-.688 3.803-4.85 6.537-9.25 2.735-4.4 17.476-28.925 32.759-54.5 15.283-25.575 29.64-49.497 31.904-53.16 2.264-3.662 6.141-10.152 8.616-14.422 2.475-4.27 5.957-10.274 7.738-13.341 1.785-3.075 3.244-7.005 3.25-8.759.011-2.982-.694-3.614-11.238-10.077A2882.894 2882.894 0 0 0 249 152.847c-4.125-2.475-13.245-7.94-20.267-12.145a9841.507 9841.507 0 0 1-20.5-12.309 1566.199 1566.199 0 0 0-14.685-8.73c-3.823-2.238-8.13-4.242-9.57-4.453-1.998-.293-3.333.43-5.64 3.057-1.661 1.893-5.368 7.444-8.237 12.337a2040.256 2040.256 0 0 1-11.477 19.251 5775.594 5775.594 0 0 0-12.325 20.5A7048.542 7048.542 0 0 1 131.47 195c-4.823 7.975-10.898 18.1-13.501 22.5-2.604 4.4-8.45 14.075-12.991 21.5-4.542 7.425-10.268 16.988-12.725 21.252-3.26 5.657-4.304 8.405-3.861 10.168.454 1.81 4.239 4.57 15.1 11.01 7.973 4.726 20.686 12.257 28.252 16.735 7.566 4.477 17.582 10.485 22.257 13.351 4.675 2.866 13.19 7.973 18.921 11.348 5.732 3.375 11.158 6.136 12.059 6.136Zm100.681-194.022c2.318.016 3.852-.798 5.75-3.055 1.497-1.78 2.589-4.313 2.589-6.01 0-2.269-.848-3.508-3.75-5.478-2.063-1.4-6.53-4.29-9.927-6.421-3.398-2.132-9.923-6.015-14.5-8.63-4.578-2.614-10.798-6.408-13.823-8.43-3.025-2.022-7.75-4.873-10.5-6.334-2.75-1.462-8.15-4.689-12-7.171-5.023-3.24-7.838-4.434-9.968-4.232-2.1.2-3.65 1.298-5.297 3.75-1.437 2.14-2.215 4.588-2.032 6.391.254 2.498 1.604 3.72 9.297 8.412 4.95 3.02 15.525 9.427 23.5 14.238a3631.896 3631.896 0 0 1 26 15.848c7.807 4.82 12.515 7.107 14.661 7.122Z"/>\n <path id="path1" fill="#000" fill-rule="evenodd" stroke="none" d="M479.5 119.5c0 34 0 34-7 34.262-3.85.144-11.275.947-16.5 1.785s-12.533 2.42-16.24 3.514c-3.708 1.095-9.416 3.559-12.686 5.475-3.269 1.916-7.401 4.71-9.183 6.209-1.781 1.499-4.926 5.336-6.988 8.526-2.395 3.706-4.41 8.588-5.576 13.515-1.346 5.684-1.817 11.548-1.79 22.282.023 8.902.749 19.208 1.866 26.5 1.006 6.563 2.964 17.107 4.352 23.432 1.388 6.325 3.152 14.2 3.92 17.5.768 3.3 3.14 14.55 5.272 25s4.816 24.901 5.965 32.114c1.57 9.86 2.088 17.705 2.088 31.622 0 16.395-.284 19.635-2.485 28.386-1.367 5.433-4.299 13.56-6.515 18.061-2.832 5.75-6.265 10.559-11.545 16.172-5.308 5.642-10.516 9.846-17.735 14.316-5.62 3.481-13.145 7.611-16.72 9.179-3.575 1.567-10.739 4.4-15.92 6.293-5.181 1.894-13.506 4.308-18.5 5.365-4.994 1.056-13.58 2.637-19.08 3.513-6.633 1.057-18.754 1.716-36 1.958-14.3.201-30.5.01-36-.424s-15.625-1.537-22.5-2.45c-6.875-.912-16.575-2.328-21.557-3.146-4.98-.817-12.406-2.176-16.5-3.02-4.093-.843-9.693-2.157-12.443-2.92-2.75-.763-7.7-2.083-11-2.932-3.3-.85-10.5-2.648-16-3.996-5.5-1.348-15.85-4.3-23-6.56-7.15-2.261-14.912-4.805-17.25-5.653-2.904-1.055-4.25-2.127-4.25-3.386 0-1.228 3.252-3.97 9.75-8.22 5.363-3.507 13.202-8.277 17.421-10.6 7.671-4.225 7.671-4.225 18.5-1.287 5.956 1.616 19.154 4.998 29.329 7.515 10.175 2.517 23.45 5.465 29.5 6.55 6.05 1.087 15.05 2.427 20 2.98 4.95.552 14.85 1.53 22 2.175 8.107.73 21.657.955 36 .598 13.264-.33 27.021-1.234 32.5-2.135 5.225-.86 14-2.963 19.5-4.673s12.925-4.443 16.5-6.073a870.93 870.93 0 0 0 11.5-5.354c2.75-1.314 7.94-4.836 11.535-7.826 3.888-3.234 7.591-7.403 9.142-10.29 1.433-2.668 3.653-8.143 4.932-12.166 1.934-6.082 2.319-9.415 2.283-19.794-.024-7.149-.774-16.627-1.756-22.186-.943-5.339-2.407-13.531-3.253-18.206-.847-4.675-2.454-12.775-3.572-18-1.118-5.225-3.15-14-4.514-19.5-1.365-5.5-3.5-14.725-4.746-20.5-1.246-5.775-2.995-15-3.886-20.5-.892-5.5-2.081-14.08-2.643-19.068-.562-4.987-1.014-13.987-1.005-20 .01-6.012.652-14.799 1.427-19.525.775-4.726 2.12-11.026 2.988-14 .869-2.974 3.04-8.224 4.824-11.668 1.784-3.443 5.256-9.004 7.715-12.356 2.46-3.353 8.084-8.988 12.5-12.523 4.416-3.534 11.629-8.164 16.029-10.287 4.4-2.124 12.05-5.194 17-6.823 4.95-1.63 14.625-3.757 21.5-4.729s16.1-1.824 20.5-1.894l8-.127Z"/>\n <path id="path2" fill="#B6BCC4" fill-rule="evenodd" stroke="none" d="M116 375.743c-2.73.236-5.372-.8-12-4.708-4.675-2.756-11.133-6.704-14.35-8.773-3.218-2.07-6.48-4.977-7.25-6.462-1.094-2.111-1.4-8.348-1.4-28.56 0-21.125.267-26.213 1.461-27.799 1.43-1.9 1.574-1.879 6.75.986 2.909 1.61 8.214 4.584 11.789 6.61 3.575 2.026 9.1 5.209 12.28 7.073 3.179 1.865 10.253 6.09 15.722 9.39 5.468 3.3 13.836 8.245 18.596 10.989 4.76 2.744 10.736 6.348 13.279 8.01 2.568 1.678 4.753 3.927 4.917 5.062.246 1.716-3.42 4.101-23 14.96-14.766 8.189-24.575 13.03-26.794 13.222Z"/>\n <path id="path3" fill="#fff" fill-rule="evenodd" stroke="none" d="M185.256 329c-1.012 0-5.646-2.194-10.298-4.875-4.652-2.68-22.633-13.322-39.958-23.648-17.325-10.325-34.65-20.844-38.5-23.375-6.25-4.109-7.029-4.977-7.268-8.102-.202-2.632.816-5.36 4.106-11 2.407-4.125 21.576-36.075 42.6-71 21.022-34.925 39.47-65.075 40.994-67 2.195-2.772 3.589-3.562 6.699-3.797 3.477-.262 6.271 1.103 24.398 11.925 11.259 6.722 30.146 18.027 41.971 25.123 11.825 7.095 23.075 14.15 25 15.675 2.099 1.664 3.627 3.836 3.816 5.425.19 1.592-1.021 5.145-3.035 8.9-1.844 3.437-21.525 36.528-43.737 73.537-22.211 37.008-41.411 68.395-42.666 69.75-1.256 1.354-3.11 2.462-4.122 2.462Z"/>\n</svg>'.trim(),draw:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="Shape" fill="#000" fill-rule="evenodd" stroke="none" d="M73.574 425.687c-1.14.188-4.099-.592-6.574-1.735-2.475-1.142-5.513-3.027-6.75-4.188C58 417.65 58 417.65 58 348.144c0-69.506 0-69.506 6.152-80.075a1599.57 1599.57 0 0 1 12.84-21.569c3.677-6.05 12.679-21.125 20.004-33.5 7.324-12.375 15.666-26.325 18.538-31 2.87-4.675 13.163-21.88 22.872-38.233a33686.921 33686.921 0 0 1 34.229-57.5c9.117-15.272 18.261-30.022 20.322-32.777 2.298-3.074 5.78-6.117 9.008-7.874 3.583-1.95 7.22-3.017 11.399-3.342 4.972-.388 7.445.018 13.04 2.137 3.799 1.439 10.999 4.919 16 7.733 5.003 2.814 13.371 7.613 18.596 10.663s13.775 8.134 19 11.297c5.225 3.163 12.061 7.246 15.192 9.073 3.13 1.828 9.402 5.521 13.936 8.208 4.535 2.686 10.397 6.897 13.027 9.357 3.265 3.054 5.457 6.261 6.912 10.115 1.672 4.43 2.036 7.161 1.694 12.704-.324 5.244-1.186 8.511-3.349 12.695-1.601 3.098-9.388 16.57-17.303 29.939-7.915 13.368-16.24 27.326-18.5 31.019a3087.099 3087.099 0 0 0-9.697 16c-3.073 5.107-11.2 18.736-18.061 30.286-6.86 11.55-16.45 27.75-21.312 36-4.86 8.25-11.179 18.825-14.04 23.5-2.862 4.675-8.308 13.83-12.101 20.343-3.794 6.513-10.508 17.762-14.92 24.997-7.721 12.664-8.263 13.29-14.5 16.77-3.563 1.987-15.357 8.416-26.21 14.286-10.851 5.87-28.851 15.66-40 21.756-11.147 6.096-25.86 14.032-32.694 17.638-6.834 3.605-13.359 6.709-14.5 6.897ZM116 376.754c2.096-.21 12.525-5.28 26-12.636 12.375-6.757 23.394-13.153 24.486-14.215 1.495-1.453 1.734-2.331.966-3.548-.56-.889-7.304-5.352-14.986-9.918-7.681-4.565-17.116-10.268-20.966-12.672-3.85-2.405-15.046-9.073-24.88-14.818-9.834-5.746-19.087-10.976-20.561-11.623-1.641-.72-3.24-.831-4.12-.287-.981.606-1.598 3.444-1.939 8.924-.275 4.42-.347 17.312-.16 28.65.341 20.616.341 20.616 3.5 23.908 1.738 1.81 9.01 6.733 16.16 10.94 10.754 6.327 13.605 7.587 16.5 7.295ZM184.98 329c.9 0 2.342-.563 3.204-1.25.86-.688 3.803-4.85 6.537-9.25 2.735-4.4 17.476-28.925 32.759-54.5 15.283-25.575 29.64-49.497 31.904-53.16 2.264-3.662 6.141-10.152 8.616-14.422 2.475-4.27 5.957-10.274 7.738-13.341 1.785-3.075 3.244-7.005 3.25-8.759.011-2.982-.694-3.614-11.238-10.077A2882.894 2882.894 0 0 0 249 152.847c-4.125-2.475-13.245-7.94-20.267-12.145a9841.507 9841.507 0 0 1-20.5-12.309 1566.199 1566.199 0 0 0-14.685-8.73c-3.823-2.238-8.13-4.242-9.57-4.453-1.998-.293-3.333.43-5.64 3.057-1.661 1.893-5.368 7.444-8.237 12.337a2040.256 2040.256 0 0 1-11.477 19.251 5775.594 5775.594 0 0 0-12.325 20.5A7048.542 7048.542 0 0 1 131.47 195c-4.823 7.975-10.898 18.1-13.501 22.5-2.604 4.4-8.45 14.075-12.991 21.5-4.542 7.425-10.268 16.988-12.725 21.252-3.26 5.657-4.304 8.405-3.861 10.168.454 1.81 4.239 4.57 15.1 11.01 7.973 4.726 20.686 12.257 28.252 16.735 7.566 4.477 17.582 10.485 22.257 13.351 4.675 2.866 13.19 7.973 18.921 11.348 5.732 3.375 11.158 6.136 12.059 6.136Zm100.681-194.022c2.318.016 3.852-.798 5.75-3.055 1.497-1.78 2.589-4.313 2.589-6.01 0-2.269-.848-3.508-3.75-5.478-2.063-1.4-6.53-4.29-9.927-6.421-3.398-2.132-9.923-6.015-14.5-8.63-4.578-2.614-10.798-6.408-13.823-8.43-3.025-2.022-7.75-4.873-10.5-6.334-2.75-1.462-8.15-4.689-12-7.171-5.023-3.24-7.838-4.434-9.968-4.232-2.1.2-3.65 1.298-5.297 3.75-1.437 2.14-2.215 4.588-2.032 6.391.254 2.498 1.604 3.72 9.297 8.412 4.95 3.02 15.525 9.427 23.5 14.238a3631.896 3631.896 0 0 1 26 15.848c7.807 4.82 12.515 7.107 14.661 7.122Z" style="stroke:#000;stroke-opacity:1;stroke-width:20;stroke-dasharray:none"/>\n <path id="path1" fill="#000" fill-rule="evenodd" stroke="none" d="M479.5 119.5c0 34 0 34-7 34.262-3.85.144-11.275.947-16.5 1.785s-12.533 2.42-16.24 3.514c-3.708 1.095-9.416 3.559-12.686 5.475-3.269 1.916-7.401 4.71-9.183 6.209-1.781 1.499-4.926 5.336-6.988 8.526-2.395 3.706-4.41 8.588-5.576 13.515-1.346 5.684-1.817 11.548-1.79 22.282.023 8.902.749 19.208 1.866 26.5 1.006 6.563 2.964 17.107 4.352 23.432 1.388 6.325 3.152 14.2 3.92 17.5.768 3.3 3.14 14.55 5.272 25s4.816 24.901 5.965 32.114c1.57 9.86 2.088 17.705 2.088 31.622 0 16.395-.284 19.635-2.485 28.386-1.367 5.433-4.299 13.56-6.515 18.061-2.832 5.75-6.265 10.559-11.545 16.172-5.308 5.642-10.516 9.846-17.735 14.316-5.62 3.481-13.145 7.611-16.72 9.179-3.575 1.567-10.739 4.4-15.92 6.293-5.181 1.894-13.506 4.308-18.5 5.365-4.994 1.056-13.58 2.637-19.08 3.513-6.633 1.057-18.754 1.716-36 1.958-14.3.201-30.5.01-36-.424s-15.625-1.537-22.5-2.45c-6.875-.912-16.575-2.328-21.557-3.146-4.98-.817-12.406-2.176-16.5-3.02-4.093-.843-9.693-2.157-12.443-2.92-2.75-.763-7.7-2.083-11-2.932-3.3-.85-10.5-2.648-16-3.996-5.5-1.348-15.85-4.3-23-6.56-7.15-2.261-14.912-4.805-17.25-5.653-2.904-1.055-4.25-2.127-4.25-3.386 0-1.228 3.252-3.97 9.75-8.22 5.363-3.507 13.202-8.277 17.421-10.6 7.671-4.225 7.671-4.225 18.5-1.287 5.956 1.616 19.154 4.998 29.329 7.515 10.175 2.517 23.45 5.465 29.5 6.55 6.05 1.087 15.05 2.427 20 2.98 4.95.552 14.85 1.53 22 2.175 8.107.73 21.657.955 36 .598 13.264-.33 27.021-1.234 32.5-2.135 5.225-.86 14-2.963 19.5-4.673s12.925-4.443 16.5-6.073a870.93 870.93 0 0 0 11.5-5.354c2.75-1.314 7.94-4.836 11.535-7.826 3.888-3.234 7.591-7.403 9.142-10.29 1.433-2.668 3.653-8.143 4.932-12.166 1.934-6.082 2.319-9.415 2.283-19.794-.024-7.149-.774-16.627-1.756-22.186-.943-5.339-2.407-13.531-3.253-18.206-.847-4.675-2.454-12.775-3.572-18-1.118-5.225-3.15-14-4.514-19.5-1.365-5.5-3.5-14.725-4.746-20.5-1.246-5.775-2.995-15-3.886-20.5-.892-5.5-2.081-14.08-2.643-19.068-.562-4.987-1.014-13.987-1.005-20 .01-6.012.652-14.799 1.427-19.525.775-4.726 2.12-11.026 2.988-14 .869-2.974 3.04-8.224 4.824-11.668 1.784-3.443 5.256-9.004 7.715-12.356 2.46-3.353 8.084-8.988 12.5-12.523 4.416-3.534 11.629-8.164 16.029-10.287 4.4-2.124 12.05-5.194 17-6.823 4.95-1.63 14.625-3.757 21.5-4.729s16.1-1.824 20.5-1.894l8-.127Z"/>\n <path id="path2" fill="#B6BCC4" fill-rule="evenodd" stroke="none" d="M116 375.743c-2.73.236-5.372-.8-12-4.708-4.675-2.756-11.133-6.704-14.35-8.773-3.218-2.07-6.48-4.977-7.25-6.462-1.094-2.111-1.4-8.348-1.4-28.56 0-21.125.267-26.213 1.461-27.799 1.43-1.9 1.574-1.879 6.75.986 2.909 1.61 8.214 4.584 11.789 6.61 3.575 2.026 9.1 5.209 12.28 7.073 3.179 1.865 10.253 6.09 15.722 9.39 5.468 3.3 13.836 8.245 18.596 10.989 4.76 2.744 10.736 6.348 13.279 8.01 2.568 1.678 4.753 3.927 4.917 5.062.246 1.716-3.42 4.101-23 14.96-14.766 8.189-24.575 13.03-26.794 13.222Z"/>\n</svg>'.trim(),subtract:'<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path fill-rule="evenodd" clip-rule="evenodd" d="M15.0722 3.9967L20.7508 9.83395L17.0544 13.5304L13.0758 17.5H21.0041V19H7.93503L4.00195 15.0669L15.0722 3.9967ZM10.952 17.5L15.4628 12.9994L11.8268 9.3634L6.12327 15.0669L8.55635 17.5H10.952Z" fill="#1F2328"></path> </g></svg>\n'.trim(),clone:'<?xml version="1.0" encoding="UTF-8"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">\n <rect x="88" y="88" width="252" height="252" fill="none" stroke="#000" stroke-width="42"/>\n <rect x="172" y="172" width="252" height="252" fill="none" stroke="#000" stroke-width="42"/>\n</svg>'.trim(),p2p:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="path7" d="m155.327 480.616 323.962-.033V45.207L32.68 44.87l.24 35.605 411.103-.882-.338 365.995-169.126-.577Z" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8" cx="460.396" cy="461.547" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8" cx="460.775" cy="65.834" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8-0" cx="67.176" cy="62.815" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <path id="path2" fill="#000" fill-rule="evenodd" stroke="none" d="M78.983 469.63c-2.155.594-4.661-.186-6.416-1.995-1.755-1.81-2.512-4.396-1.937-6.616.52-2.005 2.036-7.54 3.369-12.298 1.333-4.76 4.302-15.274 6.598-23.365 2.295-8.09 6.159-21.33 8.585-29.421a5326.7 5326.7 0 0 0 9.458-32.018c2.775-9.519 6.848-23.538 9.05-31.153a3424.585 3424.585 0 0 1 8.424-28.556c2.432-8.09 5.74-19.445 7.35-25.23 1.61-5.786 4.963-13.271 7.45-16.634 3.196-4.319 8.828-8.134 19.19-12.998 8.067-3.787 22.221-10.287 31.454-14.445 9.232-4.158 20.186-9.16 24.34-11.116a766.22 766.22 0 0 1 15.108-6.874c4.154-1.824 8.5-4.181 9.657-5.238 1.675-1.53 1.537-3.405-.681-9.226-2.27-5.96-2.436-8.498-.898-13.779 1.221-4.19 5.936-10.614 13.373-18.217 6.772-6.923 13.882-12.502 17.322-13.59 4.562-1.444 7.103-1.28 11.648.752 3.426 1.532 23.389 20.759 48.618 46.826 23.543 24.325 45.072 47.061 47.841 50.525 3.873 4.843 5.036 8.022 5.036 13.76 0 6.664-.988 8.548-9.232 17.594-5.078 5.572-11.81 12.267-14.959 14.876-4.16 3.448-7.614 4.745-12.635 4.745-3.801 0-8.653-1.259-10.783-2.797-2.18-1.574-4.506-2.141-5.322-1.298-.797.824-5.186 10.455-9.754 21.402a5146.966 5146.966 0 0 1-15.335 36.316c-3.866 9.027-10.026 22.886-13.689 30.798-4.617 9.975-8.217 15.361-11.743 17.572-2.796 1.753-10.879 5.156-17.961 7.562-7.083 2.406-20.431 6.749-29.664 9.65-9.232 2.902-25.661 8.033-36.509 11.403-10.847 3.37-31.242 9.76-45.323 14.201-14.08 4.44-32.777 10.286-41.547 12.99-8.771 2.704-17.539 5.355-19.483 5.892zm33.106-25.66c3.124-.525 14.558-3.756 25.407-7.18 10.85-3.424 33.511-10.53 50.36-15.791a27689.101 27689.101 0 0 1 50.776-15.803c14.114-4.37 21.467-7.596 24.568-10.778 2.433-2.497 8.003-13.108 12.378-23.578 4.374-10.471 10.397-24.88 13.384-32.018 2.987-7.14 8.327-19.6 11.866-27.691 3.54-8.091 6.71-17.047 7.046-19.903.555-4.717-2.161-8.042-29.692-36.345-16.667-17.133-31.78-31.396-33.584-31.694-1.804-.298-24.636 9.269-50.737 21.259-26.102 11.99-49.09 23.383-51.087 25.316-1.997 1.934-4.862 7.745-6.369 12.914a7969.157 7969.157 0 0 0-7.086 24.55 5161.998 5161.998 0 0 1-9.204 31.594c-2.67 9.043-9.076 30.85-14.234 48.46-5.158 17.609-10.028 34.72-10.822 38.026-.794 3.304-1.129 6.334-.743 6.731.385.397 3.176-1.24 6.202-3.637 3.026-2.397 17.965-17.532 33.199-33.633 15.233-16.1 31.64-33.573 36.46-38.83 8.522-9.292 8.717-9.73 7.063-15.905-1.163-4.344-1.143-8.487.066-13.114 1.094-4.191 4.275-9.1 8.364-12.909 3.648-3.398 9.265-6.662 12.561-7.3 4.51-.872 7.9-.158 13.92 2.932 4.845 2.486 9.223 6.36 11.188 9.9 1.776 3.2 3.3 9.202 3.385 13.339.09 4.285-1.167 10.058-2.921 13.416-1.693 3.242-6.11 7.651-9.814 9.798-5.669 3.285-8.24 3.73-16.226 2.804-9.49-1.099-9.49-1.099-49.778 40.478-22.158 22.867-40.577 42.47-40.932 43.56-.438 1.349 1.175 1.679 5.036 1.031zm90.33-98.225c3.355 0 6.06-1.502 8.524-4.733 2.602-3.409 3.338-6.138 2.634-9.765-.537-2.768-2.295-6.065-3.908-7.327-1.612-1.262-5.138-2.32-7.835-2.35-2.697-.03-6.285 1.234-7.974 2.81-1.808 1.687-3.07 5.242-3.07 8.653 0 3.481 1.339 7.169 3.358 9.25 1.846 1.904 5.568 3.462 8.271 3.462zm133.61-53.652c1.976 0 7.955-4.72 14.175-11.19 10.066-10.471 10.62-11.455 8.624-15.3-1.174-2.262-22.067-24.651-46.43-49.755-28.883-29.764-45.482-45.645-47.707-45.645-1.918 0-7.85 4.523-13.542 10.323-7.359 7.498-9.997 11.39-9.645 14.229.303 2.438 17.518 21.468 45.796 50.622 29.62 30.538 46.495 46.716 48.73 46.716z" style="stroke:#010101;stroke-width:17.0446;stroke-dasharray:none;stroke-opacity:1"/>\n <path id="path3" d="m243.547 189.376 16.458-15.442 96.745 96.717-16.459 16.256z" style="fill:green;fill-opacity:1;stroke:none;stroke-width:18.6862;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path9" cx="201.178" cy="332.215" r="13.593" style="fill:#fff;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n</svg>'.trim(),p2pSubtract:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" id="svg1" width="512" height="512" version="1.1">\n <path id="path2" fill="#000" fill-rule="evenodd" stroke="none" d="M193.812 478.594c-90.053.005-55.415-.21-62.995-.883-3.109-.277-27.11-21.644-46.82-41.478-19.71-19.834-38.405-39.3-41.545-43.255-3.14-3.957-6.62-10.716-7.734-15.02-1.731-6.696-1.64-9.153.633-17.007 2.63-9.085 3.646-10.163 97.355-103.187 67.82-67.324 96.742-95.006 101.9-97.53 4.693-2.298 10.024-3.498 15.308-3.447 5.932.057 10.337 1.334 16.417 4.757 5.373 3.027 23.906 20.087 52.456 48.29 24.281 23.987 46.739 47.413 49.906 52.058 4.533 6.648 5.893 10.36 6.393 17.444.536 7.598-.072 10.288-3.907 17.275-3.191 5.814-24.3 28.163-70.958 75.126-36.529 36.767-66.373 67.623-66.926 68.174-19.83 19.71-39.71 38.183-39.483 38.683zm84.581-137.331c-68.043-67.49-88.703-86.892-89.81-86.657-1.106.234-27.946 26.117-59.643 57.517-31.698 31.4-57.439 57.94-57.202 58.977.236 1.037 15.757 17.272 34.492 36.078 34.062 34.193 34.062 34.193 53.6 34.193 19.536 0 19.536 0 55.274-35.285 19.656-19.407 41.937-41.932 49.514-50.054zm60.94-60.024c-66.9-66.62-87.289-86.356-88.469-86.837-1.29-.527-8.787 5.684-18.813 15.585l-16.668 16.46 44.408 44.028c24.425 24.215 44.787 44.027 45.249 44.027.461 0 8.366-7.484 17.566-16.632z" style="stroke-width:1.5931"/>\n <path id="path3" d="m214.604 225.766 35.345-32.835 89.308 87.873-34.083 33.773z" style="fill:maroon;fill-opacity:1;stroke:#010101;stroke-width:7.48758"/>\n <path id="path7" d="m238.705 480.616 240.584-.033V45.207L32.68 44.87l.24 35.605 411.103-.882-.338 365.995-169.126-.577Z" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8" cx="460.396" cy="461.547" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8" cx="460.775" cy="65.834" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <circle id="path8-8-0" cx="67.176" cy="62.815" r="39.134" style="fill:#000;fill-opacity:1;stroke:none;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n</svg>'.trim(),erase:qn.trim(),collapse:'<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512">\n <path d="m80.033 292.15 175.755-174.592 175.755 174.591" style="fill:none;stroke:#000;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n <path d="M80.105 394.539 255.86 219.947 431.615 394.54" style="fill:none;stroke:#000;stroke-width:35;stroke-dasharray:none;stroke-opacity:1"/>\n</svg>'.trim(),undo:'<?xml version="1.0" encoding="utf-8"?>\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 48 48" xml:space="preserve">\n<style type="text/css">\n\t.st0{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;}\n</style>\n<g>\n\t<path class="st0" d="M14,18h10c6.6,0,12,5.4,12,12s-5.4,12-12,12s-12-5.4-12-12"/>\n\t<polyline class="st0" points="18,14 14,18 18,22"/>\n</g>\n</svg>\n'.trim(),redo:'<?xml version="1.0" encoding="utf-8"?>\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 48 48" xml:space="preserve">\n<style type="text/css">\n\t.st0{fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;}\n</style>\n<g>\n\t<path class="st0" d="M34,18H24C17.4,18,12,23.4,12,30s5.4,12,12,12s12-5.4,12-12"/>\n\t<polyline class="st0" points="30,14 34,18 30,22"/>\n</g>\n</svg>\n'.trim()},Kn=(t,e)=>{Vn(t,e)},$n=(t,e)=>{t.setAttribute("data-tooltip",e),t.setAttribute("aria-label",e)};class Wn{static getCenter(t){let e=0,r=0,o=0;t.forEach(t=>{let n=t.lat,i=t.lng;n*=f,i*=f,e+=Math.cos(n)*Math.cos(i),r+=Math.cos(n)*Math.sin(i),o+=Math.sin(n)});let n=Math.atan2(r,e);const i=Math.sqrt(e*e+r*r);let a=Math.atan2(o,i);a*=y,n*=y;return{lat:a,lng:n}}static getSouthWest(t){return this.getBounds(t).getSouthWest()}static getNorthEast(t){return this.getBounds(t).getNorthEast()}static getNorthWest(t){return this.getBounds(t).getNorthWest()}static getSouthEast(t){return this.getBounds(t).getSouthEast()}static getNorth(t){return this.getBounds(t).getNorth()}static getSouth(t){return this.getBounds(t).getSouth()}static getWest(t){return this.getBounds(t).getWest()}static getEast(t){return this.getBounds(t).getEast()}static getSqmArea(t){const e=new s.Polygon(t).toGeoJSON();return this.turfHelper.getPolygonArea(e)}static getPerimeter(t){const e=new s.Polygon(t).toGeoJSON();return 1e3*this.turfHelper.getPolygonPerimeter(e)}static getPolygonChecksum(t){const e=t.filter((t,e,r)=>{const o=r.find(e=>e.lat===t.lat&&e.lng===t.lng);return!!o&&r.indexOf(o)===e});return e.reduce((t,e)=>+t+ +e.lat,0)*e.reduce((t,e)=>+t+ +e.lng,0)}static getMidPoint(t,e){const r=this.turfHelper.getMidpoint(t,e);return{lat:r.lat,lng:r.lng}}static getBounds(t){const e=[];t.forEach(t=>{isNaN(t.lat)||isNaN(t.lng),e.push(t)});return new s.Polyline(e).getBounds()}static getCenterOfMass(t){const e=this.turfHelper.getCenterOfMass(t);return{lat:e.geometry.coordinates[1],lng:e.geometry.coordinates[0]}}static getCenterOfPolygonByIndexWithOffsetFromCenterOfMass(t,e){const r=this.turfHelper.getCenterOfMass(t),o={lat:r.geometry.coordinates[1],lng:r.geometry.coordinates[0]},n=this.getPolygonLatLngAtIndex(t,e)??o,i=n.lat-o.lat,a=n.lng-o.lng,s={geometry:{coordinates:[o.lng+.5*a,o.lat+.5*i]}};return{lat:s.geometry.coordinates[1],lng:s.geometry.coordinates[0]}}static getPolygonLatLngAtIndex(t,e){const r=t.geometry;if(!r)return null;let o;if("Polygon"===r.type)o=r.coordinates[0];else{if("MultiPolygon"!==r.type)return null;o=r.coordinates[0][0]}if(!o||0===o.length)return null;if(o.length>1){const t=o[0],e=o[o.length-1];t[0]===e[0]&&t[1]===e[1]&&(o=o.slice(0,o.length-1))}if(0===o.length)return null;const n=o[(e%o.length+o.length)%o.length];return{lat:n[1],lng:n[0]}}}i(Wn,"turfHelper",new Un(u));class Jn{constructor(t){if(i(this,"polygon",[]),i(this,"trashcanPoint",[]),i(this,"sqmArea",[]),i(this,"perimeter",[]),!Array.isArray(t))return;if(t.length>0&&Array.isArray(t[0])&&t[0].length>0&&"object"==typeof t[0][0]&&"lat"in t[0][0]){const e=t[0];return this.trashcanPoint[0]=this.getTrashcanPoint(e),this.sqmArea[0]=this.calculatePolygonArea(e),this.perimeter[0]=this.calculatePolygonPerimeter(e),void(this.polygon[0]=[e])}if(t.length>0&&t[0]&&"object"==typeof t[0]&&"lat"in t[0]){const e=t,r=[[e]];return this.trashcanPoint[0]=this.getTrashcanPoint(e),this.sqmArea[0]=this.calculatePolygonArea(e),this.perimeter[0]=this.calculatePolygonPerimeter(e),void(this.polygon[0]=r[0])}t.forEach((t,e)=>{t&&Array.isArray(t)&&t[0]&&Array.isArray(t[0])&&(this.trashcanPoint[e]=this.getTrashcanPoint(t[0]),this.sqmArea[e]=this.calculatePolygonArea(t[0]),this.perimeter[e]=this.calculatePolygonPerimeter(t[0]),this.polygon[e]=t)})}setSqmArea(t){this.sqmArea[0]=t}getTrashcanPoint(t){if(!Array.isArray(t)||0===t.length)return console.warn("getTrashcanPoint: Invalid polygon array:",t),{lat:0,lng:0};const e=t.filter(t=>t&&"object"==typeof t&&"number"==typeof t.lat&&"number"==typeof t.lng&&!isNaN(t.lat)&&!isNaN(t.lng));if(0===e.length)return console.warn("getTrashcanPoint: No valid coordinates found:",t),{lat:0,lng:0};const r=Math.max(...e.map(t=>t.lat)),o=e.findIndex(t=>t.lat===r);if(-1===o)return console.warn("getTrashcanPoint: Could not find max lat coordinate"),{lat:0,lng:0};let n,i;if(o>0?(n=e[o-1],i=o<e.length-1?e[o+1]:e[0]):(n=e[e.length-1],i=e[o+1]),!n||!i)return console.warn("getTrashcanPoint: Could not determine previous/next points"),e[o]||{lat:0,lng:0};const a=n.lng<i.lng?n:i;return Wn.getMidPoint(e[o],a)}calculatePolygonArea(t){return Wn.getSqmArea(t)}calculatePolygonPerimeter(t){return Wn.getPerimeter(t)}}class Zn{constructor(t){i(this,"polygonInfoListeners",[]),i(this,"polygonDrawStateListeners",[]),i(this,"polygonInformationStorage",[]),this.mapStateService=t}onPolygonInfoUpdated(t){this.polygonInfoListeners.push(t)}emitPolygonInfoUpdated(){for(const t of this.polygonInfoListeners)t(this.polygonInformationStorage)}onPolygonDrawStateUpdated(t){this.polygonDrawStateListeners.push(t)}updatePolygons(){const t=[];this.polygonInformationStorage.length>0&&this.polygonInformationStorage.forEach(e=>{const r=[];e.polygon.forEach(t=>{t.forEach(t=>{const e=[...t];t.length>0&&t[0].toString()!==t[t.length-1].toString()&&e.push(t[0]),r.push(e)})}),t.push(r)}),this.mapStateService.updatePolygons(t),this.saveCurrentState()}saveCurrentState(){this.emitPolygonInfoUpdated()}deleteTrashcan(t){const e=this.polygonInformationStorage.findIndex(e=>e.polygon[0]===t);-1!==e&&(this.polygonInformationStorage.splice(e,1),this.updatePolygons())}deleteTrashCanOnMulti(t){let e=0;this.polygonInformationStorage.forEach((r,o)=>{const n=r.polygon.findIndex(e=>e.toString()===t.toString());n>=0&&(e=o,r.trashcanPoint.splice(n,1),r.sqmArea.splice(n,1),r.perimeter.splice(n,1),r.polygon.splice(n,1))}),this.updatePolygons(),this.polygonInformationStorage.length>1&&this.polygonInformationStorage.splice(e,1)}deletePolygonInformationStorage(){this.polygonInformationStorage=[]}createPolygonInformationStorage(t){t.length>0&&(t.forEach(t=>{var e;const r=null==(e=t.getLayers)?void 0:e.call(t);if(null==r?void 0:r[0]){const t=r[0].getLatLngs(),e=new Jn(t);this.polygonInformationStorage.push(e)}}),this.updatePolygons())}}class Qn{constructor(){i(this,"map",null),i(this,"mapListeners",[])}onMapUpdated(t){this.map&&t(this.map),this.mapListeners.push(t)}emitMapUpdated(){if(this.map)for(const t of this.mapListeners)t(this.map)}updateMapState(t){this.map=t,this.emitMapUpdated()}updatePolygons(t){}}class ti{constructor(){i(this,"eventListeners",new Map)}on(t,e){this.eventListeners.has(t)||this.eventListeners.set(t,[]),this.eventListeners.get(t).push(e)}off(t,e){const r=this.eventListeners.get(t);if(r){const t=r.indexOf(e);t>-1&&r.splice(t,1)}}emit(t,e){var r;this.eventListeners.has(t)&&(null==(r=this.eventListeners.get(t))||r.forEach(t=>{t(e)}))}}class ei{constructor(t,e){i(this,"state"),i(this,"config"),i(this,"eventManager"),this.config=t,this.eventManager=e,this.state=this.createInitialState()}createInitialState(){return{polygonDragging:this.config.modes.dragPolygons??!1,markerDragging:this.config.modes.dragElbow??!1,edgeClicking:!0,polygonClicking:!0,canStartDrawing:!0,canCompletePolygon:!1,mapDragging:!0,mapZooming:!0,mapDoubleClickZoom:!0,currentMode:c.Off,isDrawingActive:!1,isModifierKeyHeld:!1,showCrosshairCursor:!1,showDragCursor:!1}}updateStateForMode(t){switch(this.state.currentMode=t,t){case c.Off:this.setOffModeState();break;case c.Add:case c.Subtract:this.setDrawingModeState();break;case c.PointToPoint:case c.PointToPointSubtract:this.setPointToPointModeState();break;case c.Clone:this.setCloneModeState()}this.state.isDrawingActive=t!==c.Off&&t!==c.Clone,this.eventManager.emit("polydraw:mode:change",{mode:t})}setOffModeState(){this.state.polygonDragging=this.config.modes.dragPolygons??!1,this.state.markerDragging=this.config.modes.dragElbow??!1,this.state.edgeClicking=!0,this.state.polygonClicking=!0,this.state.canStartDrawing=!0,this.state.canCompletePolygon=!1,this.state.mapDragging=!0,this.state.mapZooming=!0,this.state.mapDoubleClickZoom=!0,this.state.showCrosshairCursor=!1,this.state.showDragCursor=!1}setDrawingModeState(){this.state.polygonDragging=!1,this.state.markerDragging=!1,this.state.edgeClicking=!1,this.state.polygonClicking=!1,this.state.canStartDrawing=!0,this.state.canCompletePolygon=!0,this.state.mapDragging=!1,this.state.mapZooming=!1,this.state.mapDoubleClickZoom=!1,this.state.showCrosshairCursor=!0,this.state.showDragCursor=!1}setPointToPointModeState(){this.state.polygonDragging=!1,this.state.markerDragging=!1,this.state.edgeClicking=!1,this.state.polygonClicking=!1,this.state.canStartDrawing=!0,this.state.canCompletePolygon=!0,this.state.mapDragging=!1,this.state.mapZooming=!1,this.state.mapDoubleClickZoom=!1,this.state.showCrosshairCursor=!0,this.state.showDragCursor=!1}setCloneModeState(){this.state.polygonDragging=this.config.tools.clone??!1,this.state.markerDragging=!1,this.state.edgeClicking=!1,this.state.polygonClicking=!1,this.state.canStartDrawing=!1,this.state.canCompletePolygon=!1,this.state.mapDragging=!0,this.state.mapZooming=!0,this.state.mapDoubleClickZoom=!0,this.state.showCrosshairCursor=!1,this.state.showDragCursor=!0}setModifierKeyState(t){this.state.isModifierKeyHeld=t,this.state.currentMode,c.Off}canPerformAction(t){switch(t){case"polygonDrag":return this.state.polygonDragging;case"markerDrag":return this.state.markerDragging;case"edgeClick":return this.state.edgeClicking;case"polygonClick":return this.state.polygonClicking;case"startDrawing":return this.state.canStartDrawing;case"completePolygon":return this.state.canCompletePolygon;case"mapDrag":return this.state.mapDragging;case"mapZoom":return this.state.mapZooming;case"mapDoubleClickZoom":return this.state.mapDoubleClickZoom;default:return!1}}isInDrawingMode(){return this.state.isDrawingActive}isInOffMode(){return this.state.currentMode===c.Off}getCurrentMode(){return this.state.currentMode}getState(){return{...this.state}}shouldShowCrosshairCursor(){return this.state.showCrosshairCursor}shouldShowDragCursor(){return this.state.showDragCursor}updateConfig(t){this.config=t,this.updateStateForMode(this.state.currentMode)}}class ri{constructor(t){i(this,"turfHelper"),i(this,"map"),i(this,"config"),i(this,"modeManager"),i(this,"eventManager"),i(this,"tracer"),i(this,"p2pMarkers",[]),i(this,"isModifierKeyHeld",!1),i(this,"markerModifierHandlers",new WeakMap),this.turfHelper=t.turfHelper,this.map=t.map,this.config=t.config,this.modeManager=t.modeManager,this.eventManager=t.eventManager,this.tracer=t.tracer}mouseMove(t){if("latlng"in t&&t.latlng)this.tracer.addLatLng(t.latlng);else if("touches"in t&&t.touches&&t.touches.length>0){const e=this.map.getContainer().getBoundingClientRect(),r=this.map.containerPointToLatLng([t.touches[0].clientX-e.x,t.touches[0].clientY-e.y]);this.tracer.addLatLng(r)}}async mouseUpLeave(t){const e=this.tracer.toGeoJSON();if(!e||!e.geometry||!e.geometry.coordinates||e.geometry.coordinates.length<3)return{success:!1,error:"Not enough points to form a valid polygon. Event: "+JSON.stringify(t)};let r;try{r=this.turfHelper.createPolygonFromTrace(e)}catch(o){return{success:!1,error:(o instanceof Error?o.message:"Failed to create polygon from trace")+". Event: "+JSON.stringify(t)}}return r&&r.geometry&&r.geometry.coordinates&&0!==r.geometry.coordinates.length?(this.eventManager.emit("polydraw:polygon:created",{polygon:r,mode:this.modeManager.getCurrentMode()}),{success:!0,polygon:r}):{success:!1,error:"Invalid polygon created from trace. Event: "+JSON.stringify(t)}}setModifierKey(t){this.isModifierKeyHeld=t}shouldAllowP2PMarkerDeletion(){if(!this.isModifierKeyHeld||!this.config.modes.edgeDeletion)return!1;if(this.config.modifierSubtractMode){const t=this.modeManager.getCurrentMode();if(t===c.PointToPoint||t===c.PointToPointSubtract)return!1}return!0}handlePointToPointClick(t){if(t){if(this.p2pMarkers.length>=3){const e=this.p2pMarkers[0].getLatLng();if(this.isClickingFirstPoint(t,e))return void this.completePointToPointPolygon()}try{const e=this.isTouchDevice(),r=0===this.p2pMarkers.length,o=r?"leaflet-polydraw-p2p-marker leaflet-polydraw-p2p-first-marker":"leaflet-polydraw-p2p-marker",n=r?e?[24,24]:[20,20]:e?[18,18]:[16,16],i=new s.Marker(t,{icon:Yn.createDivIcon({className:o,iconSize:n}),draggable:this.config.modes.dragElbow}).addTo(this.map);i.on("mousedown",t=>{s.DomEvent.stopPropagation(t)}),i.on("drag",()=>{this.updateP2PTracer()}),i.on("click",t=>{this.shouldAllowP2PMarkerDeletion()&&(this.deleteP2PMarker(i),s.DomEvent.stopPropagation(t))}),i.on("mouseover",()=>this.onMarkerHoverForEdgeDeletion(i,!0)),i.on("mouseout",()=>this.onMarkerHoverForEdgeDeletion(i,!1)),r&&(i.on("mouseover",()=>{if(this.p2pMarkers.length>=3){const t=i.getElement();t&&(t.style.backgroundColor=this.config.styles.ui.p2pClosingMarker.color,t.style.borderColor=this.config.styles.ui.p2pClosingMarker.color,t.style.cursor="pointer",t.title="Click to close polygon")}}),i.on("mouseout",()=>{const t=i.getElement();t&&(t.style.backgroundColor="",t.style.borderColor="",t.style.cursor="",t.title="")}),i.on("click",t=>{if(this.shouldAllowP2PMarkerDeletion())return this.deleteP2PMarker(i),void s.DomEvent.stopPropagation(t);this.p2pMarkers.length>=3&&(s.DomEvent.stopPropagation(t),this.completePointToPointPolygon())})),this.p2pMarkers.push(i),this.updateP2PTracer(),this.updateFirstMarkerReadyState()}catch{}}}handleDoubleClick(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.p2pMarkers.length>=3&&this.completePointToPointPolygon()}handleDoubleTap(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.p2pMarkers.length>=3&&this.completePointToPointPolygon()}completePointToPointPolygon(){const t=this.p2pMarkers.map(t=>t.getLatLng());if(t.length<3)return;const e=[...t],r=t[0],o=t[t.length-1];r.lat===o.lat&&r.lng===o.lng||e.push(r);try{const t=e.map(t=>[t.lng,t.lat]),r=this.turfHelper.getMultiPolygon([[t]]);this.clearP2pMarkers(),this.resetTracer(),this.eventManager.emit("polydraw:polygon:created",{polygon:r,mode:this.modeManager.getCurrentMode(),isPointToPoint:!0})}catch(n){_n()||console.warn("Error completing point-to-point polygon:",n),this.clearP2pMarkers(),this.resetTracer()}}cancelPointToPointDrawing(){this.clearP2pMarkers(),this.resetTracer(),this.eventManager.emit("polydraw:draw:cancel",{mode:c.PointToPoint})}clearP2pMarkers(){this.p2pMarkers.forEach(t=>{this.detachMarkerModifierHandler(t);try{this.map.removeLayer(t)}catch{}}),this.p2pMarkers=[]}resetTracer(){this.tracer.setLatLngs([]);try{this.tracer.setStyle({dashArray:void 0})}catch{}}isClickingFirstPoint(t,e){if(!e)return!1;const r=this.map.latLngToLayerPoint(t),o=this.map.latLngToLayerPoint(e);return r.distanceTo(o)<=(this.isTouchDevice()?36:12)}isTouchDevice(){return Tn()}updateP2PTracer(){const t=this.p2pMarkers.map(t=>t.getLatLng());if(this.tracer.setLatLngs(t),this.p2pMarkers.length>=2)try{const t=this.modeManager.getCurrentMode()===c.PointToPointSubtract?this.config.styles.subtractLine.color:this.config.styles.polyline.color;this.tracer.setStyle({color:t,dashArray:"5, 5"})}catch{}else try{this.tracer.setStyle({dashArray:void 0})}catch{}}deleteP2PMarker(t){const e=this.p2pMarkers.findIndex(e=>e===t);if(e>-1){this.p2pMarkers.splice(e,1),this.detachMarkerModifierHandler(t);try{this.map.removeLayer(t)}catch{}this.updateP2PTracer(),0===e&&this.p2pMarkers.length>0&&this.setupFirstMarker(),this.updateFirstMarkerReadyState()}}getP2pMarkers(){return[...this.p2pMarkers]}isInPointToPointMode(){const t=this.modeManager.getCurrentMode();return t===c.PointToPoint||t===c.PointToPointSubtract}getTracerPointsCount(){return this.tracer.getLatLngs().length}setupFirstMarker(){if(0===this.p2pMarkers.length)return;const t=this.p2pMarkers[0],e=t.getElement();e&&(e.classList.add("leaflet-polydraw-p2p-first-marker"),e.classList.remove("leaflet-polydraw-p2p-first-marker-ready"),t.setIcon(Yn.createDivIcon({className:"leaflet-polydraw-p2p-marker leaflet-polydraw-p2p-first-marker",iconSize:[20,20]}))),t.off("mouseover"),t.off("mouseout"),t.off("click"),t.on("mouseover",()=>{if(this.p2pMarkers.length>=3){const e=t.getElement();e&&(e.style.cursor="pointer",e.title="Click to close polygon")}}),t.on("mouseout",()=>{const e=t.getElement();e&&(e.style.backgroundColor="",e.style.borderColor="",e.style.cursor="",e.title="")}),t.on("click",e=>{if(this.shouldAllowP2PMarkerDeletion())return this.deleteP2PMarker(t),void s.DomEvent.stopPropagation(e);this.p2pMarkers.length>=3&&(s.DomEvent.stopPropagation(e),this.completePointToPointPolygon())})}updateFirstMarkerReadyState(){if(0===this.p2pMarkers.length)return;const t=this.p2pMarkers[0].getElement();t&&(this.p2pMarkers.length>=3?(t.classList.add("leaflet-polydraw-p2p-first-marker-ready"),t.setAttribute("data-p2p-mode",this.modeManager.getCurrentMode()===c.PointToPointSubtract?"subtract":"add"),t.style.cursor="pointer",t.title="Click to close polygon"):(t.classList.remove("leaflet-polydraw-p2p-first-marker-ready"),t.removeAttribute("data-p2p-mode"),t.style.cursor="",t.removeAttribute("title")))}refreshP2PMarkerState(){0!==this.p2pMarkers.length&&this.updateFirstMarkerReadyState()}onMarkerHoverForEdgeDeletion(t,e){const r=t.getElement();if(r)if(e){this.detachMarkerModifierHandler(t);const e=t=>{if(this.shouldAllowP2PMarkerDeletion()){r.classList.add("edge-deletion-hover");try{this.map.getContainer().style.cursor="pointer"}catch{}}else{r.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}}};this.markerModifierHandlers.set(t,e),document.addEventListener("keydown",e),document.addEventListener("keyup",e),r.addEventListener("mousemove",e)}else{r.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}this.detachMarkerModifierHandler(t)}}detachMarkerModifierHandler(t){const e=this.markerModifierHandlers.get(t);if(!e)return;document.removeEventListener("keydown",e),document.removeEventListener("keyup",e);const r=t.getElement();r&&(r.removeEventListener("mousemove",e),r.classList.remove("edge-deletion-hover")),this.markerModifierHandlers.delete(t)}}class oi{constructor(t){i(this,"turfHelper"),i(this,"config"),this.turfHelper=t.turfHelper,this.config=t.config}checkPolygonIntersection(t,e){if(this.isPolygonInsideHole(t,e)||this.isPolygonInsideHole(e,t))return!1;try{const r=this.turfHelper.isPolygonCompletelyWithin(t,e),o=this.turfHelper.isPolygonCompletelyWithin(e,t);if(r||o)return!0}catch{}try{if(this.turfHelper.polygonIntersect(t,e))return!0}catch{}try{const r=this.turfHelper.getIntersection(t,e);if(r&&r.geometry&&("Polygon"===r.geometry.type||"MultiPolygon"===r.geometry.type)){if(this.turfHelper.getPolygonArea(r)>1e-6)return!0}}catch{}try{const r=this.turfHelper.getCoords(t),o=this.turfHelper.getCoords(e);for(const e of o)for(const r of e[0]){const e={type:"Feature",geometry:{type:"Point",coordinates:r},properties:{}};if(this.turfHelper.isPointInsidePolygon(e,t))return!0}for(const t of r)for(const r of t[0]){const t={type:"Feature",geometry:{type:"Point",coordinates:r},properties:{}};if(this.turfHelper.isPointInsidePolygon(t,e))return!0}}catch{}return!1}isPolygonInsideHole(t,e){try{const r=this.turfHelper.getCoords(e);for(const e of r){if(!e||e.length<=1)continue;const r=e.slice(1);for(const e of r)try{const r=this.turfHelper.createPolygon([e]);if(this.turfHelper.isPolygonCompletelyWithin(t,r))return!0}catch{continue}}}catch{}return!1}unionPolygons(t,e){try{let r=e;for(const e of t){const t=this.turfHelper.union(r,e);t&&(r=t)}return{success:!0,result:r}}catch(r){return{success:!1,error:r instanceof Error?r.message:"Unknown error in unionPolygons"}}}subtractPolygon(t,e){try{const r=this.turfHelper.polygonDifference(t,e);if(r){const t=this.turfHelper.getCoords(r),e=[];for(const r of t)e.push(this.turfHelper.getMultiPolygon([r]));return{success:!0,results:e}}return{success:!0,results:[]}}catch(r){return{success:!1,error:r instanceof Error?r.message:"Unknown error in subtractPolygon"}}}simplifyPolygon(t){var e,r;try{const o=this.turfHelper.getCoords(t);if(!o||0===o.length)return{success:!1,error:"Invalid polygon coordinates"};const n=(null==(r=null==(e=this.config.polygonTools)?void 0:e.simplify)?void 0:r.processHoles)??!0,i=o.map(t=>{const e=[];for(let r=0;r<t.length;r++){const o=t[r];if(0===r||n){if(o.length<=4){e.push(o);continue}const t=[];for(let e=0;e<o.length;e+=2)t.push(o[e]);const r=t[0],n=t[t.length-1];r[0]===n[0]&&r[1]===n[1]||t.push(r),t.length<4?e.push(o):e.push(t)}else e.push(o)}return e}),a=this.turfHelper.getMultiPolygon(i);return{success:!0,result:this.turfHelper.getTurfPolygon(a)}}catch(o){return{success:!1,error:o instanceof Error?o.message:"Unknown error in simplifyPolygon"}}}convertToBoundingBox(t){var e,r,o,n;try{const i=this.turfHelper.getCoords(t);if(!i||0===i.length)return{success:!1,error:"Invalid polygon coordinates"};if(!((null==(r=null==(e=this.config.polygonTools)?void 0:e.bbox)?void 0:r.processHoles)??!0)){const e=this.turfHelper.convertToBoundingBoxPolygon(t);return{success:!0,result:this.turfHelper.getTurfPolygon(e)}}const a=i.map(t=>{const e=[];for(let r=0;r<t.length;r++){const o=t[r];let n=1/0,i=-1/0,a=1/0,s=-1/0;for(const t of o)if(Array.isArray(t)&&t.length>=2){const e=t[0],r=t[1];"number"!=typeof e||"number"!=typeof r||isNaN(e)||isNaN(r)||(a=Math.min(a,e),s=Math.max(s,e),n=Math.min(n,r),i=Math.max(i,r))}if(n!==1/0&&i!==-1/0&&a!==1/0&&s!==-1/0){const t=[[a,n],[a,i],[s,i],[s,n],[a,n]];e.push(t)}else e.push(o)}return e}),s=this.turfHelper.getMultiPolygon(a);let l=this.turfHelper.getTurfPolygon(s);if(null==(n=null==(o=this.config.polygonTools)?void 0:o.bbox)?void 0:n.addMidPointMarkers){const t=this.doubleElbowsPolygon(l);t.success&&t.result&&(l=t.result)}return{success:!0,result:l}}catch(i){return{success:!1,error:i instanceof Error?i.message:"Unknown error in convertToBoundingBox"}}}bezierifyPolygon(t){try{const e=this.turfHelper.getCoords(t),r=this.turfHelper.getBezierMultiPolygon(e);return{success:!0,result:this.turfHelper.getTurfPolygon(r)}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Unknown error in bezierifyPolygon"}}}doubleElbowsPolygon(t){var e,r;try{const o=this.turfHelper.getCoords(t);if(!o||0===o.length)return{success:!1,error:"Invalid polygon coordinates"};const n=(null==(r=null==(e=this.config.polygonTools)?void 0:e.doubleElbows)?void 0:r.processHoles)??!0,i=o.map(t=>{const e=[];for(let r=0;r<t.length;r++){const o=t[r];if(0===r||n){const t=o.map(t=>({lat:t[1],lng:t[0]})),r=this.turfHelper.getDoubleElbowLatLngs(t).map(t=>[t.lng,t.lat]);e.push(r)}else e.push(o)}return e}),a=this.turfHelper.getMultiPolygon(i);return{success:!0,result:this.turfHelper.getTurfPolygon(a)}}catch(o){return{success:!1,error:o instanceof Error?o.message:"Unknown error in doubleElbowsPolygon"}}}}class ni{static createDivIcon(t){const e=t.join(" ");return Yn.createDivIcon({className:e})}}class ii{static normalizeEvent(t){return Xn.getVersion()===l.V2&&(t.layer&&!t.propagatedFrom&&(t.propagatedFrom=t.layer),"mousedown"!==t.type&&"touchstart"!==t.type||(t._isPointerEvent=!0)),t}static getEventName(t){if(Xn.getVersion()===l.V2)switch(t){case"mousedown":case"touchstart":return"pointerdown";case"mouseup":case"touchend":return"pointerup";case"mousemove":case"touchmove":return"pointermove";default:return t}return t}static shouldUsePointerEvents(){return Xn.getVersion()===l.V2&&"PointerEvent"in window}static extractCoordinates(t,e){if(t.latlng)return t.latlng;if(t.touches&&t.touches.length>0){const r=e.getContainer().getBoundingClientRect();return e.containerPointToLatLng([t.touches[0].clientX-r.x,t.touches[0].clientY-r.y])}if(t.pointerType&&void 0!==t.clientX&&void 0!==t.clientY){const r=e.getContainer().getBoundingClientRect();return e.containerPointToLatLng([t.clientX-r.x,t.clientY-r.y])}if(void 0!==t.clientX&&void 0!==t.clientY){const r=e.getContainer().getBoundingClientRect();return e.containerPointToLatLng([t.clientX-r.x,t.clientY-r.y])}return null}static shouldPreventDefault(t){return!(!t.type||!t.type.startsWith("touch"))||(!t.pointerType||!1!==t.isPrimary)&&!(!("cancelable"in t)||!t.cancelable)}static getEventNames(){return Xn.getVersion()===l.V2&&this.shouldUsePointerEvents()?{start:["pointerdown"],move:["pointermove"],end:["pointerup"]}:{start:["mousedown","touchstart"],move:["mousemove","touchmove"],end:["mouseup","touchend"]}}}var ai=(t=>(t.TopLeft="top-left",t.Top="top",t.TopRight="top-right",t.Right="right",t.BottomRight="bottom-right",t.Bottom="bottom",t.BottomLeft="bottom-left",t.Left="left",t.Rotate="rotate",t.Pivot="pivot",t))(ai||{});class si{constructor(t,e,r,o,n){var a;i(this,"map"),i(this,"pane"),i(this,"root"),i(this,"draggingHandle",null),i(this,"documentMoveHandler",null),i(this,"documentUpHandler",null),i(this,"pointerCaptureTarget",null),i(this,"activePointerId",null),i(this,"callbacks"),i(this,"rafId",null),i(this,"mode"),i(this,"onCancel"),i(this,"onConfirm"),i(this,"cancelBtn",null),i(this,"confirmBtn",null),i(this,"currentBBox",null),i(this,"currentRotation",0),i(this,"buttonsHidden",!1),i(this,"destroyed",!1),i(this,"supportsPointerEvents","undefined"!=typeof window&&"PointerEvent"in window),this.map=t,this.callbacks=e,this.mode=r,this.onCancel=o,this.onConfirm=n;const s="polydraw-transform",l=this.map;let c=null==(a=l.getPane)?void 0:a.call(l,s);c||(c=this.map.createPane(s)),c.style.zIndex="650",c.style.pointerEvents="auto",this.pane=c,this.root=document.createElement("div"),this.root.className="polydraw-transform-root",this.root.style.position="absolute",this.root.style.left="0px",this.root.style.top="0px",this.root.style.pointerEvents="none",this.pane.appendChild(this.root)}destroy(){this.destroyed||(this.destroyed=!0,null!=this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.draggingHandle=null,this.detachDocumentDragHandlers(),this.root.remove())}update(t,e,r=0){this.destroyed||null==this.rafId&&(this.rafId=requestAnimationFrame(()=>{if(this.rafId=null,!this.destroyed&&(this.render(t,e,r),this.cancelBtn||this.confirmBtn)){this.draggingHandle===ai.Rotate&&"rotate"===this.mode||this.updateButtonPositions(t,r)}}))}render(t,e,r=0){const o=this.cancelBtn,n=this.confirmBtn;this.root.innerHTML="",this.currentBBox=t,this.currentRotation=r,this.cancelBtn=o,this.confirmBtn=n;const i=t.maxX-t.minX,a=t.maxY-t.minY,l=t.minX+i/2,c=t.minY+a/2,h=document.createElement("div");h.className="polydraw-transform-box",Object.assign(h.style,{position:"absolute",left:`${l}px`,top:`${c}px`,width:`${i}px`,height:`${a}px`,marginLeft:-i/2+"px",marginTop:-a/2+"px",border:"1px dashed #2b90d9",pointerEvents:"none",transformOrigin:"center center",transform:`rotate(${180*r/Math.PI}deg)`}),this.root.appendChild(h);const u=(t,e,o)=>{const n=e-l,i=o-c,a=Math.cos(r),h=Math.sin(r),u=l+n*a-i*h,g=c+n*h+i*a,d=document.createElement("div");d.className=`polydraw-transform-handle handle-${t}`,Object.assign(d.style,{position:"absolute",left:u-5+"px",top:g-5+"px",width:"10px",height:"10px",borderRadius:"2px",background:"#2b90d9",boxShadow:"0 0 0 1px #fff",cursor:this.cursorForHandle(t),pointerEvents:"auto",touchAction:"none"}),this.supportsPointerEvents?s.DomEvent.on(d,"pointerdown",e=>this.startDrag(t,{x:u,y:g},e),this):(s.DomEvent.on(d,"mousedown",e=>this.startDrag(t,{x:u,y:g},e),this),s.DomEvent.on(d,"touchstart",e=>this.startDrag(t,{x:u,y:g},e),this)),this.root.appendChild(d)};"scale"===this.mode?(u(ai.TopLeft,t.minX,t.minY),u(ai.TopRight,t.maxX,t.minY),u(ai.BottomRight,t.maxX,t.maxY),u(ai.BottomLeft,t.minX,t.maxY),u(ai.Top,l,t.minY),u(ai.Right,t.maxX,c),u(ai.Bottom,l,t.maxY),u(ai.Left,t.minX,c)):(u(ai.Rotate,t.minX,t.minY),u(ai.Rotate,t.maxX,t.minY),u(ai.Rotate,t.maxX,t.maxY),u(ai.Rotate,t.minX,t.maxY)),this.cancelBtn||this.confirmBtn?(this.updateButtonPositions(t,r),this.cancelBtn&&this.root.appendChild(this.cancelBtn),this.confirmBtn&&this.root.appendChild(this.confirmBtn)):this.updateButtonPositions(t,r)}cursorForHandle(t){switch(t){case ai.Top:case ai.Bottom:return"ns-resize";case ai.Left:case ai.Right:return"ew-resize";case ai.TopLeft:case ai.BottomRight:return"nwse-resize";case ai.TopRight:case ai.BottomLeft:return"nesw-resize";case ai.Rotate:return"grab";case ai.Pivot:return"move";default:return"default"}}startDrag(t,e,r){var o,n;if(this.destroyed)return;s.DomEvent.stop(r),this.draggingHandle=t,this.hideButtons(),this.documentMoveHandler=t=>this.onDrag(t),this.documentUpHandler=t=>this.endDrag(t);const i=document,a=this.documentMoveHandler,l=this.documentUpHandler;if(this.supportsPointerEvents&&r instanceof PointerEvent){this.activePointerId=r.pointerId,this.pointerCaptureTarget=this.map.getContainer();try{null==(n=null==(o=this.pointerCaptureTarget)?void 0:o.setPointerCapture)||n.call(o,r.pointerId)}catch{}s.DomEvent.on(i,"pointermove",a),s.DomEvent.on(i,"pointerup",l),s.DomEvent.on(i,"pointercancel",l)}else s.DomEvent.on(i,"mousemove",a),s.DomEvent.on(i,"mouseup",l),s.DomEvent.on(i,"touchmove",a),s.DomEvent.on(i,"touchend",l),s.DomEvent.on(i,"touchcancel",l);this.callbacks.onStartHandleDrag(t,e,r)}onDrag(t){if(null==this.draggingHandle)return;const e=this.getMouseLayerPoint(t);this.callbacks.onDragHandle(this.draggingHandle,e,t)}endDrag(t){if(null==this.draggingHandle)return;const e=this.draggingHandle;this.draggingHandle=null;try{const r=this.getMouseLayerPoint(t);this.callbacks.onEndHandleDrag(e,r,t),this.currentBBox&&this.updateButtonPositions(this.currentBBox,this.currentRotation),this.showButtons()}finally{this.detachDocumentDragHandlers()}}detachDocumentDragHandlers(){var t,e;if(!this.documentMoveHandler&&!this.documentUpHandler&&!this.pointerCaptureTarget)return;const r=document;if(this.supportsPointerEvents&&this.pointerCaptureTarget){if(null!=this.activePointerId)try{null==(e=(t=this.pointerCaptureTarget).releasePointerCapture)||e.call(t,this.activePointerId)}catch{}if(this.documentMoveHandler){const t=this.documentMoveHandler;s.DomEvent.off(r,"pointermove",t)}if(this.documentUpHandler){const t=this.documentUpHandler;s.DomEvent.off(r,"pointerup",t),s.DomEvent.off(r,"pointercancel",t)}this.pointerCaptureTarget=null,this.activePointerId=null}else{if(this.documentMoveHandler){const t=this.documentMoveHandler;s.DomEvent.off(r,"mousemove",t),s.DomEvent.off(r,"touchmove",t)}if(this.documentUpHandler){const t=this.documentUpHandler;s.DomEvent.off(r,"mouseup",t),s.DomEvent.off(r,"touchend",t),s.DomEvent.off(r,"touchcancel",t)}}this.documentMoveHandler=null,this.documentUpHandler=null}getMouseLayerPoint(t){const e=this.map.getContainer();let r=null,o=null;if(t.touches&&t.touches.length>0){const e=t.touches[0];r=e.clientX,o=e.clientY}else if(t.changedTouches&&t.changedTouches.length>0){const e=t.changedTouches[0];r=e.clientX,o=e.clientY}else null!=t.clientX&&(r=t.clientX,o=t.clientY);null!=r&&null!=o||(r=0,o=0);const n=e.getBoundingClientRect(),i=r-n.left,a=o-n.top,s=Yn.createPoint(i,a),l=this.map.containerPointToLayerPoint(s);return{x:l.x,y:l.y}}updateButtonPositions(t,e){const r=t.maxX-t.minX,o=t.maxY-t.minY,n=t.minX+r/2,i=t.minY+o/2,a=[{x:t.minX,y:t.minY},{x:t.maxX,y:t.minY},{x:t.maxX,y:t.maxY},{x:t.minX,y:t.maxY}],l=Math.cos(e),c=Math.sin(e);let h={x:0,y:1/0},u=1/0;for(const s of a){const t=s.x-n,e=s.y-i,r=n+t*l-e*c,o=i+t*c+e*l,a=o<u,g=Math.abs(o-u)<1,d=r>h.x;(a||g&&d)&&(u=o,h={x:r,y:o})}const g=h.x,d=h.y-28,p=g+5,f=g-29;if(this.onCancel&&!this.cancelBtn&&(this.cancelBtn=document.createElement("div"),this.cancelBtn.className="polydraw-transform-cancel",this.cancelBtn.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">\n <circle cx="256" cy="256" r="236" fill="#212A32"/>\n <circle cx="256" cy="256" r="190" fill="#ffffff"/>\n <path id="path2" fill="#800000" fill-rule="evenodd" stroke="none"\n d="M 156 373.906311 C 140.875 373.871002 127.9375 373.615112 127.25 373.337708 C 126.5625 373.060303 126 372.072937 126 371.143555 C 126 370.214203 146.628433 343.53772 171.840973 311.862488 C 197.053513 280.187286 217.991867 253.463562 218.370667 252.47644 C 218.806335 251.341125 218.221786 249.464233 216.779678 247.368073 C 215.525864 245.545563 196.612503 221.361847 174.75 193.626465 C 152.887497 165.891052 135 142.531311 135 141.715881 C 135 140.900421 136.012497 139.961914 137.25 139.63028 C 138.487503 139.298645 152.408203 139.021179 168.184906 139.013641 C 184.588272 139.005859 197.976456 139.420746 199.454529 139.982727 C 201.182831 140.639801 210.486664 152.319733 227.533463 175.232727 C 241.555283 194.079712 253.994949 210.166199 255.177185 210.980438 C 257.208252 212.379272 257.562622 212.186401 261.607452 207.480438 C 263.961853 204.74118 276.052643 189 288.47583 172.5 C 300.899048 156 312.286682 141.714874 313.781738 140.75528 C 316.198669 139.203949 319.554993 139.009949 344.058868 139.00528 C 366.27774 139.001007 371.993561 139.274811 373.557343 140.418274 C 375.458923 141.808746 375.448914 141.90155 373.046875 145.150452 C 371.699341 146.973114 352.828827 170.746307 331.112396 197.979767 C 309.395966 225.213257 291.465973 248.396271 291.267914 249.497589 C 291.012512 250.91803 304.435944 268.61731 337.453918 310.395416 C 363.05426 342.787903 384 370.077271 384 371.038422 C 384 371.999603 383.288208 373.059174 382.418213 373.393005 C 381.548218 373.726868 367.485718 373.993347 351.168213 373.98526 C 329.591888 373.974548 320.854309 373.633606 319.132629 372.73526 C 317.830597 372.055847 302.980591 353.049988 286.132629 330.5 C 260.059052 295.602051 255.12793 289.5 253 289.5 C 250.878326 289.5 245.808807 295.701355 219.5 330.479431 C 202.449997 353.018127 187.375 372.023987 186 372.714691 C 184.165009 373.636475 176.184906 373.95343 156 373.906311 Z"/>\n</svg>',s.DomEvent.on(this.cancelBtn,"mousedown",t=>{t.stopPropagation(),t.preventDefault(),this.onCancel&&this.onCancel()}),s.DomEvent.on(this.cancelBtn,"touchstart",t=>{t.stopPropagation(),t.preventDefault(),this.onCancel&&this.onCancel()}),s.DomEvent.on(this.cancelBtn,"pointerdown",t=>{t.stopPropagation(),t.preventDefault(),this.onCancel&&this.onCancel()}),this.root.appendChild(this.cancelBtn)),this.onConfirm&&!this.confirmBtn&&(this.confirmBtn=document.createElement("div"),this.confirmBtn.className="polydraw-transform-confirm",this.confirmBtn.innerHTML='<?xml version="1.0" encoding="UTF-8"?>\n<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">\n <circle cx="256" cy="256" r="236" fill="#212A32"/>\n <circle cx="256" cy="256" r="190" fill="#ffffff"/>\n <path id="check" fill="#008000" fill-rule="evenodd" stroke="none"\n d="M 223.844696 360 C 222.79425 360 204.506973 341.170593 178.987274 313.812744 \n C 144.992401 277.369232 135.966232 267.145691 136.201645 265.351257 \n C 136.396179 263.868408 143.092361 257.073425 155.444672 245.824249 \n C 166.363129 235.880859 175.214264 228.571442 176.336426 228.571442 \n C 177.515594 228.571442 181.716553 232.304138 186.987961 238.035706 \n C 191.775406 243.241058 201.629044 254.024994 208.884933 262 \n C 216.140823 269.975006 222.682266 276.635315 223.421478 276.80072 \n C 224.16246 276.966553 247.742722 250.494751 275.976837 217.800751 \n C 304.143097 185.185333 328.050385 157.879608 329.104156 157.121368 \n C 330.785767 155.911316 331.44046 156.0336 334.457672 158.121368 \n C 336.348328 159.429626 345.368622 167.190216 354.502747 175.367126 \n C 367.688812 187.171356 371.047394 190.689819 370.805115 192.445557 \n C 370.635864 193.67218 338.242889 231.469543 298.059082 277.32843 \n C 253.148834 328.581238 224.944153 360 223.844696 360 Z"/>\n</svg>',s.DomEvent.on(this.confirmBtn,"mousedown",t=>{t.stopPropagation(),t.preventDefault(),this.onConfirm&&this.onConfirm()}),s.DomEvent.on(this.confirmBtn,"touchstart",t=>{t.stopPropagation(),t.preventDefault(),this.onConfirm&&this.onConfirm()}),s.DomEvent.on(this.confirmBtn,"pointerdown",t=>{t.stopPropagation(),t.preventDefault(),this.onConfirm&&this.onConfirm()}),this.root.appendChild(this.confirmBtn)),this.cancelBtn){Object.assign(this.cancelBtn.style,{position:"absolute",left:`${f}px`,top:`${d}px`,display:"grid",placeItems:"center",pointerEvents:"auto",width:"28px",height:"28px"});const t=this.cancelBtn.querySelector("svg");t&&(t.setAttribute("width","24"),t.setAttribute("height","24")),this.cancelBtn.style.display=this.buttonsHidden?"none":"grid"}if(this.confirmBtn){Object.assign(this.confirmBtn.style,{position:"absolute",left:`${p}px`,top:`${d}px`,display:"grid",placeItems:"center",pointerEvents:"auto",width:"28px",height:"28px"});const t=this.confirmBtn.querySelector("svg");t&&(t.setAttribute("width","24"),t.setAttribute("height","24")),this.confirmBtn.style.display=this.buttonsHidden?"none":"grid"}}hideButtons(){this.buttonsHidden=!0,this.cancelBtn&&(this.cancelBtn.style.display="none"),this.confirmBtn&&(this.confirmBtn.style.display="none")}showButtons(){this.buttonsHidden=!1,this.cancelBtn&&(this.cancelBtn.style.display="grid"),this.confirmBtn&&(this.confirmBtn.style.display="grid")}}function li(t,e){const r=t.latLngToLayerPoint(e);return{x:r.x,y:r.y}}function ci(t,e){const r=t.layerPointToLatLng(Yn.createPoint(e.x,e.y));return{lat:r.lat,lng:r.lng}}function hi(t){let e=1/0,r=1/0,o=-1/0,n=-1/0;for(const i of t)for(const t of i)for(const i of t)i.x<e&&(e=i.x),i.y<r&&(r=i.y),i.x>o&&(o=i.x),i.y>n&&(n=i.y);return{minX:e,minY:r,maxX:o,maxY:n}}function ui(t){return{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2}}function gi(t,e,r,o){const n=t.x-e.x,i=t.y-e.y;return{x:e.x+n*r,y:e.y+i*o}}function di(t,e,r,o,n){return t.map(t=>t.map(t=>t.map(t=>function(t,e,r){const o=Math.cos(r),n=Math.sin(r),i=t.x-e.x,a=t.y-e.y;return{x:e.x+i*o-a*n,y:e.y+i*n+a*o}}(gi(t,e,r,o),e,n))))}function pi(t){if(0===t.length)return t;const e=t[0],r=t[t.length-1];return e.lat===r.lat&&e.lng===r.lng?t:[...t,{lat:e.lat,lng:e.lng}]}function fi(t){if(!Array.isArray(t))return[[t]];const e=t;return 0===e.length?[]:Array.isArray(e[0])?Array.isArray(e[0][0])?t:[t]:[[t]]}class yi{constructor(t,e,r="scale",o){var n,a;i(this,"map"),i(this,"polygon"),i(this,"overlay"),i(this,"state"),i(this,"normalizedLatLngs"),i(this,"wasMapDraggingEnabled",!1),i(this,"mode"),i(this,"onExit"),i(this,"rotateStartAngle",null),i(this,"rotateBaseRotation",0),i(this,"originalTouchAction",null),i(this,"mapDraggingHandler"),i(this,"onKeyDown",t=>{"Escape"===t.key&&this.handleCancel()}),i(this,"updateOverlay",()=>{const t=hi(this.state.originalPixelRings.map(t=>t.map(t=>t.map(t=>gi(t,this.state.pivot,this.state.scaleX,this.state.scaleY)))));this.overlay.update(t,this.state.pivot,this.state.rotation)}),this.map=t,this.mode=r,this.onExit=o;const l=e.getLayers().find(t=>t instanceof s.Polygon);if(!l)throw new Error("FeatureGroup does not contain a polygon");this.polygon=l;const c=this.polygon.getLatLngs();this.normalizedLatLngs=fi(c);const h=function(t,e){const r=[],o=[];for(const n of e){const e=[],i=[];for(const r of n){const o=r.map(e=>li(t,{lat:e.lat,lng:e.lng}));e.push(o),i.push(r.length)}r.push(e),o.push(i)}return{rings:r,ringLengths:o}}(this.map,this.normalizedLatLngs),u=ui(hi(h.rings));this.state={isActive:!0,originalLatLngs:c,originalPixelRings:h.rings,pivot:u,scaleX:1,scaleY:1,rotation:0,uniformScale:!1,snapRotation:!1,scaleFromPivot:!1},this.overlay=new si(this.map,{onStartHandleDrag:(t,e,r)=>this.onStartDrag(t,e,r),onDragHandle:(t,e)=>this.onDrag(t,e),onEndHandleDrag:()=>{}},this.mode,()=>this.handleCancel(),()=>this.handleConfirm()),this.updateOverlay(),this.map.on("zoom viewreset move",this.updateOverlay,this),this.mapDraggingHandler=this.map.dragging,this.mapDraggingHandler&&("function"==typeof this.mapDraggingHandler.enabled&&(this.wasMapDraggingEnabled=this.mapDraggingHandler.enabled()),null==(a=(n=this.mapDraggingHandler).disable)||a.call(n));const g=this.map.getContainer();this.originalTouchAction=g.style.touchAction||null,g.style.touchAction="none",document.addEventListener("keydown",this.onKeyDown)}destroy(){document.removeEventListener("keydown",this.onKeyDown),this.map.off("zoom viewreset move",this.updateOverlay,this),this.overlay.destroy(),this.state.isActive=!1,this.mapDraggingHandler&&this.wasMapDraggingEnabled&&"function"==typeof this.mapDraggingHandler.enable&&this.mapDraggingHandler.enable();const t=this.map.getContainer();null!==this.originalTouchAction?t.style.touchAction=this.originalTouchAction:t.style.touchAction=""}onStartDrag(t,e,r){const o=navigator.userAgent.toLowerCase().includes("mac")?r.metaKey:r.ctrlKey;if(this.state.uniformScale=!!r.shiftKey,this.state.scaleFromPivot=!!r.altKey,this.state.snapRotation=!!o,t===ai.Rotate){const t=this.state.scaleFromPivot?this.state.pivot:ui(hi(this.state.originalPixelRings)),r=Math.atan2(e.y-t.y,e.x-t.x);this.rotateStartAngle=r,this.rotateBaseRotation=this.state.rotation||0}}onDrag(t,e){const r=hi(this.state.originalPixelRings);switch(t){case ai.Rotate:{const t=this.state.scaleFromPivot?this.state.pivot:ui(r);this.handleRotateDrag(e,t);break}case ai.Pivot:this.handlePivotDrag(e);break;default:{const o=this.state.scaleFromPivot?this.state.pivot:ui(r);this.handleScaleDrag(t,e,r,o);break}}this.preview()}handleRotateDrag(t,e){if("rotate"!==this.mode)return;const r=Math.atan2(t.y-e.y,t.x-e.x);let o;if(null!=this.rotateStartAngle){const t=r-this.rotateStartAngle;o=this.rotateBaseRotation+t}else o=r;this.state.rotation=this.state.snapRotation?function(t,e=15){const r=e*Math.PI/180;return Math.round(t/r)*r}(o,15):o}handlePivotDrag(t){this.state.pivot=t}handleScaleDrag(t,e,r,o){if("scale"!==this.mode)return;const n=r.maxX-r.minX,i=r.maxY-r.minY;let a=this.state.scaleX,s=this.state.scaleY;switch(t){case ai.Left:case ai.TopLeft:case ai.BottomLeft:a=(o.x-e.x)/(o.x-r.minX||1);break;case ai.Right:case ai.TopRight:case ai.BottomRight:a=(e.x-o.x)/(r.maxX-o.x||1)}switch(t){case ai.Top:case ai.TopLeft:case ai.TopRight:s=(o.y-e.y)/(o.y-r.minY||1);break;case ai.Bottom:case ai.BottomLeft:case ai.BottomRight:s=(e.y-o.y)/(r.maxY-o.y||1)}if(t!==ai.Left&&t!==ai.Right||(s=this.state.scaleY),t!==ai.Top&&t!==ai.Bottom||(a=this.state.scaleX),this.state.uniformScale){const t=Math.abs(n)>Math.abs(i)?Math.sign(a)*Math.abs(a):Math.sign(s)*Math.abs(s);a=t,s=t}const l=Number.isFinite(a)&&Math.abs(a)>.001,c=Number.isFinite(s)&&Math.abs(s)>.001;l&&(this.state.scaleX=a),c&&(this.state.scaleY=s)}preview(){const t=di(this.state.originalPixelRings,this.state.pivot,this.state.scaleX,this.state.scaleY,this.state.rotation),e=function(t,e,r){const o=[];for(let n=0;n<e.length;n++){const i=[];for(let o=0;o<e[n].length;o++){const a=e[n][o].map(e=>ci(t,e)),s=r[n][o],l=s.length>2&&s[0].lat===s[s.length-1].lat&&s[0].lng===s[s.length-1].lng;i.push(l?pi(a):a)}o.push(i)}return o}(this.map,t,this.normalizedLatLngs);this.polygon.setLatLngs(e),this.updateOverlay()}apply(){return fi(this.polygon.getLatLngs())}cancel(){this.polygon.setLatLngs(this.state.originalLatLngs)}handleCancel(){this.cancel(),this.onExit&&this.onExit(!1),this.destroy()}handleConfirm(){this.onExit&&this.onExit(!0),this.destroy()}}class mi{static createMenuButton(t,e,r){const o=document.createElement("div");return o.classList.add("marker-menu-button",...r),o.title=e,o.setAttribute("data-action-id",t),o}static buildMenuPopup(t){const e=document.createElement("div");e.classList.add("alter-marker-outer-wrapper");const r=document.createElement("div");r.classList.add("alter-marker-wrapper");const o=document.createElement("button");o.type="button",o.className="marker-menu-close",o.setAttribute("aria-label","Close menu"),o.innerHTML="×",r.appendChild(o);const n=document.createElement("div");n.classList.add("content");const i=document.createElement("div");return i.classList.add("marker-menu-content"),t.forEach(t=>{i.appendChild(t)}),n.appendChild(i),r.appendChild(n),e.appendChild(r),e}static buildInfoPopup(t){const e=document.createElement("div");e.classList.add("info-marker-outer-wrapper");const r=document.createElement("div");r.classList.add("info-marker-wrapper");const o=document.createElement("div");return o.classList.add("content"),o.appendChild(t),r.appendChild(o),e.appendChild(r),e}}class vi{constructor(t,e){i(this,"markerFeatureGroupMap",new WeakMap),i(this,"polygonFeatureGroupMap",new WeakMap),i(this,"markerModifierHandlers",new WeakMap),i(this,"markerTouchListeners",new WeakMap),i(this,"markerEdgeDeletionListeners",new WeakMap),i(this,"_activeMarker",null),i(this,"isDraggingMarker",!1),i(this,"turfHelper"),i(this,"polygonInformation"),i(this,"map"),i(this,"config"),i(this,"modeManager"),i(this,"eventManager"),i(this,"saveHistoryState"),i(this,"layerManager"),i(this,"currentDragPolygon",null),i(this,"currentDragIsClone",!1),i(this,"currentModifierDragMode",!1),i(this,"isModifierKeyHeld",!1),i(this,"currentCloneGhost",null),i(this,"dragCancelHandlersAttached",!1),i(this,"_boundDragTouchMove",null),i(this,"_boundDragTouchEnd",null),i(this,"polygonTouchStartListeners",new WeakMap),i(this,"_openMenuPopup",null),i(this,"transformModeActive",!1),i(this,"transformControllers",new WeakMap),i(this,"deleteMarkerSuppressUntil",0),i(this,"onModeChange",()=>{(this.currentCloneGhost||this.isPolygonDragActive())&&this.cancelActivePolygonDrag()}),i(this,"getFeatureGroups"),i(this,"removeFeatureGroup"),i(this,"onPolygonMouseMove",t=>{if(!this.currentDragPolygon||!this.currentDragPolygon._polydrawDragData||!this.currentDragPolygon._polydrawDragData.isDragging)return;const e=this.currentDragPolygon,r=e._polydrawDragData;if(!this.currentDragIsClone){const e=t.originalEvent&&"metaKey"in t.originalEvent?t.originalEvent:t;this.detectDragSubtractModifierKey(e)!==this.currentModifierDragMode&&this.handleModifierToggleDuringDrag(e)}const o=r.startPosition,n=t.latlng,i=n.lat-o.lat,a=n.lng-o.lng,s=this.offsetPolygonCoordinates(r.startLatLngs,i,a);e.setLatLngs(s),this.updateMarkersAndHoleLinesDuringDrag(e,i,a)}),i(this,"onPolygonMouseUp",t=>{if(!this.currentDragPolygon||!this.currentDragPolygon._polydrawDragData||!this.currentDragPolygon._polydrawDragData.isDragging)return;const e=this.currentDragPolygon,r=e._polydrawDragData;r.isDragging=!1,this.map.off("mousemove",this.onPolygonMouseMove,this),this.map.off("mouseup",this.onPolygonMouseUp,this),this.map.off("pointermove",this.onPolygonMouseMove,this),this.map.off("pointerup",this.onPolygonMouseUp,this),this.map.dragging&&this.map.dragging.enable(),e._polydrawDragData&&null!=e._polydrawDragData.originalOpacity&&e.setStyle({fillOpacity:e._polydrawDragData.originalOpacity}),this.setMarkerVisibility(e,!0);try{this.map.getContainer().style.cursor=""}catch{}this.clearCloneGhost(),this.detachDragTouchListeners(),this.detachDragCancelHandlers();const o=this.currentDragIsClone;this.currentDragIsClone=!1,o?this.updatePolygonAfterCloneDrag(e,r):this.updatePolygonAfterDrag(e),e._polydrawOriginalMarkerPositions&&(e._polydrawOriginalMarkerPositions.clear(),delete e._polydrawOriginalMarkerPositions),e._polydrawOriginalHoleLinePositions&&(e._polydrawOriginalHoleLinePositions.clear(),delete e._polydrawOriginalHoleLinePositions),e._polydrawCurrentDragSession&&delete e._polydrawCurrentDragSession,this.currentDragPolygon=null}),i(this,"onPolygonDragCancel",()=>{this.cancelActivePolygonDrag()}),i(this,"onPolygonDragKeyDown",t=>{"Escape"===t.key&&this.cancelActivePolygonDrag()}),i(this,"onDragTouchMove",t=>{t.preventDefault();const e=ii.extractCoordinates(t,this.map);e&&this.onPolygonMouseMove({latlng:e})}),i(this,"onDragTouchEnd",t=>{t.preventDefault(),this.onPolygonMouseUp({latlng:null})}),i(this,"onMarkerHoverForEdgeDeletionEvent",t=>{if(!this.isModifierKeyHeld)return;const e=t.target;e&&(e.style.backgroundColor=this.config.styles.ui.edgeDeletion.color,e.style.borderColor=this.config.styles.ui.edgeDeletion.color,e.classList.add("edge-deletion-hover"))}),i(this,"onMarkerLeaveForEdgeDeletionEvent",t=>{const e=t.target;e&&(e.style.backgroundColor="",e.style.borderColor="",e.classList.remove("edge-deletion-hover"))}),this.turfHelper=t.turfHelper,this.polygonInformation=t.polygonInformation,this.map=t.map,this.config=t.config,this.modeManager=t.modeManager,this.eventManager=t.eventManager,this.saveHistoryState=t.saveHistoryState,this.layerManager=t.layerManager,this.getFeatureGroups=e.getFeatureGroups,this.removeFeatureGroup=e.removeFeatureGroup,this.eventManager.on("polydraw:mode:change",this.onModeChange)}emitPolygonUpdated(t){const e=this.getHistoryActionForOperation(t.operation);e&&this.saveHistoryState&&this.saveHistoryState(e),this.eventManager.emit("polydraw:polygon:updated",t)}getHistoryActionForOperation(t){switch(t){case"addVertex":case"removeVertex":case"removeHole":case"toggleOptimization":return t;case"modifierSubtract":case"modifierSubtractFallback":return"modifierSubtract";default:return null}}dispose(){this.eventManager.off("polydraw:mode:change",this.onModeChange),this.cancelActivePolygonDrag()}getTimestamp(){return"undefined"!=typeof performance&&"function"==typeof performance.now?performance.now():Date.now()}shouldSuppressDeleteMarkerClick(){return this.getTimestamp()<this.deleteMarkerSuppressUntil}suppressDeleteMarkerClicks(t){this.deleteMarkerSuppressUntil=this.getTimestamp()+Math.max(0,t)}addMarkers(t,e,r={}){this.registerPolygonLayerMappings(e);let o=this.getMarkerIndex(t,this.config.markers.markerMenuIcon.position),n=this.getMarkerIndex(t,this.config.markers.markerDeleteIcon.position),i=this.getMarkerIndex(t,this.config.markers.markerInfoIcon.position);const a=this.ensureMarkerSeparation(t.length,{menu:{index:o,enabled:this.config.markers.menuMarker},delete:{index:n,enabled:this.config.markers.deleteMarker},info:{index:i,enabled:this.config.markers.infoMarker}});o=a.menu,n=a.delete,i=a.info;const l=r.optimizationLevel??0,c=this.deriveImportantMarkerIndices(t,{menuIndex:o,deleteIndex:n,infoIndex:i,optimizationLevel:l}),h=t.length>2&&this.latLngEquals(t[0],t[t.length-1]);t.forEach((r,a)=>{let u=this.config.markers.markerIcon.styleClasses;a===o&&this.config.markers.menuMarker&&(u=this.config.markers.markerMenuIcon.styleClasses),a===n&&this.config.markers.deleteMarker&&(u=this.config.markers.markerDeleteIcon.styleClasses),a===i&&this.config.markers.infoMarker&&(u=this.config.markers.markerInfoIcon.styleClasses);const g=Array.isArray(u)?u:[u],d=a===o&&this.config.markers.menuMarker||a===n&&this.config.markers.deleteMarker||a===i&&this.config.markers.infoMarker,p=this.normalizeMarkerIndex(a,t.length,h),f=[...g];l<=0||null===p||c.has(p)||d||f.push("polygon-marker-faded");const y=new s.Marker(r,{icon:this.createDivIcon(f),draggable:this.config.modes.dragElbow,title:this.config.markers.coordsTitle?this.getLatLngInfoString(r):"",zIndexOffset:this.config.markers.markerIcon.zIndexOffset??this.config.markers.zIndexOffset});e.addLayer(y),this.markerFeatureGroupMap.set(y,e),y.on("add",()=>{const t=y.getElement();t&&(t.style.pointerEvents="auto")}),y.on("click",t=>{var e,r;this.isDraggingMarker&&(null==(r=null==(e=t.originalEvent)?void 0:e.stopPropagation)||r.call(e),s.DomEvent.stopPropagation(t))}),y.on("dragstart",()=>{const t=this.markerFeatureGroupMap.get(y);!t||this.isFeatureGroupInActiveLayer(t)?(this.saveHistoryState&&this.saveHistoryState("markerDrag"),this.isDraggingMarker=!0,this._activeMarker=y):y.dragging&&y.dragging.disable()}),y.on("dragend",t=>{const e=this.markerFeatureGroupMap.get(y);if(e&&!this.isFeatureGroupInActiveLayer(e))return this._activeMarker=null,void(this.isDraggingMarker=!1);this.modeManager.canPerformAction("markerDrag")&&e&&this.markerDragEnd(e),this._activeMarker=null,s.DomEvent.stopPropagation(t),setTimeout(()=>{this.isDraggingMarker=!1},10)});const m=y.getElement();if(m){const t=t=>{t.stopPropagation()},e=t=>{if(t.preventDefault(),t.stopPropagation(),y.fire("click"),this.isDraggingMarker&&!d){const t=this.markerFeatureGroupMap.get(y);this.modeManager.canPerformAction("markerDrag")&&t&&this.isFeatureGroupInActiveLayer(t)&&this.markerDragEnd(t)}this._activeMarker=null};m.addEventListener("touchstart",t,{passive:!0}),m.addEventListener("touchend",e),this.markerTouchListeners.set(y,{touchstart:t,touchend:e})}if(a===o||a===n||a===i){const t=y.getElement();t&&(t.style.zIndex="10000")}if(this.config.modes.dragElbow){const t=t=>()=>{this.modeManager.canPerformAction("markerDrag")&&this.isFeatureGroupInActiveLayer(t)&&this.markerDrag(t)};y.on("drag",t(e))}if(a===o&&this.config.markers.menuMarker&&(y.options.zIndexOffset=this.config.markers.markerMenuIcon.zIndexOffset??this.config.markers.zIndexOffset,y.on("click",()=>{if(!this.isFeatureGroupInActiveLayer(e))return;const r=this.getPolygonGeoJSONFromFeatureGroup(e),n=Wn.getCenterOfPolygonByIndexWithOffsetFromCenterOfMass(r,o);this.generateMenuMarkerPopup(t,e).setLatLng(n).openOn(this.map)}),y.on("popupopen",t=>{const e=t.popup.getElement();if(!e)return;setTimeout(()=>{const t=this.map.getContainer(),r=e.getBoundingClientRect(),o=t.getBoundingClientRect();let n=0,i=0;r.left<o.left?n=o.left-r.left:r.right>o.right&&(n=o.right-r.right),r.top<o.top?i=o.top-r.top:r.bottom>o.bottom&&(i=o.bottom-r.bottom),0===n&&0===i||(e.style.transform=`translate(${n}px, ${i}px)`)},0);const r=this.map.getContainer();r&&(r.style.touchAction="manipulation")}),y.on("popupclose",()=>{const t=this.map.getContainer();t&&(t.style.touchAction="")})),a===i&&this.config.markers.infoMarker){const t=this.getPolygonGeoJSONFromFeatureGroup(e),r=this.turfHelper.getPolygonArea(t),o=this.getTotalPolygonPerimeter(t);y.options.zIndexOffset=this.config.markers.markerInfoIcon.zIndexOffset??this.config.markers.zIndexOffset,y.on("click",()=>{if(!this.isFeatureGroupInActiveLayer(e))return;const n=this.generateInfoMarkerPopup(r,o),a=Wn.getCenterOfPolygonByIndexWithOffsetFromCenterOfMass(t,i);n.setLatLng(a).openOn(this.map)}),y.on("popupopen",t=>{const e=t.popup.getElement();if(!e)return;setTimeout(()=>{const t=this.map.getContainer().getBoundingClientRect(),r=e.getBoundingClientRect();r.left<t.left?e.style.transform=`translateX(${t.left-r.left}px)`:r.right>t.right&&(e.style.transform=`translateX(${t.right-r.right}px)`)},0);const r=this.map.getContainer();r&&(r.style.touchAction="manipulation")}),y.on("popupclose",()=>{const t=this.map.getContainer();t&&(t.style.touchAction="")})}y.on("mousedown",t=>{this.modeManager.isInOffMode()||(s.DomEvent.stopPropagation(t),this.map.fire("mousedown",t)),this._activeMarker=y}),y.on("click",t=>{var r,o;if(this.isFeatureGroupInActiveLayer(e)&&this.modeManager.isInOffMode())if(this.isEdgeDeletionModifierKeyPressed(t.originalEvent)){const r=e.getLayers().find(t=>t instanceof s.Polygon);r&&this.elbowClicked(t,r,y.getLatLng())}else if(a===n&&this.config.markers.deleteMarker){if(this.shouldSuppressDeleteMarkerClick()){const e=t.originalEvent;return null==(r=null==e?void 0:e.preventDefault)||r.call(e),void(null==(o=null==e?void 0:e.stopPropagation)||o.call(e))}this.map.closePopup(),this.saveHistoryState&&this.saveHistoryState("deletePolygon"),this.cleanupFeatureGroup(e),this.removeFeatureGroup(e),this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups()),this.eventManager.emit("polydraw:polygon:deleted",void 0)}}),y.on("mouseover",()=>{this.isFeatureGroupInActiveLayer(e)&&this.onMarkerHoverForEdgeDeletion(y,!0)}),y.on("mouseout",()=>{this.onMarkerHoverForEdgeDeletion(y,!1)})});const u=this.map.getContainer();u&&(u.style.touchAction="manipulation")}addHoleMarkers(t,e){var r,o,n;this.registerPolygonLayerMappings(e);const i=(null==(r=this.config.markers.holeMarkers)?void 0:r.menuMarker)??!1,a=(null==(o=this.config.markers.holeMarkers)?void 0:o.deleteMarker)??!1,l=(null==(n=this.config.markers.holeMarkers)?void 0:n.infoMarker)??!1;let c=this.getMarkerIndex(t,this.config.markers.markerMenuIcon.position),h=this.getMarkerIndex(t,this.config.markers.markerDeleteIcon.position),u=this.getMarkerIndex(t,this.config.markers.markerInfoIcon.position);const g=this.ensureMarkerSeparation(t.length,{menu:{index:c,enabled:i},delete:{index:h,enabled:a},info:{index:u,enabled:l}});c=g.menu,h=g.delete,u=g.info,t.forEach((r,o)=>{let n=this.config.markers.holeIcon.styleClasses;o===c&&i&&(n=this.config.markers.markerMenuIcon.styleClasses),o===h&&a&&(n=this.config.markers.markerDeleteIcon.styleClasses),o===u&&l&&(n=this.config.markers.markerInfoIcon.styleClasses);const g=Array.isArray(n)?n:[n],d=o===c&&i||o===h&&a||o===u&&l,p=new s.Marker(r,{icon:this.createDivIcon(g),draggable:this.config.modes.dragElbow,title:this.config.markers.coordsTitle?this.getLatLngInfoString(r):"",zIndexOffset:this.config.markers.holeIcon.zIndexOffset??this.config.markers.zIndexOffset});e.addLayer(p),this.markerFeatureGroupMap.set(p,e),p.on("add",()=>{const t=p.getElement();t&&(t.style.pointerEvents="auto")}),p.on("click",t=>{var e,r;this.isDraggingMarker&&(null==(r=null==(e=t.originalEvent)?void 0:e.stopPropagation)||r.call(e),s.DomEvent.stopPropagation(t))}),p.on("dragstart",()=>{const t=this.markerFeatureGroupMap.get(p);!t||this.isFeatureGroupInActiveLayer(t)?(this.saveHistoryState&&this.saveHistoryState("markerDrag"),this.isDraggingMarker=!0,this._activeMarker=p):p.dragging&&p.dragging.disable()}),p.on("dragend",t=>{const e=this.markerFeatureGroupMap.get(p);if(e&&!this.isFeatureGroupInActiveLayer(e))return this._activeMarker=null,void(this.isDraggingMarker=!1);this.modeManager.canPerformAction("markerDrag")&&e&&this.markerDragEnd(e),this._activeMarker=null,s.DomEvent.stopPropagation(t),setTimeout(()=>{this.isDraggingMarker=!1},10)});const f=p.getElement();if(f){const t=t=>{t.stopPropagation()},e=t=>{if(t.preventDefault(),t.stopPropagation(),p.fire("click"),this.isDraggingMarker&&!d){const t=this.markerFeatureGroupMap.get(p);this.modeManager.canPerformAction("markerDrag")&&t&&this.isFeatureGroupInActiveLayer(t)&&this.markerDragEnd(t)}this._activeMarker=null};f.addEventListener("touchstart",t,{passive:!0}),f.addEventListener("touchend",e),this.markerTouchListeners.set(p,{touchstart:t,touchend:e})}if(o===c||o===h||o===u){const t=p.getElement();t&&(t.style.zIndex="10000")}if(this.config.modes.dragElbow){const t=t=>()=>{this.modeManager.canPerformAction("markerDrag")&&this.isFeatureGroupInActiveLayer(t)&&this.markerDrag(t)};p.on("drag",t(e))}if(o===c&&i&&(p.options.zIndexOffset=this.config.markers.markerMenuIcon.zIndexOffset??this.config.markers.zIndexOffset,p.on("click",()=>{const r=t.map(t=>[t.lng,t.lat]);r.push(r[0]);const o={type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[r]}},n=Wn.getCenterOfMass(o);this.generateMenuMarkerPopup(t,e).setLatLng(n).openOn(this.map)}),p.on("popupopen",t=>{const e=t.popup.getElement();if(!e)return;setTimeout(()=>{const t=this.map.getContainer().getBoundingClientRect(),r=e.getBoundingClientRect();r.left<t.left?e.style.transform=`translateX(${t.left-r.left}px)`:r.right>t.right&&(e.style.transform=`translateX(${t.right-r.right}px)`)},0);const r=this.map.getContainer();r&&(r.style.touchAction="manipulation")}),p.on("popupclose",()=>{const t=this.map.getContainer();t&&(t.style.touchAction="")})),o===u&&l){const o=t.map(t=>[t.lng,t.lat]);o.push(o[0]);const n={type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[o]}},i=this.turfHelper.getPolygonArea(n),a=1e3*this.turfHelper.getPolygonPerimeter(n);p.options.zIndexOffset=this.config.markers.markerInfoIcon.zIndexOffset??this.config.markers.zIndexOffset,p.on("click",()=>{if(!this.isFeatureGroupInActiveLayer(e))return;this.generateInfoMarkerPopup(i,a).setLatLng(r).openOn(this.map)})}p.on("mousedown",t=>{this.modeManager.isInOffMode()||(s.DomEvent.stopPropagation(t),this.map.fire("mousedown",t)),this._activeMarker=p}),p.on("click",t=>{if(this.isFeatureGroupInActiveLayer(e)&&this.modeManager.isInOffMode())if(this.isEdgeDeletionModifierKeyPressed(t.originalEvent)){const r=e.getLayers().find(t=>t instanceof s.Polygon);r&&this.elbowClicked(t,r,p.getLatLng())}else if(o===h&&a){this.map.closePopup();const t=e.getLayers().find(t=>t instanceof s.Polygon);if(t){const r=t.getLatLngs();let o=[];if(Array.isArray(r)&&r.length>0)if(Array.isArray(r[0])){const t=r[0];o=Array.isArray(t)&&Array.isArray(t[0])?r[0]:r}else o=[r];const n=p.getLatLng();let i=-1;for(let t=1;t<o.length;t++)if(o[t].some(t=>t.lat===n.lat&&t.lng===n.lng)){i=t;break}if(i>0){const t=o.filter((t,e)=>e!==i).map(t=>{const e=t.map(t=>[t.lng,t.lat]);if(e.length>0){const t=e[0],r=e[e.length-1];t[0]===r[0]&&t[1]===r[1]||e.push([t[0],t[1]])}return e}),{level:r,original:n}=this.getOptimizationMetadataFromFeatureGroup(e),a=this.getFeatureMetadataState(e),s=this.turfHelper.getMultiPolygon([t]);this.cleanupFeatureGroup(e),this.removeFeatureGroup(e),this.emitPolygonUpdated({operation:"removeHole",polygon:s,optimizationLevel:r,originalOptimizationLevel:n,featureId:a.featureId,featureMetadata:a.metadata,sourceFeatureIds:a.sourceFeatureIds,featureInteractionOverride:a.interactionOverride,featureStyleOverrides:a.styleOverrides,featureCreatedAt:a.createdAt})}}}}),p.on("mouseover",()=>{this.isFeatureGroupInActiveLayer(e)&&this.onMarkerHoverForEdgeDeletion(p,!0)}),p.on("mouseout",()=>{this.onMarkerHoverForEdgeDeletion(p,!1)})})}addEdgeClickListeners(t,e){const r=t.getLatLngs();let o;if(Array.isArray(r)&&r.length>0){if(Array.isArray(r[0]))if(Array.isArray(r[0][0])&&r[0][0].length>0){r[0][0][0];o=r[0]}else o=r[0][0]&&"object"==typeof r[0][0]&&"lat"in r[0][0]?r:r[0];else o=(r[0]&&"object"==typeof r[0]&&r[0],[r]);o.forEach((r,o)=>{for(let n=0;n<r.length;n++){const i=r[n],a=r[(n+1)%r.length];if(i.lat===a.lat&&i.lng===a.lng)continue;const s=Yn.createPolyline([i,a],{color:"transparent",weight:10,opacity:0,interactive:!0});s._polydrawEdgeInfo={ringIndex:o,edgeIndex:n,startPoint:i,endPoint:a,parentPolygon:t,parentFeatureGroup:e},s.on("click",t=>{this.onEdgeClick(t,s)}),s.on("mouseover",()=>{this.highlightEdgeOnHover(s,!0)}),s.on("mouseout",()=>{this.highlightEdgeOnHover(s,!1)}),e.addLayer(s)}})}}isPolygonDragModeActive(){const t=this.modeManager.getCurrentMode();return t===c.Off||t===c.Clone}isPolygonDragActive(){return!!(this.currentDragPolygon&&this.currentDragPolygon._polydrawDragData&&this.currentDragPolygon._polydrawDragData.isDragging)}isPolygonInActiveLayer(t){if(!this.layerManager)return!0;const e=this.polygonFeatureGroupMap.get(t);if(e)return this.layerManager.isInActiveLayer(e)&&this.layerManager.isFeatureGroupEditable(e);const r=this.findFeatureGroupForPolygon(t);return!r||(this.polygonFeatureGroupMap.set(t,r),this.layerManager.isInActiveLayer(r)&&this.layerManager.isFeatureGroupEditable(r))}isFeatureGroupInActiveLayer(t){return!this.layerManager||this.layerManager.isInActiveLayer(t)&&this.layerManager.isFeatureGroupEditable(t)}enablePolygonDragging(t,e){if(this.config.modes.dragPolygons||this.config.tools.clone){if(t._polydrawOriginalLatLngs=e,t._polydrawDragData={isDragging:!1,startPosition:null,startLatLngs:null,originalOpacity:t.options.fillOpacity},t.on("mousedown",e=>{if(this.transformModeActive)return;if(!this.isPolygonInActiveLayer(t))return;if(!this.isPolygonDragModeActive())return s.DomEvent.stopPropagation(e),void this.map.fire("mousedown",e);if(!this.modeManager.canPerformAction("polygonDrag"))return;s.DomEvent.stopPropagation(e.originalEvent),s.DomEvent.preventDefault(e.originalEvent);const r=this.modeManager.getCurrentMode()===c.Clone,o=!r&&this.detectDragSubtractModifierKey(e.originalEvent);this.currentDragIsClone=r,this.currentModifierDragMode=o,this.isModifierKeyHeld=o,this.saveHistoryState&&this.saveHistoryState(r?"polygonClone":"polygonDrag"),t._polydrawDragData.isDragging=!0,t._polydrawDragData.startPosition=e.latlng,t._polydrawDragData.startLatLngs=t.getLatLngs(),t.setStyle({fillOpacity:this.config.interaction.drag.opacity}),r?this.showCloneGhost(t._polydrawDragData.startLatLngs):this.clearCloneGhost(),this.map.dragging&&this.map.dragging.disable(),this.setSubtractVisualMode(t,o),this.setMarkerVisibility(t,!1);try{this.map.getContainer().style.cursor=this.config.interaction.drag.dragCursor||"move"}catch{}this.map.on("mousemove",this.onPolygonMouseMove,this),this.map.on("mouseup",this.onPolygonMouseUp,this),this.map.on("pointermove",this.onPolygonMouseMove,this),this.map.on("pointerup",this.onPolygonMouseUp,this),this.attachDragCancelHandlers(),this.currentDragPolygon=t}),t.on("pointerdown",e=>{const r=e;if(this.transformModeActive)return;if(!this.isPolygonInActiveLayer(t))return;if(!this.isPolygonDragModeActive()){const t=r.originalEvent??r;return s.DomEvent.stopPropagation(t),void this.map.fire("pointerdown",r)}if(!this.modeManager.canPerformAction("polygonDrag"))return;const o=r.originalEvent??r;s.DomEvent.stopPropagation(o),s.DomEvent.preventDefault(o);const n=this.modeManager.getCurrentMode()===c.Clone,i=!n&&this.detectDragSubtractModifierKey(o);this.currentDragIsClone=n,this.currentModifierDragMode=i,this.isModifierKeyHeld=i,this.saveHistoryState&&this.saveHistoryState(n?"polygonClone":"polygonDrag"),t._polydrawDragData.isDragging=!0,t._polydrawDragData.startPosition=r.latlng,t._polydrawDragData.startLatLngs=t.getLatLngs(),t.setStyle({fillOpacity:this.config.interaction.drag.opacity}),n?this.showCloneGhost(t._polydrawDragData.startLatLngs):this.clearCloneGhost(),this.map.dragging&&this.map.dragging.disable(),this.setSubtractVisualMode(t,i),this.setMarkerVisibility(t,!1);try{this.map.getContainer().style.cursor=this.config.interaction.drag.dragCursor||"move"}catch{}this.map.on("mousemove",this.onPolygonMouseMove,this),this.map.on("mouseup",this.onPolygonMouseUp,this),this.map.on("pointermove",this.onPolygonMouseMove,this),this.map.on("pointerup",this.onPolygonMouseUp,this),this.attachDragCancelHandlers(),this.currentDragPolygon=t}),Xn.isV1()){const e=e=>{if(this.transformModeActive)return;if(!this.isPolygonInActiveLayer(t))return;if(!this.isPolygonDragModeActive())return;if(!this.modeManager.canPerformAction("polygonDrag"))return;e.stopPropagation(),e.preventDefault();const r=ii.extractCoordinates(e,this.map);if(!r)return;const o=this.modeManager.getCurrentMode()===c.Clone;this.currentDragIsClone=o,this.currentModifierDragMode=!1,this.isModifierKeyHeld=!1,this.saveHistoryState&&this.saveHistoryState(o?"polygonClone":"polygonDrag"),t._polydrawDragData.isDragging=!0,t._polydrawDragData.startPosition=r,t._polydrawDragData.startLatLngs=t.getLatLngs(),t.setStyle({fillOpacity:this.config.interaction.drag.opacity}),o?this.showCloneGhost(t._polydrawDragData.startLatLngs):this.clearCloneGhost(),this.map.dragging&&this.map.dragging.disable(),this.setSubtractVisualMode(t,!1),this.setMarkerVisibility(t,!1);try{this.map.getContainer().style.cursor=this.config.interaction.drag.dragCursor||"move"}catch{}this.map.on("mousemove",this.onPolygonMouseMove,this),this.map.on("mouseup",this.onPolygonMouseUp,this),this.attachDragTouchListeners(),this.attachDragCancelHandlers(),this.currentDragPolygon=t};this.polygonTouchStartListeners.set(t,e);const r=()=>{const r=t._path;r&&r.addEventListener("touchstart",e,{passive:!1})};t._path?r():t.once("add",r)}t.on("mouseover",()=>{if(this.isPolygonInActiveLayer(t)&&(!t._polydrawDragData||!t._polydrawDragData.isDragging))try{this.map.getContainer().style.cursor=this.config.interaction.drag.hoverCursor||"grab"}catch{}}),t.on("mouseout",()=>{if(!t._polydrawDragData||!t._polydrawDragData.isDragging)try{this.map.getContainer().style.cursor=""}catch{}})}}updateMarkerDraggableState(){const t=this.modeManager.canPerformAction("markerDrag");this.getFeatureGroups().forEach(e=>{const r=this.isFeatureGroupInActiveLayer(e),o=t&&r;e.eachLayer(t=>{if(t instanceof s.Marker){const e=t;try{e.options.draggable=o,e.dragging&&(o?e.dragging.enable():e.dragging.disable())}catch{}}})})}updateAllMarkersForEdgeDeletion(t){this.getFeatureGroups().forEach(e=>{e.eachLayer(e=>{e instanceof s.Marker&&this.updateMarkerForEdgeDeletion(e,t)})})}updateMarkerForEdgeDeletion(t,e){const r=t.getElement();r&&(e?(r.addEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),r.addEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent),this.markerEdgeDeletionListeners.set(t,{mouseenter:this.onMarkerHoverForEdgeDeletionEvent,mouseleave:this.onMarkerLeaveForEdgeDeletionEvent})):(r.removeEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),r.removeEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent),r.style.backgroundColor="",r.style.borderColor="",this.markerEdgeDeletionListeners.delete(t)))}setModifierKeyHeld(t){this.isModifierKeyHeld=t}cleanupMarker(t){const e=t.getElement(),r=this.markerModifierHandlers.get(t);r&&(document.removeEventListener("keydown",r),document.removeEventListener("keyup",r),e&&e.removeEventListener("mousemove",r),this.markerModifierHandlers.delete(t));const o=this.markerTouchListeners.get(t);o&&(e&&(e.removeEventListener("touchstart",o.touchstart),e.removeEventListener("touchend",o.touchend)),this.markerTouchListeners.delete(t));const n=this.markerEdgeDeletionListeners.get(t);n&&(e&&(e.removeEventListener("mouseenter",n.mouseenter),e.removeEventListener("mouseleave",n.mouseleave)),this.markerEdgeDeletionListeners.delete(t)),this.markerFeatureGroupMap.delete(t)}cleanupFeatureGroup(t){t.eachLayer(t=>{t instanceof s.Marker?this.cleanupMarker(t):t instanceof s.Polygon&&(this.detachPolygonTouchStart(t),this.polygonFeatureGroupMap.delete(t))}),this.destroyTransformController(t)}destroyTransformController(t){const e=this.transformControllers.get(t);e&&(e.destroy(),this.transformControllers.delete(t),this.transformModeActive=!1)}onEdgeClick(t,e){if(!this.config.modes.attachElbow)return;if(!this.modeManager.isInOffMode())return;const r=e._polydrawEdgeInfo;if(!r)return;if(r.parentFeatureGroup&&!this.isFeatureGroupInActiveLayer(r.parentFeatureGroup))return;const o=t.latlng,n=r.parentPolygon,i=r.parentFeatureGroup;if(n&&i)try{if("function"!=typeof n.toGeoJSON)return;const t=n.toGeoJSON();if("MultiPolygon"===t.geometry.type||"Polygon"===t.geometry.type){const e=this.turfHelper.injectPointToPolygon(t,[o.lng,o.lat],r.ringIndex);if(e){const t=n,r=t._polydrawOptimizationLevel||0,o=t._polydrawOptimizationOriginalLevel||r,a=this.getFeatureMetadataState(i);this.cleanupFeatureGroup(i),this.removeFeatureGroup(i),this.emitPolygonUpdated({operation:"addVertex",polygon:e,optimizationLevel:r,originalOptimizationLevel:o,featureId:a.featureId,featureMetadata:a.metadata,sourceFeatureIds:a.sourceFeatureIds,featureInteractionOverride:a.interactionOverride,featureStyleOverrides:a.styleOverrides,featureCreatedAt:a.createdAt})}}}catch{}s.DomEvent.stopPropagation(t)}highlightEdgeOnHover(t,e){e?t.setStyle({color:this.config.styles.ui.edgeHover.color,weight:4,opacity:1}):t.setStyle({color:"transparent",weight:10,opacity:0})}deriveImportantMarkerIndices(t,e){const r=new Set;if(!t||0===t.length)return r;const o=Math.min(Math.max(e.optimizationLevel??0,0),10),n=t.length>2&&this.latLngEquals(t[0],t[t.length-1]),i=n?t.slice(0,-1):[...t],a=i.length,s=e=>{if(null==e||e<0)return;let o=e;n&&e===t.length-1&&(o=0),o>=a&&(o=a>0?o%a:0),o>=0&&o<a&&r.add(o)};if(s(0),s(e.menuIndex),s(e.deleteIndex),s(e.infoIndex),0===a||o<=0||a<=3){for(let t=0;t<a;t++)r.add(t);return r}const l=this.getToleranceForOptimizationLevel(o);let c=l>0?this.turfHelper.simplifyLatLngRing(i,l,!0):[...i];if(c.length>1&&this.latLngEquals(c[0],c[c.length-1])&&(c=c.slice(0,-1)),!c||0===c.length){for(let t=0;t<a;t++)r.add(t);return r}if(c.forEach(t=>{const e=this.findClosestVertexIndex(t,i);null!==e&&r.add(e)}),0===r.size)for(let h=0;h<a;h++)r.add(h);return r}normalizeMarkerIndex(t,e,r){if(null==t||t<0)return null;if(r){const r=Math.max(1,e-1);return t===e-1?0:t>=r?t%r:t}return t>=e?e>0?e-1:null:t}latLngEquals(t,e){return!(!t||!e)&&(Math.abs(t.lat-e.lat)<1e-9&&Math.abs(t.lng-e.lng)<1e-9)}isLatLngLiteral(t){return!!t&&"object"==typeof t&&"lat"in t&&"lng"in t&&"number"==typeof t.lat&&"number"==typeof t.lng}getOrderedMarkers(t){const e=[];return t.eachLayer(t=>{t instanceof s.Marker&&e.push(t)}),e.sort((t,e)=>Yn.util.stamp(t)-Yn.util.stamp(e))}countLatLngNodes(t){return Array.isArray(t)?0===t.length?0:this.isLatLngLiteral(t[0])?t.length:t.reduce((t,e)=>t+this.countLatLngNodes(e),0):0}rebuildLatLngStructure(t,e,r){if(!Array.isArray(t))return t;if(t.length>0&&this.isLatLngLiteral(t[0])){const o=t,n=o.length>1&&this.latLngEquals(o[0],o[o.length-1]),i=o.map((t,n)=>{const i=e[r.value]??o[n];return r.value+=1,Yn.createLatLng(i.lat,i.lng)});return n&&i.length>1&&(i[i.length-1]=i[0]),i}return t.map(t=>this.rebuildLatLngStructure(t,e,r))}getOptimizationMetadataFromFeatureGroup(t){let e=0,r=0;return t.eachLayer(t=>{if(t instanceof s.Polygon){const o=t;"number"==typeof o._polydrawOptimizationLevel&&(e=o._polydrawOptimizationLevel||0),"number"==typeof o._polydrawOptimizationOriginalLevel&&(r=o._polydrawOptimizationOriginalLevel||0)}}),!r&&e>0&&(r=e),{level:e,original:r}}getFeatureMetadataState(t){if(!t)return{};const e=t._polydrawMetadata,r=(null==e?void 0:e.createdAt)instanceof Date&&!Number.isNaN(e.createdAt.getTime())?e.createdAt.toISOString():void 0;return{featureId:null==e?void 0:e.id,metadata:(null==e?void 0:e.metadata)?{...e.metadata}:void 0,sourceFeatureIds:Array.isArray(null==e?void 0:e.sourceFeatureIds)?[...e.sourceFeatureIds]:(null==e?void 0:e.id)?[e.id]:void 0,interactionOverride:null==e?void 0:e.interactionOverride,styleOverrides:(null==e?void 0:e.styleOverrides)?{...e.styleOverrides}:void 0,createdAt:r}}getOptimizationMetadataFromPolygonLayer(t){if(!t)return{level:0,original:0};const e=t,r=e._polydrawOptimizationLevel||0;return{level:r,original:e._polydrawOptimizationOriginalLevel||(r>0?r:0)}}getDistanceMeters(t,e){try{const r=Yn.createLatLng(t.lat,t.lng),o=Yn.createLatLng(e.lat,e.lng);if("function"==typeof r.distanceTo)return r.distanceTo(o)}catch{}const r=t=>t*Math.PI/180,o=r(e.lat-t.lat),n=r(e.lng-t.lng),i=r(t.lat),a=r(e.lat),s=Math.sin(o/2)*Math.sin(o/2)+Math.sin(n/2)*Math.sin(n/2)*Math.cos(i)*Math.cos(a);return 6371e3*(2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)))}findClosestVertexIndex(t,e){if(!e||0===e.length)return null;let r=0,o=Number.POSITIVE_INFINITY;for(let n=0;n<e.length;n++){const i=this.getDistanceMeters(t,e[n]);if(i<o&&(o=i,r=n,0===i))break}return r}getToleranceForOptimizationLevel(t){const e=Math.min(Math.max(t,0),10)/10,r=this.config.markers.visualOptimization??{},o=Math.max(r.toleranceMin??5e-6,0),n=Math.max(r.toleranceMax??.005,o),i=r.curve??1.35;return o+(n-o)*Math.pow(e,i)}elbowClicked(t,e,r){if(!this.config.modes.edgeDeletion)return;if(!this.isEdgeDeletionModifierKeyPressed(t.originalEvent))return;const o=r??t.latlng,n=e.getLatLngs();let i=[];if(!(Array.isArray(n)&&n.length>0))return;if(Array.isArray(n[0])){const t=n[0];i=Array.isArray(t)&&Array.isArray(t[0])?n[0]:n}else i=[n];let a=-1,s=-1;for(let f=0;f<i.length;f++){const t=i[f];for(let e=0;e<t.length;e++){const r=t[e];if(r.lat===o.lat&&r.lng===o.lng){a=f,s=e;break}}if(-1!==a)break}if(-1===a||-1===s)return;if(i[a].length<=this.config.interaction.edgeDeletion.minVertices)return;const l=i.map((t,e)=>{if(e!==a)return t.slice();const r=t.slice();return r.splice(s,1),r}).map(t=>{const e=t.map(t=>[t.lng,t.lat]);if(e.length>0){const t=e[0],r=e[e.length-1];t[0]===r[0]&&t[1]===r[1]||e.push([t[0],t[1]])}return e});let c=null;for(const f of this.getFeatureGroups()){let t=!1;if(f.eachLayer(r=>{r===e&&(t=!0)}),t){c=f;break}}const h=c?this.getOptimizationMetadataFromFeatureGroup(c):this.getOptimizationMetadataFromPolygonLayer(e),u=this.getFeatureMetadataState(c??void 0),{level:g,original:d}=h;c&&this.removeFeatureGroup(c);const p=this.turfHelper.getMultiPolygon([l]);this.emitPolygonUpdated({operation:"removeVertex",polygon:p,optimizationLevel:g,originalOptimizationLevel:d,featureId:u.featureId,featureMetadata:u.metadata,sourceFeatureIds:u.sourceFeatureIds,featureInteractionOverride:u.interactionOverride,featureStyleOverrides:u.styleOverrides,featureCreatedAt:u.createdAt})}markerDrag(t){if(!this._activeMarker)return void(_n()||console.warn("No active marker set for dragging."));const e=t.getLayers().find(t=>t instanceof s.Polygon);if(!e)return void(_n()||console.warn("No polygon found in feature group for marker drag."));const r=this.getOrderedMarkers(t);if(0===r.length)return;const o=r.map(t=>t.getLatLng()),n=this.countLatLngNodes(e.getLatLngs());if(o.length<n)return void(_n()||console.warn("Not enough markers to rebuild polygon during drag. Expected:",n,"got:",o.length));const i=this.rebuildLatLngStructure(e.getLatLngs(),o,{value:0});e.setLatLngs(i)}async markerDragEnd(t){this.polygonInformation.deletePolygonInformationStorage();const e=t.toGeoJSON();if(!e.features||0===e.features.length)return;const{level:r,original:o}=this.getOptimizationMetadataFromFeatureGroup(t),n=this.getFeatureMetadataState(t);this.cleanupFeatureGroup(t),this.removeFeatureGroup(t);const i=(t,e,r)=>{const o=this.turfHelper.removeDuplicateVertices(t),i=[];if(!this.config.kinks)try{const t=this.turfHelper.getKinks(o);t&&t.length>0&&i.push(...t)}catch{}0===i.length&&("MultiPolygon"===o.geometry.type?o.geometry.coordinates.forEach(t=>i.push(this.turfHelper.getMultiPolygon([t]))):i.push(o)),i.forEach(t=>{this.emitPolygonUpdated({operation:"markerDrag",polygon:t,allowMerge:e,optimizationLevel:r.optimizationLevel,originalOptimizationLevel:r.originalOptimizationLevel,featureId:n.featureId,featureMetadata:n.metadata,sourceFeatureIds:n.sourceFeatureIds,featureInteractionOverride:n.interactionOverride,featureStyleOverrides:n.styleOverrides,featureCreatedAt:n.createdAt})})};if("MultiPolygon"===e.features[0].geometry.type)for(const a of e.features[0].geometry.coordinates){i(this.turfHelper.getMultiPolygon([a]),!0,{optimizationLevel:r,originalOptimizationLevel:o})}else{i(this.turfHelper.getMultiPolygon([e.features[0].geometry.coordinates]),!1,{optimizationLevel:r,originalOptimizationLevel:o})}this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}attachDragTouchListeners(){this.detachDragTouchListeners(),this._boundDragTouchMove=this.onDragTouchMove,this._boundDragTouchEnd=this.onDragTouchEnd;const t=this.map.getContainer();t.addEventListener("touchmove",this._boundDragTouchMove,{passive:!1}),t.addEventListener("touchend",this._boundDragTouchEnd,{passive:!1})}detachDragTouchListeners(){const t=this.map.getContainer();this._boundDragTouchMove&&(t.removeEventListener("touchmove",this._boundDragTouchMove),this._boundDragTouchMove=null),this._boundDragTouchEnd&&(t.removeEventListener("touchend",this._boundDragTouchEnd),this._boundDragTouchEnd=null)}detachPolygonTouchStart(t){const e=this.polygonTouchStartListeners.get(t);if(!e)return;const r=t._path;r&&r.removeEventListener("touchstart",e),this.polygonTouchStartListeners.delete(t)}attachDragCancelHandlers(){this.dragCancelHandlersAttached||(this.dragCancelHandlersAttached=!0,document.addEventListener("keydown",this.onPolygonDragKeyDown),this.map.on("pointercancel",this.onPolygonDragCancel,this),this.map.on("touchcancel",this.onPolygonDragCancel,this))}detachDragCancelHandlers(){this.dragCancelHandlersAttached&&(this.dragCancelHandlersAttached=!1,document.removeEventListener("keydown",this.onPolygonDragKeyDown),this.map.off("pointercancel",this.onPolygonDragCancel,this),this.map.off("touchcancel",this.onPolygonDragCancel,this))}cancelActivePolygonDrag(){if(!this.currentDragPolygon||!this.currentDragPolygon._polydrawDragData)return void this.clearCloneGhost();const t=this.currentDragPolygon,e=t._polydrawDragData;if(e)if(e.isDragging){e.isDragging=!1,this.map.off("mousemove",this.onPolygonMouseMove,this),this.map.off("mouseup",this.onPolygonMouseUp,this),this.map.off("pointermove",this.onPolygonMouseMove,this),this.map.off("pointerup",this.onPolygonMouseUp,this),this.map.dragging&&this.map.dragging.enable(),e.startLatLngs&&t.setLatLngs(e.startLatLngs),t._polydrawOriginalMarkerPositions&&(t._polydrawOriginalMarkerPositions.forEach((t,e)=>{e.setLatLng(t)}),t._polydrawOriginalMarkerPositions.clear(),delete t._polydrawOriginalMarkerPositions),t._polydrawOriginalHoleLinePositions&&(t._polydrawOriginalHoleLinePositions.forEach((t,e)=>{e.setLatLngs(t)}),t._polydrawOriginalHoleLinePositions.clear(),delete t._polydrawOriginalHoleLinePositions),t._polydrawCurrentDragSession&&delete t._polydrawCurrentDragSession,null!=e.originalOpacity&&t.setStyle({fillOpacity:e.originalOpacity}),this.setSubtractVisualMode(t,!1),this.setMarkerVisibility(t,!0);try{this.map.getContainer().style.cursor=""}catch{}this.clearCloneGhost(),this.detachDragTouchListeners(),this.detachDragCancelHandlers(),this.currentDragIsClone=!1,this.currentModifierDragMode=!1,this.isModifierKeyHeld=!1,this.currentDragPolygon=null}else this.clearCloneGhost();else this.clearCloneGhost()}offsetPolygonCoordinates(t,e,r){return t?Array.isArray(t[0])?t.map(t=>this.offsetPolygonCoordinates(t,e,r)):t.map(t=>Yn.createLatLng(t.lat+e,t.lng+r)):t}updateMarkersAndHoleLinesDuringDrag(t,e,r){try{let o=null;for(const e of this.getFeatureGroups()){let r=!1;if(e.eachLayer(e=>{e===t&&(r=!0)}),r){o=e;break}}if(!o)return;const n="_polydrawDragSession_"+Date.now()+"_"+Yn.util.stamp(t);t._polydrawCurrentDragSession||(t._polydrawCurrentDragSession=n,t._polydrawOriginalMarkerPositions=new Map,t._polydrawOriginalHoleLinePositions=new Map,o.eachLayer(e=>{if(e instanceof s.Marker)t._polydrawOriginalMarkerPositions.set(e,e.getLatLng());else if(e instanceof s.Polyline&&!(e instanceof s.Polygon)){const r=e.getLatLngs();t._polydrawOriginalHoleLinePositions.set(e,r)}})),o.eachLayer(o=>{if(o instanceof s.Marker){const n=t._polydrawOriginalMarkerPositions.get(o);if(n){const t={lat:n.lat+e,lng:n.lng+r};o.setLatLng(t)}}else if(o instanceof s.Polyline&&!(o instanceof s.Polygon)){const n=t._polydrawOriginalHoleLinePositions.get(o);if(n){let t;t=Array.isArray(n[0])?n.map(t=>t.map(t=>Yn.createLatLng(t.lat+e,t.lng+r))):n.map(t=>Yn.createLatLng(t.lat+e,t.lng+r)),o.setLatLngs(t)}}})}catch(o){console.warn("Error updating markers during drag:",o)}}async updatePolygonAfterDrag(t){try{let e=null;for(const s of this.getFeatureGroups())if(s.eachLayer(r=>{r===t&&(e=s)}),e)break;if(!e)return;const r=t.toGeoJSON();if(this.isModifierDragActive())return this.performModifierSubtract(r,e),this.currentModifierDragMode=!1,void(this.isModifierKeyHeld=!1);const{level:o,original:n}=this.getOptimizationMetadataFromFeatureGroup(e),i=this.getFeatureMetadataState(e);this.cleanupFeatureGroup(e),this.removeFeatureGroup(e);const a=this.turfHelper.getTurfPolygon(r);this.emitPolygonUpdated({operation:"polygonDrag",polygon:a,allowMerge:!0,optimizationLevel:o,originalOptimizationLevel:n,featureId:i.featureId,featureMetadata:i.metadata,sourceFeatureIds:i.sourceFeatureIds,featureInteractionOverride:i.interactionOverride,featureStyleOverrides:i.styleOverrides,featureCreatedAt:i.createdAt}),this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}catch{}}updatePolygonAfterCloneDrag(t,e){try{let r=null;for(const e of this.getFeatureGroups())if(e.eachLayer(o=>{o===t&&(r=e)}),r)break;if(!r)return;const o=t.toGeoJSON(),n=(null==e?void 0:e.startLatLngs)??null,i=n?this.createPolygonFeatureFromLatLngs(n):null,{level:a,original:s}=this.getOptimizationMetadataFromFeatureGroup(r),l=this.getFeatureMetadataState(r);this.cleanupFeatureGroup(r),this.removeFeatureGroup(r);const c=this.turfHelper.getTurfPolygon(o);if(this.emitPolygonUpdated({operation:"polygonDrag",polygon:c,allowMerge:!0,optimizationLevel:a,originalOptimizationLevel:s,featureId:l.featureId,featureMetadata:l.metadata,sourceFeatureIds:l.sourceFeatureIds,featureInteractionOverride:l.interactionOverride,featureStyleOverrides:l.styleOverrides,featureCreatedAt:l.createdAt}),i){const t=this.turfHelper.getTurfPolygon(i);this.emitPolygonUpdated({operation:"polygonClone",polygon:t,allowMerge:!0,optimizationLevel:a,originalOptimizationLevel:s,featureId:l.featureId,featureMetadata:l.metadata,sourceFeatureIds:l.sourceFeatureIds,featureInteractionOverride:l.interactionOverride,featureStyleOverrides:l.styleOverrides,featureCreatedAt:l.createdAt})}this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}catch{}finally{this.currentModifierDragMode=!1,this.isModifierKeyHeld=!1}}showCloneGhost(t){if(this.clearCloneGhost(),t)try{const e=Yn.createPolygon(t,{color:this.config.styles.polygon.color,weight:this.config.styles.polygon.weight,opacity:.9,fill:!1,fillOpacity:0,dashArray:"4,6",interactive:!1});e.addTo(this.map),this.currentCloneGhost=e}catch{}}clearCloneGhost(){if(this.currentCloneGhost){try{this.map.removeLayer(this.currentCloneGhost)}catch{}this.currentCloneGhost=null}}createPolygonFeatureFromLatLngs(t){try{return Yn.createPolygon(t).toGeoJSON()}catch{return null}}getDragSubtractModifierKey(){const{keys:t}=this.config.interaction.drag.modifierSubtract,e=navigator.userAgent.toLowerCase(),r=e.includes("mac"),o=e.includes("windows");return r&&t.mac?t.mac:o&&t.windows?t.windows:t.linux?t.linux:r?"metaKey":"ctrlKey"}detectDragSubtractModifierKey(t){if(Tn())return!1;return t[this.getDragSubtractModifierKey()]||!1}setSubtractVisualMode(t,e){if(t&&t.setStyle)try{e?t.setStyle({color:this.config.styles.ui.dragSubtract.color}):t.setStyle({color:this.config.styles.polygon.color}),this.updateMarkerColorsForSubtractMode(t,e)}catch{}}updateMarkerColorsForSubtractMode(t,e){try{let r=null;for(const e of this.getFeatureGroups())if(e.eachLayer(o=>{o===t&&(r=e)}),r)break;if(!r)return;const o=r,n=this.config.interaction.drag.modifierSubtract.hideMarkersOnDrag;o.eachLayer(t=>{if(t instanceof s.Marker){const r=t.getElement();r&&(e?n?(r.style.display="none",r.classList.add("subtract-mode-hidden")):(r.style.backgroundColor=this.config.styles.ui.dragSubtract.color,r.style.borderColor=this.config.styles.ui.dragSubtract.color,r.classList.add("subtract-mode")):n?(r.style.display="",r.classList.remove("subtract-mode-hidden")):(r.style.backgroundColor="",r.style.borderColor="",r.classList.remove("subtract-mode")))}})}catch{}}handleModifierToggleDuringDrag(t){const e=this.detectDragSubtractModifierKey(t);this.currentModifierDragMode=e,this.isModifierKeyHeld=e,this.currentDragPolygon&&this.setSubtractVisualMode(this.currentDragPolygon,e)}isModifierDragActive(){return this.currentModifierDragMode}performModifierSubtract(t,e){var r;try{const o=this.turfHelper.getTurfPolygon(t),n=[],i=null==(r=this.layerManager)?void 0:r.getLayerForFeatureGroup(e);this.getFeatureGroups().forEach(t=>{if(t!==e){if(i&&this.layerManager){if(this.layerManager.getLayerForFeatureGroup(t)!==i)return}try{const e=t.toGeoJSON();if(!e||!e.features||!e.features[0])return;const r=e.features[0];if(!r.geometry||!r.geometry.coordinates)return;const i=this.turfHelper.getTurfPolygon(r);try{const e=this.turfHelper.getIntersection(i,o);if(e&&e.geometry&&"coordinates"in e.geometry){e.geometry.coordinates.length>0&&n.push(t)}}catch{try{this.turfHelper.polygonIntersect(i,o)&&n.push(t)}catch{}}}catch{}}}),this.removeFeatureGroup(e),n.forEach(t=>{try{const r=t.toGeoJSON(),n=this.turfHelper.getTurfPolygon(r.features[0]),{level:i,original:a}=this.getOptimizationMetadataFromFeatureGroup(t),s=this.getFeatureMetadataState(t);this.cleanupFeatureGroup(t),this.removeFeatureGroup(t);try{const t=this.turfHelper.polygonDifference(n,o);if(t&&t.geometry){const e=this.turfHelper.getCoords(t);for(const t of e){const e=this.turfHelper.getMultiPolygon([t]);this.emitPolygonUpdated({operation:"modifierSubtract",polygon:this.turfHelper.getTurfPolygon(e),allowMerge:!1,optimizationLevel:i,originalOptimizationLevel:a,featureId:s.featureId,featureMetadata:s.metadata,sourceFeatureIds:s.sourceFeatureIds,featureInteractionOverride:s.interactionOverride,featureStyleOverrides:s.styleOverrides,featureCreatedAt:s.createdAt})}}}catch(e){_n()||console.warn("Failed to perform difference operation:",e),this.emitPolygonUpdated({operation:"modifierSubtractFallback",polygon:n,allowMerge:!1,optimizationLevel:i,originalOptimizationLevel:a,featureId:s.featureId,featureMetadata:s.metadata,sourceFeatureIds:s.sourceFeatureIds,featureInteractionOverride:s.interactionOverride,featureStyleOverrides:s.styleOverrides,featureCreatedAt:s.createdAt})}}catch(r){_n()||console.warn("Error in modifier subtract operation:",r)}}),this.polygonInformation.createPolygonInformationStorage(this.getFeatureGroups())}catch(o){_n()||console.warn("Error in performModifierSubtract:",o)}}getEdgeDeletionModifierKey(){const{keys:t}=this.config.interaction.edgeDeletion,e=navigator.userAgent.toLowerCase(),r=e.includes("mac"),o=e.includes("windows");return r&&t.mac?t.mac:o&&t.windows?t.windows:t.linux?t.linux:r?"metaKey":"ctrlKey"}isEdgeDeletionModifierKeyPressed(t){if(Tn())return!1;return!!t[this.getEdgeDeletionModifierKey()]}registerPolygonLayerMappings(t){t.eachLayer(e=>{e instanceof s.Polygon&&this.polygonFeatureGroupMap.set(e,t)})}findFeatureGroupForPolygon(t){for(const e of this.getFeatureGroups()){let r=!1;if(e.eachLayer(e=>{r||e!==t||(r=!0)}),r)return e}}onMarkerHoverForEdgeDeletion(t,e){const r=t.getElement();if(r)if(e){const e=t=>{if(this.isEdgeDeletionModifierKeyPressed(t)){r.style.backgroundColor=this.config.styles.ui.edgeDeletion.color,r.style.borderColor=this.config.styles.ui.edgeDeletion.color,r.classList.add("edge-deletion-hover");try{this.map.getContainer().style.cursor="pointer"}catch{}}else{r.style.backgroundColor="",r.style.borderColor="",r.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}}};e(new MouseEvent("mouseover")),this.markerModifierHandlers.set(t,e),document.addEventListener("keydown",e),document.addEventListener("keyup",e),r.addEventListener("mousemove",e)}else{r.style.backgroundColor="",r.style.borderColor="",r.classList.remove("edge-deletion-hover");try{this.map.getContainer().style.cursor=""}catch{}const e=this.markerModifierHandlers.get(t);e&&(document.removeEventListener("keydown",e),document.removeEventListener("keyup",e),r.removeEventListener("mousemove",e),this.markerModifierHandlers.delete(t))}}getMarkerIndex(t,e){const r=Hn.getBounds(t,Math.sqrt(2)/2),o=new Gn(r.getSouth(),r.getWest(),r.getNorth(),r.getEast()).getDirection(e),n={lat:o.lat,lng:o.lng},i=this.turfHelper.getCoord(n),a=this.turfHelper.getFeaturePointCollection(t);return this.turfHelper.getNearestPointIndex(i,a)}ensureMarkerSeparation(t,e){const r=[];if(e.menu.enabled&&r.push({type:"menu",index:e.menu.index}),e.delete.enabled&&r.push({type:"delete",index:e.delete.index}),e.info.enabled&&r.push({type:"info",index:e.info.index}),r.length<2)return{menu:e.menu.index,delete:e.delete.index,info:e.info.index};const o={...e},n=new Set,i=["info","delete","menu"];for(const a of i){const e=o[a];if(e.enabled)if(n.has(e.index)){const r=this.findAlternativeMarkerPosition(t,e.index,n);o[a].index=r,n.add(r)}else n.add(e.index)}return{menu:o.menu.index,delete:o.delete.index,info:o.info.index}}findAlternativeMarkerPosition(t,e,r){const o=t,n=Math.max(1,Math.floor(t/8));for(let i=1;i<o;i++){const o=[(e+i*n)%t,(e-i*n+t)%t];for(const t of o)if(!r.has(t))return t}for(let i=0;i<t;i++)if(!r.has(i))return i;return e}createDivIcon(t){return ni.createDivIcon(t)}getLatLngInfoString(t){return"Latitude: "+t.lat+" Longitude: "+t.lng}setMarkerVisibility(t,e){const r=this.getFeatureGroups().find(e=>e.hasLayer(t));r&&r.eachLayer(t=>{if(t instanceof s.Marker){const r=t.getElement();if(r){const t=this.config.interaction.drag.markerBehavior,o=this.config.interaction.drag.markerAnimationDuration;"hide"===t?r.style.display=e?"":"none":"fade"===t&&(r.style.transition=`opacity ${o}ms ease`,r.style.opacity=e?"1":"0")}}})}generateMenuMarkerPopup(t,e){var r;const o=[],n=this.config.polygonTools;if(n.simplify.enabled&&o.push(mi.createMenuButton("simplify","Simplify",["simplify"])),n.doubleElbows.enabled&&o.push(mi.createMenuButton("doubleElbows","DoubleElbows",["double-elbows"])),n.bbox.enabled&&o.push(mi.createMenuButton("bbox","Bounding box",["bbox"])),n.bezier.enabled&&o.push(mi.createMenuButton("bezier","Curve",["bezier"])),n.scale.enabled&&o.push(mi.createMenuButton("scale","Scale",["transform-scale"])),n.rotate.enabled&&o.push(mi.createMenuButton("rotate","Rotate",["transform-rotate"])),null==(r=n.visualOptimizationToggle)?void 0:r.enabled){const{level:t,original:r}=this.getOptimizationMetadataFromFeatureGroup(e);if(r>0||t>0){const e="number"==typeof t&&t>0,r=["toggle-visual-optimization",e?"visual-optimization-state-hidden":"visual-optimization-state-visible"],n=e?"Show all markers":"Hide extra markers";o.push(mi.createMenuButton("toggleOptimization",n,r))}}const i=mi.buildMenuPopup(o),a=i.querySelector(".marker-menu-close");if(a){const t=t=>{t.stopPropagation(),t.preventDefault(),this._openMenuPopup?(this.map.closePopup(this._openMenuPopup),this._openMenuPopup=null):this.map.closePopup()};a.addEventListener("click",t),a.addEventListener("touchend",t,{passive:!1})}const l=()=>{this._openMenuPopup&&(this.map.closePopup(this._openMenuPopup),this._openMenuPopup=null)},c=(r,o)=>{r.addEventListener("touchend",r=>{r.preventDefault(),r.stopPropagation(),this.eventManager.emit("polydraw:menu:action",{action:o,latLngs:t,featureGroup:e}),l()}),r.onclick=()=>{this.eventManager.emit("polydraw:menu:action",{action:o,latLngs:t,featureGroup:e}),l()}},h=t=>{const r=this.transformControllers.get(e);r&&(r.cancel(),r.destroy(),this.transformControllers.delete(e));try{const r=new yi(this.map,e,t,o=>{this.transformControllers.get(e)===r&&this.transformControllers.delete(e),this.transformModeActive=!1;const n=e.getLayers().find(t=>t instanceof s.Polygon);if(!n)return;if(!o)return void this.setMarkerVisibility(n,!0);this.saveHistoryState&&this.saveHistoryState(t);const i=n.toGeoJSON(),{level:a,original:l}=this.getOptimizationMetadataFromFeatureGroup(e),c=this.getFeatureMetadataState(e);this.cleanupFeatureGroup(e),this.removeFeatureGroup(e),this.emitPolygonUpdated({operation:"transform",polygon:this.turfHelper.getTurfPolygon(i),allowMerge:!0,optimizationLevel:a,originalOptimizationLevel:l,featureId:c.featureId,featureMetadata:c.metadata,sourceFeatureIds:c.sourceFeatureIds,featureInteractionOverride:c.interactionOverride,featureStyleOverrides:c.styleOverrides,featureCreatedAt:c.createdAt})});this.transformControllers.set(e,r);const o=e.getLayers().find(t=>t instanceof s.Polygon);o&&this.setMarkerVisibility(o,!1),this.transformModeActive=!0}catch{}},u=(t,e)=>{t.addEventListener("touchend",t=>{t.preventDefault(),t.stopPropagation(),h(e),l()}),t.onclick=()=>{h(e),l()}},g=t=>{const r=t=>{t.preventDefault(),t.stopPropagation(),this.toggleOptimizationVisibility(e),l()};t.addEventListener("touchend",r,{passive:!1}),t.onclick=r};o.forEach(t=>{switch(t.getAttribute("data-action-id")){case"simplify":c(t,"simplify");break;case"doubleElbows":c(t,"doubleElbows");break;case"bbox":c(t,"bbox");break;case"bezier":c(t,"bezier");break;case"scale":u(t,"scale");break;case"rotate":u(t,"rotate");break;case"toggleOptimization":g(t)}}),s.DomEvent.disableClickPropagation(i),i.style.pointerEvents="auto",i.querySelectorAll(".marker-menu-button").forEach(t=>{t.style.pointerEvents="auto",t.addEventListener("click",t=>t.stopPropagation())});const d=window.innerWidth<=600,p=Xn.isV1()?" leaflet-v1":" leaflet-v2",f=Yn.createPopup({closeButton:!1,autoClose:!0,className:`menu-popup${d?" mobile-popup":""}${p}`}).setContent(i);return this._openMenuPopup=f,f}toggleOptimizationVisibility(t){const e=t.getLayers().find(t=>t instanceof s.Polygon);if(!e)return;const r=this.getOptimizationMetadataFromFeatureGroup(t);if(!r.original&&!r.level)return;const o=r.level>0?0:r.original>0?r.original:r.level;if(o===r.level)return;const n=e.toGeoJSON(),i=this.getFeatureMetadataState(t);this.cleanupFeatureGroup(t),this.removeFeatureGroup(t),this.emitPolygonUpdated({operation:"toggleOptimization",polygon:this.turfHelper.getTurfPolygon(n),allowMerge:!0,optimizationLevel:o,originalOptimizationLevel:r.original||o,featureId:i.featureId,featureMetadata:i.metadata,sourceFeatureIds:i.sourceFeatureIds,featureInteractionOverride:i.interactionOverride,featureStyleOverrides:i.styleOverrides,featureCreatedAt:i.createdAt})}getPolygonGeoJSONFromFeatureGroup(t){try{const e=t.getLayers().find(t=>t instanceof s.Polygon);if(!e)throw new Error("No polygon found in feature group");return e.toGeoJSON()}catch(e){return _n()||(e instanceof Error?console.warn("Error getting polygon GeoJSON from feature group:",e.message):console.warn("Error getting polygon GeoJSON from feature group:",e)),{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,1],[1,1],[1,0],[0,0]]]},properties:{}}}}getTotalPolygonPerimeter(t){try{if(!t||!t.geometry)return 0;let e=0;if("Polygon"===t.geometry.type){const r=t.geometry.coordinates;for(const t of r){const r={type:"Feature",geometry:{type:"Polygon",coordinates:[t]},properties:{}};e+=this.turfHelper.getPolygonPerimeter(r)}}else if("MultiPolygon"===t.geometry.type){const r=t.geometry.coordinates;for(const t of r)for(const r of t){const t={type:"Feature",geometry:{type:"Polygon",coordinates:[r]},properties:{}};e+=this.turfHelper.getPolygonPerimeter(t)}}return 1e3*e}catch(e){return _n()||(e instanceof Error?console.warn("Error calculating total polygon perimeter:",e.message):console.warn("Error calculating total polygon perimeter:",e)),1e3*this.turfHelper.getPolygonPerimeter(t)}}generateInfoMarkerPopup(t,e){var r,o;const n=new Bn(e,this.config),i=new zn(t,this.config),a=this.config.markers.markerInfoIcon??{},l=!1!==a.showArea,c=!1!==a.showPerimeter,h=!1!==a.useMetrics,u=null==(r=a.areaLabel)?void 0:r.trim(),g=null==(o=a.perimeterLabel)?void 0:o.trim(),d=document.createElement("div");d.classList.add("info-marker-outer-wrapper");const p=document.createElement("div");p.classList.add("info-marker-wrapper");const f=document.createElement("div");f.classList.add("content");const y=document.createElement("div");if(y.classList.add("info-marker-content"),l){const t=h?`${i.metricArea} ${i.metricUnit}`:`${i.imperialArea} ${i.imperialUnit}`,e=document.createElement("div");e.classList.add("info-item","area"),e.innerHTML=u&&u.length>0?`<strong>${u}:</strong> ${t}`:t,y.appendChild(e)}if(c){const t=h?`${n.metricLength} ${n.metricUnit}`:`${n.imperialLength} ${n.imperialUnit}`,e=document.createElement("div");e.classList.add("info-item","perimeter"),e.innerHTML=g&&g.length>0?`<strong>${g}:</strong> ${t}`:t,y.appendChild(e)}f.appendChild(y),d.appendChild(p),p.appendChild(f),s.DomEvent.disableClickPropagation(d),d.style.pointerEvents="auto",d.querySelectorAll("button").forEach(t=>{t.style.pointerEvents="auto",t.addEventListener("click",t=>t.stopPropagation())});const m=window.innerWidth<=600;return Yn.createPopup({closeButton:!0,autoClose:!0,className:"info-popup"+(m?" mobile-popup":"")}).setContent(d)}}class Mi{constructor(t){i(this,"turfHelper"),i(this,"map"),i(this,"config"),i(this,"eventManager"),i(this,"getFeatureGroups"),i(this,"saveHistoryState"),i(this,"layerManager"),i(this,"geometryManager"),i(this,"interactionManager"),i(this,"onDrawCancel",t=>{this.emit("drawCancelled",t)}),i(this,"onPolygonUpdated",t=>{this.handlePolygonModified(t)}),i(this,"onMenuAction",t=>{this.handleMenuAction(t).catch(t=>{if(!_n()){const e=t instanceof Error?t.message:String(t);console.warn(`Menu action failed: ${e}`)}})}),i(this,"onCheckIntersection",t=>{const e=this.geometryManager.checkPolygonIntersection(t.polygon1,t.polygon2);t.callback(e)}),i(this,"onSubtract",t=>{this.subtractPolygon(t.subtractPolygon)}),i(this,"onPolygonDeleted",()=>{this.emit("polygonDeleted",void 0)}),this.turfHelper=t.turfHelper,this.map=t.map,this.config=t.config,this.eventManager=t.eventManager,this.getFeatureGroups=t.getFeatureGroups,this.saveHistoryState=t.saveHistoryState,this.layerManager=t.layerManager,this.initializeSpecializedManagers(t)}initializeSpecializedManagers(t){this.geometryManager=new oi({turfHelper:t.turfHelper,config:t.config}),this.interactionManager=new vi({turfHelper:t.turfHelper,polygonInformation:t.polygonInformation,map:t.map,config:t.config,modeManager:t.modeManager,eventManager:this.eventManager,saveHistoryState:t.saveHistoryState,layerManager:t.layerManager},{getFeatureGroups:this.getFeatureGroups,addFeatureGroup:t=>this.addFeatureGroupInternal(t),removeFeatureGroup:t=>this.removeFeatureGroupInternal(t)}),this.setupEventForwarding()}setupEventForwarding(){this.eventManager.on("polydraw:draw:cancel",this.onDrawCancel),this.eventManager.on("polydraw:polygon:updated",this.onPolygonUpdated),this.eventManager.on("polydraw:menu:action",this.onMenuAction),this.eventManager.on("polydraw:check:intersection",this.onCheckIntersection),this.eventManager.on("polydraw:subtract",this.onSubtract),this.eventManager.on("polydraw:polygon:deleted",this.onPolygonDeleted)}dispose(){this.eventManager.off("polydraw:draw:cancel",this.onDrawCancel),this.eventManager.off("polydraw:polygon:updated",this.onPolygonUpdated),this.eventManager.off("polydraw:menu:action",this.onMenuAction),this.eventManager.off("polydraw:check:intersection",this.onCheckIntersection),this.eventManager.off("polydraw:subtract",this.onSubtract),this.eventManager.off("polydraw:polygon:deleted",this.onPolygonDeleted),this.interactionManager.dispose()}async handlePolygonModified(t){const e=new Set(["addVertex","markerDrag","polygonDrag","polygonClone","toggleOptimization"]),r=!t.operation||!e.has(t.operation);let o=t.allowMerge;t.intelligentMerge&&"markerDrag"===t.operation&&(o=this.shouldAllowIntelligentMerge(t.polygon));const n={simplify:r,noMerge:!o,visualOptimizationLevel:t.optimizationLevel||0,originalOptimizationLevel:t.originalOptimizationLevel,skipKinkProcessing:"markerDrag"===t.operation,featureId:t.featureId,featureMetadata:t.featureMetadata,sourceFeatureIds:t.sourceFeatureIds,featureInteractionOverride:t.featureInteractionOverride,featureStyleOverrides:t.featureStyleOverrides,featureCreatedAt:t.featureCreatedAt,featureLastModified:t.featureLastModified};await this.addPolygon(t.polygon,n)}async handleMenuAction(t){var e,r,o,n;if(!(null==t?void 0:t.featureGroup))return;if(this.layerManager&&!this.layerManager.isFeatureGroupEditable(t.featureGroup))return;let i;try{i=this.getCompletePolygonFromFeatureGroup(t.featureGroup)}catch(u){if(!_n()){const t=u instanceof Error?u.message:String(u);console.warn(`Menu action skipped: unable to resolve polygon geometry (${t}).`)}return}const{level:a,original:l}=this.getOptimizationMetadataFromFeatureGroup(t.featureGroup),c=this.getFeatureMetadataStateFromFeatureGroup(t.featureGroup);let h;switch(t.action){case"simplify":h=this.geometryManager.simplifyPolygon(i);break;case"bbox":h=this.geometryManager.convertToBoundingBox(i);break;case"doubleElbows":h=this.geometryManager.doubleElbowsPolygon(i);break;case"bezier":h=this.geometryManager.bezierifyPolygon(i);break;default:return}if(h.success&&h.result){this.saveHistoryState&&this.saveHistoryState(t.action),this.removeFeatureGroupInternal(t.featureGroup);const i="bezier"===t.action?(null==(e=this.config.polygonTools.bezier)?void 0:e.visualOptimizationLevel)??10:a,u="bezier"===t.action?(null==(r=this.config.polygonTools.bezier)?void 0:r.visualOptimizationLevel)??10:l,g=await this.addPolygon(h.result,{simplify:!1,visualOptimizationLevel:i,originalOptimizationLevel:u,featureId:c.featureId,featureMetadata:c.metadata,sourceFeatureIds:c.sourceFeatureIds,featureInteractionOverride:c.interactionOverride,featureStyleOverrides:c.styleOverrides,featureCreatedAt:c.createdAt});if("bezier"===t.action&&(null==(o=this.config.polygonTools.bezier)?void 0:o.ghostMarkers)){const t=.001;null==(n=g.featureGroups)||n.forEach(e=>{e.eachLayer(e=>{if(e instanceof s.Polygon){const r=e;r.setStyle({opacity:t,fillOpacity:t}),r._polydrawDragData&&(r._polydrawDragData.originalOpacity=t)}})})}}}get polygonInteractionManager(){return this.interactionManager}on(t,e){this.eventManager.on(t,e)}emit(t,e){this.eventManager.emit(t,e)}async addPolygon(t,e={}){if(this.layerManager&&e.targetLayerId){if(!this.layerManager.getLayer(e.targetLayerId))return{success:!1,error:`Layer "${e.targetLayerId}" does not exist`}}const{polygons:r,skipMerge:o}=this.preparePolygonsForAddition(t,e),n=[];for(const i of r){const t=await this.addPolygonWithMergeHandling(i,e,o);if(!t.success)return t;t.featureGroups&&t.featureGroups.length>0&&n.push(...t.featureGroups)}return{success:!0,featureGroups:n.length>0?n:void 0}}async addPolygonWithMergeHandling(t,e,r){const{noMerge:o=!1}=e;try{return this.isPolygonInsideExistingHole(t)?await this.addPolygonLayer(t,e):this.config.mergePolygons&&!o&&this.getFeatureGroups().length>0&&!r?await this.mergePolygon(t,e):await this.addPolygonLayer(t,e)}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error in addPolygon"}}}preparePolygonsForAddition(t,e={}){let r=!1;try{r=this.turfHelper.hasKinks(t)}catch(o){_n()||console.warn("Error detecting polygon kinks:",o instanceof Error?o.message:String(o))}if(!(!0===e.skipKinkProcessing)&&!this.config.kinks&&r)try{const e=this.turfHelper.getKinks(t);if(e.length>0)return{polygons:e,skipMerge:!1}}catch(o){_n()||console.warn("Error splitting polygon kinks:",o instanceof Error?o.message:String(o))}return{polygons:[t],skipMerge:this.config.kinks&&r}}async subtractPolygon(t,e={}){const{simplify:r=!0,visualOptimizationLevel:o,originalOptimizationLevel:n}=e;try{const a=[],s=this.layerManager;(s?s.getFeatureGroupsForLayer(e.targetLayerId||s.getActiveLayerId()).filter(t=>s.isFeatureGroupEditable(t)):this.getFeatureGroups()).forEach(e=>{try{const r=e.toGeoJSON();if(!r||!r.features||!r.features[0])return;const o=r.features[0];if(!o.geometry||!o.geometry.coordinates)return;const n=this.turfHelper.getTurfPolygon(o);this.geometryManager.checkPolygonIntersection(n,t)&&a.push(e)}catch(r){_n()||console.warn("Skipping feature group during intersection check:",r)}});const l=[];for(const e of a)try{const i=this.getFeatureMetadataStateFromFeatureGroup(e),a=e.toGeoJSON(),s=this.turfHelper.getTurfPolygon(a.features[0]),c=this.geometryManager.subtractPolygon(s,t);if(this.removeFeatureGroupInternal(e),c.success&&c.results)for(const t of c.results){const e=await this.addPolygonLayer(t,{simplify:r,visualOptimizationLevel:o,originalOptimizationLevel:n,featureMetadata:i.metadata,sourceFeatureIds:i.sourceFeatureIds,featureInteractionOverride:i.interactionOverride,featureStyleOverrides:i.styleOverrides,featureCreatedAt:i.createdAt});e.success&&e.featureGroups&&l.push(...e.featureGroups)}}catch(i){_n()||console.warn("Failed subtract operation for one feature group:",i)}return this.emit("polygonSubtracted",{subtractedPolygon:t,affectedFeatureGroups:a,resultFeatureGroups:l}),this.emit("polygonOperationComplete",{operation:"subtract",polygon:t,resultFeatureGroups:l}),{success:!0,featureGroups:l}}catch(i){return{success:!1,error:i instanceof Error?i.message:"Unknown error in subtractPolygon"}}}async addPolygonLayer(t,e={}){const{simplify:r=!0,dynamicTolerance:o=!1,visualOptimizationLevel:n=0,originalOptimizationLevel:i,targetLayerId:a,layerColor:l,featureId:c,featureMetadata:h,sourceFeatureIds:u,featureInteractionOverride:g,featureStyleOverrides:d,featureCreatedAt:p,featureLastModified:f}=e;try{if(!t||!t.geometry||!t.geometry.coordinates)return{success:!1,error:"Invalid polygon data"};const e=this.layerManager?a||this.layerManager.getActiveLayerId():void 0,y=!this.layerManager||!e||this.layerManager.isLayerEditable(e),m=void 0===g?y:"editable"===g;let v=l;if(!v&&this.layerManager&&e){const t=this.layerManager.getLayer(e);t&&(v=t.color)}else if(!v&&this.layerManager){const t=this.layerManager.getActiveLayer();t&&this.layerManager.getLayerCount()>1&&(v=t.color)}const M=new s.FeatureGroup,w=r?this.turfHelper.getSimplified(t,o):t,b=this.normalizeSinglePolygonFeature(w);let P,L,k=n;try{if(P=this.getPolygon(b,v,{enableDragging:m,styleOverrides:d}),!P)return{success:!1,error:"Failed to create polygon"};P._polydrawOptimizationLevel=n,k=i??P._polydrawOptimizationOriginalLevel??n,P._polydrawOptimizationOriginalLevel=k||0,M.addLayer(P),this.interactionManager.suppressDeleteMarkerClicks(250)}catch{return{success:!1,error:"Failed to create polygon layer"}}this.setFeatureGroupMetadata(M,{featureId:c,metadata:h,sourceFeatureIds:u,interactionOverride:g,styleOverrides:d,optimizationLevel:n,originalOptimizationLevel:k,hasHoles:this.featureHasHoles(b),layerId:e,createdAt:p,lastModified:f});try{const t=P.getLatLngs();L=this.normalizePolygonCoordinates(t)}catch{L=[]}if(m){try{L.forEach((t,e)=>{if(!t||!Array.isArray(t))return;const r=[];if(t.forEach(t=>{Array.isArray(t)&&t.length>=2?r.push({lat:t[1],lng:t[0]}):"object"==typeof t&&null!==t&&"lat"in t&&"lng"in t&&r.push(t)}),0!==r.length)try{if(0===e)this.interactionManager.addMarkers(r,M,{optimizationLevel:n,originalOptimizationLevel:k});else{const t=Yn.createPolyline(r,{color:this.config.styles.hole.color,weight:this.config.styles.hole.weight||2,opacity:this.config.styles.hole.opacity||1,fillColor:this.config.styles.hole.fillColor,fillOpacity:this.config.styles.hole.fillOpacity||.5});M.addLayer(t),this.interactionManager.addHoleMarkers(r,M)}}catch{}})}catch{}try{this.interactionManager.addEdgeClickListeners(P,M)}catch{}}if(this.getFeatureGroups().push(M),this.layerManager){const t=e||this.layerManager.getActiveLayerId();if(!this.layerManager.assignFeatureGroupToLayer(M,t))return this.removeFeatureGroupInternal(M),{success:!1,error:`Failed to assign polygon to layer "${t}"`}}try{M.addTo(this.map)}catch{}return this.interactionManager.updateMarkerDraggableState(),this.emit("polygonAdded",{polygon:b,featureGroup:M}),this.emit("polygonOperationComplete",{operation:"add",polygon:b,featureGroup:M}),{success:!0,featureGroups:[M]}}catch(y){return{success:!1,error:y instanceof Error?y.message:"Unknown error in addPolygonLayer"}}}async mergePolygon(t,e={}){try{const r=[],o=[];let n=!1;const i=!1!==e.mergeEditableOnly,a=this.layerManager;return(a?a.getFeatureGroupsForLayer(e.targetLayerId||a.getActiveLayerId()).filter(t=>!i||a.isFeatureGroupEditable(t)):this.getFeatureGroups()).forEach(e=>{try{const i=e.toGeoJSON();if(!i||!i.features||!i.features[0])return;const a=i.features[0];if(!a.geometry||!a.geometry.coordinates)return;if(this.isPositionArrayofArrays(a.geometry.coordinates))a.geometry.coordinates.forEach(i=>{try{const a=this.turfHelper.getMultiPolygon([i]);n=this.geometryManager.checkPolygonIntersection(a,t),n&&(o.push(e),r.push(a))}catch{}});else try{const i=this.turfHelper.getTurfPolygon(a);n=this.geometryManager.checkPolygonIntersection(i,t),n&&(o.push(e),r.push(i))}catch{}}catch{}}),o.length>0?await this.unionPolygons(o,t,r,e):await this.addPolygonLayer(t,e)}catch(r){return{success:!1,error:r instanceof Error?r.message:"Unknown error in mergePolygon"}}}async unionPolygons(t,e,r,o={}){try{const n=this.collectSourceFeatureIds(t,o.sourceFeatureIds),i=o.featureMetadata??this.resolvePrimaryFeatureMetadata(t),a=o.featureInteractionOverride??this.resolvePrimaryFeatureInteractionOverride(t),s=o.featureStyleOverrides??this.resolvePrimaryFeatureStyleOverrides(t);t.forEach(t=>{this.removeFeatureGroupInternal(t)});const l=this.geometryManager.unionPolygons(r,e);if(l.success&&l.result){const t=await this.addPolygonLayer(l.result,{...o,featureMetadata:i,sourceFeatureIds:n,featureInteractionOverride:a,featureStyleOverrides:s});return this.emit("polygonsUnioned",{originalPolygons:r,resultPolygon:l.result,featureGroups:t.featureGroups}),t}return{success:!1,error:l.error||"Failed to union polygons"}}catch(n){return{success:!1,error:n instanceof Error?n.message:"Unknown error in unionPolygons"}}}shouldAllowIntelligentMerge(t){try{const e=this.layerManager,r=e?e.getFeatureGroupsForLayer(e.getActiveLayerId()).filter(t=>e.isFeatureGroupEditable(t)):this.getFeatureGroups();for(const o of r)try{const e=o.toGeoJSON();if(!e||!e.features||!e.features[0])continue;const r=e.features[0];if(!r.geometry||!r.geometry.coordinates)continue;const n=this.turfHelper.getTurfPolygon(r);if(this.geometryManager.checkPolygonIntersection(n,t))return!0}catch{continue}return!1}catch{return!1}}isPolygonInsideExistingHole(t){try{const e=this.layerManager,r=e?e.getFeatureGroupsForLayer(e.getActiveLayerId()).filter(t=>e.isFeatureGroupEditable(t)):this.getFeatureGroups();for(const o of r)try{const e=o.toGeoJSON();if(!e||!e.features||!e.features[0])continue;const r=e.features[0];if(!r.geometry||!r.geometry.coordinates)continue;let n=!1,i=[];if("Polygon"===r.geometry.type)n=r.geometry.coordinates.length>1,n&&(i=r.geometry.coordinates.slice(1));else if("MultiPolygon"===r.geometry.type)for(const t of r.geometry.coordinates)t.length>1&&(n=!0,i.push(...t.slice(1)));if(n&&i.length>0)for(const o of i)try{const e=this.turfHelper.createPolygon([o]);if(this.turfHelper.isPolygonCompletelyWithin(t,e))return!0}catch{continue}}catch{continue}return!1}catch{return!1}}normalizePolygonCoordinates(t){if(!Array.isArray(t)||0===t.length)return[];const e=t=>null!==t&&"object"==typeof t&&"lat"in t&&"lng"in t&&"number"==typeof t.lat&&"number"==typeof t.lng,r=t=>{if(!Array.isArray(t))return[];if(t.length>0&&e(t[0]))return[t];const o=[];for(const n of t)if(Array.isArray(n))if(n.length>0&&e(n[0]))o.push(n);else{const t=r(n);o.push(...t)}return o};try{return r(t)}catch{return[]}}isPositionArrayofArrays(t){if(!Array.isArray(t)||0===t.length)return!1;const e=t[0];if(!Array.isArray(e)||0===e.length)return!1;const r=e[0];if(!Array.isArray(r)||0===r.length)return!1;const o=r[0];return this.isPosition(o)}isPosition(t){return Array.isArray(t)&&t.length>=2&&t.every(t=>"number"==typeof t)}getPolygon(t,e,r={}){const o=s.GeoJSON.geometryToLayer(t),n=e||this.config.styles.polygon.color,i=this.config.styles.polygon.fillColor,{styleOverrides:a}=r,l={...this.config.styles.polygon,color:(null==a?void 0:a.color)??n,fillColor:(null==a?void 0:a.fillColor)??i,weight:(null==a?void 0:a.weight)??this.config.styles.polygon.weight??2,opacity:this.config.styles.polygon.opacity||1,fillOpacity:(null==a?void 0:a.fillOpacity)??this.config.styles.polygon.fillOpacity??.2};o.setStyle(l),o._polydrawUniqueId=Yn.util.stamp(o)+"_"+Date.now(),delete o._polydrawDragData,delete o._polydrawOriginalLatLngs,delete o._polydrawCurrentDragSession,delete o._polydrawOriginalMarkerPositions,delete o._polydrawOriginalHoleLinePositions;return!1!==r.enableDragging&&(this.config.modes.dragPolygons||this.config.tools.clone)&&this.interactionManager.enablePolygonDragging(o,t),o}normalizeSinglePolygonFeature(t){if("MultiPolygon"===t.geometry.type&&1===t.geometry.coordinates.length){const[e]=t.geometry.coordinates;try{return this.turfHelper.createPolygon(e)}catch{return t}}return t}addFeatureGroupInternal(t){this.getFeatureGroups().push(t)}removeFeatureGroupInternal(t){this.cleanupFeatureGroup(t),this.layerManager&&this.layerManager.removeFeatureGroupFromLayer(t);try{t.clearLayers()}catch(o){_n()||console.warn("Error clearing layers from feature group:",o)}const e=this.getFeatureGroups(),r=e.indexOf(t);r>-1&&e.splice(r,1);try{this.map.removeLayer(t)}catch(o){_n()||console.warn("Error removing feature group layer from map:",o)}}getCompletePolygonFromFeatureGroup(t){try{let e=null;if(t.eachLayer(t=>{t instanceof s.Polygon&&(e=t)}),e)return e.toGeoJSON();const r=t.toGeoJSON().features.find(t=>{var e,r;return"Polygon"===(null==(e=t.geometry)?void 0:e.type)||"MultiPolygon"===(null==(r=t.geometry)?void 0:r.type)});if(r)return r;throw new Error("No polygon geometry found in feature group")}catch(e){throw _n()||e instanceof Error&&console.warn("Error getting complete polygon GeoJSON from feature group:",e.message),e instanceof Error?e:new Error("Failed to resolve polygon geometry from feature group")}}getOptimizationMetadataFromFeatureGroup(t){if(!t)return{level:0,original:0};let e=0,r=0;return t.eachLayer(t=>{if(t instanceof s.Polygon){const o=t;"number"==typeof o._polydrawOptimizationLevel&&(e=o._polydrawOptimizationLevel||0),"number"==typeof o._polydrawOptimizationOriginalLevel&&(r=o._polydrawOptimizationOriginalLevel||0)}}),!r&&e>0&&(r=e),{level:e,original:r}}getFeatureMetadataStateFromFeatureGroup(t){if(!t)return{metadata:{},sourceFeatureIds:[]};const e=t._polydrawMetadata,r=null==e?void 0:e.id,o=Array.isArray(null==e?void 0:e.sourceFeatureIds)?[...e.sourceFeatureIds]:r?[r]:[],n=(null==e?void 0:e.createdAt)instanceof Date&&!Number.isNaN(e.createdAt.getTime())?e.createdAt.toISOString():void 0;return{featureId:r,metadata:this.cloneFeatureMetadata(null==e?void 0:e.metadata),sourceFeatureIds:o,interactionOverride:null==e?void 0:e.interactionOverride,styleOverrides:this.cloneStyleOverrides(null==e?void 0:e.styleOverrides),createdAt:n}}collectSourceFeatureIds(t,e){const r=[],o=new Set,n=t=>{t&&!o.has(t)&&(o.add(t),r.push(t))};return t.forEach(t=>{const e=t._polydrawMetadata;Array.isArray(null==e?void 0:e.sourceFeatureIds)&&e.sourceFeatureIds.length>0?e.sourceFeatureIds.forEach(t=>n(t)):n(null==e?void 0:e.id)}),Array.isArray(e)&&e.forEach(t=>n(t)),r}resolvePrimaryFeatureMetadata(t){var e;for(const r of t){const t=null==(e=r._polydrawMetadata)?void 0:e.metadata;if(t&&Object.keys(t).length>0)return this.cloneFeatureMetadata(t)}return{}}resolvePrimaryFeatureInteractionOverride(t){var e;for(const r of t){const t=null==(e=r._polydrawMetadata)?void 0:e.interactionOverride;if(t)return t}}resolvePrimaryFeatureStyleOverrides(t){var e;for(const r of t){const t=null==(e=r._polydrawMetadata)?void 0:e.styleOverrides;if(t)return this.cloneStyleOverrides(t)}}cloneFeatureMetadata(t){return t?{...t}:{}}cloneStyleOverrides(t){if(t)return{...t}}featureHasHoles(t){return!!(null==t?void 0:t.geometry)&&("Polygon"===t.geometry.type?t.geometry.coordinates.length>1:"MultiPolygon"===t.geometry.type&&t.geometry.coordinates.some(t=>t.length>1))}setFeatureGroupMetadata(t,e){const r=new Date,o=e.createdAt?new Date(e.createdAt):r,n=e.lastModified?new Date(e.lastModified):r,i=Number.isNaN(o.getTime())?r:o,a=Number.isNaN(n.getTime())?r:n,s=e.featureId||`fg-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,l=e.sourceFeatureIds&&e.sourceFeatureIds.length>0?[...new Set(e.sourceFeatureIds)]:[s];t._polydrawMetadata={id:s,optimizationLevel:e.optimizationLevel,originalOptimizationLevel:e.originalOptimizationLevel,hasHoles:e.hasHoles,createdAt:i,lastModified:a,layerId:e.layerId,metadata:this.cloneFeatureMetadata(e.metadata),sourceFeatureIds:l,interactionOverride:e.interactionOverride,styleOverrides:this.cloneStyleOverrides(e.styleOverrides)}}updateMarkerDraggableState(){this.interactionManager.updateMarkerDraggableState()}updateAllMarkersForEdgeDeletion(t){this.interactionManager.updateAllMarkersForEdgeDeletion(t)}setModifierKeyHeld(t){this.interactionManager.setModifierKeyHeld(t)}checkPolygonIntersection(t,e){return this.geometryManager.checkPolygonIntersection(t,e)}getPolygonCenter(t){try{if(!t||!t.geometry||!t.geometry.coordinates)return null;let e;if("Polygon"===t.geometry.type)e=t.geometry.coordinates[0];else{if("MultiPolygon"!==t.geometry.type)return null;e=t.geometry.coordinates[0][0]}if(!Array.isArray(e)||0===e.length)return null;let r=0,o=0,n=0;for(const t of e)if(Array.isArray(t)&&t.length>=2){const e=t[0],i=t[1];"number"!=typeof e||"number"!=typeof i||isNaN(e)||isNaN(i)||(o+=e,r+=i,n++)}return 0===n?null:{lat:r/n,lng:o/n}}catch{return null}}getBoundingBox(t){try{if(!t||!t.geometry||!t.geometry.coordinates)return null;let e;if("Polygon"===t.geometry.type)e=t.geometry.coordinates[0];else{if("MultiPolygon"!==t.geometry.type)return null;e=t.geometry.coordinates[0][0]}if(!Array.isArray(e)||0===e.length)return null;let r=1/0,o=-1/0,n=1/0,i=-1/0;for(const t of e)if(Array.isArray(t)&&t.length>=2){const e=t[0],a=t[1];"number"!=typeof e||"number"!=typeof a||isNaN(e)||isNaN(a)||(n=Math.min(n,e),i=Math.max(i,e),r=Math.min(r,a),o=Math.max(o,a))}return r===1/0||o===-1/0||n===1/0||i===-1/0?null:{minLat:r,maxLat:o,minLng:n,maxLng:i}}catch{return null}}addMarker(t,e,r){this.interactionManager.addMarkers(t,e,r)}addHoleMarker(t,e){this.interactionManager.addHoleMarkers(t,e)}addEdgeClickListeners(t,e){this.interactionManager.addEdgeClickListeners(t,e)}enablePolygonDragging(t,e){this.interactionManager.enablePolygonDragging(t,e)}getMarkerIndex(t,e){return 0}ensureMarkerSeparation(t,e){var r,o,n;return{menu:(null==(r=e.menu)?void 0:r.index)??0,delete:(null==(o=e.delete)?void 0:o.index)??1,info:(null==(n=e.info)?void 0:n.index)??2}}findAlternativeMarkerPosition(t,e,r){return(e+1)%t}createDivIcon(t){return Yn.createDivIcon({className:t.join(" ")})}getLatLngInfoString(t){return"Latitude: "+t.lat+" Longitude: "+t.lng}generateMenuMarkerPopup(t,e){const r=document.createElement("div");return r.innerHTML="Menu",r}getPolygonGeoJSONFromFeatureGroup(t){return{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,1],[1,1],[1,0],[0,0]]]},properties:{}}}getTotalPolygonPerimeter(t){return 1e3}generateInfoMarkerPopup(t,e){const r=document.createElement("div");return r.innerHTML=`Area: ${t}, Perimeter: ${e}`,r}onMarkerHoverForEdgeDeletion(t,e){}highlightEdgeOnHover(t,e){}onEdgeClick(t,e){}removeFeatureGroup(t){this.removeFeatureGroupInternal(t)}cleanupFeatureGroup(t){this.interactionManager.cleanupFeatureGroup(t)}onPolygonMouseMove(t){}onPolygonMouseUp(t){}updatePolygonAfterDrag(t){}setSubtractVisualMode(t,e){}performModifierSubtract(t,e){try{const r=this.turfHelper.getTurfPolygon(t),o=[];this.getFeatureGroups().forEach(t=>{if(t!==e)try{const e=t.toGeoJSON();if(!e||!e.features||!e.features[0])return;const n=e.features[0];if(!n.geometry||!n.geometry.coordinates)return;const i=this.turfHelper.getTurfPolygon(n);this.geometryManager.checkPolygonIntersection(i,r)&&o.push(t)}catch{}}),this.removeFeatureGroupInternal(e),o.forEach(t=>{try{const e=t.toGeoJSON(),o=this.turfHelper.getTurfPolygon(e.features[0]);this.removeFeatureGroupInternal(t);const n=this.geometryManager.subtractPolygon(o,r);if(n.success&&n.results)for(const t of n.results)this.addPolygonLayer(t,{simplify:!0})}catch{}})}catch{}}}class wi{constructor(t,e=50){i(this,"undoStack",[]),i(this,"redoStack",[]),i(this,"maxHistorySize",50),i(this,"maxSnapshotSize",5e5),i(this,"maxTotalMemory",5e6),i(this,"currentMemoryUsage",0),i(this,"eventManager"),i(this,"isRestoring",!1),this.eventManager=t,this.maxHistorySize=e}setMaxHistorySize(t){!Number.isFinite(t)||t<=0||(this.maxHistorySize=Math.floor(t),this.enforceMemoryBudget(),this.enforceRedoMemoryBudget())}saveState(t,e,r){if(this.isRestoring)return;const o=this.createSnapshot(t,e,r),n=this.calculateSnapshotSize(o);o.size=n,n>this.maxSnapshotSize?console.warn(`History snapshot too large (${n} bytes, limit ${this.maxSnapshotSize} bytes). Skipping save.`):(this.redoStack=[],this.undoStack.push(o),this.currentMemoryUsage+=n,this.enforceMemoryBudget(),this.eventManager.emit("polydraw:history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()}))}calculateSnapshotSize(t){try{return 2*JSON.stringify(t).length}catch(e){return console.warn("Error calculating snapshot size:",e),0}}enforceMemoryBudget(){for(;this.undoStack.length>this.maxHistorySize;){const t=this.undoStack.shift();t&&(this.currentMemoryUsage-=this.getSnapshotSize(t))}for(;this.currentMemoryUsage>this.maxTotalMemory&&this.undoStack.length>0;){const t=this.undoStack.shift();t&&(this.currentMemoryUsage-=this.getSnapshotSize(t))}}enforceRedoMemoryBudget(){const t=Math.floor(this.maxHistorySize/2);for(;this.redoStack.length>t;)this.redoStack.shift()}undo(t,e){if(!this.canUndo())return null;const r=this.createSnapshot(t,"redo-point",e),o=this.calculateSnapshotSize(r);r.size=o,o<=this.maxSnapshotSize?(this.redoStack.push(r),this.enforceRedoMemoryBudget()):console.warn(`Current state too large (${o} bytes) to save to redo stack.`);const n=this.undoStack.pop();return this.currentMemoryUsage-=this.getSnapshotSize(n),this.eventManager.emit("polydraw:history:undo",{canUndo:this.canUndo(),canRedo:this.canRedo(),action:n.action}),n}redo(t,e){if(!this.canRedo())return null;const r=this.createSnapshot(t,"undo-point",e),o=this.calculateSnapshotSize(r);r.size=o,o<=this.maxSnapshotSize?(this.undoStack.push(r),this.currentMemoryUsage+=o,this.enforceMemoryBudget()):console.warn(`Current state too large (${o} bytes) to save to undo stack.`),this.enforceRedoMemoryBudget();const n=this.redoStack.pop();return this.eventManager.emit("polydraw:history:redo",{canUndo:this.canUndo(),canRedo:this.canRedo(),action:n.action}),n}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}clear(){this.undoStack=[],this.redoStack=[],this.currentMemoryUsage=0,this.eventManager.emit("polydraw:history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()})}setRestoring(t){this.isRestoring=t}createSnapshot(t,e,r){const o=[],n=[];t.forEach(t=>{t.eachLayer(e=>{var r;const i=e;if(null==i?void 0:i.toGeoJSON)try{const a=i.toGeoJSON();if(!a)return;const s=null==(r=null==a?void 0:a.geometry)?void 0:r.type;"Polygon"!==s&&"MultiPolygon"!==s||(o.push(a),n.push(this.captureFeatureMetadataSnapshot(t,e)))}catch(a){console.warn("Error converting polygon to GeoJSON:",a)}})});const i={features:o,timestamp:Date.now(),action:e};return r&&(i.layerSnapshot=r.captureLayerSnapshot(t)),n.length>0&&(i.featureMetadataSnapshot=n),i}captureFeatureMetadataSnapshot(t,e){const r={},o=t._polydrawMetadata;if((null==o?void 0:o.id)&&(r.id=o.id),(null==o?void 0:o.metadata)&&(r.metadata={...o.metadata}),Array.isArray(null==o?void 0:o.sourceFeatureIds)&&(r.sourceFeatureIds=[...o.sourceFeatureIds]),(null==o?void 0:o.interactionOverride)&&(r.interactionOverride=o.interactionOverride),(null==o?void 0:o.styleOverrides)&&(r.styleOverrides={...o.styleOverrides}),"boolean"==typeof(null==o?void 0:o.hasHoles)&&(r.hasHoles=o.hasHoles),"string"==typeof(null==o?void 0:o.layerId)&&(r.layerId=o.layerId),(null==o?void 0:o.createdAt)instanceof Date&&!Number.isNaN(o.createdAt.getTime())&&(r.createdAt=o.createdAt.toISOString()),(null==o?void 0:o.lastModified)instanceof Date&&!Number.isNaN(o.lastModified.getTime())&&(r.lastModified=o.lastModified.toISOString()),e instanceof s.Polygon){const t=e;"number"==typeof t._polydrawOptimizationLevel&&(r.optimizationLevel=t._polydrawOptimizationLevel),"number"==typeof t._polydrawOptimizationOriginalLevel&&(r.originalOptimizationLevel=t._polydrawOptimizationOriginalLevel)}return r}getSnapshotSize(t){if("number"==typeof t.size)return t.size;const e=this.calculateSnapshotSize(t);return t.size=e,e}}class bi{constructor(t,e){i(this,"eventManager"),i(this,"layers",new Map),i(this,"featureGroupToLayer",new WeakMap),i(this,"activeLayerId","default"),i(this,"defaultColor"),this.eventManager=t,this.defaultColor=bi.normalizeColor(e),this.ensureDefaultLayer()}getLayerCount(){return this.layers.size}getAllLayers(){return Array.from(this.layers.values()).map(t=>this.cloneLayerState(t))}getPanelLayers(){return this.getAllLayers().filter(t=>"hidden"!==t.panel)}getPanelLayerCount(){let t=0;for(const e of this.layers.values())"hidden"!==e.panel&&(t+=1);return t}getLayer(t){const e=this.layers.get(this.normalizeLayerId(t));return e?this.cloneLayerState(e):void 0}getActiveLayerId(){return this.activeLayerId}getActiveLayer(){return this.getLayer(this.activeLayerId)}getOrCreateLayer(t,e){const r=this.normalizeLayerId(t);if(this.layers.get(r))return this.cloneLayerState(this.layers.get(r));const o="string"==typeof e?{color:e}:e||{},n={id:r,label:o.label,color:o.color?bi.normalizeColor(o.color,this.defaultColor):this.defaultColor,visible:!1!==o.visible,interaction:this.normalizeInteraction(o.interaction),panel:this.normalizePanel(o.panel),metadata:this.cloneMetadata(o.metadata),featureGroups:[]};return this.layers.set(r,n),this.eventManager.emit("polydraw:layer:created",{layerId:n.id,color:n.color}),this.cloneLayerState(n)}setActiveLayer(t){return"activated"===this.setActiveLayerWithResult(t)}setActiveLayerWithResult(t){const e=this.normalizeLayerId(t),r=this.layers.get(e);if(!r)return"not-found";if(e===this.activeLayerId)return"already-active";if(!r.visible)return"not-visible";const o=this.activeLayerId;return this.activeLayerId=e,this.eventManager.emit("polydraw:layer:activated",{layerId:e,previousLayerId:o}),"activated"}setLayerVisibility(t,e){const r=this.layers.get(this.normalizeLayerId(t));if(!r||r.visible===e)return!1;if(!e&&r.id===this.activeLayerId){const t=this.getFirstVisibleLayerId(r.id);if(!t)return!1;this.setActiveLayer(t)}return r.visible=e,this.eventManager.emit("polydraw:layer:visibility",{layerId:r.id,visible:e}),!0}setLayerColor(t,e){const r=this.layers.get(this.normalizeLayerId(t)),o=bi.normalizeColor(e,(null==r?void 0:r.color)??this.defaultColor);return!(!r||r.color===o)&&(r.color=o,r.featureGroups.forEach(t=>{var e,r;const n=null==(r=null==(e=t._polydrawMetadata)?void 0:e.styleOverrides)?void 0:r.color;t.eachLayer(t=>{t instanceof s.Polygon&&!(t instanceof s.Rectangle)&&t.setStyle({color:n??o})})}),this.eventManager.emit("polydraw:layer:colorChanged",{layerId:r.id,color:r.color}),!0)}setLayerLabel(t,e){const r=this.layers.get(this.normalizeLayerId(t));if(!r)return!1;const o="string"==typeof e?e.trim():void 0,n=o&&o.length>0?o:void 0;return r.label!==n&&(r.label=n,!0)}setLayerInteraction(t,e){const r=this.layers.get(this.normalizeLayerId(t));if(!r)return!1;const o=this.normalizeInteraction(e);return r.interaction!==o&&(r.interaction=o,!0)}setLayerPanelVisibility(t,e){const r=this.layers.get(this.normalizeLayerId(t));if(!r)return!1;const o=this.normalizePanel(e);return r.panel!==o&&(r.panel=o,!0)}setLayerMetadata(t,e){const r=this.layers.get(this.normalizeLayerId(t));return!!r&&(r.metadata=this.cloneMetadata(e),!0)}isLayerEditable(t){const e=this.layers.get(this.normalizeLayerId(t));return!e||"editable"===e.interaction}isFeatureGroupEditable(t){var e;const r=null==(e=t._polydrawMetadata)?void 0:e.interactionOverride;if(r)return"editable"===r;const o=this.getLayerForFeatureGroup(t);return!o||this.isLayerEditable(o)}moveLayer(t,e){const r=this.normalizeLayerId(t),o=this.normalizeLayerId(e);if(r===o)return!1;if("default"===r||"default"===o)return!1;if(!this.layers.has(r)||!this.layers.has(o))return!1;const n=Array.from(this.layers.keys()),i=n.indexOf(r),a=n.indexOf(o);if(i<0||a<0)return!1;const[s]=n.splice(i,1);n.splice(a,0,s);const l=new Map;for(const c of n){const t=this.layers.get(c);t&&l.set(c,t)}return this.layers=l,this.eventManager.emit("polydraw:layer:reordered",{layerId:r,targetLayerId:o,orderedLayerIds:n}),!0}assignFeatureGroupToLayer(t,e){const r=this.normalizeLayerId(e);if(!this.layers.has(r))return!1;const o=this.getLayerForFeatureGroup(t);if(o){const e=this.layers.get(o);e&&(e.featureGroups=e.featureGroups.filter(e=>e!==t))}const n=this.layers.get(r);n.featureGroups.includes(t)||n.featureGroups.push(t),this.featureGroupToLayer.set(t,r);const i=t._polydrawMetadata;return i&&(i.layerId=r),!0}removeFeatureGroupFromLayer(t){const e=this.getLayerForFeatureGroup(t);if(!e)return;const r=this.layers.get(e);r&&(r.featureGroups=r.featureGroups.filter(e=>e!==t)),this.featureGroupToLayer.delete(t)}getLayerForFeatureGroup(t){const e=this.featureGroupToLayer.get(t);if(e)return e;for(const[r,o]of this.layers.entries())if(o.featureGroups.includes(t))return this.featureGroupToLayer.set(t,r),r}getFeatureGroupsForLayer(t){const e=this.layers.get(this.normalizeLayerId(t));return e?[...e.featureGroups]:[]}isInActiveLayer(t){const e=this.getLayerForFeatureGroup(t);return!e||e===this.activeLayerId}deleteLayer(t){const e=this.normalizeLayerId(t);if("default"===e)return[];const r=this.layers.get(e);if(!r)return[];const o=[...r.featureGroups];if(o.forEach(t=>{this.featureGroupToLayer.delete(t)}),this.layers.delete(e),this.activeLayerId===e){const t=this.getFirstVisibleLayerId(e);t?this.setActiveLayer(t):this.activeLayerId="default"}return this.eventManager.emit("polydraw:layer:deleted",{layerId:e,removedFeatureGroups:o}),o}clear(t){t&&(this.defaultColor=bi.normalizeColor(t,this.defaultColor)),this.layers=new Map,this.featureGroupToLayer=new WeakMap,this.activeLayerId="default",this.ensureDefaultLayer()}captureLayerSnapshot(t){const e=new Map;return t.forEach((t,r)=>{e.set(t,r)}),{layers:this.getAllLayers().map(t=>({id:t.id,label:t.label,color:t.color,visible:t.visible,interaction:t.interaction,panel:t.panel,metadata:this.cloneMetadata(t.metadata),featureIndices:t.featureGroups.map(t=>e.get(t)).filter(t=>"number"==typeof t)})),activeLayerId:this.activeLayerId}}restoreFromLayerSnapshot(t,e){if(this.clear(),!t||!Array.isArray(t.layers))return;t.layers.forEach(t=>{const e=this.normalizeLayerId(t.id),r=this.layers.get(e);r?(r.label="string"==typeof t.label?t.label:void 0,r.color=t.color?bi.normalizeColor(t.color):r.color,r.visible=!1!==t.visible,r.interaction=this.normalizeInteraction(t.interaction),r.panel=this.normalizePanel(t.panel),r.metadata=this.cloneMetadata(t.metadata)):this.layers.set(e,{id:e,label:"string"==typeof t.label?t.label:void 0,color:t.color?bi.normalizeColor(t.color):this.defaultColor,visible:!1!==t.visible,interaction:this.normalizeInteraction(t.interaction),panel:this.normalizePanel(t.panel),metadata:this.cloneMetadata(t.metadata),featureGroups:[]})}),this.ensureDefaultLayer(),t.layers.forEach(t=>{const r=this.normalizeLayerId(t.id),o=this.layers.get(r);o&&t.featureIndices.forEach(t=>{const n=e[t];n&&(o.featureGroups.includes(n)||o.featureGroups.push(n),this.featureGroupToLayer.set(n,r))})});const r=this.normalizeLayerId(t.activeLayerId||"default"),o=this.layers.get(r);if(o&&o.visible)return void(this.activeLayerId=r);const n=this.getFirstVisibleLayerId();if(n)return void(this.activeLayerId=n);const i=this.layers.get("default");i&&(i.visible=!0),this.activeLayerId="default"}ensureDefaultLayer(){this.layers.has("default")||this.layers.set("default",{id:"default",color:this.defaultColor,visible:!0,interaction:"editable",panel:"visible",metadata:{},featureGroups:[]})}getFirstVisibleLayerId(t){for(const e of this.layers.values())if(e.id!==t&&e.visible)return e.id}normalizeLayerId(t){const e=(t||"").trim();return e.length>0?e:"default"}cloneLayerState(t){return{id:t.id,label:t.label,color:t.color,visible:t.visible,interaction:t.interaction,panel:t.panel,metadata:this.cloneMetadata(t.metadata),featureGroups:[...t.featureGroups]}}normalizeInteraction(t){return"readonly"===t||"static"===t?t:"editable"}normalizePanel(t){return"hidden"===t?"hidden":"visible"}cloneMetadata(t){return t?{...t}:{}}static normalizeColor(t,e="#50622b"){let r=(t||"").trim().replace(/^#/,"");return 3===r.length&&(r=`${r[0]}${r[0]}${r[1]}${r[1]}${r[2]}${r[2]}`),/^[0-9a-fA-F]{6}$/.test(r)?`#${r.toLowerCase()}`:e}}const Pi=t=>t.replace(/#(?:fff|ffffff)/gi,"currentColor"),Li={grip:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">\n <circle cx="9" cy="5" r="1" />\n <circle cx="9" cy="12" r="1" />\n <circle cx="9" cy="19" r="1" />\n <circle cx="15" cy="5" r="1" />\n <circle cx="15" cy="12" r="1" />\n <circle cx="15" cy="19" r="1" />\n</svg>\n'.trim(),eyeVisible:Pi('<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">\n <defs>\n <mask id="pupil-hole-hide">\n <rect width="512" height="512" fill="white"/>\n <circle cx="256" cy="220" r="60" fill="black"/>\n </mask>\n </defs>\n <g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Upper eye contour --\x3e\n <path d="M24 256 C 120 93 392 93 488 256" stroke-width="48"/>\n \x3c!-- Lower eye contour --\x3e\n <path d="M24 256 C 120 419 392 419 488 256" stroke-width="48"/>\n \x3c!-- Iris highlight --\x3e\n <circle cx="256" cy="234" r="108" fill="#fff" stroke="none" mask="url(#pupil-hole-hide)"/>\n </g>\n</svg>\n'.trim()),eyeHidden:Pi('<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">\n <g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round">\n \x3c!-- Upper eye contour --\x3e\n <path d="M24 256 C 120 93 392 93 488 256" stroke-width="48"/>\n \x3c!-- Lower eye contour --\x3e\n <path d="M24 256 C 120 419 392 419 488 256" stroke-width="48"/>\n \x3c!-- Diagonal hide slash --\x3e\n <path d="M48 408 L464 104" stroke-width="48"/>\n </g>\n</svg>\n'.trim()),delete:qn.trim(),toggle:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor">\n <path d="M3 7.5 12 3l9 4.5L12 12 3 7.5Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />\n <path d="M3 12.5 12 17l9-4.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />\n <path d="M3 17 12 21l9-4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />\n <polyline points="14 9.5 17 12 14 14.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />\n</svg>\n'.trim()};class ki{static calculateAngle(t,e,r){const o=t.lng-e.lng,n=t.lat-e.lat,i=r.lng-e.lng,a=r.lat-e.lat,s=o*i+n*a,l=Math.sqrt(o*o+n*n),c=Math.sqrt(i*i+a*a);if(0===l||0===c)return 0;const h=s/(l*c);return Math.acos(Math.max(-1,Math.min(1,h)))}static calculateDistanceFromLine(t,e,r){const o=e.lng-t.lng,n=e.lat-t.lat,i=r.lng-t.lng,a=r.lat-t.lat,s=o*i+n*a,l=i*i+a*a;if(0===l)return Math.sqrt(o*o+n*n);const c=s/l;let h,u;c<0?(h=t.lng,u=t.lat):c>1?(h=r.lng,u=r.lat):(h=t.lng+c*i,u=t.lat+c*a);const g=e.lng-h,d=e.lat-u;return Math.sqrt(g*g+d*d)}static calculateCentroid(t){return Wn.getCenter(t)}static calculateDistance(t,e){const r=t.lng-e.lng,o=t.lat-e.lat;return Math.sqrt(r*r+o*o)}static offsetPolygonCoordinates(t,e,r){return t?Array.isArray(t[0])?t.map(t=>ki.offsetPolygonCoordinates(t,e,r)):void 0!==t.lat&&void 0!==t.lng?{lat:t.lat+e,lng:t.lng+r}:t.map(t=>ki.offsetPolygonCoordinates(t,e,r)):t}}class xi{static convertToCoords(t,e){const r=[];if(t.length>1&&t.length<3){const o=[];e.isWithin(s.GeoJSON.latLngsToCoords(t[t.length-1]),s.GeoJSON.latLngsToCoords(t[0]))?t.forEach(t=>{o.push(s.GeoJSON.latLngsToCoords(t))}):t.forEach(t=>{r.push([s.GeoJSON.latLngsToCoords(t)])}),o.length>=1&&r.push(o)}else if(t.length>2){const o=[];for(let n=1;n<t.length-1;n++){e.isWithin(s.GeoJSON.latLngsToCoords(t[n]),s.GeoJSON.latLngsToCoords(t[0]))?(t.forEach(t=>{o.push(s.GeoJSON.latLngsToCoords(t))}),r.push(o)):t.forEach(t=>{r.push([s.GeoJSON.latLngsToCoords(t)])})}}else r.push([s.GeoJSON.latLngsToCoords(t[0])]);return r}static offsetPolygonCoordinates(t,e,r){return ki.offsetPolygonCoordinates(t,e,r)}static getLatLngInfoString(t){return"Latitude: "+t.lat+" Longitude: "+t.lng}static convertToLatLng(t){if("object"==typeof t&&null!==t){if("lat"in t&&"lng"in t)return Yn.createLatLng(t.lat,t.lng);if("latitude"in t&&"longitude"in t)return Yn.createLatLng(t.latitude,t.longitude);if("longitude"in t&&"latitude"in t)return Yn.createLatLng(t.latitude,t.longitude);if("lng"in t&&"lat"in t)return Yn.createLatLng(t.lat,t.lng)}if(Array.isArray(t)&&t.length>=2){const[e,r]=t;if("number"==typeof e&&"number"==typeof r){const t=Math.abs(e),o=Math.abs(r);return t>90&&o<=90?Yn.createLatLng(r,e):o>90&&t<=90?Yn.createLatLng(e,r):t>90||o>90?Yn.createLatLng(r,e):Yn.createLatLng(e,r)}}if("string"==typeof t){const e=t.trim();if(e.includes(",")&&!e.includes("°")&&!e.includes("'")&&!e.includes('"')){const t=e.split(",").map(t=>parseFloat(t.trim()));if(t.length>=2&&!isNaN(t[0])&&!isNaN(t[1]))return this.convertToLatLng(t)}const r=e.match(/(\d+)°(\d+)'(?:(\d+(?:\.\d+)?)")?([NS])\s*,?\s*(\d+)°(\d+)'(?:(\d+(?:\.\d+)?)")?([EW])/i);if(r){const[,t,e,o,n,i,a,s,l]=r,c=parseFloat(t)+parseFloat(e)/60+parseFloat(o||"0")/3600,h=parseFloat(i)+parseFloat(a)/60+parseFloat(s||"0")/3600,u="S"===n.toUpperCase()?-c:c,g="W"===l.toUpperCase()?-h:h;return Yn.createLatLng(u,g)}const o=e.match(/(\d+)°(\d+(?:\.\d+)?)'([NS])\s*,?\s*(\d+)°(\d+(?:\.\d+)?)'([EW])/i);if(o){const[,t,e,r,n,i,a]=o,s=parseFloat(t)+parseFloat(e)/60,l=parseFloat(n)+parseFloat(i)/60,c="S"===r.toUpperCase()?-s:s,h="W"===a.toUpperCase()?-l:l;return Yn.createLatLng(c,h)}const n=e.match(/(\d+(?:\.\d+)?)°?\s*([NS])\s*,\s*(\d+(?:\.\d+)?)°?\s*([EW])/i);if(n){const[,t,e,r,o]=n,i="S"===e.toUpperCase()?-parseFloat(t):parseFloat(t),a="W"===o.toUpperCase()?-parseFloat(r):parseFloat(r);return Yn.createLatLng(i,a)}const i=e.match(/N\s*(\d+(?:\.\d+)?)\s+E\s*(\d+(?:\.\d+)?)/i);if(i){const[,t,e]=i;return Yn.createLatLng(parseFloat(t),parseFloat(e))}if(e.match(/(?:UTM\s+)?(\d+)([NS])\s+(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)/i))throw new Error(`UTM coordinates detected: ${e}. UTM conversion requires specialized libraries like proj4js. Please convert to decimal degrees first.`);if(e.match(/(\d+)([A-Z])\s+([A-Z]{2})\s+(\d+)\s+(\d+)/i))throw new Error(`MGRS coordinates detected: ${e}. MGRS conversion requires specialized libraries. Please convert to decimal degrees first.`);if(e.match(/^[23456789CFGHJMPQRVWX]{2,3}[23456789CFGHJMPQRVWX]{3,7}\+[23456789CFGHJMPQRVWX]{2,3}$/i))throw new Error(`Plus Code detected: ${e}. Plus Code conversion requires specialized libraries. Please convert to decimal degrees first.`)}throw new Error(`Unable to convert coordinate: ${JSON.stringify(t)}`)}static convertToLatLngArray(t){return t.map(t=>t.map(t=>t.map(t=>this.convertToLatLng(t))))}}const Ei={draw:"draw",subtract:"subtract",p2p:"p2p",p2pSubtract:"p2pSubtract",deleteAll:"erase",clonePolygons:"clone"};function Si(t){var e,r,o,n;if(!t)return;const i=t,a=t.modes;if(a){const e=Object.keys(Ei).filter(t=>void 0!==a[t]);if(e.length>0){console.warn("[Leaflet.Polydraw] `config.modes.*` tool toggles are deprecated in v2. Use `config.tools.*` (draw/subtract/p2p/clone/erase) instead."),t.tools||(t.tools={});for(const r of e){const e=Ei[r];void 0===t.tools[e]&&(t.tools[e]=a[r])}}}const s=(null==(e=t.markers)?void 0:e.visualOptimization)??{};(Object.prototype.hasOwnProperty.call(s,"useAngles")||Object.prototype.hasOwnProperty.call(s,"useBoundingBox")||Object.prototype.hasOwnProperty.call(s,"useDistance")||Object.prototype.hasOwnProperty.call(s,"thresholdBoundingBox")||Object.prototype.hasOwnProperty.call(s,"thresholdDistance")||Object.prototype.hasOwnProperty.call(s,"sharpAngleThreshold"))&&console.warn("[Leaflet.Polydraw] `markers.visualOptimization` is deprecated. Prefer `visualOptimizationLevel` when adding predefined polygons.");const l=t.maxHistorySize;"number"==typeof l&&(console.warn("[Leaflet.Polydraw] `config.maxHistorySize` is deprecated in v2. Use `config.history.maxSize` instead."),t.history||(t.history={}),void 0===t.history.maxSize&&(t.history.maxSize=l));const c=t.boundingBox;c&&"boolean"==typeof c.addMidPointMarkers&&(console.warn("[Leaflet.Polydraw] `config.boundingBox` is deprecated in v2. Use `config.polygonTools.bbox` instead."),t.polygonTools||(t.polygonTools={}),t.polygonTools.bbox||(t.polygonTools.bbox={}),void 0===t.polygonTools.bbox.addMidPointMarkers&&(t.polygonTools.bbox.addMidPointMarkers=c.addMidPointMarkers));const h=t.bezier;if(h&&(void 0!==h.resolution||void 0!==h.sharpness||void 0!==h.resampleMultiplier||void 0!==h.maxNodes||void 0!==h.visualOptimizationLevel||void 0!==h.ghostMarkers)){console.warn("[Leaflet.Polydraw] `config.bezier` is deprecated in v2. Use `config.polygonTools.bezier` instead."),t.polygonTools||(t.polygonTools={}),t.polygonTools.bezier||(t.polygonTools.bezier={});const e=t.polygonTools.bezier;for(const t of Object.keys(h))void 0!==h[t]&&void 0===e[t]&&(e[t]=h[t])}const u=t.polygonCreation,g=i.polygonCreation;if(void 0!==(null==g?void 0:g.method)){console.warn("[Leaflet.Polydraw] `config.polygonCreation.method` is deprecated in v2. Use `config.polygonCreation.algorithm` instead."),t.polygonCreation||(t.polygonCreation={});const e=t.polygonCreation;void 0===e.algorithm&&(e.algorithm=g.method)}const d=i.simplification;if(void 0!==(null==d?void 0:d.mode)){console.warn("[Leaflet.Polydraw] `config.simplification.mode` is deprecated in v2. Use `config.simplification.strategy` instead."),t.simplification||(t.simplification={});const e=t.simplification;void 0===e.strategy&&(e.strategy=d.mode)}"buffer"===(null==u?void 0:u.algorithm)&&console.warn('[Leaflet.Polydraw] `polygonCreation.algorithm: "buffer"` is deprecated and no longer supported. Falling back to "concaveman". Use "concaveman" or "direct" instead.');const p=void 0!==i.polyLineOptions,f=void 0!==i.subtractLineOptions,y=void 0!==i.polygonOptions,m=void 0!==i.holeOptions,v=void 0!==i.colors;if(p||f||y||m||v){console.warn("[Leaflet.Polydraw] `polyLineOptions`, `subtractLineOptions`, `polygonOptions`, `holeOptions`, and `colors` are deprecated in v2. Use the unified `config.styles` block instead."),t.styles||(t.styles={});const e=t.styles;if(p){e.polyline||(e.polyline={});const t=i.polyLineOptions;void 0!==t.weight&&void 0===e.polyline.weight&&(e.polyline.weight=t.weight),void 0!==t.opacity&&void 0===e.polyline.opacity&&(e.polyline.opacity=t.opacity)}if(f){e.subtractLine||(e.subtractLine={});const t=i.subtractLineOptions;void 0!==t.weight&&void 0===e.subtractLine.weight&&(e.subtractLine.weight=t.weight),void 0!==t.opacity&&void 0===e.subtractLine.opacity&&(e.subtractLine.opacity=t.opacity)}if(y){e.polygon||(e.polygon={});const t=i.polygonOptions;void 0!==t.weight&&void 0===e.polygon.weight&&(e.polygon.weight=t.weight),void 0!==t.opacity&&void 0===e.polygon.opacity&&(e.polygon.opacity=t.opacity),void 0!==t.fillOpacity&&void 0===e.polygon.fillOpacity&&(e.polygon.fillOpacity=t.fillOpacity),void 0!==t.smoothFactor&&void 0===e.polygon.smoothFactor&&(e.polygon.smoothFactor=t.smoothFactor),void 0!==t.noClip&&void 0===e.polygon.noClip&&(e.polygon.noClip=t.noClip)}if(m){e.hole||(e.hole={});const t=i.holeOptions;void 0!==t.weight&&void 0===e.hole.weight&&(e.hole.weight=t.weight),void 0!==t.opacity&&void 0===e.hole.opacity&&(e.hole.opacity=t.opacity),void 0!==t.fillOpacity&&void 0===e.hole.fillOpacity&&(e.hole.fillOpacity=t.fillOpacity)}if(v){const t=i.colors;if(void 0!==t.polyline&&(e.polyline||(e.polyline={}),void 0===e.polyline.color&&(e.polyline.color=t.polyline)),void 0!==t.subtractLine&&(e.subtractLine||(e.subtractLine={}),void 0===e.subtractLine.color&&(e.subtractLine.color=t.subtractLine)),t.polygon&&(e.polygon||(e.polygon={}),void 0!==t.polygon.border&&void 0===e.polygon.color&&(e.polygon.color=t.polygon.border),void 0!==t.polygon.fill&&void 0===e.polygon.fillColor&&(e.polygon.fillColor=t.polygon.fill)),t.hole&&(e.hole||(e.hole={}),void 0!==t.hole.border&&void 0===e.hole.color&&(e.hole.color=t.hole.border),void 0!==t.hole.fill&&void 0===e.hole.fillColor&&(e.hole.fillColor=t.hole.fill)),t.styles){e.ui||(e.ui={});const r=t.styles,o=e.ui;r.controlButton&&!o.controlButton&&(o.controlButton=r.controlButton),r.controlButtonHover&&!o.controlButtonHover&&(o.controlButtonHover=r.controlButtonHover),r.controlButtonActive&&!o.controlButtonActive&&(o.controlButtonActive=r.controlButtonActive),r.indicatorActive&&!o.indicatorActive&&(o.indicatorActive=r.indicatorActive),r.p2pMarker&&!o.p2pMarker&&(o.p2pMarker=r.p2pMarker)}void 0!==(null==(r=t.p2p)?void 0:r.closingMarker)&&(e.ui||(e.ui={}),e.ui.p2pClosingMarker||(e.ui.p2pClosingMarker={color:t.p2p.closingMarker})),void 0!==t.edgeHover&&(e.ui||(e.ui={}),e.ui.edgeHover||(e.ui.edgeHover={color:t.edgeHover})),void 0!==(null==(o=t.edgeDeletion)?void 0:o.hover)&&(e.ui||(e.ui={}),e.ui.edgeDeletion||(e.ui.edgeDeletion={color:t.edgeDeletion.hover})),void 0!==(null==(n=t.dragPolygons)?void 0:n.subtract)&&(e.ui||(e.ui={}),e.ui.dragSubtract||(e.ui.dragSubtract={color:t.dragPolygons.subtract}))}}void 0!==i.defaultMode&&(console.warn("[Leaflet.Polydraw] `config.defaultMode` is deprecated in v2. Use `config.tools.default` instead."),t.tools||(t.tools={}),void 0===t.tools.default&&(t.tools.default=i.defaultMode)),void 0!==i.dragPolygons&&(console.warn("[Leaflet.Polydraw] `config.dragPolygons` is deprecated in v2. Use `config.interaction.drag` instead."),t.interaction||(t.interaction={}),t.interaction.drag||(t.interaction.drag=i.dragPolygons)),void 0!==i.edgeDeletion&&(console.warn("[Leaflet.Polydraw] `config.edgeDeletion` is deprecated in v2. Use `config.interaction.edgeDeletion` instead."),t.interaction||(t.interaction={}),t.interaction.edgeDeletion||(t.interaction.edgeDeletion=i.edgeDeletion)),void 0!==i.menuOperations&&(console.warn("[Leaflet.Polydraw] `config.menuOperations` is deprecated in v2. Use `config.polygonTools` instead."),t.polygonTools||(t.polygonTools=i.menuOperations))}const Di=new Set([h.SouthWest,h.South,h.SouthEast,h.East,h.NorthEast,h.North,h.NorthWest,h.West]);function Ci(t,e,r){return"number"==typeof t&&Number.isFinite(t)&&Di.has(t)?t:(console.warn(`[Leaflet.Polydraw] Invalid \`${r}\` value "${String(t)}". Using "${h[e]}" (${e}) as fallback.`),e)}function Ii(t){t.markers.markerInfoIcon.position=Ci(t.markers.markerInfoIcon.position,u.markers.markerInfoIcon.position,"markers.markerInfoIcon.position"),t.markers.markerMenuIcon.position=Ci(t.markers.markerMenuIcon.position,u.markers.markerMenuIcon.position,"markers.markerMenuIcon.position"),t.markers.markerDeleteIcon.position=Ci(t.markers.markerDeleteIcon.position,u.markers.markerDeleteIcon.position,"markers.markerDeleteIcon.position")}class Ai extends s.Control{constructor(t){super(t),i(this,"map"),i(this,"tracer",null),i(this,"turfHelper"),i(this,"subContainer"),i(this,"config"),i(this,"mapStateService"),i(this,"eventManager"),i(this,"polygonInformation"),i(this,"modeManager"),i(this,"polygonDrawManager"),i(this,"polygonMutationManager"),i(this,"historyManager"),i(this,"layerManager"),i(this,"layerPanel",null),i(this,"arrayOfFeatureGroups",[]),i(this,"drawMode",c.Off),i(this,"drawModeListeners",[]),i(this,"_boundKeyDownHandler"),i(this,"_boundKeyUpHandler"),i(this,"isModifierKeyHeld",!1),i(this,"modifierModeOverride",null),i(this,"isDrawingInProgress",!1),i(this,"mapEventsAttached",!1),i(this,"drawEventsAttached",!1),i(this,"controlEvents",new WeakSet),i(this,"lastControlPointerDown",null),i(this,"_boundTouchMove"),i(this,"_boundTouchEnd"),i(this,"_boundTouchStart"),i(this,"_boundPointerDown"),i(this,"_boundPointerMove"),i(this,"_boundPointerUp"),i(this,"_lastTapTime",0),i(this,"_lastTapLatLng",null),i(this,"_tapTimeout",null),i(this,"pointerEventsHandled","undefined"!=typeof window&&"PointerEvent"in window&&Xn.isV2()),i(this,"_configReady",null),i(this,"_componentsInitialized",!1),i(this,"_isControlMounted",!1),i(this,"_isRestoringSnapshot",!1),i(this,"_coreEventListenersAttached",!1),i(this,"_coreEventSubscriptions",[]),i(this,"_initRequestId",0),i(this,"_historySuppressionDepth",0),i(this,"_lastAppliedVisibleMapOrder",[]),i(this,"_handleActivateToggle",()=>{const t=this.getContainer();if(!t)return;const e=t.querySelector(".icon-activate");if(Yn.domUtil.hasClass(e,"active"))Yn.domUtil.removeClass(e,"active"),this.subContainer&&(this.subContainer.style.maxHeight="0px",this.subContainer.style.overflow="hidden");else if(Yn.domUtil.addClass(e,"active"),this.subContainer){const t=this.subContainer.scrollHeight;this.subContainer.style.maxHeight=`${t||250}px`,this.subContainer.style.overflow="visible"}this.updateActivateButtonIndicator()}),i(this,"_handleDrawClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.Add?(this.setDrawMode(c.Add),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handleSubtractClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.Subtract?(this.setDrawMode(c.Subtract),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handleCloneClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),0!==this.arrayOfFeatureGroups.length&&(this.modeManager.getCurrentMode()!==c.Clone?(this.setDrawMode(c.Clone),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off))}),i(this,"_handleEraseClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),0!==this.arrayOfFeatureGroups.length&&(this.map.closePopup(),this.saveHistory("eraseAll"),this.removeAllFeatureGroups())}),i(this,"_handlePointToPointClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.PointToPoint?(this.setDrawMode(c.PointToPoint),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handlePointToPointSubtractClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.modeManager.getCurrentMode()!==c.PointToPointSubtract?(this.setDrawMode(c.PointToPointSubtract),this.polygonInformation.saveCurrentState()):this.setDrawMode(c.Off)}),i(this,"_handleUndoClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.undo()}),i(this,"_handleRedoClick",t=>{t&&(t.preventDefault(),t.stopPropagation()),this.redo()}),i(this,"onMarkerHoverForEdgeDeletionEvent",t=>{if(!this.isModifierKeyHeld)return;const e=t.target;e&&(e.style.backgroundColor=this.config.styles.ui.edgeDeletion.color,e.style.borderColor=this.config.styles.ui.edgeDeletion.color,e.classList.add("edge-deletion-hover"))}),i(this,"onMarkerLeaveForEdgeDeletionEvent",t=>{const e=t.target;e&&(e.style.backgroundColor="",e.style.borderColor="",e.classList.remove("edge-deletion-hover"))});const e=structuredClone(u);(null==t?void 0:t.config)&&Si(t.config),this.config=Nn(e,(null==t?void 0:t.config)??{}),Ii(this.config),(null==t?void 0:t.configPath)?this._configReady=this.loadExternalConfig(t.configPath,null==t?void 0:t.config):(this.initializeComponents(),this._configReady=Promise.resolve())}onAdd(t){const e=t,r=s.Browser;e._onResize=()=>{},r.touch&&r.mobile&&(e.tap=!1),this.map=t,this._isControlMounted=!0;const o=++this._initRequestId;this.setupKeyboardHandlers();const n=Yn.domUtil.create("div","leaflet-control leaflet-bar");return this.initializeUI(n),this.createTracer(),this.completeInitialization(o),n}completeInitialization(t){var e;const r=()=>{this._isControlMounted&&t===this._initRequestId&&(this.initializeManagers(),this.setDrawMode(this.config.tools.default),this.setupEventListeners())};this._componentsInitialized?r():null==(e=this._configReady)||e.then(()=>{r()}).catch(()=>{})}onRemove(t){this._isControlMounted=!1,this._initRequestId+=1,this.comprehensiveCleanup()}comprehensiveCleanup(){if(this.events(!1),this.drawStartedEvents(!1),this.removeKeyboardHandlers(),this.tracer){try{this.map.hasLayer(this.tracer)?this.map.removeLayer(this.tracer):this.tracer.remove()}catch{}this.tracer=null}if(this.arrayOfFeatureGroups.forEach(t=>{try{this.polygonMutationManager&&this.polygonMutationManager.cleanupFeatureGroup(t),this.map.removeLayer(t)}catch(e){console.warn("Error cleaning up feature group:",e)}}),this.arrayOfFeatureGroups.length=0,this._lastAppliedVisibleMapOrder=[],this.polygonMutationManager&&this.polygonMutationManager.dispose(),this.removeCoreEventListeners(),this.polygonInformation&&this.polygonInformation.deletePolygonInformationStorage(),this.drawModeListeners.length=0,this._boundKeyDownHandler&&(this._boundKeyDownHandler=void 0),this._boundKeyUpHandler&&(this._boundKeyUpHandler=void 0),this._boundTouchMove&&(this._boundTouchMove=void 0),this._boundTouchEnd&&(this._boundTouchEnd=void 0),this._boundTouchStart&&(this._boundTouchStart=void 0),this._boundPointerDown&&(this._boundPointerDown=void 0),this._boundPointerMove&&(this._boundPointerMove=void 0),this._boundPointerUp&&(this._boundPointerUp=void 0),this._tapTimeout&&(clearTimeout(this._tapTimeout),this._tapTimeout=null),this.drawMode=c.Off,this.isModifierKeyHeld=!1,this._lastTapTime=0,this.layerPanel){try{this.layerPanel.remove()}catch{}this.layerPanel=null}this.subContainer=void 0,this._componentsInitialized=!1}addTo(t){return super.addTo(t),this}getFeatureGroups(){return this.arrayOfFeatureGroups}async undo(){if(!this.historyManager.canUndo())return;const t=this.historyManager.undo(this.arrayOfFeatureGroups,this.layerManager);t&&await this.restoreFromSnapshot(t)}isPolygonAction(t){return"simplify"===t||"doubleElbows"===t||"bbox"===t||"bezier"===t||"scale"===t||"rotate"===t||"toggleOptimization"===t}shouldCaptureHistory(t){var e,r;const o=null==(e=this.config.history)?void 0:e.capture;return!o||(this.isPolygonAction(t)?!1!==(null==(r=o.polygonActions)?void 0:r[t]):!1!==o[t])}saveHistory(t){this.isHistorySuppressed()||this.shouldCaptureHistory(t)&&this.historyManager.saveState(this.arrayOfFeatureGroups,t,this.layerManager)}isHistorySuppressed(){return this._historySuppressionDepth>0}startHistoryBatch(t){this.isHistorySuppressed()||this.saveHistory(t),this._historySuppressionDepth+=1}endHistoryBatch(){this._historySuppressionDepth>0&&(this._historySuppressionDepth-=1)}async redo(){if(!this.historyManager.canRedo())return;const t=this.historyManager.redo(this.arrayOfFeatureGroups,this.layerManager);t&&await this.restoreFromSnapshot(t)}resolvePredefinedLayerDescriptor(t,e){if(!t)return null;if("string"==typeof t){const r=t.trim();if(!r)throw new Error("Layer id cannot be empty");return{id:r,color:e}}const r=(t.id||"").trim();if(!r)throw new Error("Layer descriptor must include a non-empty id");const o={...t,id:r,color:e??t.color};return"static"===o.interaction&&void 0===o.panel&&(o.panel="hidden"),o}ensureLayerFromDescriptor(t){const e=t.id.trim(),r=this.layerManager.getOrCreateLayer(e,{label:t.label,color:t.color,visible:t.visibility,interaction:t.interaction,panel:t.panel??("static"===t.interaction?"hidden":void 0),metadata:t.metadata});return void 0!==t.label&&this.layerManager.setLayerLabel(e,t.label),t.color&&this.layerManager.setLayerColor(e,t.color),void 0!==t.visibility&&this.layerManager.setLayerVisibility(e,t.visibility),void 0!==t.interaction&&this.layerManager.setLayerInteraction(e,t.interaction),void 0===t.panel&&"static"!==t.interaction||this.layerManager.setLayerPanelVisibility(e,t.panel??("static"===t.interaction?"hidden":"visible")),void 0!==t.metadata&&this.layerManager.setLayerMetadata(e,t.metadata),this.layerManager.getLayer(e)??r}getInteractionTargetLayerId(){if(!this.layerManager)return;const t=this.layerManager.getActiveLayerId();if(this.layerManager.isLayerEditable(t))return t;if(this.layerManager.isLayerEditable("default"))return"default";const e=this.layerManager.getAllLayers().find(t=>"editable"===t.interaction);return null==e?void 0:e.id}ensureFeatureGroupMetadata(t){const e=t;if(e._polydrawMetadata)return e._polydrawMetadata;let r=0,o=0;t.eachLayer(t=>{if(t instanceof s.Polygon&&!(t instanceof s.Rectangle)){const e=t;"number"==typeof e._polydrawOptimizationLevel&&(r=e._polydrawOptimizationLevel),"number"==typeof e._polydrawOptimizationOriginalLevel&&(o=e._polydrawOptimizationOriginalLevel)}});const n=new Date,i=`fg-${Yn.util.stamp(t)}`;return e._polydrawMetadata={id:i,optimizationLevel:r,originalOptimizationLevel:o,hasHoles:!1,createdAt:n,lastModified:n,metadata:{},sourceFeatureIds:[i]},e._polydrawMetadata}async addPredefinedPolygon(t,e){var r,o,n;const i=xi.convertToLatLngArray(t);if(!i||0===i.length)throw new Error("Cannot add empty polygon array");if(!this.map)throw new Error("Map not initialized");if(!this.polygonMutationManager)throw new Error("PolygonMutationManager not initialized");if(!this.layerManager)throw new Error("LayerManager not initialized");for(const[p,f]of i.entries())if(!f||!f[0]||f[0].length<4)throw new Error(`Invalid polygon data at index ${p}: A polygon must have at least 3 unique vertices.`);const a=(null==e?void 0:e.visualOptimizationLevel)??0,s=(null==(r=null==e?void 0:e.overrides)?void 0:r.interaction)&&"inherit"!==e.overrides.interaction?e.overrides.interaction:void 0,l=(null==(o=null==e?void 0:e.overrides)?void 0:o.style)?{...e.overrides.style}:void 0,c=(null==(n=null==e?void 0:e.overrides)?void 0:n.merge)??"inherit";let h,u,g=!1;if(null==e?void 0:e.layer){const t=this.resolvePredefinedLayerDescriptor(e.layer,e.layerColor);if(t){const e=this.ensureLayerFromDescriptor(t);h=e.id,u=e.color,g="editable"!==e.interaction}this.updateLayerPanel()}else(null==e?void 0:e.layerColor)&&(u=e.layerColor);this.startHistoryBatch("addPredefinedPolygon");try{for(const t of i)try{const r=t.map(t=>t.map(t=>[t.lng,t.lat])),o=this.turfHelper.getMultiPolygon([r]),n="allow"!==c&&("block"===c||g),i=await this.polygonMutationManager.addPolygon(o,{simplify:!1,noMerge:n,mergeEditableOnly:"allow"!==c,visualOptimizationLevel:a,targetLayerId:h,layerColor:u,featureMetadata:null==e?void 0:e.metadata,featureInteractionOverride:s,featureStyleOverrides:l});if(!i.success)throw console.error("Error adding polygon via manager:",i.error),new Error(i.error||"Failed to add polygon");this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups)}catch(d){throw console.error("Error adding auto polygon:",d),d}}finally{this.endHistoryBatch()}}async addPredefinedGeoJSONs(t,e){if(!Array.isArray(t)||0===t.length)throw new Error("Cannot add empty GeoJSON feature array");this.startHistoryBatch("addPredefinedPolygon");try{for(const r of t){const{type:t,coordinates:o}=r.geometry,n=(null==e?void 0:e.metadata)??(r.properties?{...r.properties}:void 0),i={...e,metadata:n};if("MultiPolygon"===t)for(const e of o){const t=e.map(t=>t.map(t=>Yn.createLatLng(t[1],t[0])));await this.addPredefinedPolygon([t],i)}else if("Polygon"===t){const t=o.map(t=>t.map(t=>Yn.createLatLng(t[1],t[0])));await this.addPredefinedPolygon([t],i)}}}finally{this.endHistoryBatch()}}async addPredefinedPolygonGroups(t){if(!Array.isArray(t)||0===t.length)throw new Error("Cannot add empty polygon group array");if(!this.layerManager)throw new Error("LayerManager not initialized");this.startHistoryBatch("addPredefinedPolygon");try{const e=t.map(t=>{const e=this.resolvePredefinedLayerDescriptor(t.layer);if(!e)throw new Error("Polygon group layer descriptor is missing");return{descriptor:e,polygons:t.polygons,options:t.options}});for(const t of e)this.ensureLayerFromDescriptor(t.descriptor);for(const t of e)for(const e of t.polygons)await this.addPredefinedPolygon(e,{layer:t.descriptor,...t.options})}finally{this.endHistoryBatch()}this.updateLayerPanel()}getLayerManager(){return this.layerManager}getAllLayers(){return this.layerManager.getAllLayers()}getLayerById(t){return this.layerManager.getLayer(t)}hasLayer(t){return!!this.layerManager.getLayer(t)}getActiveLayer(){return this.layerManager.getActiveLayer()}getFeatureGroupsByLayer(t){return this.layerManager.getFeatureGroupsForLayer(t)}createLayer(t){const e=(t.id||"").trim();if(!e)throw new Error("Layer id cannot be empty");if(this.layerManager.getLayer(e))throw new Error(`Layer "${e}" already exists`);return this.ensureLayer(t)}ensureLayer(t){const e=this.ensureLayerFromDescriptor(t);return this.updateLayerPanel(),this.updateMarkerDraggableState(),e}updateLayer(t,e){if(!this.layerManager.getLayer(t))return;let r=!1;return"label"in e&&(r=this.layerManager.setLayerLabel(t,e.label)||r),"string"==typeof e.color&&(r=this.layerManager.setLayerColor(t,e.color)||r),"boolean"==typeof e.visibility&&(r=this.layerManager.setLayerVisibility(t,e.visibility)||r),void 0!==e.interaction&&(r=this.layerManager.setLayerInteraction(t,e.interaction)||r,"static"===e.interaction&&void 0===e.panel&&(r=this.layerManager.setLayerPanelVisibility(t,"hidden")||r)),void 0!==e.panel&&(r=this.layerManager.setLayerPanelVisibility(t,e.panel)||r),void 0!==e.metadata&&(r=this.layerManager.setLayerMetadata(t,e.metadata)||r),r&&(this.updateLayerPanel(),this.updateMarkerDraggableState(),this.syncFeatureGroupOrderWithLayers()),this.layerManager.getLayer(t)}deleteLayer(t){const e=(t||"").trim();if(!e||!this.layerManager.getLayer(e))return{success:!1,layerId:e,removedFeatureGroups:0,reason:"not-found"};if("default"===e)return{success:!1,layerId:e,removedFeatureGroups:0,reason:"default-layer"};this.saveHistory("layerDelete");return{success:!0,layerId:e,removedFeatureGroups:this.layerManager.deleteLayer(e).length}}setActiveLayer(t){return this.layerManager.setActiveLayer(t)}setLayerVisibility(t,e){return this.layerManager.setLayerVisibility(t,e)}showLayer(t){return this.setLayerVisibility(t,!0)}hideLayer(t){return this.setLayerVisibility(t,!1)}setLayerColor(t,e){return this.layerManager.setLayerColor(t,e)}setLayerInteraction(t,e){const r=this.layerManager.setLayerInteraction(t,e);return r&&(this.updateMarkerDraggableState(),this.updateLayerPanel()),r}setLayerPanelVisibility(t,e){const r=this.layerManager.setLayerPanelVisibility(t,e);return r&&this.updateLayerPanel(),r}setLayerMetadata(t,e){return this.layerManager.setLayerMetadata(t,e)}patchLayerMetadata(t,e){const r=this.layerManager.getLayer(t);return!!r&&this.layerManager.setLayerMetadata(t,{...r.metadata,...e})}getFeatureMetadata(t){const e=t._polydrawMetadata;if(null==e?void 0:e.metadata)return{...e.metadata}}setFeatureMetadata(t,e){if(!t)return!1;const r=this.ensureFeatureGroupMetadata(t);return r.metadata={...e},r.lastModified=new Date,!0}patchFeatureMetadata(t,e){if(!t)return!1;const r=this.getFeatureMetadata(t)??{};return this.setFeatureMetadata(t,{...r,...e})}reorderLayer(t,e){if("default"===t||"default"===e)return!1;const r=this.layerManager.getAllLayers().map(t=>t.id),o=r.indexOf(t),n=r.indexOf(e);return!(o<0||n<0||o===n)&&(this.saveHistory("layerReorder"),this.layerManager.moveLayer(t,e))}beginBatch(t="batch"){this.startHistoryBatch(t)}endBatch(){this.endHistoryBatch()}setDrawMode(t,e){const r=this.drawMode;this._updateDrawModeState(t);if(!((null==e?void 0:e.preserveActiveDraw)&&this.isDrawingInProgress&&(r===c.Add&&t===c.Subtract||r===c.Subtract&&t===c.Add))){(t===c.PointToPoint||t===c.PointToPointSubtract)&&r!==c.PointToPoint&&r!==c.PointToPointSubtract&&this.isDrawingInProgress&&this.stopDraw(),r!==c.PointToPoint&&r!==c.PointToPointSubtract||t===c.PointToPoint||t===c.PointToPointSubtract?(t===c.Off||t!==c.PointToPoint&&t!==c.PointToPointSubtract)&&this.stopDraw():(this.polygonDrawManager.clearP2pMarkers(),this.stopDraw())}this.map&&(this._updateUIAfterDrawModeChange(t),this._updateMapInteractions())}getDrawMode(){return this.modeManager.getCurrentMode()}on(t,e){this.eventManager.on(t,e)}off(t,e){this.eventManager.off(t,e)}removeAllFeatureGroups(){this.arrayOfFeatureGroups.forEach(t=>{try{this.polygonMutationManager&&this.polygonMutationManager.cleanupFeatureGroup(t),this.map.removeLayer(t)}catch{}}),this.arrayOfFeatureGroups.length=0,this._lastAppliedVisibleMapOrder=[],this.layerManager&&this.layerManager.clear(this.config.styles.polygon.color),this.polygonInformation.deletePolygonInformationStorage(),this.polygonInformation.updatePolygons(),this.updateActivateButtonIndicator(),this.updateLayerPanel()}cleanup(){this.map&&this.comprehensiveCleanup()}initializeUI(t){!function(t){const e=document.createElement("style");e.innerHTML=`\n .leaflet-control a { background-color: ${t.styles.ui.controlButton.backgroundColor}; color: ${t.styles.ui.controlButton.color}; display: flex; align-items: center; justify-content: center; }\n .leaflet-control a:hover { background-color: ${t.styles.ui.controlButtonHover.backgroundColor}; }\n .leaflet-control a.active { background-color: ${t.styles.ui.controlButtonActive.backgroundColor}; color: ${t.styles.ui.controlButtonActive.color}; }\n .polydraw-indicator-active { background-color: ${t.styles.ui.indicatorActive.backgroundColor} !important; }\n .crosshair-cursor-enabled { cursor: crosshair !important; }\n .crosshair-cursor-enabled * { cursor: crosshair !important; }\n .leaflet-polydraw-p2p-marker { background-color: ${t.styles.ui.p2pMarker.backgroundColor}; border: 2px solid ${t.styles.ui.p2pMarker.borderColor}; border-radius: 50%; box-sizing: border-box; }\n .leaflet-polydraw-p2p-first-marker { position: relative; }\n .leaflet-polydraw-p2p-first-marker:hover { transform: scale(1.5); transition: all 0.2s ease; }\n .leaflet-polydraw-p2p-first-marker-ready[data-p2p-mode="add"]:hover { background-color: ${t.styles.ui.p2pClosingMarker.color}; border-color: ${t.styles.ui.p2pClosingMarker.color}; cursor: pointer; }\n .leaflet-polydraw-p2p-first-marker-ready[data-p2p-mode="subtract"]:hover { background-color: ${t.styles.ui.dragSubtract.color}; border-color: ${t.styles.ui.dragSubtract.color}; cursor: pointer; }\n `,document.head.appendChild(e)}(this.config),s.DomEvent.disableClickPropagation(t),s.DomEvent.on(t,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(t,"pointerdown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"pointerup",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stopPropagation);const e=t=>{this.controlEvents.add(t),this.markControlPointerDown(t)},r=t=>{this.clearControlPointerDown(t)};this.pointerEventsHandled?(t.addEventListener("pointerdown",e,{capture:!0,passive:!0}),t.addEventListener("pointerup",r,{capture:!0,passive:!0}),t.addEventListener("pointercancel",r,{capture:!0,passive:!0})):(t.addEventListener("mousedown",e,{capture:!0,passive:!0}),t.addEventListener("mouseup",r,{capture:!0,passive:!0}),t.addEventListener("touchstart",e,{capture:!0,passive:!0}),t.addEventListener("touchend",r,{capture:!0,passive:!0}),t.addEventListener("touchcancel",r,{capture:!0,passive:!0})),t.style.display="flex",t.style.flexDirection="column-reverse",t.style.pointerEvents="auto",t.style.position="relative",t.style.zIndex="1000";const o=this.config.tooltips;if(o){const e=Math.max(0,o.delayMs);t.setAttribute("data-tooltip-enabled",o.enabled?"true":"false"),t.setAttribute("data-tooltip-direction",o.direction),t.style.setProperty("--polydraw-tooltip-bg",o.backgroundColor),t.style.setProperty("--polydraw-tooltip-color",o.color),t.style.setProperty("--polydraw-tooltip-delay",`${e}ms`)}this.subContainer=Yn.domUtil.create("div","sub-buttons",t),this.subContainer.setAttribute("data-polydraw","sub-buttons"),this.subContainer.style.maxHeight="0px",this.subContainer.style.overflow="hidden",this.subContainer.style.transition="max-height 0.3s ease",this.subContainer.style.pointerEvents="auto",this.subContainer.style.position="relative",this.eventManager||(this.eventManager=new ti),this.historyManager||(this.historyManager=new wi(this.eventManager,this.config.history.maxSize)),function(t,e,r,o,n,i,a,l,c,h,u,g,d,p){const f=Yn.domUtil.create("a","icon-activate",t);if(f.href="#",$n(f,"Activate"),f.setAttribute("data-polydraw","activate-button"),Kn(f,jn.activate),f.dataset.activeIcon=jn.activate,f.dataset.collapsedIcon=jn.collapse,s.DomEvent.on(f,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(f,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(f,"click",s.DomEvent.stop).on(f,"click",o),r.tools.draw){const t=Yn.domUtil.create("a","icon-draw",e);t.href="#",$n(t,"Draw"),t.setAttribute("data-polydraw","draw-button"),Kn(t,jn.draw),s.DomEvent.on(t,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stop),s.DomEvent.on(t,"click",n)}if(r.tools.subtract){const t=Yn.domUtil.create("a","icon-subtract",e);t.href="#",$n(t,"Subtract"),t.setAttribute("data-polydraw","subtract-button"),Kn(t,jn.subtract),s.DomEvent.on(t,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stop),s.DomEvent.on(t,"click",i)}if(r.tools.p2p){const t=Yn.domUtil.create("a","icon-p2p",e);t.href="#",$n(t,"Point to Point"),t.setAttribute("data-polydraw","p2p-button"),Kn(t,jn.p2p),s.DomEvent.on(t,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stop),s.DomEvent.on(t,"click",c)}if(r.tools.p2pSubtract){const t=Yn.domUtil.create("a","icon-p2p-subtract",e);t.href="#",$n(t,"Point to Point Subtract"),t.setAttribute("data-polydraw","p2p-subtract-button"),Kn(t,jn.p2pSubtract),s.DomEvent.on(t,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stop),s.DomEvent.on(t,"click",h)}if(r.tools.clone){const t=Yn.domUtil.create("a","icon-clone",e);t.href="#",$n(t,"Clone"),t.setAttribute("data-polydraw","clone-button"),Kn(t,jn.clone),s.DomEvent.on(t,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stop),s.DomEvent.on(t,"click",a)}if(r.tools.erase){const t=Yn.domUtil.create("a","icon-erase",e);t.href="#",$n(t,"Erase All"),t.setAttribute("data-polydraw","erase-button"),Kn(t,jn.erase),s.DomEvent.on(t,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(t,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stopPropagation),s.DomEvent.on(t,"click",s.DomEvent.stop),s.DomEvent.on(t,"click",l)}const y=Yn.domUtil.create("a","icon-undo",e);y.href="#",$n(y,"Undo (Ctrl+Z / Cmd+Z)"),Kn(y,jn.undo),s.DomEvent.on(y,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(y,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(y,"click",s.DomEvent.stopPropagation),s.DomEvent.on(y,"click",s.DomEvent.stop),s.DomEvent.on(y,"click",u);const m=Yn.domUtil.create("a","icon-redo",e);m.href="#",$n(m,"Redo (Ctrl+Y / Cmd+Shift+Z)"),Kn(m,jn.redo),s.DomEvent.on(m,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(m,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(m,"click",s.DomEvent.stopPropagation),s.DomEvent.on(m,"click",s.DomEvent.stop),s.DomEvent.on(m,"click",g);const v=(t,e)=>{t?(y.style.opacity="1",y.style.pointerEvents="auto"):(y.style.opacity="0.3",y.style.pointerEvents="none"),e?(m.style.opacity="1",m.style.pointerEvents="auto"):(m.style.opacity="0.3",m.style.pointerEvents="none")};d.on("polydraw:history:changed",t=>{v(t.canUndo,t.canRedo)}),d.on("polydraw:history:undo",t=>{v(t.canUndo,t.canRedo)}),d.on("polydraw:history:redo",t=>{v(t.canUndo,t.canRedo)}),v(p.canUndo(),p.canRedo())}(t,this.subContainer,this.config,this._handleActivateToggle,this._handleDrawClick,this._handleSubtractClick,this._handleCloneClick,this._handleEraseClick,this._handlePointToPointClick,this._handlePointToPointSubtractClick,this._handleUndoClick,this._handleRedoClick,this.eventManager,this.historyManager),this.ensureButtonTouchResponsiveness(t),this.updateActivateButtonIndicator();this.drawModeListeners.push(e=>{const r=t.querySelector(".icon-draw"),o=t.querySelector(".icon-subtract"),n=t.querySelector(".icon-p2p"),i=t.querySelector(".icon-p2p-subtract"),a=t.querySelector(".icon-clone");r&&r.classList.toggle("active",e===c.Add),o&&o.classList.toggle("active",e===c.Subtract),n&&n.classList.toggle("active",e===c.PointToPoint),i&&i.classList.toggle("active",e===c.PointToPointSubtract),a&&a.classList.toggle("active",e===c.Clone)})}addCoreEventListener(t,e){this.eventManager.on(t,e),this._coreEventSubscriptions.push({event:t,callback:e})}removeCoreEventListeners(){if(this.eventManager){for(const t of this._coreEventSubscriptions)this.eventManager.off(t.event,t.callback);this._coreEventSubscriptions.length=0,this._coreEventListenersAttached=!1}else this._coreEventListenersAttached=!1}setupEventListeners(){this._coreEventListenersAttached||(this._coreEventListenersAttached=!0,this.addCoreEventListener("polygonOperationComplete",()=>{this.updateActivateButtonIndicator(),this.modeManager.updateStateForMode(c.Off),this.drawMode=c.Off,this.emitDrawModeChanged(),this.updateMarkerDraggableState();const t=this.modeManager.shouldShowCrosshairCursor(),e=this.modeManager.canPerformAction("mapDrag"),r=this.modeManager.canPerformAction("mapZoom"),o=this.modeManager.canPerformAction("mapDoubleClickZoom");t?Yn.domUtil.addClass(this.map.getContainer(),"crosshair-cursor-enabled"):Yn.domUtil.removeClass(this.map.getContainer(),"crosshair-cursor-enabled"),this.events(!1),this.setLeafletMapEvents(e,o,r),this.applyTracerStyle(c.Off),this.syncFeatureGroupOrderWithLayers(),this.cleanupEmptyLayers()}),this.addCoreEventListener("polygonDeleted",()=>{this.updateActivateButtonIndicator(),this.cleanupEmptyLayers()}),this.addCoreEventListener("polydraw:polygon:created",async t=>{this.stopDraw();const e=this.getInteractionTargetLayerId();t.isPointToPoint?(this.saveHistory("pointToPoint"),t.mode===c.PointToPointSubtract?await this.polygonMutationManager.subtractPolygon(t.polygon,{simplify:!1,targetLayerId:e}):await this.polygonMutationManager.addPolygon(t.polygon,{simplify:!1,noMerge:!1,targetLayerId:e})):await this.handleFreehandDrawCompletion(t.polygon),this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups)}),this.addCoreEventListener("polydraw:draw:cancel",()=>{this.stopDraw(),this.setDrawMode(this.config.tools.default)}),this.addCoreEventListener("polydraw:layer:visibility",t=>{const e=this.layerManager.getLayer(t.layerId);if(e){for(const r of e.featureGroups)try{t.visible?r.addTo(this.map):this.map.removeLayer(r)}catch{}this.syncFeatureGroupOrderWithLayers(),this.updateLayerPanel()}}),this.addCoreEventListener("polydraw:layer:activated",()=>{this.updateMarkerDraggableState(),this.updateLayerPanel()}),this.addCoreEventListener("polydraw:layer:colorChanged",()=>{this.updateLayerPanel()}),this.addCoreEventListener("polydraw:layer:created",()=>{this.updateLayerPanel()}),this.addCoreEventListener("polydraw:layer:delete-requested",t=>{this.saveHistory("layerDelete"),this.layerManager.deleteLayer(t.layerId)}),this.addCoreEventListener("polydraw:layer:reorder-requested",t=>{this.reorderLayer(t.layerId,t.targetLayerId)}),this.addCoreEventListener("polydraw:layer:reordered",()=>{this.syncFeatureGroupOrderWithLayers(),this.polygonInformation.deletePolygonInformationStorage(),this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups),this.updateLayerPanel()}),this.addCoreEventListener("polydraw:layer:deleted",t=>{for(const e of t.removedFeatureGroups){try{this.polygonMutationManager&&this.polygonMutationManager.cleanupFeatureGroup(e),e.clearLayers(),this.map.removeLayer(e)}catch{}const t=this.arrayOfFeatureGroups.indexOf(e);t>-1&&this.arrayOfFeatureGroups.splice(t,1)}this.syncFeatureGroupOrderWithLayers(),this.polygonInformation.updatePolygons(),this.updateActivateButtonIndicator(),this.updateMarkerDraggableState(),this.updateLayerPanel()}))}createTracer(){this.tracer=Yn.createPolyline([],{...this.config.styles.polyline});try{this.tracer.addTo(this.map)}catch{}}applyTracerStyle(t){if(this.tracer)try{const e=t===c.Subtract||t===c.PointToPointSubtract,r=this.getTracerBaseStyle(e);let o,n="";switch(t){case c.Add:n=this.config.styles.polyline.color,o=void 0;break;case c.Subtract:n=this.config.styles.subtractLine.color,o=void 0;break;case c.PointToPoint:n=this.config.styles.polyline.color,o="5, 5";break;case c.PointToPointSubtract:n=this.config.styles.subtractLine.color,o="5, 5";break;case c.Off:default:n="",o=void 0}this.tracer.setStyle({...r,color:n,dashArray:o})}catch{}}getTracerBaseStyle(t){const e=t?this.config.styles.subtractLine:this.config.styles.polyline;return{weight:e.weight,opacity:e.opacity}}initializeManagers(){this.polygonDrawManager=new ri({turfHelper:this.turfHelper,map:this.map,config:this.config,modeManager:this.modeManager,eventManager:this.eventManager,tracer:this.tracer}),this.polygonMutationManager=new Mi({turfHelper:this.turfHelper,polygonInformation:this.polygonInformation,map:this.map,config:this.config,modeManager:this.modeManager,eventManager:this.eventManager,getFeatureGroups:()=>this.arrayOfFeatureGroups,saveHistoryState:t=>{this.saveHistory(t)},layerManager:this.layerManager})}async loadExternalConfig(t,e){try{const r=await fetch(t);if(!r.ok)throw new Error(`Failed to load config from ${t}: ${r.status} ${r.statusText}`);const o=await r.json();Si(o),e&&Si(e),this.config=Nn(structuredClone(u),o??{},e??{}),Ii(this.config),this.initializeComponents()}catch(r){console.warn("Failed to load external config, falling back to default + inline config:",r),this.config=Nn(structuredClone(u),e??{}),Ii(this.config),this.initializeComponents()}}_updateDrawModeState(t){var e;this.drawMode=t,this.modeManager.updateStateForMode(t),this.emitDrawModeChanged(),this.updateMarkerDraggableState(),(null==(e=this.polygonDrawManager)?void 0:e.refreshP2PMarkerState)&&this.polygonDrawManager.refreshP2PMarkerState()}_updateUIAfterDrawModeChange(t){this.modeManager.shouldShowCrosshairCursor()?Yn.domUtil.addClass(this.map.getContainer(),"crosshair-cursor-enabled"):Yn.domUtil.removeClass(this.map.getContainer(),"crosshair-cursor-enabled"),this.applyTracerStyle(t)}shouldEnableDrawEvents(t){return t===c.Add||t===c.Subtract||t===c.PointToPoint||t===c.PointToPointSubtract}_updateMapInteractions(){const t=this.modeManager.canPerformAction("mapDrag"),e=this.modeManager.canPerformAction("mapZoom"),r=this.modeManager.canPerformAction("mapDoubleClickZoom");this.events(this.shouldEnableDrawEvents(this.drawMode)),this.setLeafletMapEvents(t,r,e)}async restoreFromSnapshot(t){var e,r,o;if(t&&Array.isArray(t.features)){this.historyManager.setRestoring(!0),this._isRestoringSnapshot=!0;try{this.removeAllFeatureGroups();for(const[o,n]of t.features.entries()){const i=null==(e=t.featureMetadataSnapshot)?void 0:e[o],a=(null==i?void 0:i.layerId)&&(null==(r=this.layerManager)?void 0:r.getLayer(i.layerId))?i.layerId:void 0;await this.polygonMutationManager.addPolygon(n,{noMerge:!0,simplify:!1,skipKinkProcessing:!0,targetLayerId:a,visualOptimizationLevel:(null==i?void 0:i.optimizationLevel)??0,originalOptimizationLevel:null==i?void 0:i.originalOptimizationLevel,featureId:null==i?void 0:i.id,featureMetadata:null==i?void 0:i.metadata,sourceFeatureIds:null==i?void 0:i.sourceFeatureIds,featureInteractionOverride:null==i?void 0:i.interactionOverride,featureStyleOverrides:null==i?void 0:i.styleOverrides,featureCreatedAt:null==i?void 0:i.createdAt,featureLastModified:null==i?void 0:i.lastModified})}if(t.layerSnapshot&&this.layerManager){this.layerManager.restoreFromLayerSnapshot(t.layerSnapshot,this.arrayOfFeatureGroups);for(const t of this.layerManager.getAllLayers()){for(const e of t.featureGroups){const r=null==(o=e._polydrawMetadata)?void 0:o.styleOverrides;e.eachLayer(e=>{e instanceof s.Polygon&&!(e instanceof s.Rectangle)&&e.setStyle({color:(null==r?void 0:r.color)??t.color,fillColor:(null==r?void 0:r.fillColor)??this.config.styles.polygon.fillColor,fillOpacity:(null==r?void 0:r.fillOpacity)??this.config.styles.polygon.fillOpacity,weight:(null==r?void 0:r.weight)??this.config.styles.polygon.weight})})}if(!t.visible)for(const e of t.featureGroups)try{this.map.removeLayer(e)}catch{}}this.updateLayerPanel()}this.layerManager&&this.syncFeatureGroupOrderWithLayers(),this.polygonInformation.updatePolygons(),this.updateMarkerDraggableState()}finally{this._isRestoringSnapshot=!1,this.historyManager.setRestoring(!1)}}else console.warn("Invalid history snapshot provided for restore; skipping restore operation.")}initializeComponents(){this._componentsInitialized||(this._componentsInitialized=!0,this.turfHelper=new Un(this.config),this.mapStateService=new Qn,this.eventManager=this.eventManager??new ti,this.polygonInformation=new Zn(this.mapStateService),this.modeManager=new ei(this.config,this.eventManager),this.historyManager?this.historyManager.setMaxHistorySize(this.config.history.maxSize):this.historyManager=new wi(this.eventManager,this.config.history.maxSize),this.layerManager=new bi(this.eventManager,this.config.styles.polygon.color),this.polygonInformation.onPolygonInfoUpdated(t=>{this.updateActivateButtonIndicator()}),this._boundKeyDownHandler=this.handleKeyDown.bind(this))}emitDrawModeChanged(){this.eventManager.emit("polydraw:mode:change",{mode:this.modeManager.getCurrentMode()});for(const t of this.drawModeListeners)t(this.modeManager.getCurrentMode())}updateMarkerDraggableState(){this.polygonMutationManager&&this.polygonMutationManager.updateMarkerDraggableState()}updateLayerPanel(){if(!this.map||!this.layerManager)return;if(this.layerManager.getPanelLayerCount()>1){if(!this.layerPanel){const t=function(t,e){let r=!1,o=null,n=null,i=!1;const a=()=>{if(!o)return;if(n)return void(i=!0);o.innerHTML="";const l=t.getPanelLayers(),c=t.getActiveLayerId();n&&!l.some(t=>t.id===n)&&(n=null),o.classList.toggle("polydraw-layer-panel-collapsed",r);const h=s.DomUtil.create("div","polydraw-layer-header",o);s.DomUtil.create("span","polydraw-layer-header-title",h).textContent="Layers",s.DomUtil.create("span","polydraw-layer-header-count",h).textContent=String(l.length);const u=s.DomUtil.create("button","polydraw-layer-header-toggle",h);if(u.setAttribute("type","button"),u.setAttribute("aria-label",r?"Expand layer panel":"Collapse layer panel"),u.setAttribute("title",r?"Expand layers":"Collapse layers"),Vn(u,Li.toggle),u.classList.toggle("is-collapsed",r),u.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),r=!r,a()}),r)return;const g=()=>{o&&o.querySelectorAll(".polydraw-layer-row").forEach(t=>{t.classList.remove("polydraw-layer-row-dragging"),t.classList.remove("polydraw-layer-row-drag-over")})},d=()=>{i&&(i=!1,a())},p=t=>{var e,r;return(null==(r=null==(e=null==t?void 0:t.dataTransfer)?void 0:e.getData("text/plain"))?void 0:r.trim())||n};l.forEach(r=>{var i;const a=(null==(i=r.label)?void 0:i.trim())?r.label:r.id,l=s.DomUtil.create("div","polydraw-layer-row",o??void 0);if(l.setAttribute("tabindex","0"),l.setAttribute("role","button"),l.setAttribute("draggable","default"===r.id?"false":"true"),l.setAttribute("aria-label",`Activate layer ${a}`),l.setAttribute("data-layer-id",r.id),r.id===c&&l.classList.add("polydraw-layer-row-active"),r.visible||l.classList.add("polydraw-layer-hidden"),"default"!==r.id){const t=s.DomUtil.create("span","polydraw-layer-grip",l);t.setAttribute("aria-hidden","true"),Vn(t,Li.grip)}else s.DomUtil.create("span","polydraw-layer-grip-spacer",l).setAttribute("aria-hidden","true");s.DomUtil.create("span","polydraw-layer-color-indicator",l).style.backgroundColor=r.color;const h=s.DomUtil.create("span","polydraw-layer-name",l);h.textContent=a,h.setAttribute("title",a);const u=s.DomUtil.create("button","polydraw-layer-btn polydraw-layer-visibility",l);if(u.setAttribute("type","button"),u.setAttribute("title",r.visible?"Hide layer":"Show layer"),u.setAttribute("aria-label",r.visible?`Hide layer ${a}`:`Show layer ${a}`),Vn(u,r.visible?Li.eyeVisible:Li.eyeHidden),r.visible||u.classList.add("polydraw-layer-visibility-hidden"),u.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),t.setLayerVisibility(r.id,!r.visible)}),"default"!==r.id){const t=s.DomUtil.create("button","polydraw-layer-btn polydraw-layer-delete",l);t.setAttribute("type","button"),t.setAttribute("title","Delete layer"),t.setAttribute("aria-label",`Delete layer ${a}`),Vn(t,Li.delete),t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),e.emit("polydraw:layer:delete-requested",{layerId:r.id})})}else s.DomUtil.create("span","polydraw-layer-btn-spacer",l).setAttribute("aria-hidden","true");l.addEventListener("click",()=>{t.setActiveLayer(r.id)}),l.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),t.setActiveLayer(r.id))}),"default"!==r.id&&(l.addEventListener("dragstart",t=>{n=r.id,l.classList.add("polydraw-layer-row-dragging"),t.dataTransfer&&(t.dataTransfer.effectAllowed="move",t.dataTransfer.setData("text/plain",r.id))}),l.addEventListener("dragend",()=>{n=null,g(),d()})),l.addEventListener("dragover",t=>{const e=p(t);e&&e!==r.id&&"default"!==r.id&&(t.preventDefault(),l.classList.add("polydraw-layer-row-drag-over"),t.dataTransfer&&(t.dataTransfer.dropEffect="move"))}),l.addEventListener("dragleave",()=>{l.classList.remove("polydraw-layer-row-drag-over")}),l.addEventListener("drop",t=>{const o=p(t);o&&o!==r.id&&"default"!==r.id&&(t.preventDefault(),t.stopPropagation(),e.emit("polydraw:layer:reorder-requested",{layerId:o,targetLayerId:r.id}),n=null,g(),d())})})},l=new(s.Control.extend({options:{position:"topright"},onAdd:()=>(o=s.DomUtil.create("div","leaflet-bar polydraw-layer-panel"),o.setAttribute("data-polydraw","layer-panel"),s.DomEvent.disableClickPropagation(o),s.DomEvent.disableScrollPropagation(o),s.DomEvent.on(o,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.on(o,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.on(o,"dragstart",s.DomEvent.stopPropagation),s.DomEvent.on(o,"dragover",s.DomEvent.stopPropagation),s.DomEvent.on(o,"drop",s.DomEvent.stopPropagation),a(),o),onRemove(){o&&(s.DomEvent.off(o,"mousedown",s.DomEvent.stopPropagation),s.DomEvent.off(o,"touchstart",s.DomEvent.stopPropagation),s.DomEvent.off(o,"dragstart",s.DomEvent.stopPropagation),s.DomEvent.off(o,"dragover",s.DomEvent.stopPropagation),s.DomEvent.off(o,"drop",s.DomEvent.stopPropagation),o=null,n=null,i=!1)}}));return l.refresh=()=>{a()},l}(this.layerManager,this.eventManager);return this.layerPanel=t,void t.addTo(this.map)}this.layerPanel.refresh()}else if(this.layerPanel){try{this.layerPanel.remove()}catch{}this.layerPanel=null}}syncFeatureGroupOrderWithLayers(){if(!this.layerManager)return;const t=this.arrayOfFeatureGroups;if(0===t.length)return;const e=new Set(t),r=new Set,o=[];for(const n of this.layerManager.getAllLayers())for(const t of n.featureGroups)e.has(t)&&!r.has(t)&&(r.add(t),o.push(t));for(const n of t)r.has(n)||o.push(n);this.isSameFeatureGroupOrder(t,o)||t.splice(0,t.length,...o),this.reapplyFeatureGroupMapOrder()}isSameFeatureGroupOrder(t,e){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r+=1)if(t[r]!==e[r])return!1;return!0}reapplyFeatureGroupMapOrder(){if(!this.map||!this.layerManager)return;const t=this.arrayOfFeatureGroups.filter(t=>{const e=this.layerManager.getLayerForFeatureGroup(t),r=e?this.layerManager.getLayer(e):void 0;return!r||!1!==r.visible}),e=new Set(t);if(!this.arrayOfFeatureGroups.every(t=>{const r=e.has(t);return this.map.hasLayer(t)===r})||!this.isSameFeatureGroupOrder(this._lastAppliedVisibleMapOrder,t)){for(const t of this.arrayOfFeatureGroups)if(!e.has(t)&&this.map.hasLayer(t))try{this.map.removeLayer(t)}catch{}for(const e of t)try{this.map.hasLayer(e)&&this.map.removeLayer(e),e.addTo(this.map)}catch{}this._lastAppliedVisibleMapOrder=[...t]}}cleanupEmptyLayers(){if(!this.layerManager||this._isRestoringSnapshot)return;const t=[];for(const e of this.layerManager.getAllLayers())"default"!==e.id&&0===e.featureGroups.length&&t.push(e.id);for(const e of t)this.layerManager.deleteLayer(e);t.length>0&&this.updateLayerPanel()}stopDraw(){this.isDrawingInProgress=!1,this.resetTracker(),this.drawStartedEvents(!1)}setLeafletMapEvents(t,e,r){t?this.map.dragging.enable():this.map.dragging.disable(),e?this.map.doubleClickZoom.enable():this.map.doubleClickZoom.disable(),r?this.map.scrollWheelZoom.enable():this.map.scrollWheelZoom.disable()}resetTracker(){var t;null==(t=this.tracer)||t.setLatLngs([])}drawStartedEvents(t){if(this.drawEventsAttached===t)return;this.drawEventsAttached=t;const e=this.pointerEventsHandled,r=t?"on":"off";e||(this.map[r]("mousemove",this.mouseMove,this),this.map[r]("mouseup",this.mouseUpLeave,this)),t?(e||(this._boundTouchMove||(this._boundTouchMove=t=>this.mouseMove(t)),this._boundTouchEnd||(this._boundTouchEnd=t=>this.mouseUpLeave(t)),this.map.getContainer().addEventListener("touchmove",this._boundTouchMove,{passive:!1}),this.map.getContainer().addEventListener("touchend",this._boundTouchEnd,{passive:!1})),e&&(this._boundPointerMove||(this._boundPointerMove=t=>this.mouseMove(t)),this._boundPointerUp||(this._boundPointerUp=t=>this.mouseUpLeave(t)),this.map.getContainer().addEventListener("pointermove",this._boundPointerMove,{passive:!1}),this.map.getContainer().addEventListener("pointerup",this._boundPointerUp,{passive:!1}))):(this._boundTouchMove&&this.map.getContainer().removeEventListener("touchmove",this._boundTouchMove),this._boundTouchEnd&&this.map.getContainer().removeEventListener("touchend",this._boundTouchEnd),this._boundPointerMove&&this.map.getContainer().removeEventListener("pointermove",this._boundPointerMove),this._boundPointerUp&&this.map.getContainer().removeEventListener("pointerup",this._boundPointerUp))}events(t){if(this.mapEventsAttached===t)return;this.mapEventsAttached=t;const e=this.pointerEventsHandled,r=t?"on":"off";e||this.map[r]("mousedown",this.mouseDown,this),this.map[r]("dblclick",this.handleDoubleClick,this),t?(e||(this._boundTouchStart||(this._boundTouchStart=t=>this.handleTouchStart(t)),this.map.getContainer().addEventListener("touchstart",this._boundTouchStart,{passive:!1})),e&&(this._boundPointerDown||(this._boundPointerDown=t=>this.mouseDown(t)),this.map.getContainer().addEventListener("pointerdown",this._boundPointerDown,{passive:!1}))):(this._boundTouchStart&&this.map.getContainer().removeEventListener("touchstart",this._boundTouchStart),this._boundPointerDown&&this.map.getContainer().removeEventListener("pointerdown",this._boundPointerDown))}handleTouchStart(t){const e=Date.now(),r=e-this._lastTapTime;if(this.modeManager.getCurrentMode()===c.PointToPoint||this.modeManager.getCurrentMode()===c.PointToPointSubtract){this._tapTimeout&&(clearTimeout(this._tapTimeout),this._tapTimeout=null);const o=ii.extractCoordinates(t,this.map);return this.isP2PDoubleTapClose(o,r)?(this.handleDoubleTap(t),this._lastTapTime=0,void(this._lastTapLatLng=null)):(this._lastTapTime=e,this._lastTapLatLng=o,void this.mouseDown(t))}this._tapTimeout&&(clearTimeout(this._tapTimeout),this._tapTimeout=null),r<300&&r>0?(this.handleDoubleTap(t),this._lastTapTime=0):(this._lastTapTime=e,this._lastTapLatLng=ii.extractCoordinates(t,this.map),this.pointerEventsHandled||(this._tapTimeout=window.setTimeout(()=>{this.mouseDown(t),this._tapTimeout=null},300)))}isP2PDoubleTapClose(t,e){if(!t||!this._lastTapLatLng)return!1;if(e<=0||e>300)return!1;const r=this.map.latLngToLayerPoint(this._lastTapLatLng),o=this.map.latLngToLayerPoint(t);return r.distanceTo(o)<=36}handleDoubleTap(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.polygonDrawManager.handleDoubleTap(t)}mouseDown(t){var e;const r=ii.normalizeEvent(t);if(this.isEventFromControl(r))return;if(ii.shouldPreventDefault(r)&&(null==(e=r.preventDefault)||e.call(r)),this.modeManager.isInOffMode())return;const o=ii.extractCoordinates(r,this.map);if(!o)return;const n=this.modeManager.getCurrentMode()===c.PointToPoint||this.modeManager.getCurrentMode()===c.PointToPointSubtract;if(n&&"touch"===r.pointerType){const e=Date.now(),r=e-this._lastTapTime;if(this.isP2PDoubleTapClose(o,r))return this.handleDoubleTap(t),this._lastTapTime=0,void(this._lastTapLatLng=null);this._lastTapTime=e,this._lastTapLatLng=o}n?this.polygonDrawManager.handlePointToPointClick(o):this.tracer&&(this.isDrawingInProgress||(this.tracer.setLatLngs([o]),this.startDraw()))}isEventFromControl(t){var e,r;const o=this.getContainer();if(!o)return!1;const n=null==t?void 0:t.originalEvent;if(n&&this.controlEvents.has(n))return!0;if(t instanceof Event&&this.controlEvents.has(t))return!0;if(this.isRecentControlPointer(t))return!0;const i=(null==(e=null==n?void 0:n.composedPath)?void 0:e.call(n))??(null==(r=null==t?void 0:t.composedPath)?void 0:r.call(t));if(i&&i.some(t=>t instanceof Node&&o.contains(t)))return!0;const a=(null==n?void 0:n.target)??(null==t?void 0:t.target);if(a instanceof Node&&o.contains(a))return!0;const s=t=>{if(!t||"object"!=typeof t)return null;const e=t;if(e.touches&&e.touches.length>0)return{x:e.touches[0].clientX,y:e.touches[0].clientY};const r=t;if("number"==typeof r.clientX&&"number"==typeof r.clientY)return{x:r.clientX,y:r.clientY};const o=t;if(o.containerPoint&&this.map){const t=this.map.getContainer().getBoundingClientRect();return{x:t.left+o.containerPoint.x,y:t.top+o.containerPoint.y}}const n=t;if(n.latlng&&this.map){const t=this.map.latLngToContainerPoint(n.latlng),e=this.map.getContainer().getBoundingClientRect();return{x:e.left+t.x,y:e.top+t.y}}return null},l=s(null==t?void 0:t.originalEvent)??s(t);if(!l)return!1;const c=o.getBoundingClientRect();if(l.x>=c.left&&l.x<=c.right&&l.y>=c.top&&l.y<=c.bottom)return!0;const h=document.elementFromPoint(l.x,l.y);return!(!h||!o.contains(h))}extractPointerInfo(t){if(!t||"object"!=typeof t)return null;const e=t;if("number"==typeof e.pointerId)return{id:e.pointerId,pointerType:"string"==typeof e.pointerType?e.pointerType:"unknown"};if("string"==typeof e.type){if(e.type.startsWith("touch"))return{id:-2,pointerType:"touch"};if(e.type.startsWith("mouse"))return{id:-1,pointerType:"mouse"}}return null}markControlPointerDown(t){const e=this.extractPointerInfo(t);e&&(this.lastControlPointerDown={...e,time:Date.now()})}clearControlPointerDown(t){if(!this.lastControlPointerDown)return;const e=this.extractPointerInfo(t);e&&e.id===this.lastControlPointerDown.id&&(this.lastControlPointerDown=null)}isRecentControlPointer(t){if(!this.lastControlPointerDown)return!1;const e=null==t?void 0:t.originalEvent,r=this.extractPointerInfo(e)??this.extractPointerInfo(t);if(!r)return!1;const o="touch"===this.lastControlPointerDown.pointerType?450:80;return!(Date.now()-this.lastControlPointerDown.time>o)&&(r.pointerType===this.lastControlPointerDown.pointerType&&("mouse"===r.pointerType||r.id===this.lastControlPointerDown.id))}mouseMove(t){var e;if(!this.isDrawingInProgress)return;const r=ii.normalizeEvent(t);ii.shouldPreventDefault(r)&&(null==(e=r.preventDefault)||e.call(r));const o=ii.extractCoordinates(r,this.map);o&&this.tracer&&this.tracer.addLatLng(o)}async mouseUpLeave(t){var e;if(!this.isDrawingInProgress)return;const r=ii.normalizeEvent(t);if(ii.shouldPreventDefault(r)&&(null==(e=r.preventDefault)||e.call(r)),this.polygonInformation.deletePolygonInformationStorage(),!this.tracer)return void this.stopDraw();const o=this.tracer.toGeoJSON();if(!o||!o.geometry||!o.geometry.coordinates||o.geometry.coordinates.length<3)return void this.stopDraw();let n;try{n=this.turfHelper.createPolygonFromTrace(o)}catch{return void this.stopDraw()}if(n&&n.geometry&&n.geometry.coordinates&&0!==n.geometry.coordinates.length){this.stopDraw();try{const t=this.getInteractionTargetLayerId();switch(this.modeManager.getCurrentMode()){case c.Add:{const e=await this.polygonMutationManager.addPolygon(n,{simplify:!0,noMerge:!1,targetLayerId:t});e.success||console.error("Error adding polygon via manager:",e.error);break}case c.Subtract:{const e=await this.polygonMutationManager.subtractPolygon(n,{targetLayerId:t});e.success||console.error("Error subtracting polygon via manager:",e.error);break}}}catch(i){console.error("Error in mouseUpLeave polygon operation:",i)}this.polygonInformation.createPolygonInformationStorage(this.arrayOfFeatureGroups)}else this.stopDraw()}async handleFreehandDrawCompletion(t){try{this.saveHistory("freehand");const e=this.getInteractionTargetLayerId();switch(this.modeManager.getCurrentMode()){case c.Add:{const r=await this.polygonMutationManager.addPolygon(t,{simplify:!0,noMerge:!1,targetLayerId:e});r.success||console.error("Error adding polygon via manager:",r.error);break}case c.Subtract:{const r=await this.polygonMutationManager.subtractPolygon(t,{targetLayerId:e});r.success||console.error("Error subtracting polygon via manager:",r.error);break}}}catch(e){console.error("Error in mouseUpLeave polygon operation:",e)}}startDraw(){this.isDrawingInProgress||(this.isDrawingInProgress=!0,this.drawStartedEvents(!0))}setupKeyboardHandlers(){this._boundKeyDownHandler||(this._boundKeyDownHandler=this.handleKeyDown.bind(this)),this._boundKeyUpHandler||(this._boundKeyUpHandler=this.handleKeyUp.bind(this)),document.addEventListener("keydown",this._boundKeyDownHandler),document.addEventListener("keyup",this._boundKeyUpHandler)}removeKeyboardHandlers(){this._boundKeyDownHandler&&document.removeEventListener("keydown",this._boundKeyDownHandler),this._boundKeyUpHandler&&document.removeEventListener("keyup",this._boundKeyUpHandler)}handleKeyDown(t){const e=t.ctrlKey||t.metaKey;if(e&&"z"===t.key&&!t.shiftKey)return t.preventDefault(),void this.undo();if(e&&("y"===t.key||"z"===t.key&&t.shiftKey))return t.preventDefault(),void this.redo();"Escape"===t.key&&(this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||this.polygonDrawManager.cancelPointToPointDrawing());this.isModifierKeyPressed(t)&&!this.isModifierKeyHeld&&(this.isModifierKeyHeld=!0,this.polygonDrawManager.setModifierKey(!0),this.updateAllMarkersForEdgeDeletion(!0),this.applyModifierModeOverride(!0))}handleKeyUp(t){!this.isModifierKeyPressed(t)&&this.isModifierKeyHeld&&(this.isModifierKeyHeld=!1,this.polygonDrawManager.setModifierKey(!1),this.updateAllMarkersForEdgeDeletion(!1),this.applyModifierModeOverride(!1))}applyModifierModeOverride(t){if(t){if(this.modifierModeOverride)return;if(!this.config.modifierSubtractMode)return;const t=this.modeManager.getCurrentMode();return void(t===c.Add?(this.modifierModeOverride={from:t,to:c.Subtract},this.setDrawMode(c.Subtract,{preserveActiveDraw:!0})):t===c.PointToPoint&&(this.modifierModeOverride={from:t,to:c.PointToPointSubtract},this.setDrawMode(c.PointToPointSubtract,{preserveActiveDraw:!0})))}if(!this.modifierModeOverride)return;const{from:e,to:r}=this.modifierModeOverride;this.modifierModeOverride=null,this.modeManager.getCurrentMode()===r&&this.setDrawMode(e,{preserveActiveDraw:!0})}updateAllMarkersForEdgeDeletion(t){this.arrayOfFeatureGroups.forEach(e=>{e.eachLayer(e=>{e instanceof s.Marker&&this.updateMarkerForEdgeDeletion(e,t)})})}updateMarkerForEdgeDeletion(t,e){const r=t.getElement();r&&(e?(r.addEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),r.addEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent)):(r.removeEventListener("mouseenter",this.onMarkerHoverForEdgeDeletionEvent),r.removeEventListener("mouseleave",this.onMarkerLeaveForEdgeDeletionEvent),r.style.backgroundColor="",r.style.borderColor=""))}handleDoubleClick(t){this.modeManager.getCurrentMode()!==c.PointToPoint&&this.modeManager.getCurrentMode()!==c.PointToPointSubtract||(s.DomEvent.stop(t),this.polygonDrawManager.handleDoubleClick(t))}isModifierKeyPressed(t){return navigator.userAgent.toLowerCase().includes("mac")?t.metaKey:t.ctrlKey}ensureButtonTouchResponsiveness(t){t.querySelectorAll("a").forEach(t=>{t.style.pointerEvents="auto",t.style.touchAction="manipulation",t.style.position="relative",t.style.zIndex="1";const e=t=>{t.stopPropagation(),t.target.style.pointerEvents="auto"};t.addEventListener("touchstart",e,{passive:!0}),t.addEventListener("touchend",e,{passive:!0})})}updateActivateButtonIndicator(){if("function"!=typeof this.getContainer)return;const t=this.getContainer();if(!t)return;const e=t.querySelector(".icon-activate");if(!e)return;const r=this.arrayOfFeatureGroups.length>0,o=!Yn.domUtil.hasClass(e,"active"),n=Yn.domUtil.hasClass(e,"active")?e.dataset.collapsedIcon:e.dataset.activeIcon;n&&this.applyActivateButtonIcon(e,n);const i=r&&o;i?Yn.domUtil.addClass(e,"polydraw-indicator-active"):Yn.domUtil.removeClass(e,"polydraw-indicator-active");const a=this.config.styles.ui.controlButton.backgroundColor,s=this.config.styles.ui.controlButton.color,l=this.config.styles.ui.indicatorActive.backgroundColor;e.style.backgroundColor=i?l:a,e.style.color=s;const h=(t,e)=>{t&&(e?(t.style.opacity="1",t.style.pointerEvents="auto",t.setAttribute("aria-disabled","false"),t.tabIndex=0):(t.style.opacity="0.3",t.style.pointerEvents="none",t.setAttribute("aria-disabled","true"),t.tabIndex=-1))};h(t.querySelector(".icon-clone"),r),r||this.modeManager.getCurrentMode()!==c.Clone||this.setDrawMode(c.Off);h(t.querySelector(".icon-erase"),r)}applyActivateButtonIcon(t,e){Vn(t,e)}}const Oi=t=>{if(t){if("undefined"!=typeof globalThis){globalThis.L||(globalThis.L=t)}t.control&&(t.control.polydraw=function(t){return new Ai(t)}),Xn.reset()}};if("undefined"!=typeof globalThis){const t=globalThis.L;t&&Oi(t)}t.default=Ai,t.leafletAdapter=Yn,t.registerWithLeaflet=Oi,Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
2
2
|
//# sourceMappingURL=polydraw.umd.min.js.map
|