{"version":3,"file":"Table_of_content.98Syf8ss.mjs","names":["useState","useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/fRcamqe14IcCsBL3LXJx/JcLuTi1ZhVJjtSveOoeK/Table_of_content.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef,useState,useCallback}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";/**\n * TABLE OF CONTENT — scroll-spy navigation for CMS blog content\n *\n * Scans a scoped content layer for heading tags (default H4), builds a\n * clickable nav list, and highlights the item whose heading is currently\n * in view while the page scrolls. Click an item to smooth-scroll to it.\n *\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * @framerDisableUnlink\n */// ---------- helpers ----------\nfunction slugify(text,used){let base=text.toLowerCase().trim().replace(/[^\\w\\s-]/g,\"\").replace(/\\s+/g,\"-\").replace(/-+/g,\"-\");if(!base)base=\"section\";const count=used[base]||0;used[base]=count+1;return count===0?base:`${base}-${count}`;}function cssEscapeAttr(value){return value.replace(/[\"\\\\]/g,\"\\\\$&\");}/** Finds the DOM element that scopes the heading search.\n *  Tries, in order: Framer layer name (data-framer-name), the string\n *  used as-is as a CSS selector, then falls back to the whole document. */function resolveScopeElement(scopeLayer){if(typeof document===\"undefined\")return null;const trimmed=(scopeLayer||\"\").trim();if(!trimmed)return document;const byFramerName=document.querySelector(`[data-framer-name=\"${cssEscapeAttr(trimmed)}\"]`);if(byFramerName)return byFramerName;try{const bySelector=document.querySelector(trimmed);if(bySelector)return bySelector;}catch(e){// not a valid selector, ignore\n}return document;}// ---------- component ----------\nexport default function TableOfContent(props){const{headingTag,scopeLayer,matchSourceFont,fontFamily,fontSize,fontWeightDefault,fontWeightActive,lineHeight,letterSpacing,containerBg,itemBgDefault,itemBgActive,itemBgHover,textDefault,textActive,textHover,borderColor,paddingTop,paddingRight,paddingBottom,paddingLeft,borderTop,borderRight,borderBottom,borderLeft,indicatorColor,indicatorPosition,indicatorWidth,animDuration,scrollOffset,stickyHeaderHeight,centerOnClick,clickExpand,sticky,style}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[headings,setHeadings]=useState([]);const[activeId,setActiveId]=useState(null);const[hoverId,setHoverId]=useState(null);const[indicatorRect,setIndicatorRect]=useState({top:0,left:0,width:0,height:0,visible:false});const containerRef=useRef(null);const itemRefs=useRef({});const clickLockUntil=useRef(0);const uid=useRef(`toc-${Math.random().toString(36).slice(2,9)}`).current;// ---- scan the scoped content for headings ----\nconst scanHeadings=useCallback(()=>{if(typeof document===\"undefined\")return;const scopeEl=resolveScopeElement(scopeLayer);if(!scopeEl)return;const nodes=Array.from(scopeEl.querySelectorAll(headingTag||\"h4\"));const used={};const seenText=new Set;const items=nodes.filter(el=>el.textContent&&el.textContent.trim().length>0).filter(el=>{// collapses duplicate copies (e.g. Framer canvas rendering\n// multiple breakpoint frames of the same content at once)\nconst key=el.textContent.trim().toLowerCase();if(seenText.has(key))return false;seenText.add(key);return true;}).map(el=>{const text=el.textContent.trim();if(!el.id){el.id=slugify(text,used);}else{used[el.id]=(used[el.id]||0)+1;}const computed=window.getComputedStyle(el);return{id:el.id,text,el,sourceFontFamily:computed.fontFamily};});setHeadings(items);// pick an active item right away so the highlight/indicator never\n// has to wait for a scroll event to appear\nif(items.length>0){setActiveId(prev=>prev&&items.some(i=>i.id===prev)?prev:items[0].id);}},[headingTag,scopeLayer]);useEffect(()=>{scanHeadings();// CMS/rich-text content can mount slightly after this component\nconst retry=setTimeout(scanHeadings,400);const scopeEl=resolveScopeElement(scopeLayer);let observer=null;if(scopeEl&&typeof MutationObserver!==\"undefined\"){observer=new MutationObserver(()=>scanHeadings());observer.observe(scopeEl,{childList:true,subtree:true});}return()=>{clearTimeout(retry);if(observer)observer.disconnect();};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[scanHeadings]);// ---- scroll-spy ----\nuseEffect(()=>{if(isCanvas||headings.length===0)return;let ticking=false;const update=()=>{ticking=false;if(performance.now()<clickLockUntil.current)return;const triggerLine=(stickyHeaderHeight||0)+(scrollOffset||0);let current=headings[0]?.id??null;for(const h of headings){const rect=h.el.getBoundingClientRect();if(rect.top-triggerLine<=0){current=h.id;}else{break;}}setActiveId(current);};const onScroll=()=>{if(!ticking){ticking=true;requestAnimationFrame(update);}};update();window.addEventListener(\"scroll\",onScroll,{passive:true});window.addEventListener(\"resize\",onScroll);return()=>{window.removeEventListener(\"scroll\",onScroll);window.removeEventListener(\"resize\",onScroll);};},[headings,scrollOffset,stickyHeaderHeight,isCanvas]);// ---- what actually gets rendered: real scanned headings, or (only if\n// truly none were found, e.g. isolated canvas preview) a sample list ----\nconst displayHeadings=headings.length===0&&isCanvas?[{id:\"preview-1\",text:\"The Foundations of Sustainable Design\"},{id:\"preview-2\",text:\"Innovative Technologies Shaping the Future\"},{id:\"preview-3\",text:\"The Future of Sustainable Architecture\"},{id:\"preview-4\",text:\"Final Thoughts\"}]:headings;const displayActiveId=headings.length===0&&isCanvas?\"preview-1\":activeId;// ---- position the sliding active indicator ----\nconst measureIndicator=useCallback(()=>{const targetId=displayActiveId;const container=containerRef.current;const item=targetId?itemRefs.current[targetId]:null;if(!container||!item){setIndicatorRect(r=>({...r,visible:false}));return;}const isVertical=indicatorPosition===\"left\"||indicatorPosition===\"right\";if(isVertical){setIndicatorRect({top:item.offsetTop,left:indicatorPosition===\"left\"?0:container.clientWidth-indicatorWidth,width:indicatorWidth,height:item.offsetHeight,visible:true});}else{setIndicatorRect({top:indicatorPosition===\"top\"?item.offsetTop:item.offsetTop+item.offsetHeight-indicatorWidth,left:item.offsetLeft,width:item.offsetWidth,height:indicatorWidth,visible:true});}},[displayActiveId,indicatorPosition,indicatorWidth]);useEffect(()=>{// measure now, then again after layout settles (fonts swapping in,\n// wrapped text reflowing) so the bar never gets stuck mispositioned\nmeasureIndicator();const raf1=requestAnimationFrame(()=>requestAnimationFrame(measureIndicator));let cancelled=false;if(typeof document!==\"undefined\"&&document.fonts?.ready){document.fonts.ready.then(()=>{if(!cancelled)measureIndicator();});}return()=>{cancelled=true;cancelAnimationFrame(raf1);};},[measureIndicator,displayHeadings]);// ---- keep the active item centered inside the TOC's own box (Sticky only) ----\nuseEffect(()=>{if(!sticky)return;const container=containerRef.current;const item=displayActiveId?itemRefs.current[displayActiveId]:null;if(!container||!item)return;const target=item.offsetTop-container.clientHeight/2+item.offsetHeight/2;container.scrollTo({top:Math.max(0,target),behavior:\"smooth\"});},[displayActiveId,sticky,displayHeadings]);// ---- click to scroll ----\nconst scrollToHeading=useCallback(h=>{const rect=h.el.getBoundingClientRect();const absoluteTop=window.scrollY+rect.top;const headerHeight=stickyHeaderHeight||0;// mobile browsers resize the visible area (address bar show/hide)\n// right around scroll events — visualViewport reflects the real,\n// current visible height instead of a possibly-stale innerHeight\nconst viewportHeight=typeof window!==\"undefined\"&&window.visualViewport?.height||window.innerHeight;const centeredTarget=absoluteTop+rect.height/2-viewportHeight/2+(scrollOffset||0);const topAlignedTarget=absoluteTop+(scrollOffset||0);// hard floor: never scroll further than the point where the\n// heading's top would tuck in behind the sticky header\nconst safeMaxScrollY=absoluteTop-headerHeight-16;const rawTarget=centerOnClick?centeredTarget:topAlignedTarget;const targetY=Math.max(0,Math.min(rawTarget,safeMaxScrollY));window.scrollTo({top:targetY,behavior:\"smooth\"});},[stickyHeaderHeight,scrollOffset,centerOnClick]);const handleClick=(e,h)=>{e.preventDefault();setActiveId(h.id);// lock scroll-spy briefly so the smooth-scroll animation doesn't\n// fight with the active state we just set\nclickLockUntil.current=performance.now()+900;// if the user just finished scrolling (e.g. scrolling up), give the\n// browser one frame to settle any in-flight viewport/chrome resize\n// before measuring, so the centering math uses accurate numbers\nrequestAnimationFrame(()=>scrollToHeading(h));if(typeof history!==\"undefined\"&&history.pushState){history.pushState(null,\"\",`#${h.id}`);}};// ---- canvas preview (no real page to scroll, show a sample) ----\nconst stickyTop=Math.max(0,-(scrollOffset||0));return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,className:sticky?uid:undefined,style:{position:\"relative\",display:\"flex\",flexDirection:\"column\",backgroundColor:containerBg,fontFamily,width:\"100%\",overflow:\"visible\",...sticky?{position:\"sticky\",top:stickyTop,maxHeight:`calc(100vh - ${stickyTop}px)`,overflowY:\"auto\",overflowX:\"hidden\"}:{},...style},children:[sticky&&/*#__PURE__*/_jsx(\"style\",{children:`\n                    .${uid} { scrollbar-width: none; -ms-overflow-style: none; }\n                    .${uid}::-webkit-scrollbar { width: 0; height: 0; display: none; }\n                `}),displayHeadings.length>0&&/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":true,style:{position:\"absolute\",top:indicatorRect.top,left:indicatorRect.left,width:indicatorRect.width,height:indicatorRect.height,backgroundColor:indicatorColor,opacity:indicatorRect.visible?1:0,transition:`all ${animDuration}s ease, opacity ${animDuration}s ease`,pointerEvents:\"none\",borderRadius:1}}),displayHeadings.length===0&&!isCanvas&&/*#__PURE__*/_jsxs(\"div\",{style:{fontFamily,fontSize:13,color:textDefault,padding:`${paddingTop}px ${paddingRight}px ${paddingBottom}px ${paddingLeft}px`},children:['No headings found. Check that \"Scope Layer\" matches the name of your blog content layer, and that it contains',\" \",headingTag,\" tags.\"]}),displayHeadings.map(h=>{const isActive=h.id===displayActiveId;const isHover=h.id===hoverId&&!isActive;const bg=isActive?itemBgActive:isHover?itemBgHover:itemBgDefault;const color=isActive?textActive:isHover?textHover:textDefault;const itemFontFamily=matchSourceFont&&h.sourceFontFamily?h.sourceFontFamily:fontFamily;const itemFontWeight=isActive?fontWeightActive:fontWeightDefault;return /*#__PURE__*/_jsxs(\"a\",{ref:el=>itemRefs.current[h.id]=el,href:`#${h.id}`,onClick:e=>handleClick(e,h),onMouseEnter:()=>setHoverId(h.id),onMouseLeave:()=>setHoverId(null),style:{position:\"relative\",display:\"block\",textDecoration:\"none\",cursor:\"pointer\",fontFamily:itemFontFamily,fontSize,fontWeight:itemFontWeight,lineHeight,letterSpacing:`${letterSpacing}em`,color,backgroundColor:bg,paddingTop,paddingRight,paddingBottom,paddingLeft,borderTopWidth:borderTop,borderRightWidth:borderRight,borderBottomWidth:borderBottom,borderLeftWidth:borderLeft,borderStyle:\"solid\",borderColor,transition:`background-color ${animDuration}s ease, color ${animDuration}s ease`,boxSizing:\"border-box\"},children:[clickExpand>0&&/*#__PURE__*/_jsx(\"span\",{\"aria-hidden\":true,style:{position:\"absolute\",top:-clickExpand,bottom:-clickExpand,left:0,right:0}}),h.text]},h.id);})]});}TableOfContent.displayName=\"Table of Content\";addPropertyControls(TableOfContent,{headingTag:{type:ControlType.Enum,title:\"1. Detect Heading\",options:[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"],optionTitles:[\"H1 Tags\",\"H2 Tags\",\"H3 Tags\",\"H4 Tags\",\"H5 Tags\",\"H6 Tags\"],defaultValue:\"h4\"},scopeLayer:{type:ControlType.String,title:\"Scope Layer\",defaultValue:\"Blog Content\",description:\"Name of the layer that holds your CMS rich text / blog body (as shown in the Layers panel).\"},matchSourceFont:{type:ControlType.Boolean,title:\"Match Source Font\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"When on, each item automatically uses the real font family of its heading (weight is controlled separately below, regardless of this setting).\"},fontFamily:{type:ControlType.String,title:\"2. Font Family\",defaultValue:\"DM Sans\"},fontSize:{type:ControlType.Number,title:\"Font Size\",defaultValue:16,min:8,max:48},fontWeightDefault:{type:ControlType.Enum,title:\"Font Weight\",options:[\"400\",\"500\",\"600\",\"700\"],optionTitles:[\"Regular\",\"Medium\",\"Semibold\",\"Bold\"],defaultValue:\"400\"},fontWeightActive:{type:ControlType.Enum,title:\"Font Weight (Active)\",options:[\"400\",\"500\",\"600\",\"700\"],optionTitles:[\"Regular\",\"Medium\",\"Semibold\",\"Bold\"],defaultValue:\"600\"},lineHeight:{type:ControlType.Number,title:\"Line Height\",defaultValue:1.5,min:1,max:3,step:.1},letterSpacing:{type:ControlType.Number,title:\"Letter Spacing\",defaultValue:-.02,min:-.1,max:.5,step:.01},containerBg:{type:ControlType.Color,title:\"3. Container BG\",defaultValue:\"#000000\"},itemBgDefault:{type:ControlType.Color,title:\"Item BG (Default)\",defaultValue:\"#00000000\"},itemBgActive:{type:ControlType.Color,title:\"Item BG (Active)\",defaultValue:\"#00000000\"},itemBgHover:{type:ControlType.Color,title:\"Item BG (Hover)\",defaultValue:\"#00000000\"},textDefault:{type:ControlType.Color,title:\"4. Text (Default)\",defaultValue:\"#888888\"},textActive:{type:ControlType.Color,title:\"Text (Active)\",defaultValue:\"#000000\"},textHover:{type:ControlType.Color,title:\"Text (Hover)\",defaultValue:\"#CCCCCC\"},borderColor:{type:ControlType.Color,title:\"Border Color\",defaultValue:\"#E7E9EC\"},paddingTop:{type:ControlType.Number,title:\"Box Padding Top\",defaultValue:12,min:0},paddingRight:{type:ControlType.Number,title:\"Box Padding Right\",defaultValue:16,min:0},paddingBottom:{type:ControlType.Number,title:\"Box Padding Bottom\",defaultValue:12,min:0},paddingLeft:{type:ControlType.Number,title:\"Box Padding Left\",defaultValue:16,min:0},borderTop:{type:ControlType.Number,title:\"Border Top\",defaultValue:0,min:0,max:8},borderRight:{type:ControlType.Number,title:\"Border Right\",defaultValue:0,min:0,max:8},borderBottom:{type:ControlType.Number,title:\"Border Bottom\",defaultValue:0,min:0,max:8},borderLeft:{type:ControlType.Number,title:\"Border Left\",defaultValue:1,min:0,max:8},indicatorColor:{type:ControlType.Color,title:\"5. Active Indicator\",defaultValue:\"#FD522D\"},indicatorPosition:{type:ControlType.Enum,title:\"Indicator Position\",options:[\"left\",\"right\",\"top\",\"bottom\"],optionTitles:[\"Left\",\"Right\",\"Top\",\"Bottom\"],defaultValue:\"left\",displaySegmentedControl:true},indicatorWidth:{type:ControlType.Number,title:\"Indicator Width\",defaultValue:2,min:0,max:12},animDuration:{type:ControlType.Number,title:\"6. Anim Duration\",defaultValue:.2,min:0,max:2,step:.05},stickyHeaderHeight:{type:ControlType.Number,title:\"Sticky Header Height\",defaultValue:80,min:0,max:400,description:\"Height (px) of your site's fixed/sticky top nav bar. Prevents scrolling/highlighting from ever hiding a heading behind it — set to 0 if your page has no fixed header.\"},scrollOffset:{type:ControlType.Number,title:\"7. Scroll Offset\",defaultValue:-100,min:-500,max:500,description:\"Fine-tune nudge (px) applied on top of the base scroll position, whether centering or top-aligning.\"},centerOnClick:{type:ControlType.Boolean,title:\"Center On Click\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Yes: clicked section scrolls to the vertical center of the screen. No: it aligns near the top using Scroll Offset instead.\"},clickExpand:{type:ControlType.Number,title:\"8. Click Expand\",defaultValue:24,min:0,max:100,description:\"Extra invisible hit-area (px) above/below each link for easier tapping.\"},sticky:{type:ControlType.Boolean,title:\"9. Sticky\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Pins the TOC in place while the page scrolls, and auto-scrolls it internally (scrollbar hidden) to keep the active item centered in its own box.\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"TableOfContent\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Table_of_content.map"],"mappings":"2NAWA,SAAS,EAAQ,EAAK,EAAK,CAAC,IAAI,EAAK,EAAK,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,YAAY,EAAE,CAAC,CAAC,QAAQ,OAAO,GAAG,CAAC,CAAC,QAAQ,MAAM,GAAG,EAAE,AAAS,IAAK,UAAU,IAAM,EAAM,EAAK,IAAO,EAAqB,MAAnB,GAAK,GAAM,EAAM,EAAS,IAAQ,EAAE,EAAK,GAAG,EAAK,GAAG,GAAQ,CAAC,SAAS,EAAc,EAAM,CAAC,OAAO,EAAM,QAAQ,SAAS,MAAM,CAAE,CAEtO,SAAS,EAAoB,EAAW,CAAC,GAAG,OAAO,SAAW,IAAY,OAAO,KAAK,IAAM,GAAS,GAAY,GAAA,CAAI,KAAK,EAAE,GAAG,CAAC,EAAQ,OAAO,SAAS,IAAM,EAAa,SAAS,cAAc,sBAAsB,EAAc,CAAO,EAAE,GAAG,EAAE,GAAG,EAAa,OAAO,EAAa,GAAG,CAAC,IAAM,EAAW,SAAS,cAAc,CAAO,EAAE,GAAG,EAAW,OAAO,CAAW,MAAS,CACjc,CAAC,OAAO,QAAS,CACjB,SAAwB,EAAe,EAAM,CAAC,GAAK,CAAC,aAAW,aAAW,kBAAgB,aAAW,WAAS,oBAAkB,mBAAiB,aAAW,gBAAc,eAAY,gBAAc,gBAAa,eAAY,cAAY,cAAW,aAAU,cAAY,aAAW,eAAa,gBAAc,cAAY,aAAU,cAAY,eAAa,cAAW,kBAAe,oBAAkB,iBAAe,eAAa,eAAa,qBAAmB,gBAAc,cAAY,SAAO,UAAO,EAAY,EAAS,EAAa,QAAQ,IAAI,EAAa,OAAY,CAAC,EAAS,IAAaA,EAAS,CAAC,CAAC,EAAO,CAAC,EAAS,GAAaA,EAAS,IAAI,EAAO,CAAC,EAAQ,GAAYA,EAAS,IAAI,EAAO,CAAC,EAAc,GAAkBA,EAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAK,CAAC,EAAQ,EAAaC,EAAO,IAAI,EAAQ,EAASA,EAAO,CAAC,CAAC,EAAQ,EAAeA,EAAO,CAAC,EAAQ,EAAIA,EAAO,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QACh6B,EAAaC,MAAgB,CAAC,GAAG,OAAO,SAAW,IAAY,OAAO,IAAM,EAAQ,EAAoB,CAAU,EAAE,GAAG,CAAC,EAAQ,OAAO,IAAM,EAAM,MAAM,KAAK,EAAQ,iBAAiB,GAAY,IAAI,CAAC,EAAQ,EAAK,CAAC,EAAQ,EAAS,IAAI,IAAU,EAAM,EAAM,OAAO,GAAI,EAAG,aAAa,EAAG,YAAY,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAI,CAE7U,IAAM,EAAI,EAAG,YAAY,KAAK,CAAC,CAAC,YAAY,EAAsD,OAAjD,EAAS,IAAI,CAAG,EAAS,IAAM,EAAS,IAAI,CAAG,EAAS,GAAK,CAAC,CAAC,CAAC,IAAI,GAAI,CAAC,IAAM,EAAK,EAAG,YAAY,KAAK,EAAM,EAAG,GAAmC,EAAK,EAAG,KAAK,EAAK,EAAG,KAAK,GAAG,EAA5D,EAAG,GAAG,EAAQ,EAAK,CAAI,EAAwC,IAAM,EAAS,EAAO,iBAAiB,CAAE,EAAE,MAAM,CAAC,GAAG,EAAG,GAAG,OAAK,KAAG,iBAAiB,EAAS,UAAU,CAAE,CAAC,EAAE,GAAY,CAAK,EAE/V,EAAM,OAAO,GAAG,EAAY,GAAM,GAAM,EAAM,KAAK,GAAG,EAAE,KAAK,CAAI,EAAE,EAAK,EAAM,EAAE,CAAC,EAAE,CAAG,EAAE,CAAC,EAAW,CAAU,CAAC,EAAE,MAAc,CAAC,EAAa,EAChJ,IAAM,EAAM,WAAW,EAAa,GAAG,EAAQ,EAAQ,EAAoB,CAAU,EAAM,EAAS,KAAmK,OAA3J,GAAS,OAAO,iBAAmB,MAAa,EAAS,IAAI,qBAAqB,EAAa,CAAC,EAAE,EAAS,QAAQ,EAAQ,CAAC,UAAU,GAAK,QAAQ,EAAI,CAAC,OAAa,CAAC,aAAa,CAAK,EAAK,GAAS,EAAS,WAAW,CAAE,CACxU,EAAE,CAAC,CAAY,CAAC,EAChB,MAAc,CAAC,GAAG,GAAU,EAAS,SAAS,EAAE,OAAO,IAAI,EAAQ,GAAY,MAAW,CAAe,GAAd,EAAQ,GAAS,YAAY,IAAI,EAAE,EAAe,QAAQ,OAAO,IAAM,GAAa,GAAoB,IAAI,GAAc,GAAO,EAAQ,EAAS,EAAE,EAAE,IAAI,KAAK,IAAI,IAAM,KAAK,EAAkD,GAA7B,EAAE,GAAG,sBAA8B,CAAC,CAAC,IAAI,GAAa,EAAG,EAAQ,EAAE,QAAS,MAAQ,EAAY,CAAO,CAAE,EAAQ,MAAa,CAAK,IAAS,EAAQ,GAAK,sBAAsB,CAAM,EAAG,EAAgH,OAA9G,EAAO,EAAE,EAAO,iBAAiB,SAAS,EAAS,CAAC,QAAQ,EAAI,CAAC,EAAE,EAAO,iBAAiB,SAAS,CAAQ,MAAY,CAAC,EAAO,oBAAoB,SAAS,CAAQ,EAAE,EAAO,oBAAoB,SAAS,CAAQ,CAAE,CAAE,EAAE,CAAC,EAAS,EAAa,EAAmB,CAAQ,CAAC,EAEpuB,IAAM,EAAgB,EAAS,SAAS,GAAG,EAAS,CAAC,CAAC,GAAG,YAAY,KAAK,uCAAuC,EAAE,CAAC,GAAG,YAAY,KAAK,4CAA4C,EAAE,CAAC,GAAG,YAAY,KAAK,wCAAwC,EAAE,CAAC,GAAG,YAAY,KAAK,gBAAgB,CAAC,EAAE,EAAe,EAAgB,EAAS,SAAS,GAAG,EAAS,YAAY,EAChW,EAAiBA,MAAgB,CAAC,IAAM,EAAS,EAAsB,EAAU,EAAa,QAAc,EAAK,EAAS,EAAS,QAAQ,GAAU,KAAK,GAAG,CAAC,GAAW,CAAC,EAAK,CAAC,EAAiB,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAK,EAAE,EAAE,MAAO,CAAyF,EAAvE,IAAoB,QAAQ,IAAoB,QAAwC,CAAC,IAAI,EAAK,UAAU,KAAK,IAAoB,OAAO,EAAE,EAAU,YAAY,EAAe,MAAM,EAAe,OAAO,EAAK,aAAa,QAAQ,EAAI,EAA0B,CAAC,IAAI,IAAoB,MAAM,EAAK,UAAU,EAAK,UAAU,EAAK,aAAa,EAAe,KAAK,EAAK,WAAW,MAAM,EAAK,YAAY,OAAO,EAAe,QAAQ,EAAI,CAAC,CAAG,EAAE,CAAC,EAAgB,EAAkB,CAAc,CAAC,EAAE,MAAc,CAEtvB,EAAiB,EAAE,IAAM,EAAK,0BAA0B,sBAAsB,CAAgB,CAAC,EAAM,EAAU,GAAmI,OAA1H,OAAO,SAAW,KAAa,SAAS,OAAO,OAAO,SAAS,MAAM,MAAM,SAAS,CAAK,GAAU,EAAiB,CAAE,CAAC,MAAa,CAAC,EAAU,GAAK,qBAAqB,CAAI,CAAE,CAAE,EAAE,CAAC,EAAiB,CAAe,CAAC,EAC7U,MAAc,CAAC,GAAG,CAAC,EAAO,OAAO,IAAM,EAAU,EAAa,QAAc,EAAK,EAAgB,EAAS,QAAQ,GAAiB,KAAK,GAAG,CAAC,GAAW,CAAC,EAAK,OAAO,IAAM,EAAO,EAAK,UAAU,EAAU,aAAa,EAAE,EAAK,aAAa,EAAE,EAAU,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAM,EAAE,SAAS,QAAQ,CAAC,CAAE,EAAE,CAAC,EAAgB,EAAO,CAAe,CAAC,EACtV,IAAM,GAAgBA,EAAY,GAAG,CAAC,IAAM,EAAK,EAAE,GAAG,sBAAsB,EAAQ,EAAY,EAAO,QAAQ,EAAK,IAAU,EAAa,GAAoB,EAGzJ,EAAsB,IAAS,QAAa,EAAO,gBAAgB,QAAQ,EAAO,YAAkB,EAAe,EAAY,EAAK,OAAO,EAAE,EAAe,GAAG,GAAc,GAAS,EAAiB,GAAa,GAAc,GAElO,EAAe,EAAY,EAAa,GAAuE,EAAQ,KAAK,IAAI,EAAE,KAAK,IAA5E,EAAc,EAAe,EAA6D,CAAc,CAAC,EAAE,EAAO,SAAS,CAAC,IAAI,EAAQ,SAAS,QAAQ,CAAC,CAAE,EAAE,CAAC,EAAmB,EAAa,CAAa,CAAC,EAAQ,IAAa,EAAE,IAAI,CAAC,EAAE,eAAe,EAAE,EAAY,EAAE,EAAE,EAE7U,EAAe,QAAQ,YAAY,IAAI,EAAE,IAGzC,0BAA0B,GAAgB,CAAC,CAAC,EAAK,OAAO,QAAU,KAAa,QAAQ,WAAW,QAAQ,UAAU,KAAK,GAAG,IAAI,EAAE,IAAI,CAAG,EACnI,EAAU,KAAK,IAAI,EAAE,EAAE,GAAc,EAAE,EAAE,OAAoB,EAAM,MAAM,CAAC,IAAI,EAAa,UAAU,EAAO,EAAI,IAAA,GAAU,MAAM,CAAC,SAAS,WAAW,QAAQ,OAAO,cAAc,SAAS,gBAAgB,GAAY,aAAW,MAAM,OAAO,SAAS,UAAU,GAAG,EAAO,CAAC,SAAS,SAAS,IAAI,EAAU,UAAU,gBAAgB,EAAU,KAAK,UAAU,OAAO,UAAU,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAK,EAAE,SAAS,CAAC,GAAqB,EAAK,QAAQ,CAAC,SAAS;uBAC7a,EAAI;uBACJ,EAAI;iBACV,CAAC,EAAE,EAAgB,OAAO,GAAgB,EAAK,MAAM,CAAC,cAAc,GAAK,MAAM,CAAC,SAAS,WAAW,IAAI,EAAc,IAAI,KAAK,EAAc,KAAK,MAAM,EAAc,MAAM,OAAO,EAAc,OAAO,gBAAgB,GAAe,QAAQ,KAAc,QAAY,WAAW,OAAO,EAAa,kBAAkB,EAAa,QAAQ,cAAc,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,EAAgB,SAAS,GAAG,CAAC,GAAuB,EAAM,MAAM,CAAC,MAAM,CAAC,aAAW,SAAS,GAAG,MAAM,EAAY,QAAQ,GAAG,EAAW,KAAK,EAAa,KAAK,EAAc,KAAK,EAAY,GAAG,EAAE,SAAS,CAAC,gHAAgH,IAAI,EAAW,QAAQ,CAAC,CAAC,EAAE,EAAgB,IAAI,GAAG,CAAC,IAAM,EAAS,EAAE,KAAK,EAAsB,EAAQ,EAAE,KAAK,GAAS,CAAC,EAAe,EAAG,EAAS,GAAa,EAAQ,GAAY,EAAoB,EAAM,EAAS,GAAW,EAAQ,GAAU,EAAkB,EAAe,GAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAiB,EAAe,EAAS,EAAiB,EAAkB,OAAoB,EAAM,IAAI,CAAC,IAAI,GAAI,EAAS,QAAQ,EAAE,IAAI,EAAG,KAAK,IAAI,EAAE,KAAK,QAAQ,GAAG,GAAY,EAAE,CAAC,EAAE,iBAAiB,EAAW,EAAE,EAAE,EAAE,iBAAiB,EAAW,IAAI,EAAE,MAAM,CAAC,SAAS,WAAW,QAAQ,QAAQ,eAAe,OAAO,OAAO,UAAU,WAAW,EAAe,WAAS,WAAW,EAAe,aAAW,cAAc,GAAG,EAAc,IAAI,QAAM,gBAAgB,EAAG,aAAW,eAAa,gBAAc,cAAY,eAAe,GAAU,iBAAiB,EAAY,kBAAkB,EAAa,gBAAgB,GAAW,YAAY,QAAQ,cAAY,WAAW,oBAAoB,EAAa,gBAAgB,EAAa,QAAQ,UAAU,YAAY,EAAE,SAAS,CAAC,EAAY,GAAgB,EAAK,OAAO,CAAC,cAAc,GAAK,MAAM,CAAC,SAAS,WAAW,IAAI,CAAC,EAAY,OAAO,CAAC,EAAY,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAE,CAAC,CAAC,CAAC,CAAC,CAAE,qBA5Cl4D,IAAyD,IAAiE,EA4CywD,EAAe,YAAY,mBAAmB,EAAoB,EAAe,CAAC,WAAW,CAAC,KAAK,EAAY,KAAK,MAAM,oBAAoB,QAAQ,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,EAAE,aAAa,CAAC,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,EAAE,aAAa,IAAI,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,eAAe,YAAY,6FAA6F,EAAE,gBAAgB,CAAC,KAAK,EAAY,QAAQ,MAAM,oBAAoB,aAAa,GAAK,aAAa,MAAM,cAAc,KAAK,YAAY,gJAAgJ,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,iBAAiB,aAAa,SAAS,EAAE,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,kBAAkB,CAAC,KAAK,EAAY,KAAK,MAAM,cAAc,QAAQ,CAAC,MAAM,MAAM,MAAM,KAAK,EAAE,aAAa,CAAC,UAAU,SAAS,WAAW,MAAM,EAAE,aAAa,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAY,KAAK,MAAM,uBAAuB,QAAQ,CAAC,MAAM,MAAM,MAAM,KAAK,EAAE,aAAa,CAAC,UAAU,SAAS,WAAW,MAAM,EAAE,aAAa,KAAK,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,IAAI,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,iBAAiB,aAAa,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,kBAAkB,aAAa,SAAS,EAAE,cAAc,CAAC,KAAK,EAAY,MAAM,MAAM,oBAAoB,aAAa,WAAW,EAAE,aAAa,CAAC,KAAK,EAAY,MAAM,MAAM,mBAAmB,aAAa,WAAW,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,kBAAkB,aAAa,WAAW,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,oBAAoB,aAAa,SAAS,EAAE,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,gBAAgB,aAAa,SAAS,EAAE,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,SAAS,EAAE,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,SAAS,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,GAAG,IAAI,CAAC,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,oBAAoB,aAAa,GAAG,IAAI,CAAC,EAAE,cAAc,CAAC,KAAK,EAAY,OAAO,MAAM,qBAAqB,aAAa,GAAG,IAAI,CAAC,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,mBAAmB,aAAa,GAAG,IAAI,CAAC,EAAE,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,eAAe,CAAC,KAAK,EAAY,MAAM,MAAM,sBAAsB,aAAa,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAY,KAAK,MAAM,qBAAqB,QAAQ,CAAC,OAAO,QAAQ,MAAM,QAAQ,EAAE,aAAa,CAAC,OAAO,QAAQ,MAAM,QAAQ,EAAE,aAAa,OAAO,wBAAwB,EAAI,EAAE,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,mBAAmB,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAY,OAAO,MAAM,uBAAuB,aAAa,GAAG,IAAI,EAAE,IAAI,IAAI,YAAY,wKAAwK,EAAE,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,mBAAmB,aAAa,KAAK,IAAI,KAAK,IAAI,IAAI,YAAY,qGAAqG,EAAE,cAAc,CAAC,KAAK,EAAY,QAAQ,MAAM,kBAAkB,aAAa,GAAK,aAAa,MAAM,cAAc,KAAK,YAAY,4HAA4H,EAAE,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,GAAG,IAAI,EAAE,IAAI,IAAI,YAAY,yEAAyE,EAAE,OAAO,CAAC,KAAK,EAAY,QAAQ,MAAM,YAAY,aAAa,GAAM,aAAa,MAAM,cAAc,KAAK,YAAY,kJAAkJ,CAAC,CAAC"}