{"version":3,"file":"CurvedLoopText_Prod.CA3JbBHJ.mjs","names":["p","_Fragment","useRef","useState","useMemo","e","React","useCallback","useRef","useState","useMemo","e","_Fragment"],"sources":["https:/framerusercontent.com/modules/mUrGKYYaGVVAitY3iXVZ/Ar9h1Pks4hT17dWAfxBN/Sphere3DTimeline.js","https:/framerusercontent.com/modules/XjyaAMlQm1XKl2jNPVh7/1TBOywuUilFcHkd21E9P/CurvedLoopText_Prod.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import React,{useCallback,useEffect,useLayoutEffect,useMemo,useRef,useState}from\"react\";import{motion,useScroll,useTransform,useSpring,AnimatePresence}from\"framer-motion\";// =============================================================================\n// THEMES & CONSTANTS\n// =============================================================================\nconst GLOW_THEMES={white:{primary:\"rgba(255,255,255,1)\",secondary:\"rgba(255,255,255,0.6)\",ambient:\"rgba(255,255,255,0.15)\"},sapphire:{primary:\"rgba(59,130,246,1)\",secondary:\"rgba(96,165,250,0.8)\",ambient:\"rgba(59,130,246,0.2)\"},gold:{primary:\"rgba(251,191,36,1)\",secondary:\"rgba(252,211,77,0.8)\",ambient:\"rgba(251,191,36,0.2)\"},rose:{primary:\"rgba(244,63,94,1)\",secondary:\"rgba(251,113,133,0.8)\",ambient:\"rgba(244,63,94,0.2)\"}};/** Parse a CSS color string and return r, g, b (0-255). */function parseColor(color){// Handle hex\nif(color.startsWith(\"#\")){const hex=color.slice(1);const full=hex.length===3?hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]:hex.slice(0,6);return[parseInt(full.slice(0,2),16),parseInt(full.slice(2,4),16),parseInt(full.slice(4,6),16)];}// Handle rgb/rgba\nconst m=color.match(/\\d+/g);if(m&&m.length>=3)return[+m[0],+m[1],+m[2]];return[59,130,246]// fallback sapphire\n;}/** Resolve glow theme, supporting the 'custom' option with a user-picked color. */function resolveTheme(glowTheme,customColor){if(glowTheme===\"custom\"&&customColor){const[r,g,b]=parseColor(customColor);// Lighten for secondary: blend 30% toward white\nconst lr=Math.round(r+(255-r)*.3);const lg=Math.round(g+(255-g)*.3);const lb=Math.round(b+(255-b)*.3);return{primary:`rgba(${r},${g},${b},1)`,secondary:`rgba(${lr},${lg},${lb},0.8)`,ambient:`rgba(${r},${g},${b},0.2)`};}return GLOW_THEMES[glowTheme]||GLOW_THEMES.sapphire;}const GLASS_FACETS={diamond:\"conic-gradient(from 0deg, rgba(255,255,255,0.95) 0%, rgba(255,255,255,0.3) 25%, rgba(255,255,255,0.95) 50%, rgba(255,255,255,0.3) 75%, rgba(255,255,255,0.95) 100%)\",sapphire:\"conic-gradient(from 0deg, rgba(147,197,253,0.95) 0%, rgba(59,130,246,0.4) 25%, rgba(147,197,253,0.95) 50%, rgba(59,130,246,0.4) 75%, rgba(147,197,253,0.95) 100%)\",frost:\"conic-gradient(from 0deg, rgba(241,245,249,0.98) 0%, rgba(203,213,225,0.5) 25%, rgba(241,245,249,0.98) 50%, rgba(203,213,225,0.5) 75%, rgba(241,245,249,0.98) 100%)\"};// =============================================================================\n// DEMO DATA\n// =============================================================================\nconst DEMO_MILESTONES=[{title:\"Founded in a Garage\",date:\"January 2020\",category:\"Origin\",description:\"Started with nothing but a dream, a laptop, and endless cups of coffee. The journey of a thousand miles begins with a single pixel.\",image:{src:\"https://images.pexels.com/photos/5846164/pexels-photo-5846164.jpeg?auto=compress&w=600\",alt:\"Startup workspace\"}},{title:\"First Client Win\",date:\"March 2020\",category:\"Milestone\",description:\"Landed our first $10K project — a complete rebrand for a local artisan bakery. Our first taste of what was possible.\",image:{src:\"https://images.unsplash.com/photo-1600880292203-757bb62b4baf?w=600&q=80\",alt:\"Celebrating first client\"}},{title:\"Team of Three\",date:\"August 2020\",category:\"Growth\",description:\"Welcomed our first two team members: a brilliant UI designer and a frontend wizard. The dream team was forming.\",image:{src:\"https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=600&q=80\",alt:\"Team working together\"}},{title:\"$100K Revenue\",date:\"January 2021\",category:\"Milestone\",description:\"Crossed six figures in annual revenue. Proof that quality work and word-of-mouth could build something real.\",image:{src:\"https://images.unsplash.com/photo-1553729459-efe14ef6055d?w=600&q=80\",alt:\"Revenue milestone\"}},{title:\"Downtown Studio\",date:\"June 2021\",category:\"Growth\",description:\"Moved from the garage to a stunning downtown studio with floor-to-ceiling windows.\",image:{src:\"https://images.unsplash.com/photo-1497366216548-37526070297c?w=600&q=80\",alt:\"Modern studio\"}}];/**\n * Generate a spherical spiral path wrapping around the sphere.\n * Uses proper spherical coordinates so ALL points lie on the sphere surface.\n * The spiral starts from the upper-left edge and gracefully descends with\n * a smooth eased colatitude, creating a beautiful helix that stays within\n * the visually appealing zone of the sphere.\n */function generateSpherePath(cx,cy,radius,tiltDeg,_milestoneCount,focalLength,samples=500){const tiltRad=tiltDeg*Math.PI/180;// Longitude (phi): ~1.6 wraps starting from the far left edge.\n// The extra wrap ensures the line continues behind the globe at\n// the end, giving a clean \"wrapping around\" visual.\nconst phiStart=-1*Math.PI;const phiSpan=3.2*Math.PI// ~576° = ~1.6 full revolutions\n;// Colatitude (theta): stays in the upper hemisphere so all nodes\n// sit well above the equator line.\nconst thetaStart=35*Math.PI/180// 35° from north\n;const thetaEnd=87*Math.PI/180// 87° from north (just above equator)\n;const allPoints=[];for(let i=0;i<=samples;i++){const t=i/samples;const phi=phiStart+t*phiSpan;const theta=thetaStart+t*(thetaEnd-thetaStart);// Spherical → Cartesian (screen coords: y-down)\nconst x0=radius*Math.sin(theta)*Math.cos(phi);const y0=-radius*Math.cos(theta)// negative = up in screen\n;const z0=radius*Math.sin(theta)*Math.sin(phi);// Apply tilt: rotate entire sphere around X axis\nconst x1=x0;const y1=y0*Math.cos(tiltRad)-z0*Math.sin(tiltRad);const z1=y0*Math.sin(tiltRad)+z0*Math.cos(tiltRad);// Perspective projection\nconst scale=focalLength/(focalLength+z1);allPoints.push({x:cx+x1*scale,y:cy+y1*scale,z:z1,scale});}// Build full continuous path string, measure total length, and\n// build cumulative distance array for accurate dot positioning.\nlet fullPathD=\"\";let totalLength=0;const cumDistances=[0];for(let i=0;i<allPoints.length;i++){const p=allPoints[i];fullPathD+=i===0?`M ${p.x.toFixed(1)} ${p.y.toFixed(1)} `:`L ${p.x.toFixed(1)} ${p.y.toFixed(1)} `;if(i>0){totalLength+=Math.hypot(p.x-allPoints[i-1].x,p.y-allPoints[i-1].y);cumDistances.push(totalLength);}}// Segment into front (z <= 0) and back (z > 0)\n// Clean z<=0 check with interpolated crossing points for smooth edges.\nconst frontSegments=[];const backSegments=[];let seg=`M ${allPoints[0].x.toFixed(1)} ${allPoints[0].y.toFixed(1)} `;let segIsFront=allPoints[0].z<=0;let segStartT=0;for(let i=1;i<allPoints.length;i++){const p=allPoints[i];const isFront=p.z<=0;const t=i/samples;if(isFront!==segIsFront){// Interpolate the exact crossing point for a smooth transition\nconst prev=allPoints[i-1];const crossT=Math.abs(prev.z)/(Math.abs(prev.z)+Math.abs(p.z));const crossX=prev.x+crossT*(p.x-prev.x);const crossY=prev.y+crossT*(p.y-prev.y);// Close old segment at the interpolated crossing point\nseg+=`L ${crossX.toFixed(1)} ${crossY.toFixed(1)} `;if(segIsFront){frontSegments.push({path:seg,startT:segStartT,endT:t});}else{backSegments.push({path:seg});}// Start new segment from the crossing point\nseg=`M ${crossX.toFixed(1)} ${crossY.toFixed(1)} `;segIsFront=isFront;segStartT=t;}seg+=`L ${p.x.toFixed(1)} ${p.y.toFixed(1)} `;}if(segIsFront){frontSegments.push({path:seg,startT:segStartT,endT:1});}else{backSegments.push({path:seg});}// Build front-only compound path and measure its length\nconst frontPathD=frontSegments.map(s=>s.path).join(\" \");let frontTotalLength=0;for(const fSeg of frontSegments){const startI=Math.round(fSeg.startT*samples);const endI=Math.round(fSeg.endT*samples);for(let i=startI+1;i<=endI&&i<allPoints.length;i++){frontTotalLength+=Math.hypot(allPoints[i].x-allPoints[i-1].x,allPoints[i].y-allPoints[i-1].y);}}return{fullPathD,frontSegments,backSegments,frontPathD,frontTotalLength,totalLength,allPoints,cumDistances};}/**\n * Place milestones evenly along the FRONT-FACE arcs only.\n * With 1.5 wraps we get 2 front arcs. Milestones are distributed\n * proportionally across both arcs based on their relative lengths.\n */function placeMilestonesOnFrontArcs(frontSegments,allPoints,milestoneCount,samples=500){if(milestoneCount===0||frontSegments.length===0)return[];// Measure each front arc's length\nconst arcLengths=[];let totalFrontLen=0;for(const seg of frontSegments){const startI=Math.round(seg.startT*samples);const endI=Math.round(seg.endT*samples);let len=0;for(let i=startI+1;i<=endI&&i<allPoints.length;i++){len+=Math.hypot(allPoints[i].x-allPoints[i-1].x,allPoints[i].y-allPoints[i-1].y);}arcLengths.push(len);totalFrontLen+=len;}// Distribute milestones evenly along total front-arc length\nconst results=[];for(let m=0;m<milestoneCount;m++){const frac=milestoneCount===1?.5:.08+m/(milestoneCount-1)*.84;const targetDist=frac*totalFrontLen;// Walk through front arcs to find the point\nlet cumDist=0;let placed=false;for(let si=0;si<frontSegments.length&&!placed;si++){const seg=frontSegments[si];const startI=Math.round(seg.startT*samples);const endI=Math.round(seg.endT*samples);for(let i=startI+1;i<=endI&&i<allPoints.length;i++){cumDist+=Math.hypot(allPoints[i].x-allPoints[i-1].x,allPoints[i].y-allPoints[i-1].y);if(cumDist>=targetDist){results.push({x:allPoints[i].x,y:allPoints[i].y,t:i/samples,scale:allPoints[i].scale,segIndex:si});placed=true;break;}}}if(!placed&&allPoints.length>0){const last=allPoints[allPoints.length-1];results.push({x:last.x,y:last.y,t:1,scale:last.scale,segIndex:frontSegments.length-1});}}return results;}// =============================================================================\n// CRYSTAL NODE\n// =============================================================================\nconst CrystalNode=({index,isActive,isPast,theme,glassFacets,size,scrollProgress,activationPoint,labelDirX,labelDirY,onClick})=>{const facetGradient=GLASS_FACETS[glassFacets];const bloomStart=activationPoint-.04;const bloomEnd=activationPoint+.02;const bloom=Math.max(0,Math.min(1,(scrollProgress-bloomStart)/(bloomEnd-bloomStart)));const revealed=isPast||isActive;const scale=revealed?1:.2+bloom*.8;const blur=revealed?0:25-bloom*25;const gR=revealed?8:bloom*8;return /*#__PURE__*/_jsxs(motion.div,{initial:{scale:.2,filter:\"blur(25px)\"},animate:{scale,filter:`blur(${blur}px)`},transition:{duration:.6,ease:[.16,1,.3,1]},onClick:onClick,style:{width:size,height:size,borderRadius:\"50%\",position:\"relative\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",cursor:onClick?\"pointer\":\"default\"},children:[/*#__PURE__*/_jsx(motion.div,{animate:{scale:[1,1.4,1],opacity:[.3,0,.3]},transition:{duration:3,repeat:Infinity,ease:\"easeInOut\"},style:{position:\"absolute\",inset:-6,borderRadius:\"50%\",border:`2px solid ${theme.primary}`,opacity:isActive?.5:0}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:-12,borderRadius:\"50%\",background:`radial-gradient(circle, ${theme.ambient} 0%, ${theme.primary}40 30%, transparent 70%)`,opacity:isActive?.9:isPast?.5:.2,transition:\"opacity 0.5s ease\",filter:\"blur(4px)\"}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,borderRadius:\"50%\",background:facetGradient,padding:3,boxShadow:`0 0 ${gR*1.5}px ${theme.primary}, 0 0 ${gR*3}px ${theme.secondary}50`},children:/*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",height:\"100%\",borderRadius:\"50%\",background:`radial-gradient(circle at 30% 30%, rgba(255,255,255,0.98) 0%, rgba(255,255,255,0.85) 15%, rgba(255,255,255,0.6) 30%, ${theme.secondary} 60%, ${theme.primary} 100%)`,boxShadow:`inset 0 4px 12px rgba(255,255,255,0.9), inset 0 -4px 12px ${theme.ambient}, 0 0 ${gR}px ${theme.primary}, 0 0 ${gR*2}px ${theme.secondary}`,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",overflow:\"hidden\",position:\"relative\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:\"8%\",left:\"15%\",width:\"40%\",height:\"25%\",background:\"linear-gradient(135deg, rgba(255,255,255,0.9) 0%, transparent 100%)\",borderRadius:\"50%\",filter:\"blur(2px)\"}}),/*#__PURE__*/_jsx(motion.div,{animate:{opacity:[.5,1,.5],scale:[.85,1.15,.85]},transition:{duration:3,repeat:Infinity,ease:\"easeInOut\"},style:{width:size*.22,height:size*.22,borderRadius:\"50%\",background:\"radial-gradient(circle, rgba(255,255,255,1) 0%, rgba(255,255,255,0.7) 50%, transparent 100%)\",boxShadow:`0 0 ${size*.2}px rgba(255,255,255,0.9), 0 0 ${size*.4}px ${theme.primary}60`}})]})}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:size/2+labelDirX*(size/2+18),top:size/2+labelDirY*(size/2+18),transform:\"translate(-50%, -50%)\",fontSize:11,fontWeight:700,color:isActive?theme.primary:\"rgba(255,255,255,0.6)\",letterSpacing:\"0.1em\",transition:\"color 0.3s ease\",whiteSpace:\"nowrap\",padding:\"2px 6px\",borderRadius:6,background:\"rgba(0,0,0,0.6)\",backdropFilter:\"blur(4px)\",WebkitBackdropFilter:\"blur(4px)\",zIndex:5},children:String(index+1).padStart(2,\"0\")})]});};const ContentPanel=({milestone,index,isActive,isCanvas,theme,maxWidth,side,nodeX,nodeY,containerWidth,sphereCX,sphereCY,sphereR,allNodePositions})=>{const panelW=Math.min(maxWidth,300);const panelEstH=160;const padding=12;// Always place panel below the node with a slight horizontal offset\n// toward the exterior side of the sphere for visual balance.\nconst outwardOffset=(nodeX-sphereCX)*.4;let panelLeft=nodeX-panelW/2+outwardOffset;// Clamp horizontally within the container\npanelLeft=Math.max(padding,Math.min(panelLeft,containerWidth-panelW-padding));const slideDir=side===\"left\"?-1:1;// Place panel below the node with a gap\nconst vertGap=50;const rawTop=nodeY+vertGap;// Clamp to the sticky viewport\nconst stickyH=allNodePositions.length>0?Math.max(...allNodePositions.map(p=>p.y))+280:800;const clampedTop=Math.max(10,Math.min(rawTop,stickyH-panelEstH-10));if(!isActive&&!isCanvas)return null;// Connector line: from node to top-center of panel\nconst connStartX=nodeX;const connStartY=nodeY;const connEndX=panelLeft+panelW/2;const connEndY=clampedTop;return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(motion.div,{initial:isCanvas?false:{opacity:0},animate:{opacity:isActive?1:0},transition:isCanvas?{duration:0}:{duration:.6,delay:.15},style:{position:\"absolute\",inset:0,pointerEvents:\"none\",zIndex:25},children:/*#__PURE__*/_jsxs(\"svg\",{width:\"100%\",height:\"100%\",style:{position:\"absolute\",inset:0,overflow:\"visible\"},children:[/*#__PURE__*/_jsx(\"line\",{x1:connStartX,y1:connStartY,x2:connEndX,y2:connEndY,stroke:theme.secondary,strokeWidth:1,strokeOpacity:.35,strokeDasharray:\"4 6\"}),/*#__PURE__*/_jsx(\"circle\",{cx:connEndX,cy:connEndY,r:3,fill:theme.primary,fillOpacity:.4})]})}),/*#__PURE__*/_jsxs(motion.div,{initial:isCanvas?false:{opacity:0,x:slideDir*50,filter:\"blur(20px)\"},animate:{opacity:isActive?1:0,x:isActive?0:slideDir*50,filter:isActive?\"blur(0px)\":\"blur(20px)\"},transition:isCanvas?{duration:0}:{duration:.8,delay:.3,ease:[.16,1,.3,1]},style:{position:\"absolute\",left:panelLeft,top:clampedTop,width:panelW,background:\"rgba(12,12,18,0.85)\",backdropFilter:\"blur(20px)\",WebkitBackdropFilter:\"blur(20px)\",borderRadius:14,border:\"1px solid rgba(255,255,255,0.06)\",boxShadow:`0 16px 32px rgba(0,0,0,0.35), 0 0 0 1px rgba(255,255,255,0.03) inset, 0 0 20px ${theme.ambient}40`,padding:\"16px 18px\",pointerEvents:isActive?\"auto\":\"none\",zIndex:30},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",gap:5,marginBottom:8},children:[/*#__PURE__*/_jsx(\"span\",{style:{padding:\"3px 8px\",background:theme.ambient,borderRadius:12,fontSize:9,fontWeight:600,color:theme.primary,letterSpacing:\"0.08em\",textTransform:\"uppercase\"},children:milestone.category}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:9,color:\"rgba(255,255,255,0.4)\"},children:\"●\"}),/*#__PURE__*/_jsx(\"span\",{style:{fontSize:9,color:\"rgba(255,255,255,0.5)\",fontWeight:500},children:milestone.date})]}),/*#__PURE__*/_jsx(\"h3\",{style:{margin:0,marginBottom:6,fontSize:16,fontWeight:600,color:\"#FFF\",lineHeight:1.2,letterSpacing:\"-0.02em\",fontFamily:\"-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', sans-serif\"},children:milestone.title}),/*#__PURE__*/_jsx(\"p\",{style:{margin:0,fontSize:12,lineHeight:1.45,color:\"rgba(255,255,255,0.55)\",fontFamily:\"-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', sans-serif\"},children:milestone.description}),(()=>{const vSrc=typeof milestone.video===\"string\"?milestone.video:milestone.video?.src;const vPoster=typeof milestone.video===\"object\"?milestone.video?.poster:undefined;if(!vSrc&&!milestone.image?.src)return null;return /*#__PURE__*/_jsx(\"div\",{style:{marginTop:10,borderRadius:8,overflow:\"hidden\",aspectRatio:\"2.5/1\"},children:vSrc?/*#__PURE__*/_jsx(\"video\",{src:vSrc,poster:vPoster,autoPlay:true,loop:true,muted:true,playsInline:true,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\"}}):milestone.image?.src?/*#__PURE__*/_jsx(\"img\",{src:milestone.image.src,srcSet:milestone.image.srcSet,alt:milestone.image.alt||milestone.title,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\"}}):null});})()]})]});};// =============================================================================\n// SPHERE GRID\n// =============================================================================\nfunction SphereGrid({cx,cy,r,tilt,opacity}){const tiltRad=tilt*Math.PI/180;const lats=[];const lons=[];// Latitude lines\nfor(let i=-3;i<=3;i++){const yOff=i/4*r;const ringR=Math.sqrt(Math.max(0,r*r-yOff*yOff));const displayY=cy+yOff*Math.cos(tiltRad);lats.push(/*#__PURE__*/_jsx(\"ellipse\",{cx:cx,cy:displayY,rx:ringR,ry:ringR*(.25+Math.abs(i)*.04),fill:\"none\",stroke:`rgba(255,255,255,${.04*opacity})`,strokeWidth:1},`lat${i}`));}// Longitude lines\nfor(let i=0;i<6;i++){const a=i/6*Math.PI;const sx=Math.abs(Math.cos(a));lons.push(/*#__PURE__*/_jsx(\"ellipse\",{cx:cx,cy:cy,rx:r*Math.max(.04,sx),ry:r,fill:\"none\",stroke:`rgba(255,255,255,${.03*opacity})`,strokeWidth:1,transform:`rotate(${tilt*.3}, ${cx}, ${cy})`},`lon${i}`));}return /*#__PURE__*/_jsxs(_Fragment,{children:[lats,lons]});}// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 1000\n * @framerIntrinsicHeight 2500\n */export default function Sphere3DTimeline(props){const{appearance={},sphere:sphereCfg={},layout={},milestones:propMilestones=[],style}=props;const glowTheme=appearance.glowTheme??\"sapphire\";const glowIntensity=appearance.glowIntensity??.8;const glassFacets=appearance.glassFacets??\"sapphire\";const background=appearance.background??\"transparent\";const sphereSize=sphereCfg.sphereSize??480;const tiltAngle=sphereCfg.tiltAngle??32;const showGrid=sphereCfg.showGridLines??true;const sphereOpacity=sphereCfg.sphereOpacity??1;const timelineHeight=layout.timelineHeight??2500;const contentMaxWidth=layout.contentMaxWidth??300;const pinSize=layout.pinSize??40;const containerRef=useRef(null);const[containerW,setContainerW]=useState(1200);const[activeIndex,setActiveIndex]=useState(-1);const[scrollValue,setScrollValue]=useState(0);const isCanvas=RenderTarget.current()===RenderTarget.canvas;const milestones=useMemo(()=>{const data=propMilestones.length>0?propMilestones:DEMO_MILESTONES;return data.slice(0,5);},[propMilestones]);const customColor=appearance.customColor;const theme=useMemo(()=>resolveTheme(glowTheme,customColor),[glowTheme,customColor]);// Measure width\nuseLayoutEffect(()=>{if(!containerRef.current)return;const ro=new ResizeObserver(entries=>{const e=entries[0];if(e)setContainerW(e.contentRect.width);});ro.observe(containerRef.current);return()=>ro.disconnect();},[]);// Sphere geometry — sphere is centered in the sticky viewport\nconst sphereR=sphereSize/2;const cx=containerW/2;// The SVG viewBox height = timelineHeight, but the sphere is drawn at the center\n// For the sticky view, the sphere center is at the middle of the viewport area\nconst stickyH=Math.min(800,timelineHeight*.8);const sphereCY=stickyH/2;const focalLen=sphereSize*2.2;// Compute path and milestones\nconst pathData=useMemo(()=>{return generateSpherePath(cx,sphereCY,sphereR,tiltAngle,milestones.length,focalLen,500);},[cx,sphereCY,sphereR,tiltAngle,milestones.length,focalLen]);const msPositions=useMemo(()=>{return placeMilestonesOnFrontArcs(pathData.frontSegments,pathData.allPoints,milestones.length,500);},[pathData,milestones.length]);// Scroll\nconst{scrollYProgress}=useScroll({target:containerRef,offset:[\"start start\",\"end end\"]});const smoothProgress=useSpring(scrollYProgress,{stiffness:400,damping:90});const strokeDashoffset=useTransform(smoothProgress,[.05,.95],[pathData.totalLength,0]);// Precompute distance-based scroll thresholds for each milestone\n// so nodes activate exactly when the drawn line reaches them.\nconst msDistThresholds=useMemo(()=>{return msPositions.map(pos=>{const sampleIdx=Math.round(pos.t*500);const clampedIdx=Math.min(sampleIdx,pathData.cumDistances.length-1);const msDist=pathData.cumDistances[clampedIdx]||0;return .05+.9*(msDist/pathData.totalLength);});},[msPositions,pathData.cumDistances,pathData.totalLength]);useEffect(()=>{if(isCanvas){setScrollValue(.35);setActiveIndex(1);return;}const unsub=smoothProgress.on(\"change\",v=>{setScrollValue(v);let active=-1;for(let i=0;i<msDistThresholds.length;i++){if(v>=msDistThresholds[i]-.01)active=i;}setActiveIndex(active);});return unsub;},[isCanvas,smoothProgress,msDistThresholds]);const fId=React.useId().replace(/:/g,\"\");// Sphere rotation driven by scroll\nconst sphereRotateY=useTransform(smoothProgress,[0,1],[-8,8]);// Helper: find the point on the path at a given drawn distance.\n// Used by the leading dot MotionValues below.\nconst findPointAtDistance=useCallback(targetDist=>{const{cumDistances,allPoints}=pathData;if(allPoints.length===0||cumDistances.length===0)return{x:0,y:0,z:1};let lo=0,hi=cumDistances.length-1;while(lo<hi){const mid=lo+hi>>1;if(cumDistances[mid]<targetDist)lo=mid+1;else hi=mid;}const idx=Math.max(0,Math.min(lo,allPoints.length-1));if(idx>0&&cumDistances[idx]!==cumDistances[idx-1]){const segLen=cumDistances[idx]-cumDistances[idx-1];const overshoot=cumDistances[idx]-targetDist;const lerp=Math.max(0,Math.min(1,1-overshoot/segLen));const a=allPoints[idx-1];const b=allPoints[idx];return{x:a.x+lerp*(b.x-a.x),y:a.y+lerp*(b.y-a.y),z:a.z+lerp*(b.z-a.z)};}return{x:allPoints[idx].x,y:allPoints[idx].y,z:allPoints[idx].z};},[pathData]);// Leading dot — derived directly from smoothProgress MotionValue\n// so it's perfectly in sync with the strokeDashoffset (same frame).\nconst dotPosCache=useRef({v:-1,x:0,y:0,z:1});const computeDot=useCallback(v=>{if(v===dotPosCache.current.v)return dotPosCache.current;const drawFrac=Math.max(0,Math.min(1,(v-.05)/.9));const p=findPointAtDistance(drawFrac*pathData.totalLength);dotPosCache.current={v,...p};return dotPosCache.current;},[findPointAtDistance,pathData.totalLength]);const dotX=useTransform(smoothProgress,v=>computeDot(v).x);const dotY=useTransform(smoothProgress,v=>computeDot(v).y);const dotOpacity=useTransform(smoothProgress,v=>{const drawFrac=Math.max(0,Math.min(1,(v-.05)/.9));const p=computeDot(v);return drawFrac>.005&&p.z<=0?1:0;});// The sphere + path rendered inside a sticky container\nreturn /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{...style,position:\"relative\",width:style?.width||1e3,height:timelineHeight,background,fontFamily:\"-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', sans-serif\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{position:isCanvas?\"relative\":\"sticky\",top:0,width:\"100%\",height:stickyH,overflow:\"visible\",zIndex:1,perspective:\"1200px\"},children:[/*#__PURE__*/_jsxs(motion.svg,{width:\"100%\",height:stickyH,viewBox:`0 0 ${containerW} ${stickyH}`,style:{position:\"absolute\",top:0,left:0,overflow:\"visible\",rotateY:isCanvas?0:sphereRotateY},children:[/*#__PURE__*/_jsxs(\"defs\",{children:[/*#__PURE__*/_jsxs(\"filter\",{id:`${fId}-g`,x:\"-100%\",y:\"-100%\",width:\"300%\",height:\"300%\",children:[/*#__PURE__*/_jsx(\"feGaussianBlur\",{stdDeviation:\"6\",result:\"b\"}),/*#__PURE__*/_jsx(\"feComposite\",{in:\"SourceGraphic\",in2:\"b\",operator:\"over\"})]}),/*#__PURE__*/_jsxs(\"filter\",{id:`${fId}-s`,x:\"-50%\",y:\"-50%\",width:\"200%\",height:\"200%\",children:[/*#__PURE__*/_jsx(\"feGaussianBlur\",{stdDeviation:\"6\",result:\"b1\"}),/*#__PURE__*/_jsx(\"feGaussianBlur\",{in:\"SourceGraphic\",stdDeviation:\"3\",result:\"b2\"}),/*#__PURE__*/_jsxs(\"feMerge\",{children:[/*#__PURE__*/_jsx(\"feMergeNode\",{in:\"b1\"}),/*#__PURE__*/_jsx(\"feMergeNode\",{in:\"b2\"}),/*#__PURE__*/_jsx(\"feMergeNode\",{in:\"SourceGraphic\"})]})]}),/*#__PURE__*/_jsx(\"filter\",{id:`${fId}-u`,x:\"-100%\",y:\"-100%\",width:\"300%\",height:\"300%\",children:/*#__PURE__*/_jsx(\"feGaussianBlur\",{stdDeviation:\"8\"})}),/*#__PURE__*/_jsx(\"filter\",{id:`${fId}-sg`,x:\"-50%\",y:\"-50%\",width:\"200%\",height:\"200%\",children:/*#__PURE__*/_jsx(\"feGaussianBlur\",{stdDeviation:\"35\"})}),/*#__PURE__*/_jsxs(\"radialGradient\",{id:`${fId}-sf`,cx:\"35%\",cy:\"30%\",r:\"65%\",children:[/*#__PURE__*/_jsx(\"stop\",{offset:\"0%\",stopColor:\"rgba(255,255,255,0.10)\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"35%\",stopColor:\"rgba(255,255,255,0.04)\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"100%\",stopColor:\"rgba(0,0,0,0.25)\"})]}),/*#__PURE__*/_jsxs(\"radialGradient\",{id:`${fId}-ir`,cx:\"40%\",cy:\"35%\",r:\"60%\",children:[/*#__PURE__*/_jsx(\"stop\",{offset:\"0%\",stopColor:theme.ambient,stopOpacity:\"0.25\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"60%\",stopColor:theme.ambient,stopOpacity:\"0.06\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"100%\",stopColor:\"transparent\",stopOpacity:\"0\"})]}),/*#__PURE__*/_jsx(\"mask\",{id:`${fId}-fm`,children:pathData.frontSegments.map((s,i)=>/*#__PURE__*/_jsx(\"path\",{d:s.path,fill:\"none\",stroke:\"white\",strokeWidth:6,strokeLinecap:\"round\"},i))})]}),pathData.backSegments.map((seg,i)=>/*#__PURE__*/_jsx(\"path\",{d:seg.path,fill:\"none\",stroke:\"rgba(255,255,255,0.06)\",strokeWidth:1.5,strokeDasharray:\"4 8\",strokeLinecap:\"round\"},`bk${i}`)),/*#__PURE__*/_jsx(\"circle\",{cx:cx,cy:sphereCY,r:sphereR*1.5,fill:theme.ambient,filter:`url(#${fId}-sg)`,opacity:glowIntensity*.35*sphereOpacity}),/*#__PURE__*/_jsx(\"circle\",{cx:cx,cy:sphereCY,r:sphereR,fill:`url(#${fId}-sf)`,stroke:\"rgba(255,255,255,0.07)\",strokeWidth:1.5,opacity:sphereOpacity}),/*#__PURE__*/_jsx(\"circle\",{cx:cx,cy:sphereCY,r:sphereR*.98,fill:`url(#${fId}-ir)`,opacity:sphereOpacity*glowIntensity*.6}),/*#__PURE__*/_jsx(\"circle\",{cx:cx,cy:sphereCY,r:sphereR-1,fill:\"none\",stroke:theme.primary,strokeWidth:1.5,strokeOpacity:.12*sphereOpacity}),/*#__PURE__*/_jsx(\"ellipse\",{cx:cx-sphereR*.15,cy:sphereCY-sphereR*.3,rx:sphereR*.15,ry:sphereR*.1,fill:\"rgba(255,255,255,0.06)\",opacity:sphereOpacity,filter:`url(#${fId}-g)`}),showGrid&&/*#__PURE__*/_jsx(SphereGrid,{cx:cx,cy:sphereCY,r:sphereR,tilt:tiltAngle,opacity:sphereOpacity}),pathData.frontSegments.map((seg,i)=>/*#__PURE__*/_jsx(\"path\",{d:seg.path,fill:\"none\",stroke:\"rgba(255,255,255,0.08)\",strokeWidth:3,strokeLinecap:\"round\",strokeLinejoin:\"round\"},`ft${i}`)),/*#__PURE__*/_jsxs(\"g\",{mask:`url(#${fId}-fm)`,children:[/*#__PURE__*/_jsx(motion.path,{d:pathData.fullPathD,fill:\"none\",stroke:theme.ambient,strokeWidth:10,strokeLinecap:\"round\",strokeDasharray:pathData.totalLength,strokeDashoffset:isCanvas?pathData.totalLength*.65:strokeDashoffset,filter:`url(#${fId}-u)`,style:{opacity:glowIntensity*.2}}),/*#__PURE__*/_jsx(motion.path,{d:pathData.fullPathD,fill:\"none\",stroke:theme.secondary,strokeWidth:8,strokeLinecap:\"round\",strokeDasharray:pathData.totalLength,strokeDashoffset:isCanvas?pathData.totalLength*.65:strokeDashoffset,filter:`url(#${fId}-s)`,style:{opacity:glowIntensity*.35}}),/*#__PURE__*/_jsx(motion.path,{d:pathData.fullPathD,fill:\"none\",stroke:theme.primary,strokeWidth:3,strokeLinecap:\"round\",strokeDasharray:pathData.totalLength,strokeDashoffset:isCanvas?pathData.totalLength*.65:strokeDashoffset,filter:`url(#${fId}-g)`,style:{opacity:glowIntensity*.9}}),/*#__PURE__*/_jsx(motion.path,{d:pathData.fullPathD,fill:\"none\",stroke:\"rgba(255,255,255,0.85)\",strokeWidth:1,strokeLinecap:\"round\",strokeDasharray:pathData.totalLength,strokeDashoffset:isCanvas?pathData.totalLength*.65:strokeDashoffset,style:{opacity:glowIntensity*.7}})]}),/*#__PURE__*/_jsxs(motion.g,{style:{opacity:dotOpacity},children:[/*#__PURE__*/_jsx(motion.circle,{cx:dotX,cy:dotY,r:12,fill:theme.ambient,filter:`url(#${fId}-u)`,opacity:glowIntensity*.6}),/*#__PURE__*/_jsx(motion.circle,{cx:dotX,cy:dotY,r:5,fill:theme.primary,opacity:glowIntensity}),/*#__PURE__*/_jsx(motion.circle,{cx:dotX,cy:dotY,r:2,fill:\"rgba(255,255,255,0.95)\"})]})]}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,pointerEvents:\"none\",zIndex:10},children:msPositions.map((pos,i)=>{const actPt=.05+pos.t*.9;// Compute path tangent at this node from neighboring sample points\nconst sampleIdx=Math.round(pos.t*500);const prevIdx=Math.max(0,sampleIdx-5);const nextIdx=Math.min(pathData.allPoints.length-1,sampleIdx+5);const pPrev=pathData.allPoints[prevIdx];const pNext=pathData.allPoints[nextIdx];const tx=pNext.x-pPrev.x;const ty=pNext.y-pPrev.y;const tLen=Math.hypot(tx,ty)||1;// Two perpendicular normals: (-ty, tx) and (ty, -tx)\n// Pick the one pointing AWAY from sphere center\nconst n1x=-ty/tLen;const n1y=tx/tLen;const outX=pos.x-cx;const outY=pos.y-sphereCY;const dot=n1x*outX+n1y*outY;let labelDirX=dot>=0?n1x:-n1x;let labelDirY=dot>=0?n1y:-n1y;// Panels are always below the node, so the connector goes\n// downward. If the label also points downward it will overlap\n// the connector line — redirect it horizontally instead.\nif(labelDirY>.3){labelDirX=labelDirX>=0?1:-1;labelDirY=0;}const handleNodeClick=isCanvas?undefined:()=>{const el=containerRef.current;if(!el)return;const rect=el.getBoundingClientRect();const containerTop=window.scrollY+rect.top;const containerHeight=el.scrollHeight||timelineHeight;// scrollYProgress spans [0,1] over (containerHeight - viewportHeight)\nconst scrollRange=containerHeight-window.innerHeight;const targetScroll=containerTop+msDistThresholds[i]*scrollRange;window.scrollTo({top:targetScroll,behavior:\"smooth\"});};return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:pos.x-pinSize/2,top:pos.y-pinSize/2,pointerEvents:\"auto\",zIndex:20},children:/*#__PURE__*/_jsx(CrystalNode,{index:i,isActive:i===activeIndex,isPast:i<activeIndex,theme:theme,glassFacets:glassFacets,size:pinSize,scrollProgress:scrollValue,activationPoint:actPt,labelDirX:labelDirX,labelDirY:labelDirY,onClick:handleNodeClick})},i);})}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,pointerEvents:\"none\",zIndex:15},children:/*#__PURE__*/_jsx(AnimatePresence,{children:msPositions.map((pos,i)=>{const ms=milestones[i];if(!ms)return null;// Canvas: show all panels\nconst isAct=isCanvas?true:i===activeIndex;// Place panel on the same side as the node, just outside sphere edge.\nconst side=pos.x<cx?\"left\":\"right\";return /*#__PURE__*/_jsx(ContentPanel,{milestone:ms,index:i,isActive:isAct,isCanvas:isCanvas,theme:theme,maxWidth:contentMaxWidth,side:side,nodeX:pos.x,nodeY:pos.y,containerWidth:containerW,sphereCX:cx,sphereCY:sphereCY,sphereR:sphereR,allNodePositions:msPositions},i);})})})]}),!isCanvas&&/*#__PURE__*/_jsxs(\"div\",{style:{position:\"fixed\",top:\"10%\",left:\"50%\",transform:\"translateX(-50%)\",width:120,height:2,borderRadius:1,background:\"rgba(255,255,255,0.08)\",zIndex:50,opacity:scrollValue>.02&&scrollValue<.95?1:0,transition:\"opacity 0.5s ease\"},children:[/*#__PURE__*/_jsx(motion.div,{style:{position:\"absolute\",top:0,left:0,height:\"100%\",borderRadius:1,background:theme.primary,width:`${scrollValue*100}%`,boxShadow:`0 0 8px ${theme.primary}`}}),/*#__PURE__*/_jsx(motion.div,{style:{position:\"absolute\",top:-3,width:8,height:8,borderRadius:\"50%\",background:theme.primary,left:`${scrollValue*100}%`,transform:\"translateX(-50%)\",boxShadow:`0 0 12px ${theme.primary}`}})]})]});}// =============================================================================\n// DEFAULTS & CONTROLS\n// =============================================================================\nSphere3DTimeline.defaultProps={appearance:{glowTheme:\"sapphire\",glowIntensity:.6,glassFacets:\"sapphire\",background:\"transparent\",customColor:\"#3B82F6\"},sphere:{sphereSize:480,tiltAngle:32,showGridLines:true,sphereOpacity:1},layout:{timelineHeight:2500,contentMaxWidth:300,pinSize:40},milestones:[]};addPropertyControls(Sphere3DTimeline,{milestones:{type:ControlType.Array,title:\"Milestones\",maxCount:5,control:{type:ControlType.Object,controls:{title:{type:ControlType.String,title:\"Title\",defaultValue:\"Milestone\"},date:{type:ControlType.String,title:\"Date\",defaultValue:\"Jan 2024\"},category:{type:ControlType.String,title:\"Category\",defaultValue:\"Milestone\"},description:{type:ControlType.String,title:\"Description\",displayTextArea:true,defaultValue:\"Description.\"},image:{type:ControlType.ResponsiveImage,title:\"Image\"},video:{type:ControlType.File,title:\"Video\",allowedFileTypes:[\"mp4\",\"webm\",\"mov\"]}}},defaultValue:[]},appearance:{type:ControlType.Object,title:\"Appearance\",icon:\"color\",controls:{glowTheme:{type:ControlType.Enum,title:\"Glow Color\",options:[\"white\",\"sapphire\",\"gold\",\"rose\",\"custom\"],optionTitles:[\"White\",\"Sapphire\",\"Gold\",\"Rose\",\"Custom\"],defaultValue:\"sapphire\"},customColor:{type:ControlType.Color,title:\"Custom Color\",defaultValue:\"#3B82F6\",hidden:props=>props.glowTheme!==\"custom\"},glowIntensity:{type:ControlType.Number,title:\"Brightness\",min:.1,max:1,step:.1,defaultValue:.6},glassFacets:{type:ControlType.Enum,title:\"Node Style\",options:[\"diamond\",\"sapphire\",\"frost\"],optionTitles:[\"Diamond\",\"Sapphire\",\"Frost\"],defaultValue:\"sapphire\"},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"transparent\"}}},sphere:{type:ControlType.Object,title:\"Sphere\",icon:\"effect\",controls:{sphereSize:{type:ControlType.Number,title:\"Size\",min:300,max:800,step:10,unit:\"px\",defaultValue:480},tiltAngle:{type:ControlType.Number,title:\"Tilt Angle\",min:15,max:60,step:1,unit:\"\\xb0\",defaultValue:32},showGridLines:{type:ControlType.Boolean,title:\"Grid Lines\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},sphereOpacity:{type:ControlType.Number,title:\"Sphere Opacity\",min:0,max:1,step:.1,defaultValue:1}}},layout:{type:ControlType.Object,title:\"Sizing\",icon:\"object\",controls:{timelineHeight:{type:ControlType.Number,title:\"Height\",min:2e3,max:6e3,step:100,unit:\"px\",defaultValue:2500},contentMaxWidth:{type:ControlType.Number,title:\"Panel Width\",min:200,max:400,step:10,unit:\"px\",defaultValue:300},pinSize:{type:ControlType.Number,title:\"Node Size\",min:24,max:60,step:4,unit:\"px\",defaultValue:40}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Sphere3DTimeline\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"1000\",\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"2500\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Sphere3DTimeline.map","import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useRef,useEffect,useState,useMemo}from\"react\";import{motion,useAnimationFrame,useMotionValue,useTransform}from\"framer-motion\";import{ControlType,addPropertyControls}from\"framer\";// ------------------------------------------------------------ //\n// MAIN COMPONENT\n// ------------------------------------------------------------ //\n/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n * @framerDisableUnlink\n */export default function CurvedLoop(props){const measureRef=useRef(null);const tspansRef=useRef([]);const pathRef=useRef(null);const[pathLength,setPathLength]=useState(0);const[spacing,setSpacing]=useState(0);// Use completely static IDs based on component props to ensure consistency\nconst staticId=useMemo(()=>{// Create a deterministic hash from props that will be consistent across SSR/client\nconst propsString=`${props.text.text}-${props.curveAmount}-${props.direction}-${props.baseVelocity}`;let hash=0;for(let i=0;i<propsString.length;i++){const char=propsString.charCodeAt(i);hash=(hash<<5)-hash+char;hash=hash&hash// Convert to 32-bit integer\n;}return Math.abs(hash).toString(36);},[props.text.text,props.curveAmount,props.direction,props.baseVelocity]);const pathId=`curve-${staticId}`;const fadeGradientId=`fadeGradient-${staticId}`;const fadeMaskId=`fadeMask-${staticId}`;const pathD=`M-100,400 Q720,${400+props.curveAmount} 1540,400`;const defaultVelocity=useMotionValue(1);const isDragging=useRef(false);const dragVelocity=useRef(0);// Transform scroll velocity into a factor that affects marquee speed\nconst velocityFactor=useTransform(defaultVelocity,[0,1e3],[0,5],{clamp:false});// Convert baseVelocity to the correct direction\nconst actualBaseVelocity=props.direction===\"left\"?-props.baseVelocity:props.baseVelocity;// Reference to track if mouse is hovering\nconst isHovered=useRef(false);// Direction factor for changing direction based on scroll or drag\nconst directionFactor=useRef(1);// Process text to ensure proper spacing\nconst processedText=useMemo(()=>{// Remove any trailing spaces first\nconst trimmedText=props.text.text.trim();// Add two non-breaking spaces to ensure visible gap\nreturn trimmedText+\"\\xa0\\xa0\";},[props]);// Measure text width and set up path\nuseEffect(()=>{if(measureRef.current){setSpacing(measureRef.current.getComputedTextLength());}},[props]);useEffect(()=>{if(pathRef.current){setPathLength(pathRef.current.getTotalLength());}},[props.curveAmount]);// Calculate number of repeats needed based on path length and text spacing\nconst calculatedRepeats=Math.ceil(pathLength/spacing)+2;const ready=pathLength>0&&spacing>0;useAnimationFrame((t,delta)=>{if(!ready||tspansRef.current.length===0)return;if(isDragging.current){// Apply drag velocity directly to text positions\ntspansRef.current.forEach(tspan=>{if(!tspan)return;let x=parseFloat(tspan.getAttribute(\"x\")||\"0\");x+=dragVelocity.current;// Wrap text around when it goes off screen\nconst maxX=(tspansRef.current.length-1)*spacing;if(x<-spacing)x=maxX;if(x>maxX)x=-spacing;tspan.setAttribute(\"x\",x.toString());});// Add decay to dragVelocity when not moving\ndragVelocity.current*=.9;// Stop completely if velocity is very small\nif(Math.abs(dragVelocity.current)<.01){dragVelocity.current=0;}return;}// Calculate regular movement\nlet moveBy=directionFactor.current*actualBaseVelocity*(delta/1e3);// Adjust movement based on scroll velocity\nif(!isDragging.current){if(velocityFactor.get()<0){directionFactor.current=-1;}else if(velocityFactor.get()>0){directionFactor.current=1;}}moveBy+=directionFactor.current*moveBy*velocityFactor.get();moveBy+=dragVelocity.current;// Gradually decay drag velocity back to zero\nif(!isDragging.current&&Math.abs(dragVelocity.current)>.01){dragVelocity.current*=.96;}else if(!isDragging.current){dragVelocity.current=0;}// Apply movement to each text span\ntspansRef.current.forEach(tspan=>{if(!tspan)return;let x=parseFloat(tspan.getAttribute(\"x\")||\"0\");x+=moveBy;// Wrap text around when it goes off screen\nconst maxX=(tspansRef.current.length-1)*spacing;if(x<-spacing)x=maxX;if(x>maxX)x=-spacing;tspan.setAttribute(\"x\",x.toString());});});const lastPointerPosition=useRef({x:0,y:0});const handlePointerDown=e=>{if(!props.draggable)return;e.currentTarget.setPointerCapture(e.pointerId);e.currentTarget.style.cursor=\"grabbing\";isDragging.current=true;lastPointerPosition.current={x:e.clientX,y:e.clientY};// Pause automatic animation by setting velocity to 0\ndragVelocity.current=0;};const handlePointerMove=e=>{if(!props.draggable)return;if(!isDragging.current)return;const currentPosition={x:e.clientX,y:e.clientY};// Calculate delta from last position\nconst deltaX=currentPosition.x-lastPointerPosition.current.x;// Update drag velocity based on horizontal movement\ndragVelocity.current=deltaX*.3;// Update last position\nlastPointerPosition.current=currentPosition;};const handlePointerUp=e=>{if(!props.draggable)return;e.currentTarget.releasePointerCapture(e.pointerId);e.currentTarget.style.cursor=\"grab\";isDragging.current=false;};const cursorStyle=props.draggable?isDragging.current?\"grabbing\":\"grab\":\"default\";return /*#__PURE__*/_jsx(motion.div,{onHoverStart:()=>isHovered.current=true,onHoverEnd:()=>isHovered.current=false,style:{visibility:ready?\"visible\":\"hidden\",minHeight:\"100vh\",width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsxs(\"svg\",{viewBox:\"0 0 1440 800\",style:{position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",userSelect:\"none\",width:\"100%\",aspectRatio:\"1440 / 800\",overflow:\"visible\",display:\"block\",fill:props.text.color,fontFamily:props.text.font.fontFamily,fontSize:props.text.font.fontSize,letterSpacing:props.text.font.letterSpacing,lineHeight:props.text.font.lineHeight},children:[/*#__PURE__*/_jsx(\"text\",{ref:measureRef,xmlSpace:\"preserve\",style:{visibility:\"hidden\",opacity:0,pointerEvents:\"none\",cursor:cursorStyle},children:processedText}),/*#__PURE__*/_jsxs(\"defs\",{children:[/*#__PURE__*/_jsx(\"path\",{ref:pathRef,id:pathId,d:pathD,fill:\"none\",stroke:\"transparent\"}),props.fade&&/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsxs(\"linearGradient\",{id:fadeGradientId,x1:\"0%\",y1:\"0%\",x2:\"100%\",y2:\"0%\",children:[/*#__PURE__*/_jsx(\"stop\",{offset:\"0%\",stopColor:\"white\",stopOpacity:\"0\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"15%\",stopColor:\"white\",stopOpacity:\"1\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"80%\",stopColor:\"white\",stopOpacity:\"1\"}),/*#__PURE__*/_jsx(\"stop\",{offset:\"100%\",stopColor:\"white\",stopOpacity:\"0\"})]}),/*#__PURE__*/_jsx(\"mask\",{id:fadeMaskId,children:/*#__PURE__*/_jsx(\"rect\",{width:\"100%\",height:\"100%\",fill:`url(#${fadeGradientId})`})})]})]}),ready&&/*#__PURE__*/_jsx(\"text\",{fontWeight:props.text.font.fontWeight,xmlSpace:\"preserve\",mask:props.fade?`url(#${fadeMaskId})`:undefined,onPointerDown:handlePointerDown,onPointerMove:handlePointerMove,onPointerUp:handlePointerUp,onPointerCancel:handlePointerUp,children:/*#__PURE__*/_jsx(\"textPath\",{href:`#${pathId}`,xmlSpace:\"preserve\",children:Array.from({length:calculatedRepeats}).map((_,i)=>/*#__PURE__*/_jsx(\"tspan\",{x:i*spacing,ref:el=>{if(el)tspansRef.current[i]=el;},children:processedText},i))})})]})});}// ------------------------------------------------------------ //\n// PROPERTY CONTROLS\n// ------------------------------------------------------------ //\naddPropertyControls(CurvedLoop,{text:{type:ControlType.Object,controls:{text:{type:ControlType.String},font:{type:ControlType.Font,defaultFontType:\"sans-serif\",controls:\"extended\",defaultValue:{letterSpacing:\"1px\",lineHeight:\"1.5em\",textAlign:\"left\",fontSize:64}},color:{type:ControlType.Color}}},direction:{type:ControlType.Enum,options:[\"left\",\"right\"],optionTitles:[\"Left\",\"Right\"],defaultValue:\"left\",optionIcons:[\"direction-left\",\"direction-right\"],displaySegmentedControl:true},baseVelocity:{type:ControlType.Number,title:\"Speed\",min:0,max:500,step:1,defaultValue:50},curveAmount:{type:ControlType.Number,title:\"Curve\",min:-1e3,max:1e3,step:1,defaultValue:300},draggable:{type:ControlType.Boolean,title:\"Draggable\",defaultValue:true},fade:{type:ControlType.Boolean,title:\"Fade\",defaultValue:true,description:\"More components at [Framer University](https://frameruni.link/cc).\"}});// ------------------------------------------------------------ //\n// DEFAULT PROPS\n// ------------------------------------------------------------ //\nCurvedLoop.defaultProps={text:{text:\"Framer University\",font:{fontFamily:\"sans-serif\",fontWeight:\"400\",fontSize:64},color:\"#999999\"},direction:\"left\",baseVelocity:50,curveAmount:300,draggable:true,fade:true};CurvedLoop.displayName=\"Curved Loop Text\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CurvedLoop\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\",\"framerDisableUnlink\":\"\",\"framerIntrinsicHeight\":\"200\",\"framerIntrinsicWidth\":\"400\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CurvedLoopText_Prod.map"],"mappings":"wUAGue,SAAS,EAAW,EAAM,CACjgB,GAAG,EAAM,WAAW,IAAI,CAAC,CAAC,IAAM,EAAI,EAAM,MAAM,EAAE,CAAO,EAAK,EAAI,SAAS,EAAE,EAAI,GAAG,EAAI,GAAG,EAAI,GAAG,EAAI,GAAG,EAAI,GAAG,EAAI,GAAG,EAAI,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAK,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAK,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,EAAK,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CACpO,IAAM,EAAE,EAAM,MAAM,OAAO,CAA6C,OAAzC,GAAG,EAAE,QAAQ,EAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAO,CAAC,GAAG,IAAI,IAAI,CACL,SAAS,EAAa,EAAU,EAAY,CAAC,GAAG,IAAY,UAAU,EAAY,CAAC,GAAK,CAAC,EAAE,EAAE,GAAG,EAAW,EAAY,CACtM,EAAG,KAAK,MAAM,GAAG,IAAI,GAAG,GAAG,CAAO,EAAG,KAAK,MAAM,GAAG,IAAI,GAAG,GAAG,CAAO,EAAG,KAAK,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,UAAU,QAAQ,EAAG,GAAG,EAAG,GAAG,EAAG,OAAO,QAAQ,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAE,OAAO,EAAY,IAAY,EAAY,SASnQ,SAAS,EAAmB,EAAG,EAAG,EAAO,EAAQ,EAAgB,EAAY,EAAQ,IAAI,CAAC,IAAM,EAAQ,EAAQ,KAAK,GAAG,IAGrH,EAAS,GAAG,KAAK,GAAS,EAAQ,IAAI,KAAK,GAG3C,EAAW,GAAG,KAAK,GAAG,IACrB,EAAS,GAAG,KAAK,GAAG,IACpB,EAAU,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,EAAQ,IAAI,CAAC,IAAM,EAAE,EAAE,EAAc,EAAI,EAAS,EAAE,EAAc,EAAM,EAAW,GAAG,EAAS,GAC5H,EAAG,EAAO,KAAK,IAAI,EAAM,CAAC,KAAK,IAAI,EAAI,CAAO,EAAG,CAAC,EAAO,KAAK,IAAI,EAAM,CACvE,EAAG,EAAO,KAAK,IAAI,EAAM,CAAC,KAAK,IAAI,EAAI,CACxC,EAAG,EAAS,EAAG,EAAG,KAAK,IAAI,EAAQ,CAAC,EAAG,KAAK,IAAI,EAAQ,CAAO,EAAG,EAAG,KAAK,IAAI,EAAQ,CAAC,EAAG,KAAK,IAAI,EAAQ,CAC3G,EAAM,GAAa,EAAY,GAAI,EAAU,KAAK,CAAC,EAAE,EAAG,EAAG,EAAM,EAAE,EAAG,EAAG,EAAM,EAAE,EAAG,QAAM,CAAC,CAEjG,IAAI,EAAU,GAAO,EAAY,EAAQ,EAAa,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAU,OAAO,IAAI,CAAC,IAAMA,EAAE,EAAU,GAAG,GAAW,IAAI,EAAE,KAAKA,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAGA,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAKA,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAGA,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAM,EAAE,IAAG,GAAa,KAAK,MAAMA,EAAE,EAAE,EAAU,EAAE,GAAG,EAAEA,EAAE,EAAE,EAAU,EAAE,GAAG,EAAE,CAAC,EAAa,KAAK,EAAY,EAE/T,IAAM,EAAc,EAAE,CAAO,EAAa,EAAE,CAAK,EAAI,KAAK,EAAU,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAU,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAO,EAAW,EAAU,GAAG,GAAG,EAAM,EAAU,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAU,OAAO,IAAI,CAAC,IAAMA,EAAE,EAAU,GAAS,EAAQA,EAAE,GAAG,EAAQ,EAAE,EAAE,EAAQ,GAAG,IAAU,EAAW,CAC7R,IAAM,EAAK,EAAU,EAAE,GAAS,EAAO,KAAK,IAAI,EAAK,EAAE,EAAE,KAAK,IAAI,EAAK,EAAE,CAAC,KAAK,IAAIA,EAAE,EAAE,EAAQ,EAAO,EAAK,EAAE,GAAQA,EAAE,EAAE,EAAK,GAAS,EAAO,EAAK,EAAE,GAAQA,EAAE,EAAE,EAAK,GACtK,GAAK,KAAK,EAAO,QAAQ,EAAE,CAAC,GAAG,EAAO,QAAQ,EAAE,CAAC,GAAM,EAAY,EAAc,KAAK,CAAC,KAAK,EAAI,OAAO,EAAU,KAAK,EAAE,CAAC,CAAO,EAAa,KAAK,CAAC,KAAK,EAAI,CAAC,CAC7J,EAAI,KAAK,EAAO,QAAQ,EAAE,CAAC,GAAG,EAAO,QAAQ,EAAE,CAAC,GAAG,EAAW,EAAQ,EAAU,EAAG,GAAK,KAAKA,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAGA,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAO,EAAY,EAAc,KAAK,CAAC,KAAK,EAAI,OAAO,EAAU,KAAK,EAAE,CAAC,CAAO,EAAa,KAAK,CAAC,KAAK,EAAI,CAAC,CAC3O,IAAM,EAAW,EAAc,IAAI,GAAG,EAAE,KAAK,CAAC,KAAK,IAAI,CAAK,EAAiB,EAAE,IAAI,IAAM,KAAQ,EAAc,CAAC,IAAM,EAAO,KAAK,MAAM,EAAK,OAAO,EAAQ,CAAO,EAAK,KAAK,MAAM,EAAK,KAAK,EAAQ,CAAC,IAAI,IAAI,EAAE,EAAO,EAAE,GAAG,GAAM,EAAE,EAAU,OAAO,IAAK,GAAkB,KAAK,MAAM,EAAU,GAAG,EAAE,EAAU,EAAE,GAAG,EAAE,EAAU,GAAG,EAAE,EAAU,EAAE,GAAG,EAAE,CAAG,MAAM,CAAC,YAAU,gBAAc,eAAa,aAAW,mBAAiB,cAAY,YAAU,eAAa,CAIlc,SAAS,EAA2B,EAAc,EAAU,EAAe,EAAQ,IAAI,CAAC,GAAG,IAAiB,GAAG,EAAc,SAAS,EAAE,MAAM,EAAE,CACnJ,IAAM,EAAW,EAAE,CAAK,EAAc,EAAE,IAAI,IAAM,KAAO,EAAc,CAAC,IAAM,EAAO,KAAK,MAAM,EAAI,OAAO,EAAQ,CAAO,EAAK,KAAK,MAAM,EAAI,KAAK,EAAQ,CAAK,EAAI,EAAE,IAAI,IAAI,EAAE,EAAO,EAAE,GAAG,GAAM,EAAE,EAAU,OAAO,IAAK,GAAK,KAAK,MAAM,EAAU,GAAG,EAAE,EAAU,EAAE,GAAG,EAAE,EAAU,GAAG,EAAE,EAAU,EAAE,GAAG,EAAE,CAAE,EAAW,KAAK,EAAI,CAAC,GAAe,EAChV,IAAM,EAAQ,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAe,IAAI,CAA+D,IAAM,GAAzD,IAAiB,EAAE,GAAG,IAAI,GAAG,EAAe,GAAG,KAA0B,EACnI,EAAQ,EAAM,EAAO,GAAM,IAAI,IAAI,EAAG,EAAE,EAAG,EAAc,QAAQ,CAAC,EAAO,IAAK,CAAC,IAAM,EAAI,EAAc,GAAU,EAAO,KAAK,MAAM,EAAI,OAAO,EAAQ,CAAO,EAAK,KAAK,MAAM,EAAI,KAAK,EAAQ,CAAC,IAAI,IAAI,EAAE,EAAO,EAAE,GAAG,GAAM,EAAE,EAAU,OAAO,IAA0F,GAArF,GAAS,KAAK,MAAM,EAAU,GAAG,EAAE,EAAU,EAAE,GAAG,EAAE,EAAU,GAAG,EAAE,EAAU,EAAE,GAAG,EAAE,CAAI,GAAS,EAAW,CAAC,EAAQ,KAAK,CAAC,EAAE,EAAU,GAAG,EAAE,EAAE,EAAU,GAAG,EAAE,EAAE,EAAE,EAAQ,MAAM,EAAU,GAAG,MAAM,SAAS,EAAG,CAAC,CAAC,EAAO,GAAK,OAAS,GAAG,CAAC,GAAQ,EAAU,OAAO,EAAE,CAAC,IAAM,EAAK,EAAU,EAAU,OAAO,GAAG,EAAQ,KAAK,CAAC,EAAE,EAAK,EAAE,EAAE,EAAK,EAAE,EAAE,EAAE,MAAM,EAAK,MAAM,SAAS,EAAc,OAAO,EAAE,CAAC,EAAG,OAAO,EAYroB,SAAS,EAAW,CAAC,KAAG,KAAG,IAAE,OAAK,WAAS,CAAC,IAAM,EAAQ,EAAK,KAAK,GAAG,IAAU,EAAK,EAAE,CAAO,EAAK,EAAE,CACtG,IAAI,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,IAAM,EAAK,EAAE,EAAE,EAAQ,EAAM,KAAK,KAAK,KAAK,IAAI,EAAE,EAAE,EAAE,EAAK,EAAK,CAAC,CAAO,EAAS,EAAG,EAAK,KAAK,IAAI,EAAQ,CAAC,EAAK,KAAkB,EAAK,UAAU,CAAI,KAAG,GAAG,EAAS,GAAG,EAAM,GAAG,GAAO,IAAI,KAAK,IAAI,EAAE,CAAC,KAAK,KAAK,OAAO,OAAO,oBAAoB,IAAI,EAAQ,GAAG,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,CACnT,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAM,EAAE,EAAE,EAAE,KAAK,GAAS,EAAG,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,EAAK,KAAkB,EAAK,UAAU,CAAI,KAAM,KAAG,GAAG,EAAE,KAAK,IAAI,IAAI,EAAG,CAAC,GAAG,EAAE,KAAK,OAAO,OAAO,oBAAoB,IAAI,EAAQ,GAAG,YAAY,EAAE,UAAU,UAAU,EAAK,GAAG,IAAI,EAAG,IAAI,EAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAE,OAAoB,EAAMC,EAAU,CAAC,SAAS,CAAC,EAAK,EAAK,CAAC,CAAC,CAS7U,SAAwB,EAAiB,EAAM,CAAC,GAAK,CAAC,aAAW,EAAE,CAAC,OAAO,EAAU,EAAE,CAAC,SAAO,EAAE,CAAC,WAAW,EAAe,EAAE,CAAC,SAAO,EAAY,EAAU,EAAW,WAAW,WAAiB,EAAc,EAAW,eAAe,GAAS,EAAY,EAAW,aAAa,WAAiB,EAAW,EAAW,YAAY,cAAoB,EAAW,EAAU,YAAY,IAAU,EAAU,EAAU,WAAW,GAAS,EAAS,EAAU,eAAe,GAAW,EAAc,EAAU,eAAe,EAAQ,EAAe,EAAO,gBAAgB,KAAW,GAAgB,EAAO,iBAAiB,IAAU,EAAQ,EAAO,SAAS,GAAS,EAAaC,EAAO,KAAK,CAAM,CAAC,EAAW,IAAeC,EAAS,KAAK,CAAM,CAAC,EAAY,IAAgBA,EAAS,GAAG,CAAM,CAAC,EAAY,IAAgBA,EAAS,EAAE,CAAO,EAAS,EAAa,SAAS,GAAG,EAAa,OAAa,EAAWC,OAAwB,EAAe,OAAO,EAAE,EAAe,IAA4B,MAAM,EAAE,EAAE,CAAG,CAAC,EAAe,CAAC,CAAO,GAAY,EAAW,YAAkB,EAAMA,MAAY,EAAa,EAAU,GAAY,CAAC,CAAC,EAAU,GAAY,CAAC,CAC/nC,MAAoB,CAAC,GAAG,CAAC,EAAa,QAAQ,OAAO,IAAM,EAAG,IAAI,eAAe,GAAS,CAAC,IAAMC,EAAE,EAAQ,GAAMA,GAAE,GAAcA,EAAE,YAAY,MAAM,EAAG,CAAkC,OAAjC,EAAG,QAAQ,EAAa,QAAQ,KAAW,EAAG,YAAY,EAAG,EAAE,CAAC,CACzN,IAAM,EAAQ,EAAW,EAAQ,EAAG,EAAW,EAEzC,EAAQ,KAAK,IAAI,IAAI,EAAe,GAAG,CAAO,EAAS,EAAQ,EAAQ,GAAS,EAAW,IAC3F,EAASD,MAAoB,EAAmB,EAAG,EAAS,EAAQ,EAAU,EAAW,OAAO,GAAS,IAAI,CAAG,CAAC,EAAG,EAAS,EAAQ,EAAU,EAAW,OAAO,GAAS,CAAC,CAAO,EAAYA,MAAoB,EAA2B,EAAS,cAAc,EAAS,UAAU,EAAW,OAAO,IAAI,CAAG,CAAC,EAAS,EAAW,OAAO,CAAC,CAC9U,CAAC,oBAAiB,EAAU,CAAC,OAAO,EAAa,OAAO,CAAC,cAAc,UAAU,CAAC,CAAC,CAAO,EAAe,EAAU,GAAgB,CAAC,UAAU,IAAI,QAAQ,GAAG,CAAC,CAAO,EAAiB,EAAa,EAAe,CAAC,IAAI,IAAI,CAAC,CAAC,EAAS,YAAY,EAAE,CAAC,CAEpP,EAAiBA,MAAoB,EAAY,IAAI,GAAK,CAAC,IAAM,EAAU,KAAK,MAAM,EAAI,EAAE,IAAI,CAAO,EAAW,KAAK,IAAI,EAAU,EAAS,aAAa,OAAO,EAAE,CAAmD,MAAO,KAAI,KAAhD,EAAS,aAAa,IAAa,GAAwB,EAAS,cAAe,CAAG,CAAC,EAAY,EAAS,aAAa,EAAS,YAAY,CAAC,CAAC,MAAc,CAAC,GAAG,EAAS,CAAC,GAAe,IAAI,CAAC,GAAe,EAAE,CAAC,OAAgM,OAA5K,EAAe,GAAG,SAAS,GAAG,CAAC,GAAe,EAAE,CAAC,IAAI,EAAO,GAAG,IAAI,IAAI,EAAE,EAAE,EAAE,EAAiB,OAAO,IAAQ,GAAG,EAAiB,GAAG,MAAI,EAAO,GAAG,GAAe,EAAO,EAAG,EAAgB,CAAC,EAAS,EAAe,EAAiB,CAAC,CAAC,IAAM,EAAIE,EAAM,OAAO,CAAC,QAAQ,KAAK,GAAG,CACvqB,GAAc,EAAa,EAAe,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAEvD,GAAoBC,EAAY,GAAY,CAAC,GAAK,CAAC,eAAa,aAAW,EAAS,GAAG,EAAU,SAAS,GAAG,EAAa,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAG,EAAE,EAAG,EAAa,OAAO,EAAE,KAAM,EAAG,GAAG,CAAC,IAAM,EAAI,EAAG,GAAI,EAAK,EAAa,GAAK,EAAW,EAAG,EAAI,EAAO,EAAG,EAAK,IAAM,EAAI,KAAK,IAAI,EAAE,KAAK,IAAI,EAAG,EAAU,OAAO,EAAE,CAAC,CAAC,GAAG,EAAI,GAAG,EAAa,KAAO,EAAa,EAAI,GAAG,CAAC,IAAM,EAAO,EAAa,GAAK,EAAa,EAAI,GAAS,EAAU,EAAa,GAAK,EAAiB,EAAK,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,EAAU,EAAO,CAAC,CAAO,EAAE,EAAU,EAAI,GAAS,EAAE,EAAU,GAAK,MAAM,CAAC,EAAE,EAAE,EAAE,GAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAM,EAAE,EAAE,EAAE,GAAG,CAAE,MAAM,CAAC,EAAE,EAAU,GAAK,EAAE,EAAE,EAAU,GAAK,EAAE,EAAE,EAAU,GAAK,EAAE,EAAG,CAAC,EAAS,CAAC,CAEttB,GAAYL,EAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAO,GAAWK,EAAY,IAAO,IAAI,GAAY,QAAQ,IAA0I,GAAY,QAAQ,CAAC,IAAE,GAA1E,GAA3C,KAAK,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,CAAC,CAAsC,EAAS,YAAY,CAA6B,EAA7J,GAAY,SAA+K,CAAC,GAAoB,EAAS,YAAY,CAAC,CAAO,GAAK,EAAa,EAAe,GAAG,GAAW,EAAE,CAAC,EAAE,CAAO,GAAK,EAAa,EAAe,GAAG,GAAW,EAAE,CAAC,EAAE,CAAO,GAAW,EAAa,EAAe,GAAG,CAAC,IAAM,EAAS,KAAK,IAAI,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,GAAG,CAAC,CAAOP,EAAE,GAAW,EAAE,CAAC,OAAO,EAAS,MAAMA,EAAE,GAAG,EAAE,EAAE,GAAI,CAC3mB,OAAoB,EAAM,MAAM,CAAC,IAAI,EAAa,MAAM,CAAC,GAAG,EAAM,SAAS,WAAW,MAAM,GAAO,OAAO,IAAI,OAAO,EAAe,aAAW,WAAW,2EAA2E,CAAC,SAAS,CAAc,EAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAS,WAAW,SAAS,IAAI,EAAE,MAAM,OAAO,OAAO,EAAQ,SAAS,UAAU,OAAO,EAAE,YAAY,SAAS,CAAC,SAAS,CAAc,EAAM,EAAO,IAAI,CAAC,MAAM,OAAO,OAAO,EAAQ,QAAQ,OAAO,EAAW,GAAG,IAAU,MAAM,CAAC,SAAS,WAAW,IAAI,EAAE,KAAK,EAAE,SAAS,UAAU,QAAQ,EAAS,EAAE,GAAc,CAAC,SAAS,CAAc,EAAM,OAAO,CAAC,SAAS,CAAc,EAAM,SAAS,CAAC,GAAG,GAAG,EAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,MAAM,OAAO,OAAO,OAAO,SAAS,CAAc,EAAK,iBAAiB,CAAC,aAAa,IAAI,OAAO,IAAI,CAAC,CAAc,EAAK,cAAc,CAAC,GAAG,gBAAgB,IAAI,IAAI,SAAS,OAAO,CAAC,CAAC,CAAC,CAAC,CAAc,EAAM,SAAS,CAAC,GAAG,GAAG,EAAI,IAAI,EAAE,OAAO,EAAE,OAAO,MAAM,OAAO,OAAO,OAAO,SAAS,CAAc,EAAK,iBAAiB,CAAC,aAAa,IAAI,OAAO,KAAK,CAAC,CAAc,EAAK,iBAAiB,CAAC,GAAG,gBAAgB,aAAa,IAAI,OAAO,KAAK,CAAC,CAAc,EAAM,UAAU,CAAC,SAAS,CAAc,EAAK,cAAc,CAAC,GAAG,KAAK,CAAC,CAAc,EAAK,cAAc,CAAC,GAAG,KAAK,CAAC,CAAc,EAAK,cAAc,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,SAAS,CAAC,GAAG,GAAG,EAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,MAAM,OAAO,OAAO,OAAO,SAAsB,EAAK,iBAAiB,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAc,EAAK,SAAS,CAAC,GAAG,GAAG,EAAI,KAAK,EAAE,OAAO,EAAE,OAAO,MAAM,OAAO,OAAO,OAAO,SAAsB,EAAK,iBAAiB,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAc,EAAM,iBAAiB,CAAC,GAAG,GAAG,EAAI,KAAK,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,SAAS,CAAc,EAAK,OAAO,CAAC,OAAO,KAAK,UAAU,yBAAyB,CAAC,CAAc,EAAK,OAAO,CAAC,OAAO,MAAM,UAAU,yBAAyB,CAAC,CAAc,EAAK,OAAO,CAAC,OAAO,OAAO,UAAU,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAc,EAAM,iBAAiB,CAAC,GAAG,GAAG,EAAI,KAAK,GAAG,MAAM,GAAG,MAAM,EAAE,MAAM,SAAS,CAAc,EAAK,OAAO,CAAC,OAAO,KAAK,UAAU,EAAM,QAAQ,YAAY,OAAO,CAAC,CAAc,EAAK,OAAO,CAAC,OAAO,MAAM,UAAU,EAAM,QAAQ,YAAY,OAAO,CAAC,CAAc,EAAK,OAAO,CAAC,OAAO,OAAO,UAAU,cAAc,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,OAAO,CAAC,GAAG,GAAG,EAAI,KAAK,SAAS,EAAS,cAAc,KAAK,EAAE,IAAiB,EAAK,OAAO,CAAC,EAAE,EAAE,KAAK,KAAK,OAAO,OAAO,QAAQ,YAAY,EAAE,cAAc,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAS,aAAa,KAAK,EAAI,IAAiB,EAAK,OAAO,CAAC,EAAE,EAAI,KAAK,KAAK,OAAO,OAAO,yBAAyB,YAAY,IAAI,gBAAgB,MAAM,cAAc,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAc,EAAK,SAAS,CAAI,KAAG,GAAG,EAAS,EAAE,EAAQ,IAAI,KAAK,EAAM,QAAQ,OAAO,QAAQ,EAAI,MAAM,QAAQ,EAAc,IAAI,EAAc,CAAC,CAAc,EAAK,SAAS,CAAI,KAAG,GAAG,EAAS,EAAE,EAAQ,KAAK,QAAQ,EAAI,MAAM,OAAO,yBAAyB,YAAY,IAAI,QAAQ,EAAc,CAAC,CAAc,EAAK,SAAS,CAAI,KAAG,GAAG,EAAS,EAAE,EAAQ,IAAI,KAAK,QAAQ,EAAI,MAAM,QAAQ,EAAc,EAAc,GAAG,CAAC,CAAc,EAAK,SAAS,CAAI,KAAG,GAAG,EAAS,EAAE,EAAQ,EAAE,KAAK,OAAO,OAAO,EAAM,QAAQ,YAAY,IAAI,cAAc,IAAI,EAAc,CAAC,CAAc,EAAK,UAAU,CAAC,GAAG,EAAG,EAAQ,IAAI,GAAG,EAAS,EAAQ,GAAG,GAAG,EAAQ,IAAI,GAAG,EAAQ,GAAG,KAAK,yBAAyB,QAAQ,EAAc,OAAO,QAAQ,EAAI,KAAK,CAAC,CAAC,GAAuB,EAAK,EAAW,CAAI,KAAG,GAAG,EAAS,EAAE,EAAQ,KAAK,EAAU,QAAQ,EAAc,CAAC,CAAC,EAAS,cAAc,KAAK,EAAI,IAAiB,EAAK,OAAO,CAAC,EAAE,EAAI,KAAK,KAAK,OAAO,OAAO,yBAAyB,YAAY,EAAE,cAAc,QAAQ,eAAe,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAc,EAAM,IAAI,CAAC,KAAK,QAAQ,EAAI,MAAM,SAAS,CAAc,EAAK,EAAO,KAAK,CAAC,EAAE,EAAS,UAAU,KAAK,OAAO,OAAO,EAAM,QAAQ,YAAY,GAAG,cAAc,QAAQ,gBAAgB,EAAS,YAAY,iBAAiB,EAAS,EAAS,YAAY,IAAI,EAAiB,OAAO,QAAQ,EAAI,KAAK,MAAM,CAAC,QAAQ,EAAc,GAAG,CAAC,CAAC,CAAc,EAAK,EAAO,KAAK,CAAC,EAAE,EAAS,UAAU,KAAK,OAAO,OAAO,EAAM,UAAU,YAAY,EAAE,cAAc,QAAQ,gBAAgB,EAAS,YAAY,iBAAiB,EAAS,EAAS,YAAY,IAAI,EAAiB,OAAO,QAAQ,EAAI,KAAK,MAAM,CAAC,QAAQ,EAAc,IAAI,CAAC,CAAC,CAAc,EAAK,EAAO,KAAK,CAAC,EAAE,EAAS,UAAU,KAAK,OAAO,OAAO,EAAM,QAAQ,YAAY,EAAE,cAAc,QAAQ,gBAAgB,EAAS,YAAY,iBAAiB,EAAS,EAAS,YAAY,IAAI,EAAiB,OAAO,QAAQ,EAAI,KAAK,MAAM,CAAC,QAAQ,EAAc,GAAG,CAAC,CAAC,CAAc,EAAK,EAAO,KAAK,CAAC,EAAE,EAAS,UAAU,KAAK,OAAO,OAAO,yBAAyB,YAAY,EAAE,cAAc,QAAQ,gBAAgB,EAAS,YAAY,iBAAiB,EAAS,EAAS,YAAY,IAAI,EAAiB,MAAM,CAAC,QAAQ,EAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAM,EAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAW,CAAC,SAAS,CAAc,EAAK,EAAO,OAAO,CAAC,GAAG,GAAK,GAAG,GAAK,EAAE,GAAG,KAAK,EAAM,QAAQ,OAAO,QAAQ,EAAI,KAAK,QAAQ,EAAc,GAAG,CAAC,CAAc,EAAK,EAAO,OAAO,CAAC,GAAG,GAAK,GAAG,GAAK,EAAE,EAAE,KAAK,EAAM,QAAQ,QAAQ,EAAc,CAAC,CAAc,EAAK,EAAO,OAAO,CAAC,GAAG,GAAK,GAAG,GAAK,EAAE,EAAE,KAAK,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,cAAc,OAAO,OAAO,GAAG,CAAC,SAAS,EAAY,KAAK,EAAI,IAAI,CAAC,IAAM,EAAM,IAAI,EAAI,EAAE,GACvyK,EAAU,KAAK,MAAM,EAAI,EAAE,IAAI,CAAO,EAAQ,KAAK,IAAI,EAAE,EAAU,EAAE,CAAO,EAAQ,KAAK,IAAI,EAAS,UAAU,OAAO,EAAE,EAAU,EAAE,CAAO,EAAM,EAAS,UAAU,GAAe,EAAM,EAAS,UAAU,GAAe,EAAG,EAAM,EAAE,EAAM,EAAQ,EAAG,EAAM,EAAE,EAAM,EAAQ,EAAK,KAAK,MAAM,EAAG,EAAG,EAAE,EAEtS,EAAI,CAAC,EAAG,EAAW,EAAI,EAAG,EAAW,EAAK,EAAI,EAAE,EAAS,EAAK,EAAI,EAAE,EAAe,EAAI,EAAI,EAAK,EAAI,EAAS,EAAU,GAAK,EAAE,EAAI,CAAC,EAAQ,EAAU,GAAK,EAAE,EAAI,CAAC,EAGpK,EAAU,KAAI,EAAU,GAAW,EAAE,EAAE,GAAG,EAAU,GAAG,IAAM,EAAgB,EAAS,IAAA,OAAc,CAAC,IAAM,EAAG,EAAa,QAAQ,GAAG,CAAC,EAAG,OAAO,IAAM,EAAK,EAAG,uBAAuB,CAAO,EAAa,EAAO,QAAQ,EAAK,IAC3N,GADqP,EAAG,cAAc,GAC1O,EAAO,YAAkB,EAAa,EAAa,EAAiB,GAAG,EAAY,EAAO,SAAS,CAAC,IAAI,EAAa,SAAS,SAAS,CAAC,EAAG,OAAoB,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,KAAK,EAAI,EAAE,EAAQ,EAAE,IAAI,EAAI,EAAE,EAAQ,EAAE,cAAc,OAAO,OAAO,GAAG,CAAC,SAAsB,EAAK,GAAY,CAAC,MAAM,EAAE,SAAS,IAAI,EAAY,OAAO,EAAE,EAAkB,QAAkB,cAAY,KAAK,EAAQ,eAAe,EAAY,gBAAgB,EAAgB,YAAoB,YAAU,QAAQ,EAAgB,CAAC,CAAC,CAAC,EAAE,EAAG,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,cAAc,OAAO,OAAO,GAAG,CAAC,SAAsB,EAAK,EAAgB,CAAC,SAAS,EAAY,KAAK,EAAI,IAAI,CAAC,IAAM,EAAG,EAAW,GAExtB,OAF+tB,EAE3sB,EAAK,EAAa,CAAC,UAAU,EAAG,MAAM,EAAE,SADnF,EAAS,GAAK,IAAI,EACyF,WAAe,QAAM,SAAS,GAAgB,KAA1J,EAAI,EAAE,EAAG,OAAO,QAAoJ,MAAM,EAAI,EAAE,MAAM,EAAI,EAAE,eAAe,EAAW,SAAS,EAAY,WAAiB,UAAQ,iBAAiB,EAAY,CAAC,EAAE,CAF6d,MAE1d,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAuB,EAAM,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,IAAI,MAAM,KAAK,MAAM,UAAU,mBAAmB,MAAM,IAAI,OAAO,EAAE,aAAa,EAAE,WAAW,yBAAyB,OAAO,GAAG,QAAQ,EAAY,KAAK,EAAY,IAAI,EAAE,EAAE,WAAW,oBAAoB,CAAC,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,MAAM,CAAC,SAAS,WAAW,IAAI,EAAE,KAAK,EAAE,OAAO,OAAO,aAAa,EAAE,WAAW,EAAM,QAAQ,MAAM,GAAG,EAAY,IAAI,GAAG,UAAU,WAAW,EAAM,UAAU,CAAC,CAAC,CAAc,EAAK,EAAO,IAAI,CAAC,MAAM,CAAC,SAAS,WAAW,IAAI,GAAG,MAAM,EAAE,OAAO,EAAE,aAAa,MAAM,WAAW,EAAM,QAAQ,KAAK,GAAG,EAAY,IAAI,GAAG,UAAU,mBAAmB,UAAU,YAAY,EAAM,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mCAzFp6B,IAAiE,IAAwF,IAAmF,CAGrT,EAAY,CAAC,MAAM,CAAC,QAAQ,sBAAsB,UAAU,wBAAwB,QAAQ,yBAAyB,CAAC,SAAS,CAAC,QAAQ,qBAAqB,UAAU,uBAAuB,QAAQ,uBAAuB,CAAC,KAAK,CAAC,QAAQ,qBAAqB,UAAU,uBAAuB,QAAQ,uBAAuB,CAAC,KAAK,CAAC,QAAQ,oBAAoB,UAAU,wBAAwB,QAAQ,sBAAsB,CAAC,CAIrJ,EAAa,CAAC,QAAQ,sKAAsK,SAAS,oKAAoK,MAAM,sKAAsK,CAGryB,GAAgB,CAAC,CAAC,MAAM,sBAAsB,KAAK,eAAe,SAAS,SAAS,YAAY,sIAAsI,MAAM,CAAC,IAAI,yFAAyF,IAAI,oBAAoB,CAAC,CAAC,CAAC,MAAM,mBAAmB,KAAK,aAAa,SAAS,YAAY,YAAY,uHAAuH,MAAM,CAAC,IAAI,0EAA0E,IAAI,2BAA2B,CAAC,CAAC,CAAC,MAAM,gBAAgB,KAAK,cAAc,SAAS,SAAS,YAAY,kHAAkH,MAAM,CAAC,IAAI,0EAA0E,IAAI,wBAAwB,CAAC,CAAC,CAAC,MAAM,gBAAgB,KAAK,eAAe,SAAS,YAAY,YAAY,+GAA+G,MAAM,CAAC,IAAI,uEAAuE,IAAI,oBAAoB,CAAC,CAAC,CAAC,MAAM,kBAAkB,KAAK,YAAY,SAAS,SAAS,YAAY,qFAAqF,MAAM,CAAC,IAAI,0EAA0E,IAAI,gBAAgB,CAAC,CAAC,CAoC1/C,IAAa,CAAC,QAAM,WAAS,SAAO,QAAM,cAAY,OAAK,iBAAe,kBAAgB,YAAU,YAAU,aAAW,CAAC,IAAM,EAAc,EAAa,GAAmB,EAAW,EAAgB,IAAU,EAAS,EAAgB,IAAU,EAAM,KAAK,IAAI,EAAE,KAAK,IAAI,GAAG,EAAe,IAAa,EAAS,GAAY,CAAC,CAAO,EAAS,GAAQ,EAAe,EAAM,EAAS,EAAE,GAAG,EAAM,GAAS,EAAK,EAAS,EAAE,GAAG,EAAM,GAAS,EAAG,EAAS,EAAE,EAAM,EAAE,OAAoB,EAAM,EAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,aAAa,CAAC,QAAQ,CAAC,QAAM,OAAO,QAAQ,EAAK,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAS,UAAQ,MAAM,CAAC,MAAM,EAAK,OAAO,EAAK,aAAa,MAAM,SAAS,WAAW,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,OAAO,EAAQ,UAAU,UAAU,CAAC,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,IAAS,KAAK,YAAY,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,GAAG,aAAa,MAAM,OAAO,aAAa,EAAM,UAAU,QAAQ,EAAS,GAAG,EAAE,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,IAAI,aAAa,MAAM,WAAW,2BAA2B,EAAM,QAAQ,OAAO,EAAM,QAAQ,0BAA0B,QAAQ,EAAS,GAAG,EAAO,GAAG,GAAG,WAAW,oBAAoB,OAAO,YAAY,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,aAAa,MAAM,WAAW,EAAc,QAAQ,EAAE,UAAU,OAAO,EAAG,IAAI,KAAK,EAAM,QAAQ,QAAQ,EAAG,EAAE,KAAK,EAAM,UAAU,IAAI,CAAC,SAAsB,EAAM,MAAM,CAAC,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,aAAa,MAAM,WAAW,wHAAwH,EAAM,UAAU,QAAQ,EAAM,QAAQ,QAAQ,UAAU,6DAA6D,EAAM,QAAQ,QAAQ,EAAG,KAAK,EAAM,QAAQ,QAAQ,EAAG,EAAE,KAAK,EAAM,YAAY,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,SAAS,SAAS,SAAS,WAAW,CAAC,SAAS,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,IAAI,KAAK,KAAK,MAAM,MAAM,MAAM,OAAO,MAAM,WAAW,sEAAsE,aAAa,MAAM,OAAO,YAAY,CAAC,CAAC,CAAc,EAAK,EAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,IAAS,KAAK,YAAY,CAAC,MAAM,CAAC,MAAM,EAAK,IAAI,OAAO,EAAK,IAAI,aAAa,MAAM,WAAW,+FAA+F,UAAU,OAAO,EAAK,GAAG,gCAAgC,EAAK,GAAG,KAAK,EAAM,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,KAAK,EAAK,EAAE,GAAW,EAAK,EAAE,IAAI,IAAI,EAAK,EAAE,GAAW,EAAK,EAAE,IAAI,UAAU,wBAAwB,SAAS,GAAG,WAAW,IAAI,MAAM,EAAS,EAAM,QAAQ,wBAAwB,cAAc,QAAQ,WAAW,kBAAkB,WAAW,SAAS,QAAQ,UAAU,aAAa,EAAE,WAAW,kBAAkB,eAAe,YAAY,qBAAqB,YAAY,OAAO,EAAE,CAAC,SAAS,OAAO,EAAM,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAS,GAAc,CAAC,YAAU,QAAM,WAAS,WAAS,QAAM,WAAS,OAAK,QAAM,QAAM,iBAAe,WAAS,WAAS,UAAQ,sBAAoB,CAAC,IAAM,EAAO,KAAK,IAAI,EAAS,IAAI,CAEzvG,GAAe,EAAM,GAAU,GAAO,EAAU,EAAM,EAAO,EAAE,EACrE,EAAU,KAAK,IAAI,GAAQ,KAAK,IAAI,EAAU,EAAe,EAAO,GAAQ,CAAC,CAAC,IAAM,EAAS,IAAO,OAAO,GAAG,EACvF,EAAO,EAAhB,GACR,EAAQ,EAAiB,OAAO,EAAE,KAAK,IAAI,GAAG,EAAiB,IAAI,GAAGA,EAAE,EAAE,CAAC,CAAC,IAAI,IAAU,EAAW,KAAK,IAAI,GAAG,KAAK,IAAI,EAAO,EAAQ,IAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAU,CAAC,EAAS,OAAO,KAC7L,IAAM,EAAW,EAAY,EAAW,EAAY,EAAS,EAAU,EAAO,EAAQ,EAAS,EAAW,OAAoB,EAAMC,EAAU,CAAC,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,QAAQ,EAAS,GAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAS,EAAE,EAAE,CAAC,WAAW,EAAS,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,cAAc,OAAO,OAAO,GAAG,CAAC,SAAsB,EAAM,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,SAAS,UAAU,CAAC,SAAS,CAAc,EAAK,OAAO,CAAC,GAAG,EAAW,GAAG,EAAW,GAAG,EAAS,GAAG,EAAS,OAAO,EAAM,UAAU,YAAY,EAAE,cAAc,IAAI,gBAAgB,MAAM,CAAC,CAAc,EAAK,SAAS,CAAC,GAAG,EAAS,GAAG,EAAS,EAAE,EAAE,KAAK,EAAM,QAAQ,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAM,EAAO,IAAI,CAAC,QAAQ,EAAS,GAAM,CAAC,QAAQ,EAAE,EAAE,EAAS,GAAG,OAAO,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAS,EAAE,EAAE,EAAE,EAAS,EAAE,EAAS,GAAG,OAAO,EAAS,YAAY,aAAa,CAAC,WAAW,EAAS,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,WAAW,KAAK,EAAU,IAAI,EAAW,MAAM,EAAO,WAAW,sBAAsB,eAAe,aAAa,qBAAqB,aAAa,aAAa,GAAG,OAAO,mCAAmC,UAAU,kFAAkF,EAAM,QAAQ,IAAI,QAAQ,YAAY,cAAc,EAAS,OAAO,OAAO,OAAO,GAAG,CAAC,SAAS,CAAc,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,WAAW,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC,SAAS,CAAc,EAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,UAAU,WAAW,EAAM,QAAQ,aAAa,GAAG,SAAS,EAAE,WAAW,IAAI,MAAM,EAAM,QAAQ,cAAc,SAAS,cAAc,YAAY,CAAC,SAAS,EAAU,SAAS,CAAC,CAAc,EAAK,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,wBAAwB,CAAC,SAAS,IAAI,CAAC,CAAc,EAAK,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,wBAAwB,WAAW,IAAI,CAAC,SAAS,EAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,GAAG,WAAW,IAAI,MAAM,OAAO,WAAW,IAAI,cAAc,UAAU,WAAW,2EAA2E,CAAC,SAAS,EAAU,MAAM,CAAC,CAAc,EAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,KAAK,MAAM,yBAAyB,WAAW,wEAAwE,CAAC,SAAS,EAAU,YAAY,CAAC,MAAM,CAAC,IAAM,EAAK,OAAO,EAAU,OAAQ,SAAS,EAAU,MAAM,EAAU,OAAO,IAAU,EAAQ,OAAO,EAAU,OAAQ,SAAS,EAAU,OAAO,OAAO,IAAA,GAAsD,MAAzC,CAAC,GAAM,CAAC,EAAU,OAAO,IAAW,KAAyB,EAAK,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,aAAa,EAAE,SAAS,SAAS,YAAY,QAAQ,CAAC,SAAS,EAAkB,EAAK,QAAQ,CAAC,IAAI,EAAK,OAAO,EAAQ,SAAS,GAAK,KAAK,GAAK,MAAM,GAAK,YAAY,GAAK,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC,CAAC,CAAC,EAAU,OAAO,IAAiB,EAAK,MAAM,CAAC,IAAI,EAAU,MAAM,IAAI,OAAO,EAAU,MAAM,OAAO,IAAI,EAAU,MAAM,KAAK,EAAU,MAAM,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAwC3jG,EAAiB,aAAa,CAAC,WAAW,CAAC,UAAU,WAAW,cAAc,GAAG,YAAY,WAAW,WAAW,cAAc,YAAY,UAAU,CAAC,OAAO,CAAC,WAAW,IAAI,UAAU,GAAG,cAAc,GAAK,cAAc,EAAE,CAAC,OAAO,CAAC,eAAe,KAAK,gBAAgB,IAAI,QAAQ,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAoB,EAAiB,CAAC,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAY,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,YAAY,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,WAAW,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,YAAY,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,gBAAgB,GAAK,aAAa,eAAe,CAAC,MAAM,CAAC,KAAK,EAAY,gBAAgB,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAY,KAAK,MAAM,QAAQ,iBAAiB,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,KAAK,QAAQ,SAAS,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,QAAQ,CAAC,QAAQ,WAAW,OAAO,OAAO,SAAS,CAAC,aAAa,CAAC,QAAQ,WAAW,OAAO,OAAO,SAAS,CAAC,aAAa,WAAW,CAAC,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,UAAU,OAAO,GAAO,EAAM,YAAY,SAAS,CAAC,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,aAAa,GAAG,CAAC,YAAY,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,QAAQ,CAAC,UAAU,WAAW,QAAQ,CAAC,aAAa,CAAC,UAAU,WAAW,QAAQ,CAAC,aAAa,WAAW,CAAC,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,KAAK,SAAS,SAAS,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,KAAK,KAAK,aAAa,IAAI,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,KAAK,IAAO,aAAa,GAAG,CAAC,cAAc,CAAC,KAAK,EAAY,QAAQ,MAAM,aAAa,aAAa,GAAK,aAAa,OAAO,cAAc,OAAO,CAAC,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,iBAAiB,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,KAAK,SAAS,SAAS,CAAC,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK,aAAa,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,KAAK,KAAK,aAAa,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,KAAK,KAAK,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,ICnF3+E,SAAwB,EAAW,EAAM,CAAC,IAAM,EAAWO,EAAO,KAAK,CAAO,EAAUA,EAAO,EAAE,CAAC,CAAO,EAAQA,EAAO,KAAK,CAAM,CAAC,EAAW,GAAeC,EAAS,EAAE,CAAM,CAAC,EAAQ,GAAYA,EAAS,EAAE,CAC5M,EAASC,MAAY,CAC3B,IAAM,EAAY,GAAG,EAAM,KAAK,KAAK,GAAG,EAAM,YAAY,GAAG,EAAM,UAAU,GAAG,EAAM,eAAmB,EAAK,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAY,OAAO,IAAI,CAAC,IAAM,EAAK,EAAY,WAAW,EAAE,CAAC,GAAM,GAAM,GAAG,EAAK,EAAK,GAAU,EAC5N,OAAO,KAAK,IAAI,EAAK,CAAC,SAAS,GAAG,EAAG,CAAC,EAAM,KAAK,KAAK,EAAM,YAAY,EAAM,UAAU,EAAM,aAAa,CAAC,CAAO,EAAO,SAAS,IAAiB,EAAe,gBAAgB,IAAiB,EAAW,YAAY,IAAiB,EAAM,kBAAkB,IAAI,EAAM,YAAY,WAAiB,EAAgB,EAAe,EAAE,CAAO,EAAWF,EAAO,GAAM,CAAO,EAAaA,EAAO,EAAE,CACpY,EAAe,EAAa,EAAgB,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAM,CAAC,CACxE,EAAmB,EAAM,YAAY,OAAO,CAAC,EAAM,aAAa,EAAM,aACtE,EAAUA,EAAO,GAAM,CACvB,EAAgBA,EAAO,EAAE,CACzB,EAAcE,MACF,EAAM,KAAK,KAAK,MAAM,CACrB,WAAa,CAAC,EAAM,CAAC,CACxC,MAAc,CAAI,EAAW,SAAS,EAAW,EAAW,QAAQ,uBAAuB,CAAC,EAAI,CAAC,EAAM,CAAC,CAAC,MAAc,CAAI,EAAQ,SAAS,EAAc,EAAQ,QAAQ,gBAAgB,CAAC,EAAI,CAAC,EAAM,YAAY,CAAC,CACnN,IAAM,EAAkB,KAAK,KAAK,EAAW,EAAQ,CAAC,EAAQ,EAAM,EAAW,GAAG,EAAQ,EAAE,GAAmB,EAAE,IAAQ,CAAC,GAAG,CAAC,GAAO,EAAU,QAAQ,SAAS,EAAE,OAAO,GAAG,EAAW,QAAQ,CAC/L,EAAU,QAAQ,QAAQ,GAAO,CAAC,GAAG,CAAC,EAAM,OAAO,IAAI,EAAE,WAAW,EAAM,aAAa,IAAI,EAAE,IAAI,CAAC,GAAG,EAAa,QAClH,IAAM,GAAM,EAAU,QAAQ,OAAO,GAAG,EAAW,EAAE,CAAC,IAAQ,EAAE,GAAQ,EAAE,IAAK,EAAE,CAAC,GAAQ,EAAM,aAAa,IAAI,EAAE,UAAU,CAAC,EAAG,CACjI,EAAa,SAAS,GACnB,KAAK,IAAI,EAAa,QAAQ,CAAC,MAAK,EAAa,QAAQ,GAAG,OAC/D,IAAI,EAAO,EAAgB,QAAQ,GAAoB,EAAM,KACzD,EAAW,UAAY,EAAe,KAAK,CAAC,EAAG,EAAgB,QAAQ,GAAY,EAAe,KAAK,CAAC,IAAG,EAAgB,QAAQ,IAAI,GAAQ,EAAgB,QAAQ,EAAO,EAAe,KAAK,CAAC,GAAQ,EAAa,QACzN,CAAC,EAAW,SAAS,KAAK,IAAI,EAAa,QAAQ,CAAC,IAAK,EAAa,SAAS,IAAc,EAAW,UAAS,EAAa,QAAQ,GACzI,EAAU,QAAQ,QAAQ,GAAO,CAAC,GAAG,CAAC,EAAM,OAAO,IAAI,EAAE,WAAW,EAAM,aAAa,IAAI,EAAE,IAAI,CAAC,GAAG,EACrG,IAAM,GAAM,EAAU,QAAQ,OAAO,GAAG,EAAW,EAAE,CAAC,IAAQ,EAAE,GAAQ,EAAE,IAAK,EAAE,CAAC,GAAQ,EAAM,aAAa,IAAI,EAAE,UAAU,CAAC,EAAG,EAAG,CAAC,IAAM,EAAoBF,EAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAO,GAAkB,GAAG,CAAK,EAAM,YAAiB,EAAE,cAAc,kBAAkBG,EAAE,UAAU,CAAC,EAAE,cAAc,MAAM,OAAO,WAAW,EAAW,QAAQ,GAAK,EAAoB,QAAQ,CAAC,EAAEA,EAAE,QAAQ,EAAEA,EAAE,QAAQ,CAC5Y,EAAa,QAAQ,IAAU,GAAkB,GAAG,CAA4B,GAAxB,CAAC,EAAM,WAAoB,CAAC,EAAW,QAAQ,OAAO,IAAM,EAAgB,CAAC,EAAEA,EAAE,QAAQ,EAAEA,EAAE,QAAQ,CAE7J,EAAa,SADA,EAAgB,EAAE,EAAoB,QAAQ,GAC/B,GAC5B,EAAoB,QAAQ,GAAwB,EAAgB,GAAG,CAAK,EAAM,YAAiB,EAAE,cAAc,sBAAsBA,EAAE,UAAU,CAAC,EAAE,cAAc,MAAM,OAAO,OAAO,EAAW,QAAQ,KAAc,GAAY,EAAM,UAAU,EAAW,QAAQ,WAAW,OAAO,UAAU,OAAoB,EAAK,EAAO,IAAI,CAAC,iBAAiB,EAAU,QAAQ,GAAK,eAAe,EAAU,QAAQ,GAAM,MAAM,CAAC,WAAW,EAAM,UAAU,SAAS,UAAU,QAAQ,MAAM,OAAO,OAAO,OAAO,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,CAAC,SAAsB,EAAM,MAAM,CAAC,QAAQ,eAAe,MAAM,CAAC,SAAS,WAAW,IAAI,MAAM,KAAK,MAAM,UAAU,wBAAwB,WAAW,OAAO,MAAM,OAAO,YAAY,aAAa,SAAS,UAAU,QAAQ,QAAQ,KAAK,EAAM,KAAK,MAAM,WAAW,EAAM,KAAK,KAAK,WAAW,SAAS,EAAM,KAAK,KAAK,SAAS,cAAc,EAAM,KAAK,KAAK,cAAc,WAAW,EAAM,KAAK,KAAK,WAAW,CAAC,SAAS,CAAc,EAAK,OAAO,CAAC,IAAI,EAAW,SAAS,WAAW,MAAM,CAAC,WAAW,SAAS,QAAQ,EAAE,cAAc,OAAO,OAAO,GAAY,CAAC,SAAS,EAAc,CAAC,CAAc,EAAM,OAAO,CAAC,SAAS,CAAc,EAAK,OAAO,CAAC,IAAI,EAAQ,GAAG,EAAO,EAAE,EAAM,KAAK,OAAO,OAAO,cAAc,CAAC,CAAC,EAAM,MAAmB,EAAMC,EAAU,CAAC,SAAS,CAAc,EAAM,iBAAiB,CAAC,GAAG,EAAe,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,SAAS,CAAc,EAAK,OAAO,CAAC,OAAO,KAAK,UAAU,QAAQ,YAAY,IAAI,CAAC,CAAc,EAAK,OAAO,CAAC,OAAO,MAAM,UAAU,QAAQ,YAAY,IAAI,CAAC,CAAc,EAAK,OAAO,CAAC,OAAO,MAAM,UAAU,QAAQ,YAAY,IAAI,CAAC,CAAc,EAAK,OAAO,CAAC,OAAO,OAAO,UAAU,QAAQ,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,OAAO,CAAC,GAAG,EAAW,SAAsB,EAAK,OAAO,CAAC,MAAM,OAAO,OAAO,OAAO,KAAK,QAAQ,EAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAoB,EAAK,OAAO,CAAC,WAAW,EAAM,KAAK,KAAK,WAAW,SAAS,WAAW,KAAK,EAAM,KAAK,QAAQ,EAAW,GAAG,IAAA,GAAU,cAAc,GAAkB,cAAc,GAAkB,YAAY,EAAgB,gBAAgB,EAAgB,SAAsB,EAAK,WAAW,CAAC,KAAK,IAAI,IAAS,SAAS,WAAW,SAAS,MAAM,KAAK,CAAC,OAAO,EAAkB,CAAC,CAAC,KAAK,EAAE,IAAiB,EAAK,QAAQ,CAAC,EAAE,EAAE,EAAQ,IAAI,GAAI,CAAI,IAAG,EAAU,QAAQ,GAAG,IAAK,SAAS,EAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAlC7vE,IAAqD,IAAgF,IAAoD,CAqCxQ,EAAoB,EAAW,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,CAAC,KAAK,CAAC,KAAK,EAAY,KAAK,gBAAgB,aAAa,SAAS,WAAW,aAAa,CAAC,cAAc,MAAM,WAAW,QAAQ,UAAU,OAAO,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAY,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,QAAQ,CAAC,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAO,QAAQ,CAAC,aAAa,OAAO,YAAY,CAAC,iBAAiB,kBAAkB,CAAC,wBAAwB,GAAK,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,aAAa,GAAG,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,KAAK,EAAE,aAAa,IAAI,CAAC,UAAU,CAAC,KAAK,EAAY,QAAQ,MAAM,YAAY,aAAa,GAAK,CAAC,KAAK,CAAC,KAAK,EAAY,QAAQ,MAAM,OAAO,aAAa,GAAK,YAAY,qEAAqE,CAAC,CAAC,CAGr3B,EAAW,aAAa,CAAC,KAAK,CAAC,KAAK,oBAAoB,KAAK,CAAC,WAAW,aAAa,WAAW,MAAM,SAAS,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,OAAO,aAAa,GAAG,YAAY,IAAI,UAAU,GAAK,KAAK,GAAK,CAAC,EAAW,YAAY"}