{"version":3,"file":"siteMetadata.C5cFeq-e.mjs","names":[],"sources":["https:/framerusercontent.com/modules/24tV7fnNCJw6hcLNicJH/cXRFcIH1Toj4jY45MEaA/siteMetadata.js"],"sourcesContent":["// Generated by Framer (dc3a148)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<!-- UTM Params Storing Logic -->\\n<script>\\n  (function() {\\n    const UTM_PARAMS = [\\n      \"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_term\",\"utm_content\",\\n      \"gclid\",\"fbclid\",\"msclkid\",\"ttclid\",\"transaction_id\",\"im_ref\",\\n      \"offer_id\",\"publisher_id\",\"affiliate_id\",\\n    ];\\n    function parseUTM() {\\n      const params = {};\\n      const searchParams = new URLSearchParams(window.location.search);\\n      UTM_PARAMS.forEach(param => {\\n        const value = searchParams.get(param);\\n        if (value) params[param] = value;\\n      });\\n      // affiliate_id → utm_term fallback\\n      if (!params.utm_term && params.affiliate_id) {\\n        params.utm_term = params.affiliate_id;\\n        delete params.affiliate_id;\\n      }\\n      return params;\\n    }\\n    function storeUTM() {\\n      if (sessionStorage.getItem(\"utmData\")) return;\\n      const params = parseUTM();\\n      if (Object.keys(params).length > 0) {\\n        sessionStorage.setItem(\"utmData\", JSON.stringify(params));\\n      }\\n    }\\n    storeUTM();\\n  })();\\n</script>\\n\\n<!-- Google Tag Manager -->\\n<script>\\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\\'gtm.start\\':\\nnew Date().getTime(),event:\\'gtm.js\\'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!=\\'dataLayer\\'?\\'&l=\\'+l:\\'\\';j.async=true;j.src=\\n\\'https://www.googletagmanager.com/gtm.js?id=\\'+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,\\'script\\',\\'dataLayer\\',\\'GTM-5B32S8B8\\');\\n</script>\\n\\n<!-- Datadog RUM -->\\n<script>\\n(function(h,o,u,n,d) {\\n  h=h[d]=h[d]||{q:[],onReady:function(c){h.q.push(c)}}\\n  d=o.createElement(u);d.async=1;d.src=n\\n  n=o.getElementsByTagName(u)[0];n.parentNode.insertBefore(d,n)\\n})(window,document,\\'script\\',\\'https://www.datadoghq-browser-agent.com/us1/v6/datadog-rum.js\\',\\'DD_RUM\\')\\n\\nwindow.DD_RUM.onReady(function() {\\n  window.DD_RUM.init({\\n    clientToken: \\'pub59025dd4caa62c80e42dc7b02105815b\\',\\n    applicationId: \\'bc8c4ec2-392f-4e0d-a539-5f877fa57dd7\\',\\n    site: \\'us3.datadoghq.com\\',\\n    service: \\'rum-joinmochi\\',\\n    env: \\'prod\\',\\n    sessionSampleRate: 1,\\n    sessionReplaySampleRate: 0,\\n    defaultPrivacyLevel: \\'mask-user-input\\',\\n  });\\n})\\n</script>\\n\\n<!-- LegitScript -->\\n<!-- <script src=\"https://static.legitscript.com/seals/13017993.js\"></script> -->\\n\\n<!-- TikTok Analytics -->\\n<script>\\n!function (w, d, t) {\\n  w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=[\"page\",\"track\",\"identify\",\"instances\",\"debug\",\"on\",\"off\",\"once\",\"ready\",\"alias\",\"group\",\"enableCookie\",\"disableCookie\"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var i=\"https://analytics.tiktok.com/i18n/pixel/events.js\";ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=i,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};var o=document.createElement(\"script\");o.type=\"text/javascript\",o.async=!0,o.src=i+\"?sdkid=\"+e+\"&lib=\"+t;var a=document.getElementsByTagName(\"script\")[0];a.parentNode.insertBefore(o,a)};\\n  ttq.load(\\'CKTDKRJC77UBVPRAF8F0\\');\\n  ttq.page();\\n}(window, document, \\'ttq\\');\\n</script>\\n\\n<!-- Snap Analytics -->\\n<script>\\n(function(e,t,n){if(e.snaptr)return;var a=e.snaptr=function()\\n{a.handleRequest?a.handleRequest.apply(a,arguments):a.queue.push(arguments)};\\na.queue=[];var s=\\'script\\';r=t.createElement(s);r.async=!0;\\nr.src=n;var u=t.getElementsByTagName(s)[0];\\nu.parentNode.insertBefore(r,u);})(window,document,\\n\\'https://sc-static.net/scevent.min.js\\');\\n\\nsnaptr(\\'init\\', \\'a3c8d137-215e-45fa-a26d-21ad78559616\\');\\nsnaptr(\\'track\\', \\'PAGE_VIEW\\');\\n</script>\\n\\n<!-- Hotjar Analytics -->\\n<script>\\n(function(h, o, t, j, a, r) {\\n  h.hj = h.hj || function() { (h.hj.q = h.hj.q || []).push(arguments) };\\n  h._hjSettings = { hjid: 3809158, hjsv: 6 };\\n  a = o.getElementsByTagName(\\'head\\')[0];\\n  r = o.createElement(\\'script\\');\\n  r.async = 1;\\n  r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;\\n  a.appendChild(r);\\n})(window, document, \\'https://static.hotjar.com/c/hotjar-\\', \\'.js?sv=\\');\\n</script>\\n\\n<!-- TalkDesk Chat -->\\n<script>\\nvar webchat;\\n(function(window, document, node, props, configs) {\\n    if (window.TalkdeskChatSDK) {\\n        console.error(\"TalkdeskChatSDK already included\");\\n        return;\\n    }\\n    var divContainer = document.createElement(\"div\");\\n    divContainer.id = node;\\n    document.body.appendChild(divContainer);\\n    var src = \"https://talkdeskchatsdk.talkdeskapp.com/talkdeskchatsdk.js\";\\n    var script = document.createElement(\"script\");\\n    var firstScriptTag = document.getElementsByTagName(\"script\")[0];\\n    script.type = \"text/javascript\";\\n    script.charset = \"UTF-8\";\\n    script.id = \"tdwebchatscript\";\\n    script.src = src;\\n    script.async = true;\\n    firstScriptTag.parentNode.insertBefore(script, firstScriptTag);\\n    script.onload = function() {\\n        webchat = TalkdeskChatSDK(node, props);\\n        webchat.init(configs);\\n    };\\n})(\\n    window,\\n    document,\\n    \"tdWebchat\",\\n    { touchpointId: \"481376afa4e14ff7a4e1fd0c1c944103\", accountId: \"\", region: \"td-us-1\" },\\n    { enableValidation: false, enableEmoji: true, enableUserInput: true, enableAttachments: true,\\n      styles: {\\n          \\'chatThemeColor\\': \\'#1E0044\\',\\n          \\'chatTitle\\': \\'Mochi Support Chat\\',\\n          \\'chatPlaceholder\\': \\'Type a message...\\',\\n          \\'avatarForegroundColor\\': \\'#5C6784\\',\\n          \\'avatarBackgroundColor\\': \\'#EDF4FC\\',\\n          \\'userBackgroundColor\\': \\'#5405BD\\',\\n          \\'startChatButtonTextColor\\': \\'#FFFFFF\\',\\n          \\'startChatButtonBackgroundColor\\': \\'#1E0044\\',\\n          \\'triggerButtonHeight\\':\\'44px\\',\\n          \\'triggerButtonWidth\\':\\'44px\\',\\n      }\\n    }\\n);\\n</script>\\n\\n<!-- Facebook Pixel -->\\n<script>\\n!function(f,b,e,v,n,t,s)\\n{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};\\nif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=\\'2.0\\';\\nn.queue=[];t=b.createElement(e);t.async=!0;\\nt.src=v;s=b.getElementsByTagName(e)[0];\\ns.parentNode.insertBefore(t,s)}(window, document,\\'script\\',\\n\\'https://connect.facebook.net/en_US/fbevents.js\\');\\nfbq(\\'init\\', \\'447980913987622\\');\\nfbq(\\'init\\', \\'811480227789774\\');\\nfbq(\\'track\\', \\'PageView\\');\\n</script>\\n\\n<!-- NoScript GTM -->\\n<noscript>\\n  <iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-5B32S8B8\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe>\\n</noscript>\\n\\n\\n\\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/gsap/3.13.0/gsap.min.js\" integrity=\"sha512-NcZdtrT77bJr4STcmsGAESr06BYGE8woZdSdEgqnpyqac7sugNO+Tr4bGwGF3MsnEkGKhU2KL2xh6Ec+BqsaHA==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"></script>\\n\\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/gsap/3.13.0/ScrollTrigger.min.js\" integrity=\"sha512-P2IDYZfqSwjcSjX0BKeNhwRUH8zRPGlgcWl5n6gBLzdi4Y5/0O4zaXrtO4K9TZK6Hn1BenYpKowuCavNandERg==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"></script>\\n\\n<!-- Custom code -->\\n\\n<script>\\n\\nfunction setupFooterDropdown() {\\n\\ndocument.querySelectorAll(\\'[data-framer-name=\"Footer Item\"]\\').forEach((trigger) => {\\n  trigger.addEventListener(\\'click\\', () => {\\n    const content = trigger.parentElement.querySelector(\\'[data-framer-name=\"Footer Item Content\"]\\');\\n    const icon = trigger.querySelector(\\'[data-framer-name=\"icon chevron down\"]\\');\\n\\n    if (content) content.classList.toggle(\\'is-active\\');\\n    if (icon) icon.classList.toggle(\\'is-active\\');\\n  });\\n});\\n\\n    \\n\\n}\\n\\n\\nsetupFooterDropdown();\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfunction isSafariAndSmallScreen() {\\n  // const ua = navigator.userAgent;\\n  // const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\\n  // const isSmallScreen = window.innerWidth <= 1024;\\n\\n  //return isSafari && isSmallScreen;\\n  return false;\\n}\\n\\nfunction applySafariFix() {\\n  if (isSafariAndSmallScreen()) {\\n    const scrollLine = document.querySelector(\\'[data-framer-name=\"Component-Scroll-Line-Active\"]\\');\\n    if (scrollLine) {\\n      scrollLine.style.height = \\'100%\\';\\n    }\\n\\n    document.querySelectorAll(\\'[data-framer-name=\"Active BG\"]\\').forEach(el => {\\n      el.classList.add(\\'is-visible\\');\\n    });\\n\\n    document.querySelectorAll(\\'[data-framer-name=\"Number Wrapper Inner\"]\\').forEach(el => {\\n      el.classList.add(\\'is-visible\\');\\n    });\\n  }\\n}\\n\\nwindow.addEventListener(\\'DOMContentLoaded\\', applySafariFix);\\nwindow.addEventListener(\\'resize\\', applySafariFix);\\n\\n  \\n  \\n  \\n  \\n  \\n  /* ===============================\\n   Safe, idempotent, Framer-friendly init\\n   - Waits for elements before wiring\\n   - Guards every selector\\n   - Debounced resize and GSAP refresh\\n   - No duplicate listeners\\n   =============================== */\\n\\n/* -------- Utilities -------- */\\nconst isPediatricsPage = window.location.pathname === \"/pediatrics\";\\nvar navButtonClickOnce = false;\\nvar pricingButtonClickCount = 0;\\n\\n\\nfunction debounce(fn, wait = 150) {\\n  let t;\\n  return (...args) => {\\n    clearTimeout(t);\\n    t = setTimeout(() => fn.apply(null, args), wait);\\n  };\\n}\\n\\nfunction oncePerEl(el, key) {\\n  if (!el) return false;\\n  const flag = `__init_${key}`;\\n  if (el.dataset[flag]) return false;\\n  el.dataset[flag] = \"1\";\\n  return true;\\n}\\n\\nfunction waitForElements(selectors, { timeout = 6000 } = {}) {\\n  const list = Array.isArray(selectors) ? selectors : [selectors];\\n  const haveAll = () => list.every(sel => document.querySelector(sel));\\n  if (haveAll()) return Promise.resolve();\\n\\n  return new Promise(resolve => {\\n    const timer = setTimeout(() => {\\n      obs && obs.disconnect();\\n      resolve(); // resolve anyway, inits will guard\\n    }, timeout);\\n\\n    const obs = new MutationObserver(() => {\\n      if (haveAll()) {\\n        clearTimeout(timer);\\n        obs.disconnect();\\n        resolve();\\n      }\\n    });\\n    obs.observe(document.documentElement, { childList: true, subtree: true });\\n  });\\n}\\n\\nfunction gsapReady() {\\n  if (!window.gsap) return false;\\n  if (window.ScrollTrigger && !gsap.core.globals().ScrollTrigger) {\\n    try { gsap.registerPlugin(ScrollTrigger); } catch (_) {}\\n  }\\n  return !!window.ScrollTrigger;\\n}\\n\\n/* Global debounced refresh for any layout-affecting change */\\nconst refreshScroll = debounce(() => {\\n  // if (gsapReady()) ScrollTrigger.refresh();\\n}, 100);\\n\\n/* -------- GSAP-free: Lines + Numbers -------- */\\nfunction ComponentLinesAnimation() {\\n  const line = document.querySelector(\\'[data-framer-name=\"Component-Scroll-Line-Active\"]\\');\\n  const outer = document.querySelector(\\'[data-framer-name=\"Component-Scroll-Line-Items-Outter-Wrapper\"]\\');\\n  const numsWrapper = document.querySelector(\\'[data-framer-name=\"Component-Scroll-Line-Numbers-Wrapper\"]\\');\\n\\n  const numberWrappers = Array.from(document.querySelectorAll(\\'[data-framer-name=\"Number Wrapper\"]\\'));\\n  const numberInner = Array.from(document.querySelectorAll(\\'[data-framer-name=\"Number Wrapper Inner\"]\\'));\\n  const activeBGs = Array.from(document.querySelectorAll(\\'[data-framer-name=\"Active BG\"]\\'));\\n\\n  if (!line || !outer || !numsWrapper || numberWrappers.length === 0 || numberInner.length === 0 || activeBGs.length === 0) return;\\n  if (!oncePerEl(line, \"scrollLineNoGsap\")) return;\\n\\n  // Scroll fill offsets\\n  var offsetStart;\\n  var offsetEnd;\\n  \\n  if (window.innerWidth <= 480) {\\n    offsetStart = 800;\\n    offsetEnd = 400;\\n  } else {\\n    offsetStart = 200;\\n    offsetEnd = 400;\\n  }\\n\\n  // Per-number activation/deactivation offsets (px)\\n  const activationOffsets = [0, 20, 30, 60];\\n  const deactivationOffsets = [0, 10, 15, 30];\\n\\n  let lastActiveIndex = -1;\\n  let ticking = false;\\n\\n  function alignNumberWrappers() {\\n    const outerTop = outer.getBoundingClientRect().top + window.scrollY;\\n    const items = Array.from(document.querySelectorAll(\\'[data-framer-name=\"Component-Scroll-Line-Inner-Item\"]\\'));\\n    if (items.length === 0) return;\\n\\n    const count = Math.min(items.length, numberWrappers.length);\\n    for (let i = 1; i < count; i++) {\\n      const itemTop = items[i].getBoundingClientRect().top + window.scrollY;\\n      const offset = itemTop - outerTop;\\n      const num = numberWrappers[i];\\n      if (!num) continue;\\n      num.style.position = \"absolute\";\\n      num.style.top = `${offset}px`;\\n    }\\n\\n    if (window.innerWidth <= 1200 && numberWrappers[0]) {\\n      numberWrappers[0].style.setProperty(\"top\", \"0px\");\\n    }\\n  }\\n\\n  function resizeLineWrapper() {\\n    const last = numberWrappers[numberWrappers.length - 1];\\n    if (!last) return;\\n    const wrapperTop = numsWrapper.getBoundingClientRect().top + window.scrollY;\\n    const lastBottom = last.getBoundingClientRect().top + window.scrollY + last.offsetHeight;\\n    const h = Math.max(0, lastBottom - wrapperTop);\\n    numsWrapper.style.height = `${h}px`;\\n  }\\n\\n  function offsetWithinWrapper(el, wrapper) {\\n    const elRect = el.getBoundingClientRect();\\n    const wrapperRect = wrapper.getBoundingClientRect();\\n    return elRect.top - wrapperRect.top;\\n  }\\n\\n  function compute() {\\n    const rect = outer.getBoundingClientRect();\\n    const vh = window.innerHeight || document.documentElement.clientHeight;\\n\\n    const start = (vh - rect.height) + offsetStart;\\n    const end = (0 - rect.height) + offsetEnd;\\n\\n    let progress = 1 - (rect.top - end) / (start - end);\\n    progress = Math.min(Math.max(progress, 0), 1);\\n\\n    const percent = (progress * 100).toFixed(2);\\n    line.style.height = `${percent}%`;\\n\\n    const filledPx = rect.height * progress;\\n\\n    let activeIndex = -1;\\n\\n    numberWrappers.forEach((el, idx) => {\\n      const centerY = offsetWithinWrapper(el, outer) + el.offsetHeight / 2;\\n\\n      const actOffset = activationOffsets[idx] ?? 0;\\n      const deactOffset = deactivationOffsets[idx] ?? 0;\\n\\n      const inner = numberInner[idx] || el.querySelector(\\'[data-framer-name=\"Number Wrapper Inner\"]\\');\\n      const siblingInnerItem = activeBGs[idx] || null;\\n\\n      // Activate\\n      if (filledPx >= centerY + actOffset) {\\n        el.classList.add(\\'is-active\\');\\n        inner?.classList.add(\\'is-visible\\');\\n        siblingInnerItem?.classList.add(\\'is-visible\\');\\n        activeIndex = idx;\\n      }\\n\\n      // Deactivate (separate threshold)\\n      if (filledPx < centerY + deactOffset) {\\n        el.classList.remove(\\'is-active\\');\\n        inner?.classList.remove(\\'is-visible\\');\\n        siblingInnerItem?.classList.remove(\\'is-visible\\');\\n      }\\n    });\\n\\n    lastActiveIndex = activeIndex;\\n    ticking = false;\\n  }\\n\\n  function onScroll() {\\n    if (!ticking) {\\n      ticking = true;\\n      requestAnimationFrame(compute);\\n    }\\n  }\\n\\n  const debouncedLayout = debounce(() => {\\n    alignNumberWrappers();\\n    resizeLineWrapper();\\n    // Recompute after layout changes so positions are correct\\n    onScroll();\\n  }, 0);\\n\\n  // Initial layout\\n  alignNumberWrappers();\\n  resizeLineWrapper();\\n\\n  // Set initial state\\n  if (isSafariAndSmallScreen()) {\\n    line.style.height = \"100%\";\\n    numberInner.forEach((n, i) => {\\n      n.classList.add(\"is-visible\");\\n      activeBGs[i]?.classList.add(\"is-visible\");\\n    });\\n  } else {\\n    line.style.height = \"0%\";\\n    onScroll();\\n  }\\n\\n  // Events\\n  window.addEventListener(\"scroll\", onScroll, { passive: true });\\n  window.addEventListener(\"resize\", debouncedLayout);\\n  window.addEventListener(\"orientationchange\", debouncedLayout);\\n  window.addEventListener(\"load\", debouncedLayout);\\n}\\n\\n\\n\\n\\n/* -------- Component: Slider Arrows (Team) -------- */\\nfunction setupAllSliderArrows() {\\n  const groupName = \"Team\";\\n  const sliders = document.querySelectorAll(`[data-framer-name=\"${groupName}\"]`);\\n  sliders.forEach(slider => {\\n    if (!oncePerEl(slider, \"arrows\")) return;\\n\\n    const parent = slider.parentElement;\\n    if (!parent) return;\\n\\n    const leftArrow = parent.querySelector(`[data-framer-name=\"${groupName} Arrow Left\"]`);\\n    const rightArrow = parent.querySelector(`[data-framer-name=\"${groupName} Arrow Right\"]`);\\n\\n    const prevBtn = () => slider.querySelector(\\'button[aria-label=\"Previous\"]\\');\\n    const nextBtn = () => slider.querySelector(\\'button[aria-label=\"Next\"]\\');\\n\\n    leftArrow && leftArrow.addEventListener(\"click\", () => prevBtn()?.click());\\n    rightArrow && rightArrow.addEventListener(\"click\", () => nextBtn()?.click());\\n  });\\n}\\n\\n/* -------- Component: Pricing -------- */\\nlet PricingHandleNumberFirst = \"01\";\\nlet PricingHandleNumberSecond = \"12\";\\n\\nfunction isButtonClicked(name) {\\n  const btn = document.querySelector(`[name=\"${name}\"]`);\\n  return !!btn && btn.classList.contains(\"is-clicked\");\\n}\\n\\nfunction removeClassFromSiblings(parent, selector, className) {\\n  parent.querySelectorAll(selector).forEach(el => el.classList.remove(className));\\n}\\n\\nfunction setMaxHeight(selector, value) {\\n  const el = document.querySelector(selector);\\n  if (el) el.style.maxHeight = value;\\n}\\n\\nfunction computeClickedState() {\\n  return {\\n    is0101: isButtonClicked(\"pricing-left-btn-01-01\"),\\n    is0102: isButtonClicked(\"pricing-left-btn-01-02\"),\\n    is0103: isButtonClicked(\"pricing-left-btn-01-03\"),\\n    is0201: isButtonClicked(\"pricing-left-btn-02-01\"),\\n    is0202: isButtonClicked(\"pricing-left-btn-02-02\"),\\n    is0301: isButtonClicked(\"pricing-left-btn-03-01\"),\\n    is0302: isButtonClicked(\"pricing-left-btn-03-02\"),\\n    is0303: isButtonClicked(\"pricing-left-btn-03-03\")\\n  };\\n}\\n\\nfunction buttonClicked() {\\n  const s = computeClickedState();\\n\\n  // Determine first handle\\n  if (s.is0102) {\\n    PricingHandleNumberFirst = \"02\";\\n  } else {\\n    PricingHandleNumberFirst = \"01\";\\n  }\\n  // If specifically 03-03 is clicked, you had forced 01\\n  if (s.is0303) {\\n    PricingHandleNumberFirst = \"01\";\\n  }\\n\\n  // Toggle third option headers and bullets\\n  const showThirdOption = !(s.is0301 && s.is0201 && s.is0101);\\n  const displayThirdOption = showThirdOption ? \"flex\" : \"none\";\\n\\n  document.querySelectorAll(\\'[data-framer-name=\"Medication Options Row Heading\"], [data-framer-name=\"Divider\"]\\').forEach(el => {\\n    const ssr = el.closest(\".ssr-variant\");\\n    if (ssr?.closest(\\'[data-framer-name=\"Pricing Item Main\"]\\')) {\\n      el.style.setProperty(\"display\", displayThirdOption, \"important\");\\n    }\\n  });\\n\\n  document.querySelectorAll(\\'[data-framer-name=\"Pricing Membership Medication Items Bullets Item\"]\\').forEach(el => {\\n    const bullets = el.closest(\\'[data-framer-name=\"Pricing Membership Medication Items Bullets\"]\\');\\n    if (bullets?.closest(\\'[data-framer-name=\"Pricing Item Main\"]\\')) {\\n      el.style.setProperty(\"display\", displayThirdOption, \"important\");\\n    }\\n  });\\n\\n  // Interesting vs Main\\n  const showInteresting = (s.is0102 && s.is0202) || (s.is0101 && s.is0202) || (s.is0103 && s.is0202);\\n  document.querySelector(\\'[data-framer-name=\"Pricing Item Main\"]\\')?.style.setProperty(\"display\", showInteresting ? \"none\" : \"flex\", \"important\");\\n  document.querySelector(\\'[data-framer-name=\"Pricing Nav\"]\\')?.style.setProperty(\"display\", showInteresting ? \"none\" : \"flex\", \"important\");\\n  document.querySelector(\\'[data-framer-name=\"Pricing Item Interesting\"]\\')?.style.setProperty(\"display\", showInteresting ? \"flex\" : \"none\", \"important\");\\n\\n  // Hide all pricing items\\n  document.querySelectorAll(\\'[data-framer-name=\"Pricing Item Main\"] > div\\').forEach(child => {\\n    child.style.setProperty(\"display\", \"none\", \"important\");\\n  });\\n\\n  // Show correct pricing item\\n  let handleFirst = PricingHandleNumberFirst;\\n  if (isPediatricsPage) handleFirst = \"02\";\\n\\n  const showItem = document.querySelector(`[data-framer-name=\"Pricing Item ${handleFirst}-${PricingHandleNumberSecond}\"]`);\\n  if (showItem) showItem.style.setProperty(\"display\", \"flex\", \"important\");\\n\\n  // Special case: 01-01 and 03-01\\n  const cond = s.is0101 && s.is0301;\\n  document.querySelectorAll(\\'[data-framer-name=\"Pricing Items Wrapper Inner\"] [data-framer-name=\"Medication Options Items\"]\\').forEach(section => {\\n    const children = Array.from(section.children);\\n    if (!children.length) return;\\n\\n    if (cond) {\\n      const lastBullets = [...children].reverse().find(child => child.getAttribute(\"data-framer-name\") === \"Pricing Membership Medication Items Bullets\");\\n      children.forEach(child => {\\n        const name = child.getAttribute(\"data-framer-name\");\\n        const isBulletsBottom = name === \"Pricing Membership Medication Items Bullets Bottom\";\\n        const isItemBottom = name === \"Pricing Membership Medication Items Bullets Item Bottom\";\\n        const isLastBullets = child === lastBullets;\\n        const shouldShow = isBulletsBottom || isItemBottom || isLastBullets;\\n        child.style.display = shouldShow ? \"\" : \"none\";\\n      });\\n    } else {\\n      children.forEach(child => { child.style.display = \"\"; });\\n    }\\n  });\\n}\\n\\nfunction handleClick(btn) {\\n  const name = btn.getAttribute(\"name\");\\n  const parent = btn.closest(\\'[data-framer-name=\"Pricing Left Row Buttons\"]\\');\\n  if (!parent) return;\\n\\n  removeClassFromSiblings(parent, \\'[data-framer-name^=\"pricing-left-btn-\"]\\', \"is-clicked\");\\n  btn.classList.add(\"is-clicked\");\\n\\n  // Third row visibility controlled by 01-01\\n  const s = computeClickedState();\\n  const thirdRowSelector = \\'[data-framer-name=\"Pricing Left Row Third\"]\\';\\n  if (!isPediatricsPage) {\\n    setMaxHeight(thirdRowSelector, s.is0101 ? \"500px\" : \"0px\");\\n  }\\n\\n  buttonClicked();\\n}\\n\\nfunction initPricingLeftButtons() {\\n  const all = document.querySelectorAll(\\'[data-framer-name^=\"pricing-left-btn-\"]\\');\\n  all.forEach(btn => {\\n    if (!oncePerEl(btn, \"bind\")) return;\\n    const name = btn.getAttribute(\"name\") || \"\";\\n    if (/^pricing-left-btn-\\\\d{2}-\\\\d{2}$/.test(name)) {\\n      btn.addEventListener(\"click\", () => handleClick(btn));\\n    }\\n  });\\n}\\n\\nfunction initPricingNav() {\\n  var navButtons = document.querySelectorAll(\\'[data-framer-name=\"Pricing Wrapper\"] [data-framer-name=\"Pricing Nav Button\"]\\');\\n  const activeItem = document.querySelector(\\'[data-framer-name=\"Buttons Active Item\"]\\');\\n  \\n  \\n  \\n    navButtons.forEach((btn, index) => {\\n \\n\\n    btn.addEventListener(\"click\", () => {\\n      if (!activeItem) return;\\n\\n      // reset styles\\n      document.querySelectorAll(\\'[data-framer-name=\"Pricing Nav Button\"] p\\').forEach(el => {\\n        el.style.color = \"rgb(0, 0, 69)\";\\n        el.style.fontWeight = \"400\";\\n      });\\n\\n      // highlight clicked\\n      const p = btn.querySelector(\"p\");\\n      if (p) {\\n        p.style.color = \"rgb(84, 71, 255)\";\\n        p.style.fontWeight = \"600\";\\n      }\\n\\n      // move active marker\\n      let rightPercent;\\n\\n      if (window.innerWidth <= 1200) {\\n        // Tablet and below: tighter spacing so tweak the base and step\\n        // rightPercent = 75 - (index * 25);\\n      } else {\\n        // Desktop (4 items)\\n        //rightPercent = 75 - index * 25;\\n      }\\n      \\n      // Inside your click handler\\n      switch (index) {\\n        case 0:\\n          activeItem.classList.add(\"first\");\\n          activeItem.classList.remove(\"second\", \"third\", \"fourth\");\\n          break;\\n      \\n        case 1:\\n          activeItem.classList.add(\"second\");\\n          activeItem.classList.remove(\"first\", \"third\", \"fourth\");\\n          break;\\n      \\n        case 2:\\n          activeItem.classList.add(\"third\");\\n          activeItem.classList.remove(\"first\", \"second\", \"fourth\");\\n          break;\\n      \\n        case 3:\\n          activeItem.classList.add(\"fourth\");\\n          activeItem.classList.remove(\"first\", \"second\", \"third\");\\n          break;\\n      }\\n\\n      \\n      console.log(index);\\n      \\n      activeItem.style.setProperty(\\'right\\', `${rightPercent}%`, \\'important\\');\\n\\n      // update secondary handle\\n      const numberText = p?.textContent || \"\";\\n      let numberOnly = numberText.match(/\\\\d+/)?.[0] || \"\";\\n      PricingHandleNumberSecond = numberOnly.padStart(2, \"0\");\\n\\n      buttonClicked();\\n    });\\n\\n    \\n    \\n\\n  });\\n\\n\\n\\n  // If nothing clicked yet, try to infer initial state once\\n  const initKey = \"__pricing_init_done\";\\n  if (!document.body.dataset[initKey]) {\\n    const firstActive = Array.from(navButtons).find(btn => {\\n      const p = btn.querySelector(\"p\");\\n      return p && getComputedStyle(p).fontWeight >= \"600\";\\n    }) || navButtons[0];\\n    if (firstActive) firstActive.click();\\n    document.body.dataset[initKey] = \"1\";\\n  }\\n}\\n\\n/* -------- Master init that is safe on first load and on re-renders -------- */\\nasync function initAll() {\\n  // Wait for likely elements, but continue even if timeout\\n  await waitForElements([\\n    \\'[data-framer-name=\"Component-Scroll-Line-Active\"]\\',\\n    \\'[data-framer-name=\"Pricing Nav Button\"]\\',\\n    \\'[data-framer-name^=\"pricing-left-btn-\"]\\'\\n  ], { timeout: 3000 });\\n\\n  // Each init is self-guarded and idempotent\\n  ComponentLinesAnimation();\\n  setupAllSliderArrows();\\n  initPricingLeftButtons();\\n  initPricingNav();\\n  \\n\\n  // refreshScroll();\\n  \\n  const clickInterval = setInterval(() => {\\n          if (pricingButtonClickCount < 3) {\\n            document.querySelectorAll(\\'[data-framer-name=\"Pricing Nav Button\"]\\')[3]?.click();\\n            pricingButtonClickCount++;\\n          } else {\\n            clearInterval(clickInterval);\\n          }\\n        }, 100); // Adjust delay if needed\\n}\\n\\n/* Run on DOM ready and on load */\\n(function boot() {\\n  const start = () => initAll();\\n  if (document.readyState === \"loading\") {\\n    document.addEventListener(\"DOMContentLoaded\", start, { once: true });\\n    document.querySelectorAll(\\'[data-framer-name=\"Pricing Nav Button\"]\\')[3]?.click();\\n  } else {\\n    start();\\n    document.querySelectorAll(\\'[data-framer-name=\"Pricing Nav Button\"]\\')[3]?.click();\\n  }\\n  \\n  \\n  \\n  \\n  // window.addEventListener(\"load\", refreshScroll, { once: true });\\n\\n  // Observe DOM changes to catch Framer hydration or route changes\\n  const mo = new MutationObserver(debounce(() => {\\n    initAll();\\n  }, 250));\\n  mo.observe(document.documentElement, { childList: true, subtree: true });\\n})();\\n\\n\\n\\n\\n\\nwindow.addEventListener(\"DOMContentLoaded\", () => document.querySelectorAll(\\'[data-framer-name=\"Pricing Nav Button\"]\\')[3]?.click());\\n\\n\\n\\n\\n\\n</script>\\n\\n\\n\\n<!-- ends here Custom code -->\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n<script>\\n\\nwindow.addEventListener(\\'scroll\\', () => {\\n  const navbar = document.querySelector(\\'[data-framer-name=\"Navbar Wrapper Invert\"]\\') \\n              || document.querySelector(\\'[data-framer-name=\"Navbar Wrapper\"]\\');\\n\\n  if (!navbar) return;\\n\\n  const scrollY = window.scrollY || window.pageYOffset;\\n\\n  if (scrollY > 2) {\\n    if (!navbar.classList.contains(\\'is-active\\')) {\\n      navbar.classList.add(\\'is-active\\');\\n\\n      const colorEl = navbar.querySelector(\\'[data-framer-name=\"Navbar Color\"]\\');\\n      const colorText = colorEl?.textContent?.trim();\\n\\n      if (colorText && /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(colorText)) {\\n        const styleId = \\'navbar-active-bg-style\\';\\n        let styleTag = document.getElementById(styleId);\\n\\n        if (!styleTag) {\\n          styleTag = document.createElement(\\'style\\');\\n          styleTag.id = styleId;\\n          document.head.appendChild(styleTag);\\n        }\\n\\n        const selector = `[data-framer-name=\"${navbar.getAttribute(\\'data-framer-name\\')}\"].is-active`;\\n        styleTag.textContent = `${selector} { background: ${colorText}; }`;\\n      }\\n    }\\n  } else {\\n    navbar.classList.remove(\\'is-active\\');\\n  }\\n});\\n</script>\\n\\n<script defer=\"\">\\n(function() {\\n  const MIN_WINDOW_WIDTH = 600;  // adjust as needed\\n  let isOpen = false;\\n\\n  // container for the iframe (to toggle pointerEvents)\\n  const chatContainer = document.createElement(\"div\");\\n  Object.assign(chatContainer.style, {\\n    position: \"fixed\",\\n    bottom: 0,\\n    right: 0,\\n    width: \"0\",\\n    height: \"0\",\\n    pointerEvents: \"none\",\\n    zIndex: 7,\\n  });\\n  document.body.appendChild(chatContainer);\\n\\n  function handleWindowWidthChange(iframe) {\\n    const isFullscreen = window.innerWidth < MIN_WINDOW_WIDTH;\\n    const style = isFullscreen\\n      ? {\\n          height: \"100%\",\\n          width: \"100%\",\\n          bottom: 0,\\n          borderRadius: \"0\",\\n          border: \"0\",\\n          left: \"auto\",\\n          right: \"0\",\\n        }\\n      : {\\n          bottom: \"90px\",\\n          border: \"1px solid #e5e7eb\",\\n          borderRadius: \"0.75rem\",\\n          height: \"min(800px, calc(100% - 104px))\",\\n          width: \"min(450px, calc(100% - 104px))\",\\n          left: \"auto\",\\n          right: \"24px\",\\n        };\\n    Object.assign(iframe.style, style);\\n\\n    // if we resized into desktop while chat is open, ensure overflow is reset\\n    if (!isFullscreen && isOpen) {\\n      document.body.style.overflow = \\'auto\\';\\n    }\\n  }\\n\\n  function toggleChat(chatIframe) {\\n    const isMobile = window.innerWidth < MIN_WINDOW_WIDTH;\\n\\n    if (!isOpen) {\\n      chatIframe.style.opacity = \"1\";\\n      chatIframe.style.transform = \"scale(1)\";\\n      chatContainer.style.pointerEvents = \"auto\";\\n      isOpen = true;\\n\\n      // on mobile, lock background scroll\\n      if (isMobile) {\\n        document.body.style.overflow = \\'hidden\\';\\n      }\\n    } else {\\n      chatIframe.style.opacity = \"0\";\\n      chatIframe.style.transform = \"scale(0.9)\";\\n      chatContainer.style.pointerEvents = \"none\";\\n      isOpen = false;\\n\\n      // restore scroll whenever chat closes\\n      document.body.style.overflow = \\'auto\\';\\n    }\\n  }\\n\\n  function initChatbot() {\\n    // create iframe\\n    const chatIframe = document.createElement(\"iframe\");\\n    chatIframe.src = \"https://chatbot.joinmochi.com\";\\n    Object.assign(chatIframe.style, {\\n      position: \"fixed\",\\n      boxShadow: \"rgba(150, 150, 150, 0.2) 0px 10px 30px 0px\",\\n      bottom: \"90px\",\\n      zIndex: 7,\\n      borderRadius: \"0.75rem\",\\n      border: \"1px solid #e5e7eb\",\\n      background: \"transparent\",\\n      display: \"flex\",\\n      transformOrigin: \"bottom right\",\\n      transform: \"scale(0.9)\",\\n      opacity: 0,\\n      transition:\\n        \"width 200ms ease, height 200ms ease, transform 300ms cubic-bezier(0,1.2,1,1), opacity 83ms ease-out\",\\n    });\\n    chatContainer.appendChild(chatIframe);\\n\\n    // initial sizing & reposition\\n    handleWindowWidthChange(chatIframe);\\n    window.addEventListener(\"resize\", () =>\\n      handleWindowWidthChange(chatIframe)\\n    );\\n\\n    // create toggle button\\n    const chatButton = document.createElement(\"button\");\\n    chatButton.innerHTML = \"💬 Chat\";\\n    Object.assign(chatButton.style, {\\n      position: \"fixed\",\\n      bottom: \"24px\",\\n      right: \"24px\",\\n      zIndex: \"4\",\\n      display: \"flex\",\\n      alignItems: \"center\",\\n      gap: \"8px\",\\n      padding: \"0 28px 0 24px\",\\n      height: \"56px\",\\n      borderRadius: \"9999px\",\\n      color: \"white\",\\n      fontSize: \"18px\",\\n      fontWeight: \"600\",\\n      border: \"none\",\\n      backgroundColor: \"#3b3b8d\",\\n      boxShadow: \"0 4px 12px rgba(0,0,0,0.2)\",\\n      cursor: \"pointer\",\\n      transition: \"transform 0.3s\",\\n    });\\n    chatButton.addEventListener(\"mouseenter\", () =>\\n      (chatButton.style.transform = \"scale(1.1)\")\\n    );\\n    chatButton.addEventListener(\"mouseleave\", () =>\\n      (chatButton.style.transform = \"scale(1)\")\\n    );\\n    chatButton.addEventListener(\"click\", () => toggleChat(chatIframe));\\n\\n    document.body.appendChild(chatButton);\\n\\n    // respond to in-iframe close message\\n    window.addEventListener(\"message\", (event) => {\\n      if (event.data?.type === \"MOCHI_CHATBOT_CLOSE\" && isOpen) {\\n        toggleChat(chatIframe);\\n      }\\n    });\\n  }\\n\\n  if (document.readyState === \"complete\") {\\n    initChatbot();\\n  } else {\\n    window.addEventListener(\"load\", initChatbot);\\n  }\\n})();\\n</script>\\n\\n<script type=\"application/ld+json\">\\n{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"Mochi Health\",\"url\":\"https://joinmochi.com/\",\"logo\":\"https://mochi-website.s3.amazonaws.com/mochi_logo.png\",\"contactPoint\":[{\"@type\":\"ContactPoint\",\"telephone\":\"+1-619-648-1247\",\"contactType\":\"customer service\"}],\"sameAs\":[\"https://www.facebook.com/joinmochi\",\"https://twitter.com/mochihealth\",\"https://www.instagram.com/joinmochi/\",\"https://www.tiktok.com/@myrajoinmochi\"]}</script>\\n',customHTMLBodyStart:'<!-- Google Tag Manager (noscript) -->\\n<noscript><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-5B32S8B8\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe></noscript>\\n<!-- End Google Tag Manager (noscript) -->',customHTMLHeadEnd:'<style>\\n\\n[data-framer-name=\"Global Padding\"] {\\n    padding: 0 48px !important;\\n}\\n\\n[data-framer-name=\"Navbar\"] [data-framer-name=\"Inline Link\"] {\\n    z-index: 99999;\\n}\\n\\n\\n@media only screen and (max-width: 811px) {\\n  [data-framer-name=\"Global Padding\"] {\\n    padding: 0 24px !important;\\n  }\\n}\\n\\n[data-framer-name=\"Navbar Wrapper Invert\"], [data-framer-name=\"Navbar Wrapper\"] {\\n  transition: background 0.4s ease;\\n}\\n\\n\\n[data-framer-name=\"Navbar Wrapper Invert\"] [data-framer-name=\"Name\"], [data-framer-name=\"Navbar Wrapper Invert\"]  [data-framer-name=\"Navbar\"] {\\n    filter: brightness(0) invert(1);\\n    transition: filter 0.4s ease;\\n}\\n\\n[data-framer-name=\"Navbar Wrapper Invert\"]\\n  [data-framer-name=\"Tablet Open\"] [data-framer-name=\"Navbar\"],\\n[data-framer-name=\"Navbar Wrapper Invert\"]\\n  [data-framer-name=\"Phone Open\"] [data-framer-name=\"Navbar\"],\\n[data-framer-name=\"Navbar Wrapper Invert\"]\\n  [data-framer-name=\"Tablet Open\"] [data-framer-name=\"Navbar\"] > [data-framer-name=\"Name\"],\\n[data-framer-name=\"Navbar Wrapper Invert\"]\\n  [data-framer-name=\"Phone Open\"] [data-framer-name=\"Navbar\"] > [data-framer-name=\"Name\"] {\\n  filter: none !important;\\n}\\n\\n\\n\\n[data-framer-name=\"Pricing Membership Info Text\"] p {\\n    text-align: left !important;\\n}\\n\\n[data-framer-name=\"Pricing Membership Info Text\"] a {\\n    color: #5447FF !important;\\n    font-weight: 600 !important;\\n}\\n\\n\\n</style>\\n\\n\\n<style>\\n\\n/* HOMEPAGE */\\n\\n\\n  /* Fade-in for active elements */\\n  [data-framer-name=\"Active BG\"],\\n  [data-framer-name=\"Number Wrapper Inner\"] {\\n    opacity: 0 !important;\\n    transition: opacity 0.4s ease;\\n  }\\n\\n  [data-framer-name=\"Active BG\"].is-visible,\\n  [data-framer-name=\"Number Wrapper Inner\"].is-visible {\\n    opacity: 1 !important;\\n  }\\n\\n  /* Footer accordion behavior on mobile */\\n  @media (max-width: 1199px) {\\n    [data-framer-name=\"Footer Item Content\"] {\\n      max-height: 0;\\n      overflow: hidden !important;\\n      transition: max-height 0.4s ease;\\n    }\\n\\n    [data-framer-name=\"Footer Item Content\"].is-active {\\n      max-height: 3000px;\\n    }\\n\\n    [data-framer-name=\"icon chevron down\"] {\\n      transition: transform 0.4s ease;\\n    }\\n\\n    [data-framer-name=\"icon chevron down\"].is-active {\\n      transform: rotateZ(180deg);\\n    }\\n  }\\n\\n  /* Pricing row toggle sections */\\n  [data-framer-name=\"Pricing Left Row Second\"],\\n  [data-framer-name=\"Pricing Left Row Third\"] {\\n    max-height: 0;\\n    overflow: hidden !important;\\n    transition: max-height 0.4s ease;\\n  }\\n\\n  /* Interactive button animations */\\n  [data-framer-name^=\"pricing-left-btn-\"] * {\\n    transition: all 0.4s ease !important;\\n  }\\n\\n  [data-framer-name^=\"pricing-left-btn-\"].is-clicked {\\n    pointer-events: none;\\n  }\\n\\n  [data-framer-name^=\"pricing-left-btn-\"].is-clicked > div {\\n    border-color: rgb(84, 71, 255) !important;\\n    background-color: rgba(84, 71, 255, 0.1) !important;\\n  }\\n\\n  [data-framer-name^=\"pricing-left-btn-\"].is-clicked > div p {\\n    color: rgb(84, 71, 255) !important;\\n  }\\n\\n  /* Animated indicator */\\n  [data-framer-name=\"Buttons Active Item\"] {\\n    right: 0%;\\n    transition: right 0.4s ease;\\n  }\\n\\n  /* Hide specific pricing items */\\n  [data-framer-name=\"Pricing Item 01-06\"],\\n  [data-framer-name=\"Pricing Item 01-03\"],\\n  [data-framer-name=\"Pricing Item 01-01\"],\\n  [data-framer-name=\"Pricing Item 02-12\"],\\n  [data-framer-name=\"Pricing Item 02-06\"],\\n  [data-framer-name=\"Pricing Item 02-03\"],\\n  [data-framer-name=\"Pricing Item 02-01\"], [data-framer-name=\"Pricing Item Interesting\"] {\\n    display: none !important;\\n  }\\n\\n\\n[data-framer-name=\"RichTextElement\"]  em {\\n    \"Libre Baskerville\", \"Libre Baskerville Placeholder\", font-family: sans-serif;\\n    font-family: \"Libre Baskerville\", \"Libre Baskerville Placeholder\", serif !important;\\n\\n    font-weight: 400 !important;\\n}\\n\\nh2 span, [data-framer-name=\"DisplayContents\"] span, [data-framer-name=\"DisplayContents\"] div {\\n  display: contents !important;\\n}\\n\\n[data-framer-name=\"Buttons Active Item\"].first {\\n  right: 75% !important;\\n}\\n\\n[data-framer-name=\"Buttons Active Item\"].second {\\n  right: 50% !important;\\n}\\n\\n[data-framer-name=\"Buttons Active Item\"].third {\\n  right: 25% !important;\\n}\\n\\n[data-framer-name=\"Buttons Active Item\"].fourth {\\n  right: 0% !important;\\n}\\n\\n</style>',description:\"Get access to the best obesity medications and treatment program at Mochi Health. Our GLP-1 medication helps you lose weight safely and effectively.\",favicon:\"https://framerusercontent.com/assets/KSQwApMcxTE4eGjU0uD73PAGX8w.webp\",robots:\"max-image-preview:large\",title:\"Mochi Health\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"2DACA,SAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAy3/B,oBAAoB;;4CAAwP,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAA+vI,YAAY,uJAAuJ,QAAQ,wEAAwE,OAAO,0BAA0B,MAAM,eAAe,AAAE"}