{"version":3,"file":"MultiLocationMap.CI3vsWFS.mjs","names":["useRef","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/WNdRjITke8Lhil0JZyOh/VTve4VYnUe56Mo8uE1bH/MultiLocationMap.js"],"sourcesContent":["// Multi-location map component without API key, using OpenStreetMap + Leaflet CDN\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useMemo}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * MultiLocationMap (OpenStreetMap powered map)\n * Shows multiple markers on a map without requiring an API key\n *\n * @framerIntrinsicWidth 480\n * @framerIntrinsicHeight 320\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function MultiLocationMap(props){const{markers,zoom,useCustomPin,customPinImage={src:\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:\"Custom Pin\"},customPinSize,markerColor,popoverBackground,popoverTextColor,mapTheme,borderRadius,enableClustering,showPopup,enablePopup,style,enableCsvImport,csvFile}=props;const mapRef=useRef(null);const leafletRef=useRef(null);const firstMarkerRef=useRef(null);const[csvMarkers,setCsvMarkers]=useState([]);// Parse CSV file\nuseEffect(()=>{if(!enableCsvImport||!csvFile){setCsvMarkers([]);return;}async function parseCSV(){try{const response=await fetch(csvFile);const text=await response.text();// Parse CSV (simple parser - handles basic CSV format)\nconst lines=text.split(\"\\n\").filter(line=>line.trim());if(lines.length<2){setCsvMarkers([]);return;}// Get headers (case-insensitive)\nconst headers=lines[0].split(\",\").map(h=>h.trim().toLowerCase());// Find column indices\nconst nameIdx=headers.findIndex(h=>h===\"name\"||h===\"title\"||h===\"location\");const addressIdx=headers.findIndex(h=>h===\"address\"||h===\"street\"||h===\"location\");const coordsIdx=headers.findIndex(h=>h===\"coordinates\"||h===\"coords\"||h===\"latlng\"||h===\"lat,lng\");const latIdx=headers.findIndex(h=>h===\"lat\"||h===\"latitude\");const lngIdx=headers.findIndex(h=>h===\"lng\"||h===\"lon\"||h===\"longitude\");const parsedMarkers=[];// Parse data rows\nfor(let i=1;i<lines.length;i++){const values=lines[i].split(\",\").map(v=>v.trim());let coordinates=\"\";// Try to get coordinates from combined field first\nif(coordsIdx!==-1&&values[coordsIdx]){coordinates=values[coordsIdx];}else if(latIdx!==-1&&lngIdx!==-1&&values[latIdx]&&values[lngIdx]){coordinates=`${values[latIdx]}, ${values[lngIdx]}`;}// Skip if no valid coordinates\nif(!coordinates)continue;const name=nameIdx!==-1?values[nameIdx]:`Location ${i}`;const address=addressIdx!==-1?values[addressIdx]:\"\";parsedMarkers.push({coordinates,name,address});}setCsvMarkers(parsedMarkers);}catch(error){console.error(\"Error parsing CSV:\",error);setCsvMarkers([]);}}parseCSV();},[enableCsvImport,csvFile]);// Combine manual markers with CSV markers\nconst allMarkers=useMemo(()=>{if(enableCsvImport&&csvMarkers.length>0){return[...csvMarkers,...markers];}return markers;},[markers,csvMarkers,enableCsvImport]);useEffect(()=>{if(!mapRef.current||typeof window===\"undefined\")return;// If leaflet already loaded, skip\nif(window.L&&leafletRef.current){leafletRef.current.remove();leafletRef.current=null;}// Dynamically load Leaflet CSS & JS if not present\nfunction ensureLeafletLoaded(){if(window.L)return Promise.resolve(window.L);return new Promise(resolve=>{const exists=document.getElementById(\"leaflet-style\");if(!exists){const link=document.createElement(\"link\");link.id=\"leaflet-style\";link.rel=\"stylesheet\";link.href=\"https://unpkg.com/leaflet@1.9.4/dist/leaflet.css\";document.head.appendChild(link);}const script=document.createElement(\"script\");script.src=\"https://unpkg.com/leaflet@1.9.4/dist/leaflet.js\";script.onload=()=>resolve(window.L);document.body.appendChild(script);});}// Dynamically load Leaflet.markercluster plugin\nfunction ensureMarkerClusterLoaded(){if(window.L&&window.L.markerClusterGroup){return Promise.resolve(window.L);}return new Promise(resolve=>{const cssExists=document.getElementById(\"leaflet-markercluster-style\");if(!cssExists){const link=document.createElement(\"link\");link.id=\"leaflet-markercluster-style\";link.rel=\"stylesheet\";link.href=\"https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.css\";document.head.appendChild(link);const linkDefault=document.createElement(\"link\");linkDefault.id=\"leaflet-markercluster-default-style\";linkDefault.rel=\"stylesheet\";linkDefault.href=\"https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css\";document.head.appendChild(linkDefault);}const scriptExists=document.getElementById(\"leaflet-markercluster-script\");if(!scriptExists){const script=document.createElement(\"script\");script.id=\"leaflet-markercluster-script\";script.src=\"https://unpkg.com/leaflet.markercluster@1.5.3/dist/leaflet.markercluster.js\";script.onload=()=>resolve(window.L);document.body.appendChild(script);}else{resolve(window.L);}});}ensureLeafletLoaded().then(L=>{// Load marker cluster plugin if clustering is enabled\nconst loadPromise=enableClustering?ensureMarkerClusterLoaded():Promise.resolve(L);return loadPromise.then(()=>{if(!mapRef.current)return;// Prevent double init\nmapRef.current.innerHTML=\"\";// Load Google Font Inter\nconst fontExists=document.getElementById(\"google-font-inter\");if(!fontExists){const link=document.createElement(\"link\");link.id=\"google-font-inter\";link.rel=\"stylesheet\";link.href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap\";document.head.appendChild(link);}const map=L.map(mapRef.current,{zoomControl:true,attributionControl:false});leafletRef.current=map;// Compute bounds if markers exist\nlet bounds=null;if(allMarkers.length>0){const validCoords=allMarkers.map(m=>{const parts=m.coordinates.split(\",\").map(s=>s.trim());if(parts.length!==2)return null;const lat=parseFloat(parts[0]);const lng=parseFloat(parts[1]);if(isNaN(lat)||isNaN(lng))return null;return[lat,lng];}).filter(coord=>coord!==null);if(validCoords.length>0){bounds=L.latLngBounds(validCoords);}}// Select tile layer based on theme\nlet tileUrl=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\";switch(mapTheme){case\"dark\":tileUrl=\"https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png\";break;case\"satellite\":tileUrl=\"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}\";break;case\"topo\":tileUrl=\"https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png\";break;case\"light\":tileUrl=\"https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png\";break;case\"standard\":default:tileUrl=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\";break;}L.tileLayer(tileUrl,{maxZoom:19}).addTo(map);if(allMarkers.length>0){// Create marker cluster group if clustering is enabled\nconst markerGroup=enableClustering&&L.markerClusterGroup?L.markerClusterGroup({showCoverageOnHover:false,zoomToBoundsOnClick:true,spiderfyOnMaxZoom:true,removeOutsideVisibleBounds:true,iconCreateFunction:function(cluster){const count=cluster.getChildCount();let size=\"small\";if(count>10)size=\"medium\";if(count>50)size=\"large\";return L.divIcon({html:`<div style=\"\n                      background: ${markerColor};\n                      color: white;\n                      border-radius: 50%;\n                      width: 40px;\n                      height: 40px;\n                      display: flex;\n                      align-items: center;\n                      justify-content: center;\n                      font-family: 'Inter', sans-serif;\n                      font-weight: 600;\n                      font-size: 14px;\n                      border: 3px solid white;\n                      box-shadow: 0 2px 8px rgba(0,0,0,0.3);\n                    \">${count}</div>`,className:\"custom-cluster-icon\",iconSize:L.point(40,40)});}}):null;for(const markerData of allMarkers){const{coordinates,name,address}=markerData;// Parse coordinates from \"lat, lng\" format\nconst parts=coordinates.split(\",\").map(s=>s.trim());if(parts.length!==2)continue;// Skip invalid format\nconst latitude=parseFloat(parts[0]);const longitude=parseFloat(parts[1]);// Skip if parsing failed\nif(isNaN(latitude)||isNaN(longitude))continue;let marker;if(useCustomPin&&customPinImage.src){// Create custom icon with label\nconst iconHtml=props.showLabels?`\n                  <div style=\"display: flex; flex-direction: column; align-items: center;\">\n                    <div style=\"\n                      background: ${props.labelBackground};\n                      color: ${props.labelTextColor};\n                      padding: 4px 8px;\n                      border-radius: 4px;\n                      font-family: 'Inter', sans-serif;\n                      font-size: 12px;\n                      font-weight: 600;\n                      white-space: nowrap;\n                      box-shadow: 0 2px 4px rgba(0,0,0,0.2);\n                      margin-bottom: 4px;\n                    \">${name}</div>\n                    <img src=\"${customPinImage.src}\" style=\"width: ${customPinSize}px; height: ${customPinSize}px; object-fit: contain;\" />\n                  </div>\n                `:`<img src=\"${customPinImage.src}\" style=\"width: ${customPinSize}px; height: ${customPinSize}px; object-fit: contain;\" />`;const customIcon=L.divIcon({html:iconHtml,className:\"custom-marker-with-label\",iconSize:props.showLabels?[customPinSize,customPinSize+30]:[customPinSize,customPinSize],iconAnchor:props.showLabels?[customPinSize/2,customPinSize+30]:[customPinSize/2,customPinSize],popupAnchor:[0,props.showLabels?-(customPinSize+30):-customPinSize]});marker=L.marker([latitude,longitude],{icon:customIcon});}else{// Use default circle marker\nmarker=L.circleMarker([latitude,longitude],{radius:10,color:markerColor,fillColor:markerColor,fillOpacity:.85,weight:2});// Add permanent label for circle markers\nif(props.showLabels){marker.bindTooltip(name,{permanent:true,direction:\"top\",offset:[0,-15],className:\"permanent-label\"});}// Add hover effect only for circle markers\nmarker.on(\"mouseover\",function(){this.setStyle({radius:12,fillOpacity:1});});marker.on(\"mouseout\",function(){this.setStyle({radius:10,fillOpacity:.85});});}// Create custom popup with styled content\nconst popupContent=`\n              <div style=\"\n                padding: 12px 16px;\n                background: ${popoverBackground};\n                color: ${popoverTextColor};\n                border-radius: 8px;\n                font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n                font-size: 14px;\n                font-weight: 500;\n                line-height: 1.4;\n                min-width: 120px;\n              \">\n                <div style=\"font-weight: 600; margin-bottom: 4px;\">${name}</div>\n                <div style=\"font-weight: 400; opacity: 0.8;\">${address}</div>\n              </div>\n            `;if(enablePopup){marker.bindPopup(popupContent,{closeButton:true,className:\"custom-popup\",maxWidth:300,autoPan:true});}// Store reference to first marker\nif(!firstMarkerRef.current){firstMarkerRef.current=marker;}// Add marker to cluster group or directly to map\nif(markerGroup){markerGroup.addLayer(marker);}else{marker.addTo(map);}}// Add cluster group to map if clustering is enabled\nif(markerGroup){map.addLayer(markerGroup);}if(bounds)map.fitBounds(bounds,{padding:[24,24],maxZoom:zoom});else map.setView([37.77,-122.41],zoom)// Center on SF by default\n;}// Open popup if showPopup is enabled and there's exactly 1 marker\nif(showPopup&&allMarkers.length===1&&firstMarkerRef.current){setTimeout(()=>{if(firstMarkerRef.current){firstMarkerRef.current.openPopup();}},100);}// Add custom CSS for popup styling\nconst styleId=\"leaflet-custom-popup-style\";if(!document.getElementById(styleId)){const style=document.createElement(\"style\");style.id=styleId;style.textContent=`\n            .custom-popup .leaflet-popup-content-wrapper {\n              background: transparent;\n              box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n              padding: 0;\n              border-radius: 8px;\n            }\n            .custom-popup .leaflet-popup-content {\n              margin: 0;\n              line-height: 1;\n            }\n            .custom-popup .leaflet-popup-tip {\n              background: ${popoverBackground};\n            }\n            .custom-cluster-icon {\n              background: transparent !important;\n              border: none !important;\n            }\n            .custom-marker-with-label {\n              background: transparent !important;\n              border: none !important;\n            }\n            .permanent-label {\n              background: ${props.labelBackground} !important;\n              color: ${props.labelTextColor} !important;\n              border: none !important;\n              box-shadow: 0 2px 4px rgba(0,0,0,0.2) !important;\n              font-family: 'Inter', sans-serif !important;\n              font-size: 12px !important;\n              font-weight: 600 !important;\n              padding: 4px 8px !important;\n              border-radius: 4px !important;\n            }\n            .permanent-label::before {\n              display: none !important;\n            }\n          `;document.head.appendChild(style);}});});return()=>{if(leafletRef.current){leafletRef.current.remove();leafletRef.current=null;}firstMarkerRef.current=null;};},[allMarkers,zoom,useCustomPin,customPinImage,customPinSize,markerColor,popoverBackground,popoverTextColor,mapTheme,enableClustering,showPopup,props.showLabels,props.labelBackground,props.labelTextColor]);if(RenderTarget.current()===RenderTarget.thumbnail)return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",background:\"#eee\",borderRadius,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",minHeight:320,minWidth:480},children:\"Map preview\"});return /*#__PURE__*/_jsx(\"div\",{ref:mapRef,style:{width:style?.width||\"100%\",height:style?.height||\"100%\",borderRadius,overflow:\"hidden\",...style},\"aria-label\":\"Map with multiple locations\",role:\"region\"});}addPropertyControls(MultiLocationMap,{enableCsvImport:{type:ControlType.Boolean,title:\"CSV Import\",defaultValue:false,enabledTitle:\"Enabled\",disabledTitle:\"Disabled\",description:\"Import markers from a CSV file\"},csvFile:{type:ControlType.File,title:\"CSV File\",allowedFileTypes:[\"csv\"],hidden:({enableCsvImport})=>!enableCsvImport},markers:{type:ControlType.Array,title:\"Markers\",description:\"Add locations to display on the map. Use 'Lat, Lng' format (e.g., 59.1997, 17.6172)\",control:{type:ControlType.Object,controls:{name:{type:ControlType.String,title:\"Name\",defaultValue:\"Property Name\",description:\"Property designation or name\"},address:{type:ControlType.String,title:\"Address\",defaultValue:\"Street Address\",description:\"Street address or location\"},coordinates:{type:ControlType.String,title:\"Lat, Lng\",defaultValue:\"37.77, -122.41\",placeholder:\"59.1997, 17.6172\",description:\"Copy coordinates directly from Google Maps\"}}},defaultValue:[{coordinates:\"37.77, -122.41\",name:\"San Francisco Property\",address:\"Market Street\"},{coordinates:\"34.05, -118.25\",name:\"Los Angeles Property\",address:\"Hollywood Blvd\"},{coordinates:\"40.7128, -74.006\",name:\"New York Property\",address:\"Broadway\"}]},showLabels:{type:ControlType.Boolean,title:\"Show Labels\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"Display marker names above pins\"},labelBackground:{type:ControlType.Color,title:\"Label Background\",defaultValue:\"#FFFFFF\",hidden:({showLabels})=>!showLabels},labelTextColor:{type:ControlType.Color,title:\"Label Text\",defaultValue:\"#000000\",hidden:({showLabels})=>!showLabels},zoom:{type:ControlType.Number,title:\"Zoom Level\",defaultValue:4,min:1,max:18,step:1,description:\"Initial zoom level (1 = world view, 18 = street level)\"},mapTheme:{type:ControlType.Enum,title:\"Map Theme\",options:[\"standard\",\"dark\",\"satellite\",\"topo\",\"light\"],optionTitles:[\"Standard\",\"Dark\",\"Satellite\",\"Topographic\",\"Light\"],defaultValue:\"standard\"},borderRadius:{type:ControlType.Number,title:\"Border Radius\",defaultValue:8,min:0,max:50,step:1},enableClustering:{type:ControlType.Boolean,title:\"Cluster Pins\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\",description:\"Group nearby markers into clusters with count badges\"},useCustomPin:{type:ControlType.Boolean,title:\"Custom Pin\",defaultValue:false,enabledTitle:\"Custom\",disabledTitle:\"Default\"},customPinImage:{type:ControlType.ResponsiveImage,title:\"Pin Image\",hidden:({useCustomPin})=>!useCustomPin},customPinSize:{type:ControlType.Number,title:\"Pin Size\",defaultValue:40,min:20,max:100,step:1,hidden:({useCustomPin})=>!useCustomPin},markerColor:{type:ControlType.Color,title:\"Pin Color\",defaultValue:\"#1A6DFF\",hidden:({useCustomPin})=>useCustomPin},enablePopup:{type:ControlType.Boolean,title:\"Enable Popup\",defaultValue:true,enabledTitle:\"Enabled\",disabledTitle:\"Disabled\",description:\"Allow popups to appear when clicking markers\"},showPopup:{type:ControlType.Boolean,title:\"Auto-Open Popup\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"Automatically open popup on load (only works with exactly 1 marker)\",hidden:({markers,enablePopup})=>markers.length!==1||!enablePopup},popoverBackground:{type:ControlType.Color,title:\"Popup Background\",defaultValue:\"#FFFFFF\",hidden:({enablePopup})=>!enablePopup},popoverTextColor:{type:ControlType.Color,title:\"Popup Text Color\",defaultValue:\"#000000\",hidden:({enablePopup})=>!enablePopup}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MultiLocationMap\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"480\",\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"320\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./MultiLocationMap.map"],"mappings":"oNAUG,SAAwB,EAAiB,EAAM,CAAC,GAAK,CAAC,UAAQ,OAAK,eAAa,iBAAe,CAAC,IAAI,sEAAsE,IAAI,YAAY,EAAE,gBAAc,cAAY,oBAAkB,mBAAiB,WAAS,eAAa,mBAAiB,YAAU,cAAY,QAAM,kBAAgB,WAAS,EAAY,EAAOA,EAAO,IAAI,EAAQ,EAAWA,EAAO,IAAI,EAAQ,EAAeA,EAAO,IAAI,EAAO,CAAC,EAAW,GAAeC,EAAS,CAAC,CAAC,EACne,MAAc,CAAC,GAAG,CAAC,GAAiB,CAAC,EAAQ,CAAC,EAAc,CAAC,CAAC,EAAE,MAAO,CAAC,eAAe,GAAU,CAAC,GAAG,CACrG,IAAM,GAAM,MAD+I,MAAhC,MAAM,CAAO,EAAA,CAA4B,KAAK,EAAA,CACxJ,MAAM;CAAI,CAAC,CAAC,OAAO,GAAM,EAAK,KAAK,CAAC,EAAE,GAAG,EAAM,OAAO,EAAE,CAAC,EAAc,CAAC,CAAC,EAAE,MAAO,CACnG,IAAM,EAAQ,EAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,EACzD,EAAQ,EAAQ,UAAU,GAAG,IAAI,QAAQ,IAAI,SAAS,IAAI,UAAU,EAAQ,EAAW,EAAQ,UAAU,GAAG,IAAI,WAAW,IAAI,UAAU,IAAI,UAAU,EAAQ,EAAU,EAAQ,UAAU,GAAG,IAAI,eAAe,IAAI,UAAU,IAAI,UAAU,IAAI,SAAS,EAAQ,EAAO,EAAQ,UAAU,GAAG,IAAI,OAAO,IAAI,UAAU,EAAQ,EAAO,EAAQ,UAAU,GAAG,IAAI,OAAO,IAAI,OAAO,IAAI,WAAW,EAAQ,EAAc,CAAC,EAC7Z,IAAI,IAAI,EAAE,EAAE,EAAE,EAAM,OAAO,IAAI,CAAC,IAAM,EAAO,EAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,EAAM,EAAY,GAElG,GADG,IAAY,IAAI,EAAO,GAAY,EAAY,EAAO,GAAoB,IAAS,IAAI,IAAS,IAAI,EAAO,IAAS,EAAO,KAAS,EAAY,GAAG,EAAO,GAAQ,IAAI,EAAO,MAC7K,CAAC,EAAY,SAAS,IAAM,EAAK,IAAU,GAAmB,YAAY,IAA5B,EAAO,GAA+B,EAAQ,IAAa,GAAsB,GAAnB,EAAO,GAAe,EAAc,KAAK,CAAC,cAAY,OAAK,SAAO,CAAC,CAAE,CAAC,EAAc,CAAa,CAAE,OAAO,EAAM,CAAC,QAAQ,MAAM,qBAAqB,CAAK,EAAE,EAAc,CAAC,CAAC,CAAE,CAAC,CAAC,EAAS,CAAE,EAAE,CAAC,EAAgB,CAAO,CAAC,EACpU,IAAM,EAAWC,MAAgB,GAAiB,EAAW,OAAO,EAAS,CAAC,GAAG,EAAW,GAAG,CAAO,EAAU,EAAU,CAAC,EAAQ,EAAW,CAAe,CAAC,EAwG6d,OAxG3d,MAAc,CAAC,GAAG,CAAC,EAAO,SAAgB,IAAS,OAAY,OAC5N,EAAO,GAAG,EAAW,UAAS,EAAW,QAAQ,OAAO,EAAE,EAAW,QAAQ,MAChF,SAAS,GAAqB,CAA8C,OAA1C,EAAO,EAAS,QAAQ,QAAQ,EAAO,CAAC,EAAS,IAAI,QAAQ,GAAS,CAAuD,GAAG,CAA5C,SAAS,eAAe,eAA0B,EAAE,CAAC,IAAM,EAAK,SAAS,cAAc,MAAM,EAAE,EAAK,GAAG,gBAAgB,EAAK,IAAI,aAAa,EAAK,KAAK,mDAAmD,SAAS,KAAK,YAAY,CAAI,CAAE,CAAC,IAAM,EAAO,SAAS,cAAc,QAAQ,EAAE,EAAO,IAAI,kDAAkD,EAAO,WAAW,EAAQ,EAAO,CAAC,EAAE,SAAS,KAAK,YAAY,CAAM,CAAE,CAAC,CAAE,CACrhB,SAAS,GAA2B,CAA6E,OAAzE,EAAO,GAAG,EAAO,EAAE,mBAA2B,QAAQ,QAAQ,EAAO,CAAC,EAAU,IAAI,QAAQ,GAAS,CAAwE,GAAG,CAA1D,SAAS,eAAe,6BAA2C,EAAE,CAAC,IAAM,EAAK,SAAS,cAAc,MAAM,EAAE,EAAK,GAAG,8BAA8B,EAAK,IAAI,aAAa,EAAK,KAAK,uEAAuE,SAAS,KAAK,YAAY,CAAI,EAAE,IAAM,EAAY,SAAS,cAAc,MAAM,EAAE,EAAY,GAAG,sCAAsC,EAAY,IAAI,aAAa,EAAY,KAAK,+EAA+E,SAAS,KAAK,YAAY,CAAW,CAAE,CAA4E,GAAxD,SAAS,eAAe,8BAA+C,EAA+P,EAAQ,EAAO,CAAC,MAA7Q,CAAC,IAAM,EAAO,SAAS,cAAc,QAAQ,EAAE,EAAO,GAAG,+BAA+B,EAAO,IAAI,8EAA8E,EAAO,WAAW,EAAQ,EAAO,CAAC,EAAE,SAAS,KAAK,YAAY,CAAM,CAAE,CAAyB,CAAC,CAAE,CAqGjgC,OArGkgC,EAAoB,CAAC,CAAC,KAAK,IAC/jC,EAAiB,EAA0B,EAAE,QAAQ,QAAQ,CAAC,EAAA,CAAqB,SAAS,CAAC,GAAG,CAAC,EAAO,QAAQ,OAEpE,GAD9D,EAAO,QAAQ,UAAU,GACwC,CAAhD,SAAS,eAAe,mBAAkC,EAAE,CAAC,IAAM,EAAK,SAAS,cAAc,MAAM,EAAE,EAAK,GAAG,oBAAoB,EAAK,IAAI,aAAa,EAAK,KAAK,+EAA+E,SAAS,KAAK,YAAY,CAAI,CAAE,CAAC,IAAM,EAAI,EAAE,IAAI,EAAO,QAAQ,CAAC,YAAY,GAAK,mBAAmB,EAAK,CAAC,EAAE,EAAW,QAAQ,EACnY,IAAI,EAAO,KAAK,GAAG,EAAW,OAAO,EAAE,CAAC,IAAM,EAAY,EAAW,IAAI,GAAG,CAAC,IAAM,EAAM,EAAE,YAAY,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,EAAM,SAAS,EAAE,OAAO,KAAK,IAAM,EAAI,WAAW,EAAM,EAAE,EAAQ,EAAI,WAAW,EAAM,EAAE,EAAwC,OAAnC,MAAM,CAAG,GAAG,MAAM,CAAG,EAAS,KAAW,CAAC,EAAI,CAAG,CAAE,CAAC,CAAC,CAAC,OAAO,GAAO,IAAQ,IAAI,EAAK,EAAY,OAAO,IAAG,EAAO,EAAE,aAAa,CAAW,EAAG,CACnX,IAAI,EAAQ,qDAAqD,OAAO,EAAP,CAAiB,IAAI,OAAO,EAAQ,gEAAgE,MAAM,IAAI,YAAY,EAAQ,gGAAgG,MAAM,IAAI,OAAO,EAAQ,mDAAmD,MAAM,IAAI,QAAQ,EAAQ,iEAAiE,MAAqB,QAAQ,EAAQ,qDAAqD,KAAM,CAA8C,GAA7C,EAAE,UAAU,EAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAG,EAAK,EAAW,OAAO,EAAE,CAC/mB,IAAM,EAAY,GAAkB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,oBAAoB,GAAM,oBAAoB,GAAK,kBAAkB,GAAK,2BAA2B,GAAK,mBAAmB,SAAS,EAAQ,CAAC,IAAM,EAAM,EAAQ,cAAc,EAAsE,OAAO,EAAE,QAAQ,CAAC,KAAK;oCACzT,EAAY;;;;;;;;;;;;;wBAaxB,EAAM,QAAQ,UAAU,sBAAsB,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,KAAK,IAAI,IAAM,KAAc,EAAW,CAAC,GAAK,CAAC,cAAY,OAAK,WAAS,EACvK,EAAM,EAAY,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,EAAM,SAAS,EAAE,SACxE,IAAM,EAAS,WAAW,EAAM,EAAE,EAAQ,EAAU,WAAW,EAAM,EAAE,EACvE,GAAG,MAAM,CAAQ,GAAG,MAAM,CAAS,EAAE,SAAS,IAAI,EAAO,GAAG,GAAc,EAAe,IAAI,CAC7F,IAAM,EAAS,EAAM,WAAW;;;oCAGI,EAAM,gBAAgB;+BAC3B,EAAM,eAAe;;;;;;;;;wBAS5B,EAAK;gCACG,EAAe,IAAI,kBAAkB,EAAc,cAAc,EAAc;;kBAE7F,aAAa,EAAe,IAAI,kBAAkB,EAAc,cAAc,EAAc,8BAAoC,EAAW,EAAE,QAAQ,CAAC,KAAK,EAAS,UAAU,2BAA2B,SAAS,EAAM,WAAW,CAAC,EAAc,EAAc,EAAE,EAAE,CAAC,EAAc,CAAa,EAAE,WAAW,EAAM,WAAW,CAAC,EAAc,EAAE,EAAc,EAAE,EAAE,CAAC,EAAc,EAAE,CAAa,EAAE,YAAY,CAAC,EAAE,EAAM,WAAW,EAAE,EAAc,IAAI,CAAC,CAAa,CAAC,CAAC,EAAE,EAAO,EAAE,OAAO,CAAC,EAAS,CAAS,EAAE,CAAC,KAAK,CAAU,CAAC,CAAE,KACjhB,GAAO,EAAE,aAAa,CAAC,EAAS,CAAS,EAAE,CAAC,OAAO,GAAG,MAAM,EAAY,UAAU,EAAY,YAAY,IAAI,OAAO,CAAC,CAAC,EACpH,EAAM,YAAY,EAAO,YAAY,EAAK,CAAC,UAAU,GAAK,UAAU,MAAM,OAAO,CAAC,EAAE,GAAG,EAAE,UAAU,iBAAiB,CAAC,EACxH,EAAO,GAAG,YAAY,UAAU,CAAC,KAAK,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC,EAAE,EAAO,GAAG,WAAW,UAAU,CAAC,KAAK,SAAS,CAAC,OAAO,GAAG,YAAY,GAAG,CAAC,CAAE,CAAC,EACzJ,IAAM,EAAa;;;8BAGW,EAAkB;yBACvB,EAAiB;;;;;;;;qEAQ2B,EAAK;+DACX,EAAQ;;cAEtD,GAAa,EAAO,UAAU,EAAa,CAAC,YAAY,GAAK,UAAU,eAAe,SAAS,IAAI,QAAQ,EAAI,CAAC,EACjI,AAA4B,EAAe,UAAQ,EAChD,EAAa,EAAY,SAAS,CAAM,EAAQ,EAAO,MAAM,CAAG,CAAG,CACnE,GAAa,EAAI,SAAS,CAAW,EAAM,EAAO,EAAI,UAAU,EAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAI,CAAC,EAAO,EAAI,QAAQ,CAAC,MAAM,OAAO,EAAE,CAAI,CAC9I,CACE,GAAW,EAAW,SAAS,GAAG,EAAe,SAAS,eAAe,CAAI,EAAe,SAAS,EAAe,QAAQ,UAAU,CAAG,EAAE,GAAG,EACjJ,IAAM,EAAQ,6BAA6B,GAAG,CAAC,SAAS,eAAe,CAAO,EAAE,CAAC,IAAM,EAAM,SAAS,cAAc,OAAO,EAAE,EAAM,GAAG,EAAQ,EAAM,YAAY;;;;;;;;;;;;4BAYpI,EAAkB;;;;;;;;;;;4BAWlB,EAAM,gBAAgB;uBAC3B,EAAM,eAAe;;;;;;;;;;;;YAYhC,SAAS,KAAK,YAAY,CAAK,CAAE,CAAC,CAAC,CAAG,MAAY,CAAC,AAAmD,EAAW,WAAvC,EAAW,QAAQ,OAAO,EAAqB,MAAM,EAAe,QAAQ,IAAK,CAAE,EAAE,CAAC,EAAW,EAAK,EAAa,EAAe,EAAc,EAAY,EAAkB,EAAiB,EAAS,EAAiB,EAAU,EAAM,WAAW,EAAM,gBAAgB,EAAM,cAAc,CAAC,EAAK,EAAa,QAAQ,IAAI,EAAa,UAA8B,EAAK,MAAM,CAAC,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,WAAW,OAAO,eAAa,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,UAAU,IAAI,SAAS,GAAG,EAAE,SAAS,aAAa,CAAC,EAAsB,EAAK,MAAM,CAAC,IAAI,EAAO,MAAM,CAAC,MAAM,GAAO,OAAO,OAAO,OAAO,GAAO,QAAQ,OAAO,eAAa,SAAS,SAAS,GAAG,CAAK,EAAE,aAAa,8BAA8B,KAAK,QAAQ,CAAC,CAAE,qBAzH/xB,IAAqD,IAAiE,EAyH0qB,EAAoB,EAAiB,CAAC,gBAAgB,CAAC,KAAK,EAAY,QAAQ,MAAM,aAAa,aAAa,GAAM,aAAa,UAAU,cAAc,WAAW,YAAY,gCAAgC,EAAE,QAAQ,CAAC,KAAK,EAAY,KAAK,MAAM,WAAW,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,qBAAmB,CAAC,CAAe,EAAE,QAAQ,CAAC,KAAK,EAAY,MAAM,MAAM,UAAU,YAAY,sFAAsF,QAAQ,CAAC,KAAK,EAAY,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,gBAAgB,YAAY,8BAA8B,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,iBAAiB,YAAY,4BAA4B,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,iBAAiB,YAAY,mBAAmB,YAAY,4CAA4C,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,YAAY,iBAAiB,KAAK,yBAAyB,QAAQ,eAAe,EAAE,CAAC,YAAY,iBAAiB,KAAK,uBAAuB,QAAQ,gBAAgB,EAAE,CAAC,YAAY,mBAAmB,KAAK,oBAAoB,QAAQ,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,EAAY,QAAQ,MAAM,cAAc,aAAa,GAAK,aAAa,OAAO,cAAc,OAAO,YAAY,iCAAiC,EAAE,gBAAgB,CAAC,KAAK,EAAY,MAAM,MAAM,mBAAmB,aAAa,UAAU,QAAQ,CAAC,gBAAc,CAAC,CAAU,EAAE,eAAe,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,UAAU,QAAQ,CAAC,gBAAc,CAAC,CAAU,EAAE,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,YAAY,wDAAwD,EAAE,SAAS,CAAC,KAAK,EAAY,KAAK,MAAM,YAAY,QAAQ,CAAC,WAAW,OAAO,YAAY,OAAO,OAAO,EAAE,aAAa,CAAC,WAAW,OAAO,YAAY,cAAc,OAAO,EAAE,aAAa,UAAU,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,EAAE,iBAAiB,CAAC,KAAK,EAAY,QAAQ,MAAM,eAAe,aAAa,GAAK,aAAa,KAAK,cAAc,MAAM,YAAY,sDAAsD,EAAE,aAAa,CAAC,KAAK,EAAY,QAAQ,MAAM,aAAa,aAAa,GAAM,aAAa,SAAS,cAAc,SAAS,EAAE,eAAe,CAAC,KAAK,EAAY,gBAAgB,MAAM,YAAY,QAAQ,CAAC,kBAAgB,CAAC,CAAY,EAAE,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,EAAE,QAAQ,CAAC,kBAAgB,CAAC,CAAY,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,YAAY,aAAa,UAAU,QAAQ,CAAC,kBAAgB,CAAY,EAAE,YAAY,CAAC,KAAK,EAAY,QAAQ,MAAM,eAAe,aAAa,GAAK,aAAa,UAAU,cAAc,WAAW,YAAY,8CAA8C,EAAE,UAAU,CAAC,KAAK,EAAY,QAAQ,MAAM,kBAAkB,aAAa,GAAM,aAAa,OAAO,cAAc,OAAO,YAAY,sEAAsE,QAAQ,CAAC,UAAQ,iBAAe,EAAQ,SAAS,GAAG,CAAC,CAAW,EAAE,kBAAkB,CAAC,KAAK,EAAY,MAAM,MAAM,mBAAmB,aAAa,UAAU,QAAQ,CAAC,iBAAe,CAAC,CAAW,EAAE,iBAAiB,CAAC,KAAK,EAAY,MAAM,MAAM,mBAAmB,aAAa,UAAU,QAAQ,CAAC,iBAAe,CAAC,CAAW,CAAC,CAAC"}