{
  "version": 3,
  "sources": ["/cdn/shop/t/39/assets/orbit-events-ticket-center.js?orbit_release=V448.4.0"],
  "sourcesContent": ["(function () {\n\n  const root = document.getElementById('OrbitTicketCentre');\n  if (!root) return;\n  document.body.classList.add('otc-event-page');\n\n  const apiBase = root.dataset.apiBase || 'https://orbit-membership-service.onrender.com';\n  const logoUrl = root.dataset.cardShowLogoUrl || '';\n  const iconUrl = root.dataset.cardShowIconUrl || '';\n  const addOnFallbackImageUrl = root.dataset.addonFallbackImageUrl || 'https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.com%2Fimages%2F1185357962%2F2880405825001%2F1%2Foriginal.20260525-115346?auto=format%2Ccompress&q=75&sharp=10&s=5f135a9b96d8cb857b9fa7f7acd4884d' || iconUrl || logoUrl || '';\n  const loadingEl = root.querySelector('[data-otc-loading]');\n  const errorEl = root.querySelector('[data-otc-error]');\n  const eventsEl = root.querySelector('[data-otc-events]');\n  const hubHero = root.querySelector('[data-otc-hub-hero]');\n  const hubView = root.querySelector('[data-otc-hub-view]');\n  const detailView = root.querySelector('[data-otc-detail-view]');\n  const detailEl = root.querySelector('[data-otc-detail]');\n  const detailLoadingEl = root.querySelector('[data-otc-detail-loading]');\n  const staticHubEl = root.querySelector('[data-otc-static-hub]');\n  const staticEventJsonEl = root.querySelector('[data-orbit-static-event-json]');\n  const backButton = root.querySelector('[data-otc-back]');\n  const modal = root.querySelector('[data-otc-modal]');\n  const modalContent = root.querySelector('[data-otc-modal-content]');\n  const membershipUpgradeUrl = root.getAttribute('data-membership-url') || '/products/orbit-collectors-club-membership';\n\n  let currentEvent = null;\n  let selectedTickets = new Map();\n  let orbitDiscountCode = '';\n  let orbitDiscountInputValue = '';\n  let orbitDiscountPercentage = 0;\n  let orbitDiscountMessage = '';\n  let orbitDiscountError = '';\n  let hubEvents = [];\n  let staticEventSnapshot = null;\n  if (staticEventJsonEl) {\n    try { staticEventSnapshot = JSON.parse(staticEventJsonEl.textContent || '{}'); }\n    catch (_) { staticEventSnapshot = null; }\n  }\n\n  function salesStatusPresentation(value) {\n    const label=String(value||\"On Sale\").trim()||\"On Sale\";\n    const key=label.toLowerCase().replace(/[^a-z0-9]+/g,\"-\").replace(/^-|-$/g,\"\");\n    const icons={\"on-sale\":\"\u2705\",\"selling-fast\":\"\uD83D\uDD25\",\"running-low\":\"\u26A0\uFE0F\",\"nearly-sold-out\":\"\u23F3\",\"sold-out\":\"\u274C\"};\n    return {label,key:key||\"on-sale\",icon:icons[key]||\"\uD83C\uDFF7\uFE0F\"};\n  }\n\n  function publicSalesBadge(event, extraClass) {\n    const s=salesStatusPresentation(event?.publicTagEnabled&&event?.publicTag?event.publicTag:'On Sale');\n    return `<span class=\"otc-public-sales-tag ${escapeHtml(extraClass||'')} status-${escapeHtml(s.key)}\"><span class=\"otc-sales-emoji\" aria-hidden=\"true\">${escapeHtml(s.icon)}</span><span>${escapeHtml(s.label)}</span></span>`;\n  }\n\n  const ticketTrackingSent=new Set();\n  function trackTicketFunnel(gaEvent,metaEvent,event,extra,dedupeSuffix,metaEventId){\n    try{\n      const eventId=String(event?.id||event?.eventbriteEventId||event?.eventbriteId||event?.slug||'');\n      const key=String(gaEvent||metaEvent||'event')+':'+eventId+':'+String(dedupeSuffix||'');\n      if(ticketTrackingSent.has(key))return;\n      ticketTrackingSent.add(key);\n      const tracker=window.OrbitTracking;\n      if(!tracker||typeof tracker.track!=='function')return;\n      const params=Object.assign({\n        currency:'GBP',\n        orbit_event_id:eventId,\n        orbit_event_name:String(event?.name||'Orbit Card Show'),\n        content_name:String(event?.name||'Orbit Card Show'),\n        content_category:'Orbit Card Show Tickets'\n      },extra||{});\n      tracker.track({gaEvent:gaEvent||'',metaEvent:metaEvent||'',eventId:String(metaEventId||''),params});\n    }catch(_){}\n  }\n\n\n  function orbitCookieValue(name){\n    try{\n      const prefix=String(name||\"\")+\"=\";\n      return String(document.cookie||\"\").split(\";\").map(x=>x.trim()).find(x=>x.startsWith(prefix))?.slice(prefix.length)||\"\";\n    }catch(_){return \"\";}\n  }\n  function ticketAttributionPayload(){\n    try{\n      const q=new URLSearchParams(window.location.search||\"\");\n      const fbclid=q.get(\"fbclid\")||sessionStorage.getItem(\"orbit_ticket_fbclid\")||\"\";\n      if(fbclid)sessionStorage.setItem(\"orbit_ticket_fbclid\",fbclid);\n      const fbc=orbitCookieValue(\"_fbc\")||(fbclid?(\"fb.1.\"+Date.now()+\".\"+fbclid):\"\");\n      return {\n        fbclid:fbclid,fbp:orbitCookieValue(\"_fbp\"),fbc:fbc,\n        utmSource:q.get(\"utm_source\")||sessionStorage.getItem(\"orbit_ticket_utm_source\")||\"\",\n        utmMedium:q.get(\"utm_medium\")||sessionStorage.getItem(\"orbit_ticket_utm_medium\")||\"\",\n        utmCampaign:q.get(\"utm_campaign\")||sessionStorage.getItem(\"orbit_ticket_utm_campaign\")||\"\",\n        utmContent:q.get(\"utm_content\")||sessionStorage.getItem(\"orbit_ticket_utm_content\")||\"\",\n        landingPage:window.location.href,referrer:document.referrer||\"\"\n      };\n    }catch(_){return {landingPage:window.location.href,referrer:document.referrer||\"\"};}\n  }\n  (function persistTicketAttribution(){\n    try{\n      const q=new URLSearchParams(window.location.search||\"\");\n      [\"utm_source\",\"utm_medium\",\"utm_campaign\",\"utm_content\"].forEach(function(key){\n        const value=q.get(key);if(value)sessionStorage.setItem(\"orbit_ticket_\"+key,value);\n      });\n    }catch(_){}\n  })();\n\n  // V716 Promote & Earn attribution. Vendor referrals are persisted against the\n  // exact event for 30 days so they survive page navigation and a return visit,\n  // but can never leak from one show into another show's checkout.\n  const VENDOR_REFERRAL_TTL_MS=30*24*60*60*1000;\n  const VENDOR_REFERRAL_PENDING_KEY='orbit_vendor_referral_pending_v716';\n  function isVendorReferralCode(value){return /^vc_/i.test(String(value||'').trim());}\n  function vendorReferralKey(eventId){return 'orbit_vendor_referral_'+String(eventId||'').trim();}\n  function safeStoredJson(key){try{const raw=localStorage.getItem(key);if(!raw)return null;const value=JSON.parse(raw);return value&&typeof value==='object'?value:null;}catch(_){return null;}}\n  function storeVendorReferral(event,code,clickId=''){\n    try{\n      const eventId=String(eventIdentifier(event)||'').trim(),value=String(code||'').trim(),at=Date.now(),verifiedClick=/^vrc_/i.test(String(clickId||'').trim())?String(clickId).trim():'';\n      if(!eventId||!isVendorReferralCode(value))return false;\n      localStorage.setItem(vendorReferralKey(eventId),JSON.stringify({code:value,clickId:verifiedClick||null,eventId,storedAt:at,expiresAt:at+VENDOR_REFERRAL_TTL_MS,landingPath:location.pathname||''}));\n      localStorage.removeItem(VENDOR_REFERRAL_PENDING_KEY);\n      return true;\n    }catch(_){return false;}\n  }\n  function captureVendorReferral(event){\n    try{\n      const query=new URLSearchParams(window.location.search||''),queryCode=String(query.get('ref')||'').trim(),queryClick=String(query.get('ref_click')||'').trim();\n      if(isVendorReferralCode(queryCode)){\n        if(!storeVendorReferral(event,queryCode,queryClick)){\n          const at=Date.now();\n          localStorage.setItem(VENDOR_REFERRAL_PENDING_KEY,JSON.stringify({code:queryCode,clickId:/^vrc_/i.test(queryClick)?queryClick:null,storedAt:at,expiresAt:at+VENDOR_REFERRAL_TTL_MS,landingPath:location.pathname||''}));\n        }\n        return queryCode;\n      }\n      const pending=safeStoredJson(VENDOR_REFERRAL_PENDING_KEY),sameLanding=!pending?.landingPath||pending.landingPath===(location.pathname||'');\n      if(pending&&isVendorReferralCode(pending.code)&&Number(pending.expiresAt||0)>Date.now()&&sameLanding&&storeVendorReferral(event,pending.code,pending.clickId))return pending.code;\n      if(pending&&Number(pending.expiresAt||0)<=Date.now())localStorage.removeItem(VENDOR_REFERRAL_PENDING_KEY);\n    }catch(_){}\n    return '';\n  }\n  function vendorReferralCode(event){\n    try{\n      const captured=captureVendorReferral(event);if(captured&&String(eventIdentifier(event)||''))return captured;\n      const eventId=String(eventIdentifier(event)||'').trim();if(!eventId)return '';\n      const key=vendorReferralKey(eventId),raw=localStorage.getItem(key)||'';\n      if(isVendorReferralCode(raw)){return raw;} // backwards-compatible V620 value\n      const row=safeStoredJson(key);\n      if(!row||!isVendorReferralCode(row.code))return '';\n      if(Number(row.expiresAt||0)<=Date.now()){localStorage.removeItem(key);return '';}\n      if(row.eventId&&String(row.eventId)!==eventId){localStorage.removeItem(key);return '';}\n      return String(row.code);\n    }catch(_){return '';}\n  }\n  function vendorReferralClickId(event){\n    try{\n      captureVendorReferral(event);const eventId=String(eventIdentifier(event)||'').trim();if(!eventId)return '';\n      const row=safeStoredJson(vendorReferralKey(eventId));if(!row||Number(row.expiresAt||0)<=Date.now()||String(row.eventId||eventId)!==eventId)return '';\n      return /^vrc_/i.test(String(row.clickId||''))?String(row.clickId):'';\n    }catch(_){return '';}\n  }\n  // Capture immediately for static event pages; dynamic detail pages bind the\n  // pending click to the resolved event in renderDetail/loadEvent below.\n  captureVendorReferral(staticEventSnapshot);\n\n  function escapeHtml(value) {\n    return String(value || '')\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#039;');\n  }\n\n  function sanitizeHtml(html) {\n    if (!html) return '';\n    const template = document.createElement('template');\n    template.innerHTML = html;\n    const allowedTags = new Set(['P','BR','STRONG','B','EM','I','UL','OL','LI','A','H2','H3','H4','DIV','SPAN']);\n    const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_ELEMENT);\n    const remove = [];\n    while (walker.nextNode()) {\n      const node = walker.currentNode;\n      if (!allowedTags.has(node.tagName)) {\n        remove.push(node);\n        continue;\n      }\n      [...node.attributes].forEach(attr => {\n        const name = attr.name.toLowerCase();\n        if (node.tagName === 'A' && name === 'href') {\n          const href = attr.value || '';\n          if (!/^https?:\\/\\//i.test(href) && !/^mailto:/i.test(href)) node.removeAttribute(attr.name);\n          else node.setAttribute('target', '_blank');\n          node.setAttribute('rel', 'noopener noreferrer');\n          return;\n        }\n        node.removeAttribute(attr.name);\n      });\n    }\n    remove.forEach(node => node.replaceWith(document.createTextNode(node.textContent || '')));\n    return template.innerHTML;\n  }\n\n  function stripHtml(value) {\n    const el = document.createElement('div');\n    el.innerHTML = value || '';\n    return (el.textContent || el.innerText || '').trim();\n  }\n\n  function imageFromHtml(html) {\n    if (!html) return '';\n    const template = document.createElement('template');\n    template.innerHTML = html;\n    const img = template.content.querySelector('img[src]');\n    const src = img ? String(img.getAttribute('src') || '') : '';\n    return /^https?:\\/\\//i.test(src) ? src : '';\n  }\n\n  function formatMoney(value) {\n    const number = Number(value || 0);\n    return `\u00A3${number.toFixed(2)}`;\n  }\n\n  function eventIdentifier(event) {\n    return event.eventbriteEventId || event.slug;\n  }\n\n  function eventPageUrl(event) {\n    if (event?.staticPageUrl) return String(event.staticPageUrl);\n    const host=String(window.location.hostname||'').toLowerCase();\n    const alias=host==='orbitshowtickets.co.uk'||host==='www.orbitshowtickets.co.uk';\n    const basePath=alias?'/':'/pages/events';\n    return `${basePath}?event=${encodeURIComponent(eventIdentifier(event))}`;\n  }\n  function staticEventHandleFromPath() {\n    const path=String(window.location.pathname||'');\n    const match=path.match(/^\\/pages\\/([^/?#]+)\\/?$/i);\n    if(!match)return '';\n    const handle=decodeURIComponent(match[1]);\n    if(['events','admin-os','members-area'].includes(handle))return '';\n    return handle;\n  }\n\n  function canonicaliseStaticEventUrl(handle) {\n    if(!handle)return;\n    const canonical=`/pages/${encodeURIComponent(handle)}`;\n    const currentPath=String(window.location.pathname||'').replace(/\\/$/,'');\n    if(currentPath===canonical && (window.location.search||window.location.hash)){\n      try{window.history.replaceState(window.history.state||{},'',canonical);}catch(_){}\n    }\n  }\n\n  function eventIdentifierFromLocation() {\n    // V321: genuine Shopify event Pages are path-authoritative. Tracking or\n    // social query params such as ?fbclid=... must never turn a static event\n    // URL back into the Ticket Centre hub or override the event identity.\n    const staticHandle=staticEventHandleFromPath();\n    if(staticHandle){\n      canonicaliseStaticEventUrl(staticHandle);\n      return staticHandle;\n    }\n    const params=new URLSearchParams(window.location.search);\n    if(params.get('event'))return params.get('event');\n    return '';\n  }\n\n  function ticketHubUrl() {\n    const host=String(window.location.hostname||'').toLowerCase();\n    return (host==='orbitshowtickets.co.uk'||host==='www.orbitshowtickets.co.uk')?'/':'/pages/events';\n  }\n\n  function parseDate(raw) {\n    if (!raw) return null;\n    const date = new Date(raw);\n    return Number.isNaN(date.getTime()) ? null : date;\n  }\n\n  function formatDate(event) {\n    const date = parseDate(event?.start?.local || event?.start?.utc || event?.startAt);\n    if (!date) return 'Date coming soon';\n    return date.toLocaleDateString('en-GB', { weekday: 'short', day: 'numeric', month: 'short', year: 'numeric' });\n  }\n\n  function formatLongDate(event) {\n    const date = parseDate(event?.start?.local || event?.start?.utc || event?.startAt);\n    if (!date) return 'Date coming soon';\n    return date.toLocaleDateString('en-GB', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' });\n  }\n\n  function formatTimeFromRaw(raw) {\n    const date = parseDate(raw);\n    if (!date) return '';\n    return date.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' });\n  }\n\n  function formatEventTime(event) {\n    const start = event?.start?.local || event?.start?.utc;\n    const end = event?.end?.local || event?.end?.utc;\n    const startTime = formatTimeFromRaw(start);\n    const endTime = formatTimeFromRaw(end);\n    if (startTime && endTime) return `${startTime} - ${endTime}`;\n    return startTime || '';\n  }\n\n  function fullAddress(event) {\n    const address = event?.venueAddress || event?.venue?.address || {};\n    return [address.address_1, address.address_2, address.city, address.region, address.postal_code]\n      .filter(Boolean)\n      .join(', ');\n  }\n\n  function imageUrl(event) {\n    return event.originalImageUrl || event.logoUrl || event?.image?.originalUrl || event?.image?.logoUrl || '';\n  }\n\n  function ticketStatus(option) {\n    if (option?.hidden) return 'Currently unavailable';\n    return option?.salesStatus?.label || 'On sale';\n  }\n\n  function ticketCanBeSelected(option) {\n    if (!option || option.hidden) return false;\n    return (option.salesStatus?.state || 'on_sale') === 'on_sale';\n  }\n\n  function isAddOnTicket(option) {\n    const name = `${option?.name || ''}`.toLowerCase();\n    return Boolean(option?.addOn) || name.includes('mystery box') || name.includes('add-on') || name.includes('add on') || name.includes('collector box');\n  }\n\n  function isFreeUnder13Ticket(option) {\n    if (!option || !option.free) return false;\n    const name = `${option.name || ''}`.toLowerCase().replace(/[_-]+/g, ' ');\n    return /(?:under\\s*13|under\\s*thirteen|u\\s*13|aged?\\s*(?:0\\s*[-\u2013]\\s*)?12|child(?:ren)?\\s*under\\s*13)/i.test(name);\n  }\n\n  function availableTicketOptions(event) {\n    return (Array.isArray(event.ticketOptions) ? event.ticketOptions : [])\n      .filter(option => option && option.id && !isAddOnTicket(option) && ticketCanBeSelected(option))\n      .sort((a, b) => {\n        const aUnder13 = isFreeUnder13Ticket(a) ? 1 : 0;\n        const bUnder13 = isFreeUnder13Ticket(b) ? 1 : 0;\n        if (aUnder13 !== bUnder13) return aUnder13 - bUnder13;\n        return Number(a.orderIndex || 0) - Number(b.orderIndex || 0);\n      });\n  }\n\n  function availableAddOnOptions(event) {\n    return (Array.isArray(event.addOnOptions) ? event.addOnOptions : [])\n      .filter(option => option && option.id && ticketCanBeSelected(option))\n      .sort((a, b) => Number(a.orderIndex || 0) - Number(b.orderIndex || 0));\n  }\n\n  function purchasableOptions(event) {\n    return [...availableTicketOptions(event), ...availableAddOnOptions(event)];\n  }\n\n  function lowestPrice(event) {\n    const prices = availableTicketOptions(event)\n      .map(option => Number(option.priceNumber))\n      .filter(value => Number.isFinite(value))\n      .sort((a, b) => a - b);\n    if (!prices.length) {\n      const stored = `${event?.lowestTicketPriceDisplay || ''}`.trim();\n      return stored || 'View tickets';\n    }\n    const value = prices[0];\n    return value === 0 ? 'From \u00A30' : `From ${formatMoney(value).replace('.00', '')}`;\n  }\n\n  function eventCard(event) {\n    const image = imageUrl(event) ? `<img src=\"${escapeHtml(imageUrl(event))}\" alt=\"${escapeHtml(event.name)} event artwork\" loading=\"lazy\">` : '';\n    const venue = event.venueName || event?.venue?.name || 'Venue coming soon';\n    const time = formatTimeFromRaw(event?.start?.local || event?.start?.utc);\n    return `\n      <a class=\"otc-event-card\" href=\"${escapeHtml(eventPageUrl(event))}\" aria-label=\"View ${escapeHtml(event.name)}\">\n        <span class=\"otc-event-art\">${image}</span>\n        <span class=\"otc-event-body\">\n          <span class=\"otc-event-title\">${escapeHtml(event.name || 'Orbit Event')}</span>\n          ${event.publicTagEnabled && event.publicTag ? publicSalesBadge(event,'otc-event-card-sales-tag') : ``}\n          <span class=\"otc-event-date\">${escapeHtml(formatDate(event))}${time ? ', ' + escapeHtml(time) : ''}</span>\n          <span class=\"otc-event-meta\">${escapeHtml(venue)}</span>\n          <span class=\"otc-price-line\">${escapeHtml(lowestPrice(event))}</span>\n        </span>\n      </a>`;\n  }\n\n  function selectedCounts() {\n    let qty = 0;\n    purchasableOptions(currentEvent || {}).forEach(option => qty += selectedTickets.get(option.id) || 0);\n    return qty;\n  }\n\n  function modalProgress(current) {\n    const steps = [\n      ['tickets', 'Tickets'],\n      ['review', 'Review'],\n      ['value', 'Upgrade'],\n      ['checkout', 'Checkout']\n    ];\n    return `<div class=\"otc-stepper\" aria-label=\"Checkout progress\">${steps.map(([key, label]) => `<span class=\"${key === current ? 'is-current' : ''} ${steps.findIndex(s => s[0] === key) < steps.findIndex(s => s[0] === current) ? 'is-done' : ''}\"><i></i>${label}</span>`).join('')}</div>`;\n  }\n\n  function teaserText(value, length) {\n    const text = stripHtml(value || '');\n    if (!text) return '';\n    if (text.length <= length) return text;\n    return text.slice(0, length).replace(/\\s+\\S*$/, '') + '\u2026';\n  }\n\n  function ticketRows(event) {\n    const options = availableTicketOptions(event);\n    if (!options.length) {\n      return '<div class=\"otc-ticket-empty\">Ticket options are being prepared for this event.</div>';\n    }\n    return options.map(option => {\n      const state = option?.salesStatus?.state || 'on_sale';\n      const disabled = !ticketCanBeSelected(option);\n      const selected = selectedTickets.get(option.id) || 0;\n      const price = option.free ? 'Free' : (option.priceDisplay || formatMoney(option.priceNumber));\n      const fullDescription = option.description || stripHtml(option.descriptionHtml || '');\n      const teaser = fullDescription ? `<p class=\"otc-ticket-teaser\">${escapeHtml(teaserText(fullDescription, 132))}</p>` : '';\n      const detailId = `otc-ticket-desc-${String(option.id || '').replace(/[^a-zA-Z0-9_-]/g, '')}`;\n      return `\n        <article class=\"otc-ticket-option ${selected ? 'is-selected' : ''} ${disabled ? 'is-disabled' : ''}\">\n          <div class=\"otc-ticket-top\">\n            <h3>${escapeHtml(option.name)}</h3>\n            <div class=\"otc-qty-control\">\n              <button type=\"button\" data-ticket-minus=\"${escapeHtml(option.id)}\" ${disabled || selected <= 0 ? 'disabled' : ''}>\u2212</button>\n              <span>${selected}</span>\n              <button type=\"button\" data-ticket-plus=\"${escapeHtml(option.id)}\" ${disabled || selected >= Number(option.maxQuantity || 10) ? 'disabled' : ''}>+</button>\n            </div>\n          </div>\n          <div class=\"otc-ticket-divider\"></div>\n          <p class=\"otc-ticket-price\"><strong>${escapeHtml(price)}</strong>${!option.free ? ' <span>+ \u00A31.00 ticket issue fee</span>' : ''}</p>\n          <p class=\"otc-ticket-status\">${escapeHtml(ticketStatus(option))}</p>\n          ${option.salesStart ? `<p class=\"otc-ticket-window\">Sales start: ${escapeHtml(new Date(option.salesStart).toLocaleString('en-GB', { dateStyle: 'medium', timeStyle: 'short' }))}</p>` : ''}\n          ${option.salesEnd ? `<p class=\"otc-ticket-window\">Sales end: ${escapeHtml(new Date(option.salesEnd).toLocaleString('en-GB', { dateStyle: 'medium', timeStyle: 'short' }))}</p>` : ''}\n          ${fullDescription ? `<div class=\"otc-ticket-desc-wrap\"><p id=\"${detailId}\" class=\"otc-ticket-description is-collapsed\" data-full-description=\"${escapeHtml(fullDescription)}\">${escapeHtml(teaserText(fullDescription, 132))}</p>${fullDescription.length > 132 ? `<button class=\"otc-see-details\" type=\"button\" aria-expanded=\"false\" aria-controls=\"${detailId}\" data-ticket-desc-toggle=\"${detailId}\">See full details</button>` : ''}</div>` : ''}\n        </article>`;\n    }).join('');\n  }\n\n  function addOnRows(event) {\n    const addOns = availableAddOnOptions(event);\n    if (!addOns.length) return '';\n    return `\n      <section class=\"otc-addons-section\">\n        <div class=\"otc-addons-heading\">\n          <p class=\"otc-summary-eyebrow\">Enhance your visit</p>\n          <h3>Orbit Mystery Box add-ons</h3>\n          <p>Make your show day feel even more special with official Orbit extras from the Eventbrite listing.</p>\n        </div>\n        ${addOns.map(option => {\n          const disabled = !ticketCanBeSelected(option);\n          const selected = selectedTickets.get(option.id) || 0;\n          const price = option.free ? 'Free' : (option.priceDisplay || formatMoney(option.priceNumber));\n          let descText = option.description || stripHtml(option.descriptionHtml || '');\n          const optionIdentity = String(option?.name || '').toLowerCase();\n          // Orbit's verified 1-in-2 slab rule applies to every official Mystery Box,\n          // including legacy Eventbrite descriptions still carrying 1-in-4 copy.\n          if (optionIdentity.includes('mystery box')) {\n            descText = String(descText || '')\n              .replace(/\\b1\\s*(?:in|[-\u2013\u2014])\\s*4\\b/gi, '1 in 2')\n              .replace(/\\bone\\s+in\\s+four\\b/gi, '1 in 2');\n          }\n          const desc = descText ? `<p class=\"otc-addon-description\">${escapeHtml(descText)}</p>` : '';\n          const addOnImageUrl = option.imageUrl || option.image_url || option.pictureUrl || option.picture_url || imageFromHtml(option.descriptionHtml || '') || addOnFallbackImageUrl;\n          const image = addOnImageUrl ? `<div class=\"otc-addon-image\"><img src=\"${escapeHtml(addOnImageUrl)}\" alt=\"${escapeHtml(option.name)}\" loading=\"lazy\"></div>` : '';\n          return `\n            <article class=\"otc-addon-card ${selected ? 'is-selected' : ''} ${disabled ? 'is-disabled' : ''}\">\n              ${image}\n              <div class=\"otc-addon-content\">\n                <div class=\"otc-addon-copy\">\n                  <span class=\"otc-addon-pill\">Event add-on</span>\n                  <h4>${escapeHtml(option.name)}</h4>\n                  ${desc || '<p class=\"otc-addon-description\">Add an official Orbit show-day extra to your ticket order.</p>'}\n                </div>\n                <div class=\"otc-addon-buy\">\n                  <strong>${escapeHtml(price)}</strong>\n                  <div class=\"otc-qty-control\">\n                    <button type=\"button\" data-ticket-minus=\"${escapeHtml(option.id)}\" ${disabled || selected <= 0 ? 'disabled' : ''}>\u2212</button>\n                    <span>${selected}</span>\n                    <button type=\"button\" data-ticket-plus=\"${escapeHtml(option.id)}\" ${disabled || selected >= Number(option.maxQuantity || 10) ? 'disabled' : ''}>+</button>\n                  </div>\n                </div>\n              </div>\n            </article>`;\n        }).join('')}\n        <div class=\"otc-club-soft-sell\">\n          <strong>Love Orbit extras?</strong>\n          <span>The Orbit Collectors Club is the premium monthly experience, with a much richer collectors parcel, free show entry, member rewards and more.</span>\n          <a class=\"otc-club-home-link\" href=\"https://orbitcollectorsclub.com/\" target=\"_blank\" rel=\"noopener noreferrer\">Explore Orbit Collectors Club \u2192</a>\n        </div>\n      </section>`;\n  }\n\n\n  function orderTotals(event) {\n    const options = purchasableOptions(event);\n    let ticketTotal = 0;\n    let fees = 0;\n    let qty = 0;\n    const lines = [];\n    options.forEach(option => {\n      const count = selectedTickets.get(option.id) || 0;\n      if (!count) return;\n      qty += count;\n      const price = Number(option.priceNumber || 0);\n      const fee = option.free || isAddOnTicket(option) ? 0 : Number(option.ticketIssueFee ?? 1);\n      ticketTotal += count * price;\n      fees += count * fee;\n      lines.push({ name: option.name, count, ticketClassId: option.id, price, fee, total: count * price, feeTotal: count * fee, addOn: isAddOnTicket(option) });\n    });\n    const total = Number((ticketTotal + fees).toFixed(2));\n    const discountRate = orbitDiscountCode ? Math.max(0,Math.min(100,Number(orbitDiscountPercentage||0))) : 0;\n    const discountValue = Number((total * (discountRate / 100)).toFixed(2));\n    const payableTotal = Math.max(0, Number((total - discountValue).toFixed(2)));\n    return { qty, ticketTotal: Number(ticketTotal.toFixed(2)), fees: Number(fees.toFixed(2)), total, discountRate, discountValue, payableTotal, lines };\n  }\n\n  function orderSummary(event) {\n    const totals = orderTotals(event);\n    if (!totals.qty) {\n      return `\n        <aside class=\"otc-modal-summary otc-modal-summary-empty\">\n          <div class=\"otc-modal-image\">${imageUrl(event) ? `<img src=\"${escapeHtml(imageUrl(event))}\" alt=\"${escapeHtml(event.name)} artwork\">` : ''}</div>\n          <div class=\"otc-empty-cart\" aria-hidden=\"true\"></div>\n        </aside>`;\n    }\n    return `\n      <aside class=\"otc-modal-summary\">\n        <div class=\"otc-modal-image\">${imageUrl(event) ? `<img src=\"${escapeHtml(imageUrl(event))}\" alt=\"${escapeHtml(event.name)} artwork\">` : ''}</div>\n        <div class=\"otc-summary-box otc-premium-summary-box\">\n          <p class=\"otc-summary-eyebrow\">Official Orbit Card Show checkout</p>\n          <h3>Your order</h3>\n          ${totals.lines.map(line => `\n            <div class=\"otc-summary-line\">\n              <span>${line.count} \u00D7 ${escapeHtml(line.name)}</span>\n              <strong>${formatMoney(line.total)}</strong>\n            </div>`).join('')}\n          <div class=\"otc-summary-line\"><span>Ticket issue fees</span><strong>${formatMoney(totals.fees)}</strong></div>\n          ${orbitDiscountCode ? `<div class=\"otc-summary-line otc-summary-discount\"><span>${escapeHtml(orbitDiscountCode)} \u00B7 ${escapeHtml(totals.discountRate)}% off</span><strong>-${formatMoney(totals.discountValue)}</strong></div>` : ''}\n          <div class=\"otc-summary-total\"><span>Total today</span><strong>${formatMoney(totals.payableTotal)}</strong></div>\n          <div class=\"otc-trust-stack\">\n            <span>\u2713 Official Orbit Card Show tickets</span>\n            <span>\u2713 Instant PDF delivery by email</span>\n            <span>\u2713 Secure checkout powered by Shopify</span>\n          </div>\n        </div>\n      </aside>`;\n  }\n\n\n  function basketReviewMarkup(event) {\n    const totals = orderTotals(event);\n    return `\n      <div class=\"otc-basket-review\">\n        <p class=\"otc-eyebrow\">Basket review</p>\n        <h2>Check your order before checkout.</h2>\n        <p class=\"otc-review-lead\"><strong class=\"otc-review-event-name\">${escapeHtml(event.name || 'Orbit event')}</strong><br>Make sure the ticket types, add-ons, quantities and total look right before you continue.</p>\n        <div class=\"otc-review-panel\">\n          <div class=\"otc-discount-box otc-discount-box-review\">\n            <label for=\"otc-discount-code-review\">Have a discount code?</label>\n            <div class=\"otc-discount-row\">\n              <input id=\"otc-discount-code-review\" type=\"text\" inputmode=\"text\" autocomplete=\"off\" spellcheck=\"false\" placeholder=\"Enter code\" value=\"${escapeHtml(orbitDiscountInputValue || orbitDiscountCode)}\" data-otc-discount-code>\n              <button class=\"otc-button otc-button-ghost otc-discount-update\" type=\"button\" data-otc-update-discount>Apply code</button>\n            </div>\n            ${orbitDiscountError ? `<p class=\"otc-discount-error\" role=\"alert\">${escapeHtml(orbitDiscountError)}</p>` : (orbitDiscountCode ? `<p class=\"otc-discount-confirmed\">${escapeHtml(orbitDiscountMessage || `Code ${orbitDiscountCode.toUpperCase()} applied.`)}</p>` : `<p>Apply it here before continuing to secure checkout.</p>`)}\n          </div>\n          ${totals.lines.map(line => `\n            <div class=\"otc-review-line ${line.addOn ? 'otc-review-addon-line' : ''}\">\n              <div><strong>${escapeHtml(line.name)}</strong><span>${line.addOn ? 'Event add-on' : 'Admission ticket'} \u00B7 Quantity: ${line.count}</span></div>\n              <b>${formatMoney(line.total)}</b>\n            </div>`).join('')}\n          <div class=\"otc-review-line\"><div><strong>Ticket issue fees</strong><span>\u00A31.00 per paid admission ticket</span></div><b>${formatMoney(totals.fees)}</b></div>\n          ${orbitDiscountCode ? `<div class=\"otc-review-line otc-review-discount\"><div><strong>Discount code</strong><span>${escapeHtml(orbitDiscountCode.toUpperCase())} \u00B7 ${escapeHtml(totals.discountRate)}% off</span></div><b>-${formatMoney(totals.discountValue)}</b></div>` : ''}\n          <div class=\"otc-review-total\"><span>Total today</span><strong>${formatMoney(totals.payableTotal)}</strong></div>\n        </div>\n        <div class=\"otc-value-actions\">\n          <button class=\"otc-button otc-button-ghost\" type=\"button\" data-otc-back-to-tickets>Back to tickets</button>\n          <button class=\"otc-button otc-button-primary\" type=\"button\" data-otc-value-check>Continue</button>\n        </div>\n      </div>`;\n  }\n\n  function upgradeBasketCompatibility(event) {\n    const selected = purchasableOptions(event || {}).map(option => ({\n      option,\n      quantity: selectedTickets.get(option.id) || 0\n    })).filter(item => item.quantity > 0);\n    const admissionQuantity = selected.filter(item => !item.option.addOn).reduce((sum,item)=>sum+item.quantity,0);\n    const addOnQuantity = selected.filter(item => item.option.addOn).reduce((sum,item)=>sum+item.quantity,0);\n    return {\n      compatible: admissionQuantity >= 1 && admissionQuantity <= 2 && addOnQuantity === 0,\n      admissionQuantity,\n      addOnQuantity\n    };\n  }\n\n  function valueCheckMarkup(event) {\n    const totals = orderTotals(event);\n    const compatibility = upgradeBasketCompatibility(event);\n    const membershipPrice = 34.95;\n    const comparisonTotal = totals.payableTotal;\n    const more = Math.max(0, membershipPrice - comparisonTotal);\n    const moreText = more > 0 ? `${formatMoney(more)} more today` : `less than this ticket basket today`;\n    const membershipAction = `<button class=\"otc-button otc-button-primary\" type=\"button\" data-otc-upgrade>Choose membership</button>`;\n    return `\n      <div class=\"otc-value-check otc-gold-invite otc-v56-upgrade-page\">\n        ${modalProgress('value')}\n        <div class=\"otc-upgrade-interruption\"><div class=\"otc-upgrade-interruption-copy\"><span>Optional upgrade</span><h2>Wait... before you buy your tickets</h2><p>Your selected tickets are still waiting for you. This is a quick optional chance to upgrade to Orbit Collectors Club. To keep buying tickets as normal, use Continue with tickets at the bottom of this page.</p></div></div>\n        <section class=\"otc-v56-upgrade-hero\">\n          <div class=\"otc-v341-upgrade-hero-copy\">\n            <p class=\"otc-eyebrow\">Orbit Collectors Club Membership</p>\n            <h3>Turn one show day into a full collector experience.</h3>\n            <img class=\"otc-v350-upgrade-hero-image-mobile\" src=\"https://orbit-membership-service.onrender.com/api/public/live-website-image/homepage_hero\" alt=\"Orbit Collectors Club monthly parcel\" width=\"1122\" height=\"1402\" loading=\"lazy\" decoding=\"async\" data-orbit-managed-key=\"homepage_hero\">\n            <p class=\"otc-value-lead\">You are already coming to an Orbit Card Show. Membership gives you the monthly box, included show entry, guest access, prize draw entry and Golden Ticket chances behind the event.</p>\n          </div>\n          <img class=\"otc-v341-upgrade-hero-image otc-v350-upgrade-hero-image-desktop\" src=\"https://orbit-membership-service.onrender.com/api/public/live-website-image/homepage_hero\" alt=\"Orbit Collectors Club monthly parcel\" width=\"1122\" height=\"1402\" loading=\"lazy\" decoding=\"async\" data-orbit-managed-key=\"homepage_hero\">\n        </section>\n        <section class=\"otc-v56-benefit-stack\">\n          <article><span>\uD83D\uDCE6</span><strong>Monthly Collector Box</strong><p>Average value <b>\u00A330+</b>. Boxes typically range around <b>\u00A325\u2013\u00A3100+</b>, with graded cards, booster packs, promos, accessories and surprise Orbit extras.</p></article>\n          <article><span>\uD83C\uDF9F</span><strong>Every Orbit show included</strong><p>Reserve your member ticket from the Members Area while your membership is active. No more buying Orbit tickets one event at a time.</p></article>\n          <article><span>\uD83D\uDC65</span><strong>Bring one guest</strong><p>Your membership also includes one guest ticket, so every show can become a shared collecting day.</p></article>\n          <article><span>\uD83C\uDFC6</span><strong>Monthly prize draw</strong><p>Every active member is automatically entered into the monthly members draw.</p></article>\n          <article><span>\u2B50</span><strong>Golden Ticket chance</strong><p>Every monthly box gives you a chance to find a Golden Ticket moment and unlock something special.</p></article>\n          <article><span>\uD83D\uDC8E</span><strong>Member-only rewards</strong><p>Access member perks, surprises, future offers and Orbit-only collector experiences as the club grows.</p></article>\n        </section>\n        <section class=\"otc-v56-value-close\">\n          <div class=\"otc-v56-value-card\">\n            <p class=\"otc-eyebrow\">Your choice today</p>\n            <h3>You are already spending ${formatMoney(comparisonTotal)} on this order.</h3>\n            <p>For just <strong>${escapeHtml(moreText)}</strong>, you can unlock the full Orbit Collectors Club Membership instead of only buying tickets for today.</p>\n          </div>\n          <div class=\"otc-v56-price-lines\">\n            <div><span>Today\u2019s basket</span><strong>${formatMoney(comparisonTotal)}</strong><small>Admission for this order only</small></div>\n            <div><span>Collectors Club Membership</span><strong>\u00A334.95</strong><small>Box, shows, guest ticket, draw, Golden Ticket chance and rewards</small></div>\n          </div>\n        </section>\n        <div class=\"otc-value-actions otc-gold-actions\">\n          ${membershipAction}\n          <button class=\"otc-button otc-button-ghost\" type=\"button\" data-otc-continue>Continue with tickets</button>\n          <button class=\"otc-back-review-link\" type=\"button\" data-otc-back-to-review>Back to Review</button>\n        </div>\n      </div>`;\n  }\n\n  function checkoutPreparingMarkup(event) {\n    const totals = orderTotals(event);\n    return `\n      <div class=\"otc-checkout-preparing otc-checkout-preparing-compact\">\n        <p class=\"otc-eyebrow\">Secure checkout</p>\n        <h2>Opening secure checkout.</h2>\n        <p class=\"otc-checkout-lead\">Your Orbit order is ready. We\u2019re sending you to Shopify to finish safely.</p>\n        <div class=\"otc-checkout-loader\" aria-hidden=\"true\"><span></span><span></span><span></span></div>\n        <div class=\"otc-checkout-total\"><span>Total today</span><strong>${formatMoney(totals.payableTotal)}</strong></div>\n      </div>`;\n  }\n\n  function modalMarkup(event, step) {\n    const title = escapeHtml(event.name || 'Orbit Event');\n    const dateLine = `${formatDate(event)}${formatEventTime(event) ? ' \u00B7 ' + formatEventTime(event) : ''}`;\n    if (step === 'review') {\n      return `\n        <div class=\"otc-modal-header\">\n          <h2 id=\"otc-modal-title\">${title}</h2>\n          <p>${escapeHtml(dateLine)}</p>\n        </div>\n        ${modalProgress('review')}\n        ${basketReviewMarkup(event)}`;\n    }\n    if (step === 'value') {\n      return `\n        <div class=\"otc-modal-header\">\n          <h2 id=\"otc-modal-title\">${title}</h2>\n          <p>${escapeHtml(dateLine)}</p>\n        </div>\n        ${valueCheckMarkup(event)}`;\n    }\n    if (step === 'checkout') {\n      return `\n        <div class=\"otc-modal-header\">\n          <h2 id=\"otc-modal-title\">${title}</h2>\n          <p>${escapeHtml(dateLine)}</p>\n        </div>\n        ${modalProgress('checkout')}\n        ${checkoutPreparingMarkup(event)}`;\n    }\n    const totals = orderTotals(event);\n    return `\n      <div class=\"otc-modal-header\">\n        <h2 id=\"otc-modal-title\">${title}</h2>\n        <p>${escapeHtml(dateLine)}</p>\n      </div>\n      ${modalProgress('tickets')}\n      <div class=\"otc-modal-sales-badge-row\">${publicSalesBadge(event,'otc-public-sales-status')}</div>\n      <div class=\"otc-modal-layout\">\n        <div class=\"otc-modal-tickets\">\n          <div class=\"otc-official-ticket-heading\"><h3>Official Tickets</h3></div>\n          ${ticketRows(event)}\n          ${addOnRows(event)}\n        </div>\n        ${orderSummary(event)}\n      </div>\n      <div class=\"otc-modal-footer\">\n        <button class=\"otc-button otc-button-primary\" type=\"button\" data-otc-checkout ${totals.qty ? '' : 'disabled'}>Review basket</button>\n      </div>`;\n  }\n\n  function buildTicketSelectionQuery(event) {\n    const params = new URLSearchParams();\n    params.set('orbit_source', 'ticket_centre');\n    availableTicketOptions(event || {}).forEach(option => {\n      const qty = selectedTickets.get(option.id) || 0;\n      if (qty > 0) params.append('ticket_' + option.id, String(qty));\n    });\n    return params.toString();\n  }\n\n  function selectedPayload() {\n    return purchasableOptions(currentEvent || {})\n      .map(option => ({ ticketClassId: option.id, quantity: selectedTickets.get(option.id) || 0 }))\n      .filter(item => item.quantity > 0);\n  }\n\n  function currentDiscountCode() {\n    const active = document.activeElement && document.activeElement.matches && document.activeElement.matches('[data-otc-discount-code]') ? document.activeElement : null;\n    const input = active || document.querySelector('.otc-basket-review [data-otc-discount-code]') || document.querySelector('[data-otc-discount-code]');\n    return input ? String(input.value || '').trim() : (orbitDiscountInputValue || orbitDiscountCode);\n  }\n\n  async function validateDiscountFromReview() {\n    const code=currentDiscountCode().trim().toUpperCase();\n    orbitDiscountInputValue=code;\n    orbitDiscountError='';\n    orbitDiscountMessage='';\n    if(!code){\n      orbitDiscountCode='';\n      orbitDiscountPercentage=0;\n      openTicketModal('review',{scrollTop:false});\n      return false;\n    }\n    try{\n      const response=await fetch(`${apiBase}/api/public/ticket-discount/validate`,{\n        method:'POST',\n        headers:{'Content-Type':'application/json',Accept:'application/json'},\n        body:JSON.stringify({code})\n      });\n      const data=await response.json().catch(()=>({}));\n      if(!response.ok || !data.valid){\n        orbitDiscountCode='';\n        orbitDiscountPercentage=0;\n        orbitDiscountError=data.message || data.error || 'That discount code cannot be used.';\n        openTicketModal('review',{scrollTop:false});\n        return false;\n      }\n      orbitDiscountCode=String(data.code||code).toUpperCase();\n      orbitDiscountInputValue=orbitDiscountCode;\n      orbitDiscountPercentage=Number(data.percentage||0);\n      orbitDiscountMessage=data.message || `${orbitDiscountCode} applied \u2014 ${orbitDiscountPercentage}% off.`;\n      openTicketModal('review',{scrollTop:false});\n      return true;\n    }catch(error){\n      orbitDiscountCode='';\n      orbitDiscountPercentage=0;\n      orbitDiscountError='Could not check that discount code. Please try again.';\n      openTicketModal('review',{scrollTop:false});\n      return false;\n    }\n  }\n\n  async function continueToShopifyCheckout() {\n    if (!currentEvent || !selectedCounts()) return;\n    openTicketModal('checkout');\n    try {\n      const totals=orderTotals(currentEvent);\n      const handoffContents=totals.lines.map(function(line){return {id:String(line.ticketClassId||line.name),quantity:Number(line.count||0),item_price:Number(line.price||0)};});\n      trackTicketFunnel('ticket_checkout_handoff','',currentEvent,{\n        value:Number(totals.payableTotal||0),\n        num_items:Number(totals.qty||0),\n        coupon:String(orbitDiscountCode||''),\n        contents:handoffContents,\n        content_ids:handoffContents.map(function(item){return item.id;}),\n        content_type:'product'\n      },'shopify:'+String(totals.qty||0)+':'+String(totals.payableTotal||0));\n      const response = await fetch(`${apiBase}/api/public/ticket-checkout/shopify`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify({\n          eventbriteEventId: eventIdentifier(currentEvent),\n          tickets: selectedPayload(),\n          discountCode: orbitDiscountCode,\n          referralCode: (function(){\n            try {\n              const vendorCode=vendorReferralCode(currentEvent);if(vendorCode)return vendorCode;\n              const explicit=String(new URLSearchParams(window.location.search||'').get('ref')||'').trim();\n              if(explicit&&!isVendorReferralCode(explicit))localStorage.setItem('orbit_referral_code',explicit);\n              return explicit&&!isVendorReferralCode(explicit)?explicit:(localStorage.getItem('orbit_referral_code')||'');\n            } catch (_) { return ''; }\n          })(),\n          referralClickId: vendorReferralClickId(currentEvent),\n          tracking: ticketAttributionPayload()\n        })\n      });\n      const data = await response.json();\n      if (!response.ok || !data.success || !data.checkoutUrl) throw new Error(data.error || 'Could not open Shopify checkout.');\n\n      // V448.7: this is the genuine ticket \u2192 Shopify handoff. Fire the browser\n      // InitiateCheckout on the Orbit Breaks ticket pixel using the exact same\n      // event_id as Orbit's server-side CAPI call so Meta can deduplicate them.\n      const metaEventId='orbit_ticket_checkout_started_'+String(data.checkoutId||'');\n      trackTicketFunnel('checkout_handoff','InitiateCheckout',currentEvent,{\n        value:Number(totals.payableTotal||0),\n        num_items:Number(totals.qty||0),\n        contents:handoffContents,\n        content_ids:handoffContents.map(function(item){return item.id;}),\n        content_type:'product',\n        orbit_checkout_id:String(data.checkoutId||'')\n      },String(data.checkoutId||''),metaEventId);\n\n      setTimeout(() => { scrollJourneyToTop();\n      window.location.href = data.checkoutUrl; }, 900);\n    } catch (error) {\n      alert(error.message || 'Could not open Shopify checkout.');\n      openTicketModal('value');\n    }\n  }\n\n  async function viewMembershipUpgrade() {\n    const button = document.querySelector('[data-otc-upgrade]');\n    if(currentEvent){\n      const totals=orderTotals(currentEvent);\n      trackTicketFunnel('membership_upgrade_handoff','Lead',currentEvent,{\n        value:Number(totals.payableTotal||0),\n        content_name:'Orbit Collectors Club upgrade from ticket journey',\n        content_category:'Membership Upgrade'\n      },'membership-upgrade');\n    }\n    if (button) { button.disabled = true; button.textContent = 'Opening membership checkout...'; }\n    try {\n      const response = await fetch(`${apiBase}/api/public/gold-upgrade/start`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify({ eventbriteEventId: currentEvent ? eventIdentifier(currentEvent) : null, tickets: selectedPayload() })\n      });\n      const data = await response.json();\n      if (!response.ok || !data.success || !data.checkoutUrl) throw new Error(data.error || 'Could not open Orbit membership checkout.');\n      setTimeout(() => { window.location.href = data.checkoutUrl; }, 450);\n    } catch (error) {\n      if (button) { button.disabled = false; button.textContent = 'Choose membership'; }\n      window.alert(error.message || 'Could not open Orbit membership checkout. Your ticket basket is unchanged.');\n      openTicketModal('review');\n    }\n  }\n  function journeyScrollElement() {\n    if (!modalContent) return null;\n    const candidates = [\n      modalContent.querySelector('.otc-modal-tickets'),\n      modalContent.querySelector('.otc-modal-layout'),\n      modalContent.querySelector('.otc-basket-review'),\n      modalContent.querySelector('.otc-value-check'),\n      modalContent\n    ].filter(Boolean);\n    return candidates.find(element => element.scrollHeight > element.clientHeight + 2) || candidates[0] || null;\n  }\n\n  function modalScrollSurfaces() {\n    if (!modalContent) return [];\n    const dialog = modalContent.closest('.otc-modal-dialog');\n    const surfaces = [\n      modal,\n      dialog,\n      modalContent,\n      ...modalContent.querySelectorAll('.otc-modal-layout, .otc-modal-tickets, .otc-modal-summary, .otc-basket-review, .otc-value-check, .otc-gold-invite')\n    ].filter(Boolean);\n    return [...new Set(surfaces)];\n  }\n\n  function setSurfaceScrollTop(element, value) {\n    if (!element) return;\n    try { element.scrollTop = value; } catch (error) {}\n    try { element.scrollTo({ top: value, left: 0, behavior: 'auto' }); } catch (error) {}\n  }\n\n  function scrollJourneyToTop() {\n    const run = () => modalScrollSurfaces().forEach(element => setSurfaceScrollTop(element, 0));\n    run();\n    requestAnimationFrame(() => {\n      run();\n      requestAnimationFrame(run);\n    });\n    [25, 75, 160, 320].forEach(delay => setTimeout(run, delay));\n  }\n\n  function openTicketModal(step, options = {}) {\n    if (!currentEvent || !modal || !modalContent) return;\n    const previousScroller = journeyScrollElement();\n    const previousScrollTop = previousScroller ? previousScroller.scrollTop : 0;\n    modalContent.innerHTML = modalMarkup(currentEvent, step || 'tickets');\n    modal.hidden = false;\n    scheduleBadgeNormalisationV320(modal);\n    document.documentElement.classList.add('otc-modal-open');\n    if (options.scrollTop === false) {\n      const restore = () => {\n        const nextScroller = journeyScrollElement();\n        if (nextScroller) nextScroller.scrollTop = previousScrollTop;\n      };\n      restore();\n      requestAnimationFrame(restore);\n      setTimeout(restore, 20);\n    } else {\n      scrollJourneyToTop();\n    }\n  }\n\n  function closeTicketModal() {\n    if (!modal) return;\n    modal.hidden = true;\n    document.documentElement.classList.remove('otc-modal-open');\n  }\n\n\n  function normalisePublicBadgePlacementV320(scope){\n    const rootScope=scope||document;\n\n    const detail=rootScope.querySelector?.('.otc-event-detail');\n    if(detail){\n      const titleBox=detail.querySelector('.otc-eb-main-title');\n      const title=titleBox?.querySelector('h1');\n      const organiser=titleBox?.querySelector('.otc-eb-organizer-row');\n      let row=titleBox?.querySelector('.otc-detail-sales-badge-row');\n      let badge=row?.querySelector('.otc-public-sales-tag') || detail.querySelector('.otc-eb-banner .otc-public-sales-tag');\n      if(titleBox&&title&&organiser&&badge){\n        if(!row){\n          row=document.createElement('div');\n          row.className='otc-detail-sales-badge-row';\n        }\n        badge.classList.add('otc-detail-sales-badge');\n        badge.style.removeProperty('position');\n        row.appendChild(badge);\n        if(title.nextSibling!==row)title.insertAdjacentElement('afterend',row);\n      }\n    }\n\n    const modalRoot=rootScope.querySelector?.('.otc-modal-dialog') || rootScope.closest?.('.otc-modal-dialog');\n    if(modalRoot){\n      const progress=modalRoot.querySelector('.otc-stepper');\n      const heading=modalRoot.querySelector('.otc-official-ticket-heading');\n      let row=modalRoot.querySelector('.otc-modal-sales-badge-row');\n      let badge=row?.querySelector('.otc-public-sales-status,.otc-public-sales-tag') || heading?.querySelector('.otc-public-sales-status,.otc-public-sales-tag');\n      if(progress&&heading&&badge){\n        if(!row){\n          row=document.createElement('div');\n          row.className='otc-modal-sales-badge-row';\n        }\n        badge.classList.add('otc-public-sales-status');\n        row.appendChild(badge);\n        const desktop=window.matchMedia('(min-width: 761px)').matches;\n        if(desktop){\n          heading.appendChild(row);\n          row.dataset.badgePlacement='desktop-heading';\n        }else{\n          progress.insertAdjacentElement('afterend',row);\n          row.dataset.badgePlacement='mobile-progress';\n        }\n      }\n    }\n  }\n\n  function scheduleBadgeNormalisationV320(scope){\n    normalisePublicBadgePlacementV320(scope);\n    requestAnimationFrame(function(){normalisePublicBadgePlacementV320(scope);});\n    setTimeout(function(){normalisePublicBadgePlacementV320(scope);},30);\n  }\n\n  window.OrbitTicketCentreV320={\n    release:'V320.0.0',\n    normalise:function(){scheduleBadgeNormalisationV320(document);}\n  };\n  window.addEventListener('resize',function(){scheduleBadgeNormalisationV320(document);},{passive:true});\n\n\n  function faqMarkup(event) {\n    const faqs = Array.isArray(event.faqs) ? event.faqs : [];\n    if (!faqs.length) return '';\n    return `\n      <section class=\"otc-flow-section\">\n        <h2>Event FAQ</h2>\n        <div class=\"otc-faq-list\">\n          ${faqs.map(faq => `\n            <details class=\"otc-faq-item\">\n              <summary>${escapeHtml(faq.question || 'Question')}</summary>\n              <div>${sanitizeHtml(faq.answerHtml || escapeHtml(faq.answer || '').replace(/\\n/g, '<br>'))}</div>\n            </details>`).join('')}\n        </div>\n      </section>`;\n  }\n\n\n  function normaliseDescriptionText(value) {\n    return String(value || '')\n      .replace(/<[^>]*>/g, ' ')\n      .replace(/&nbsp;/gi, ' ')\n      .replace(/&amp;/gi, '&')\n      .replace(/\\s+/g, ' ')\n      .trim();\n  }\n\n  function stripExactEventSummary(html, summary) {\n    const summaryText = normaliseDescriptionText(summary);\n    if (!html || !summaryText) return html || '';\n    const wrap = document.createElement('div');\n    wrap.innerHTML = html;\n    const firstMeaningful = Array.from(wrap.children).find(node => normaliseDescriptionText(node.textContent));\n    if (firstMeaningful) {\n      const firstText = normaliseDescriptionText(firstMeaningful.textContent);\n      if (firstText === summaryText || firstText.startsWith(summaryText)) {\n        firstMeaningful.remove();\n        return wrap.innerHTML;\n      }\n    }\n    const plain = normaliseDescriptionText(wrap.textContent);\n    if (plain.startsWith(summaryText)) {\n      const rawText = String(wrap.textContent || '').trim();\n      const remainder = rawText.slice(rawText.indexOf(summaryText) + summaryText.length).trim();\n      return escapeHtml(remainder).replace(/\\n/g, '<br>');\n    }\n    return html;\n  }\n\n  function eventDescriptionMarkup(event) {\n    const htmlCandidates = [\n      event.descriptionHtml,\n      event.description_html,\n      event?.description?.html,\n      event?.rawEvent?.description?.html,\n      event?.raw_event?.description?.html,\n      event?.rawEvent?.description_html,\n      event?.raw_event?.description_html,\n    ].filter(Boolean);\n    const textCandidates = [\n      event.descriptionText,\n      event.description_text,\n      event?.description?.text,\n      event?.rawEvent?.description?.text,\n      event?.raw_event?.description?.text,\n      event?.rawEvent?.description_text,\n      event?.raw_event?.description_text,\n    ].filter(Boolean);\n    const bestHtml = htmlCandidates.map(String).sort((a, b) => b.length - a.length)[0];\n    if (bestHtml) return stripExactEventSummary(sanitizeHtml(bestHtml), event.summary);\n    const bestText = textCandidates.map(String).sort((a, b) => b.length - a.length)[0];\n    if (bestText) {\n      const summaryText = normaliseDescriptionText(event.summary);\n      const fullText = String(bestText);\n      const cleanText = summaryText && normaliseDescriptionText(fullText).startsWith(summaryText)\n        ? fullText.replace(String(event.summary || ''), '').trim()\n        : fullText;\n      return escapeHtml(cleanText).replace(/\\n/g, '<br>');\n    }\n    return '';\n  }\n\n\n  function removeOverviewTeaser(html) {\n    const wrap = document.createElement('div');\n    wrap.innerHTML = html || '';\n    const first = wrap.querySelector('p');\n    const paragraphs = wrap.querySelectorAll('p');\n    if (first && paragraphs.length > 1) {\n      const text = String(first.textContent || '').trim();\n      if (text && text.length <= 260) first.remove();\n    }\n    return wrap.innerHTML;\n  }\n\n  function detailMarkup(event) {\n    const image = imageUrl(event) ? `<img src=\"${escapeHtml(imageUrl(event))}\" alt=\"${escapeHtml(event.name)} event artwork\">` : '';\n    const venue = event.venueName || event?.venue?.name || 'Venue coming soon';\n    const address = fullAddress(event);\n    const mapHref = address ? `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}` : '';\n    const cleanDescription = eventDescriptionMarkup(event);\n    const organizerName = event.organizerName || event?.organizer?.name || 'Orbit Card Show';\n    const entryValue=Number(String(lowestPrice(event)).replace(/[^0-9.]/g,'')||0);\n    trackTicketFunnel('view_item','ViewContent',event,{\n      value:entryValue,\n      content_ids:[String(event?.id||event?.eventbriteEventId||event?.eventbriteId||'')],\n      content_type:'product'\n    },'detail');\n    return `\n      <article class=\"otc-event-detail otc-eventbrite-layout\">\n        <section class=\"otc-eb-hero\">\n          <div class=\"otc-eb-banner\">${image}</div>\n        </section>\n\n        <section class=\"otc-eb-summary\">\n          <div class=\"otc-eb-main-title\">\n            <h1>${escapeHtml(event.name || 'Orbit Event')}</h1>\n            <div class=\"otc-detail-sales-badge-row\">${publicSalesBadge(event,'otc-detail-sales-badge')}</div>\n            <div class=\"otc-eb-organizer-row\">\n              ${iconUrl ? `<img src=\"${escapeHtml(iconUrl)}\" alt=\"\" aria-hidden=\"true\">` : ''}\n              <div>\n                <span>by ${escapeHtml(organizerName)}</span>\n                <small>Official Orbit Card Show tickets</small>\n              </div>\n            </div>\n            <div class=\"otc-eb-facts\" aria-label=\"Event details\">\n              <span><i aria-hidden=\"true\">\uD83D\uDCCD</i><b>Venue</b><em>${escapeHtml(venue)}</em></span>\n              <span><i aria-hidden=\"true\">\uD83D\uDDD3</i><b>Date</b><em>${escapeHtml(formatLongDate(event))}</em></span>\n              <span><i aria-hidden=\"true\">\uD83D\uDD52</i><b>Time</b><em>${escapeHtml(formatEventTime(event) || 'Time coming soon')}</em></span>\n            </div>\n          </div>\n          <aside class=\"otc-eb-ticket-card\">\n            <div class=\"otc-eb-ticket-badge\">Official tickets</div>\n            <strong>${escapeHtml(lowestPrice(event))}</strong>\n            <span>${escapeHtml(formatDate(event))}${formatTimeFromRaw(event?.start?.local || event?.start?.utc) ? ' \u00B7 ' + escapeHtml(formatTimeFromRaw(event?.start?.local || event?.start?.utc)) : ''}</span>\n            <button class=\"otc-button otc-button-primary\" type=\"button\" data-otc-open-tickets>Get Tickets</button>\n          </aside>\n        </section>\n\n        <section class=\"otc-eb-content-grid\">\n          <main class=\"otc-eb-content-main\">\n            <section class=\"otc-flow-section otc-description-section\">\n              <h2>About this event</h2>\n              <div class=\"otc-description\">${cleanDescription || 'Full event details are being prepared. Use Get Tickets for the current Eventbrite listing.'}</div>\n            </section>\n\n            ${faqMarkup(event)}\n\n            <section class=\"otc-flow-section\">\n              <h2>Venue</h2>\n              <p class=\"otc-venue-name\">${escapeHtml(venue)}</p>\n              ${address ? `<p>${escapeHtml(address)}</p>` : '<p>Venue details will appear here once confirmed.</p>'}\n              ${mapHref ? `<div class=\"otc-map-preview\"><iframe title=\"Map showing ${escapeHtml(venue)}\" loading=\"lazy\" referrerpolicy=\"no-referrer-when-downgrade\" src=\"https://www.google.com/maps?q=${encodeURIComponent(address)}&output=embed\"></iframe></div><p><a class=\"otc-map-link\" href=\"${escapeHtml(mapHref)}\" target=\"_blank\" rel=\"noopener noreferrer\"><span aria-hidden=\"true\">\uD83D\uDCCD</span> Open in Google Maps</a></p>` : ''}\n            </section>\n          </main>\n\n        </section>\n        <div class=\"otc-mobile-ticket-bar\" data-otc-mobile-ticket-bar>\n          <div><strong>${escapeHtml(lowestPrice(event))}</strong><span>${escapeHtml(formatDate(event))}${formatTimeFromRaw(event?.start?.local || event?.start?.utc) ? ' \u00B7 ' + escapeHtml(formatTimeFromRaw(event?.start?.local || event?.start?.utc)) : ''}</span></div>\n          <button class=\"otc-button otc-button-primary\" type=\"button\" data-otc-open-tickets>Get Tickets</button>\n        </div>\n      </article>`;\n  }\n\n  function renderDetail(event, options) {\n    const shouldScroll = !options || options.scroll !== false;\n    currentEvent = event;\n    captureVendorReferral(event);\n    selectedTickets = new Map();\n    if (hubHero) hubHero.hidden = true;\n    if (hubView) hubView.hidden = true;\n    if (detailView) detailView.hidden = false;\n    if (detailLoadingEl) detailLoadingEl.hidden = true;\n    if (errorEl) errorEl.hidden = true;\n    if (detailEl) {\n      detailEl.innerHTML = detailMarkup(event);\n      scheduleBadgeNormalisationV320(detailEl);\n    }\n    if (shouldScroll) window.scrollTo({ top: 0, behavior: 'smooth' });\n  }\n\n  function renderHub(events) {\n    hubEvents = Array.isArray(events) ? events : [];\n    if (loadingEl) loadingEl.hidden = true;\n    if (errorEl) errorEl.hidden = true;\n    // Some published static-event templates intentionally omit this live hub\n    // container. Keep their authoritative static cards instead of crashing\n    // (or hiding those cards with no replacement to render).\n    if (!eventsEl) {\n      if (staticHubEl) staticHubEl.hidden = false;\n      return;\n    }\n    if (!hubEvents.length) {\n      eventsEl.innerHTML = '<div class=\"otc-error\">No public Orbit events are currently available.</div>';\n      return;\n    }\n    eventsEl.innerHTML = hubEvents.map(eventCard).join('');\n  }\n\n  const HUB_CACHE_KEY_V340='orbit-ticket-hub-events-v340';\n  const HUB_CACHE_TTL_MS_V340=30*60*1000;\n  function readHubCacheV340(){\n    try{\n      const cached=JSON.parse(localStorage.getItem(HUB_CACHE_KEY_V340)||'null');\n      if(!cached||!Array.isArray(cached.events)||!cached.events.length)return null;\n      if(Date.now()-Number(cached.savedAt||0)>HUB_CACHE_TTL_MS_V340)return null;\n      return cached.events;\n    }catch(_){return null;}\n  }\n  function writeHubCacheV340(events){\n    try{localStorage.setItem(HUB_CACHE_KEY_V340,JSON.stringify({savedAt:Date.now(),events}));}catch(_){}\n  }\n  async function loadEvents() {\n    const cached=readHubCacheV340();\n    const hasStaticHub=Boolean(staticHubEl);\n    if(hasStaticHub){\n      if(loadingEl)loadingEl.hidden=true;\n      if(eventsEl)eventsEl.hidden=true;\n    }else if(cached){\n      renderHub(cached);\n    }else if(loadingEl){\n      loadingEl.hidden=false;\n    }\n    try {\n      const controller=new AbortController();\n      const timeout=window.setTimeout(()=>controller.abort(),15000);\n      const response = await fetch(`${apiBase}/api/public/events?limit=100`, {\n        headers: { Accept: 'application/json' },\n        signal:controller.signal\n      }).finally(()=>window.clearTimeout(timeout));\n      const data = await response.json();\n      if (!response.ok || !data.success) throw new Error(data.error || 'Could not load Orbit events.');\n      const events=Array.isArray(data.events) ? data.events : [];\n      writeHubCacheV340(events);\n      if(hasStaticHub){\n        hubEvents=events;\n        const staticCount=staticHubEl.querySelectorAll('a.otc-event-card').length;\n        if(eventsEl && events.length>=staticCount && events.length){\n          staticHubEl.hidden=true;\n          eventsEl.hidden=false;\n          renderHub(events);\n        }\n      }else{\n        renderHub(events);\n      }\n    } catch (error) {\n      if (loadingEl) loadingEl.hidden = true;\n      if (!cached && errorEl) {\n        errorEl.hidden = false;\n        errorEl.textContent = error?.name==='AbortError'\n          ? 'Orbit events are taking too long to load. Please refresh and try again.'\n          : (error.message || 'Could not load Orbit events.');\n      }\n    }\n  }\n\n  async function refreshEventDetail(identifier) {\n    try {\n      const response = await fetch(`${apiBase}/api/public/events/${encodeURIComponent(identifier)}`, { headers: { Accept: 'application/json' } });\n      const data = await response.json();\n      if (!response.ok || !data.success || !data.event) return;\n      const index = hubEvents.findIndex(item => String(item.eventbriteEventId) === String(identifier) || String(item.slug) === String(identifier) || String(item.staticPageHandle||'') === String(identifier));\n      if (index >= 0) hubEvents[index] = data.event;\n      if (currentEvent && String(eventIdentifier(currentEvent)) === String(identifier)) {\n        renderDetail(data.event, { scroll: false });\n      }\n    } catch (error) {\n      // Detail refresh is intentionally silent. The cached card still gives the customer an instant page.\n    }\n  }\n\n  let hubPrefetchPromiseV366=null;\n  function prefetchHubEventsV366(){\n    if(hubPrefetchPromiseV366)return hubPrefetchPromiseV366;\n    hubPrefetchPromiseV366=(async function(){\n      const controller=new AbortController();\n      const timeout=window.setTimeout(()=>controller.abort(),15000);\n      try{\n        const response=await fetch(`${apiBase}/api/public/events?limit=100`,{headers:{Accept:'application/json'},signal:controller.signal});\n        const data=await response.json();\n        if(!response.ok||!data.success)throw new Error(data.error||'Could not preload Orbit events.');\n        const events=Array.isArray(data.events)?data.events:[];\n        if(events.length){hubEvents=events;writeHubCacheV340(events);}\n        return events;\n      }finally{\n        window.clearTimeout(timeout);\n        hubPrefetchPromiseV366=null;\n      }\n    })().catch(function(error){console.warn('Orbit event hub prefetch failed:',error?.message||error);return [];});\n    return hubPrefetchPromiseV366;\n  }\n\n  async function loadEvent(identifier) {\n    const cachedEvents=readHubCacheV340()||[];\n    prefetchHubEventsV366();\n    const instant=staticEventSnapshot || cachedEvents.find(event =>\n      String(event.eventbriteEventId)===String(identifier) ||\n      String(event.slug)===String(identifier) ||\n      String(event.staticPageHandle||'')===String(identifier)\n    ) || null;\n    try {\n      if (hubHero) hubHero.hidden = true;\n      if (hubView) hubView.hidden = true;\n      if (detailView) detailView.hidden = false;\n      if (instant){\n        hubEvents=cachedEvents;\n        currentEvent=instant;\n        captureVendorReferral(instant);\n        selectedTickets=new Map();\n        if(!staticEventSnapshot)renderDetail(instant,{scroll:false});\n        if(detailLoadingEl)detailLoadingEl.hidden=true;\n      } else if (detailLoadingEl) detailLoadingEl.hidden = false;\n      if (loadingEl) loadingEl.hidden = true;\n      if (errorEl) errorEl.hidden = true;\n      const response = await fetch(`${apiBase}/api/public/events/${encodeURIComponent(identifier)}`, { headers: { Accept: 'application/json' } });\n      const data = await response.json();\n      if (!response.ok || !data.success) throw new Error(data.error || 'Could not load this event.');\n      // A detail response is not a canonical event-list response. Never seed\n      // an empty hub cache with one event; that caused Back to Events to show\n      // only the event that was opened directly.\n      if(cachedEvents.length){\n        const merged=[...cachedEvents.filter(item =>\n          String(item.eventbriteEventId)!==String(data.event?.eventbriteEventId) &&\n          String(item.slug)!==String(data.event?.slug)\n        ),data.event].filter(Boolean);\n        hubEvents=merged;\n        writeHubCacheV340(merged);\n      }\n      currentEvent=data.event;\n      captureVendorReferral(data.event);\n      if(!staticEventSnapshot)renderDetail(data.event,{scroll:!instant});\n    } catch (error) {\n      if (detailLoadingEl) detailLoadingEl.hidden = true;\n      const fallback = hubEvents.find(event => String(event.eventbriteEventId) === String(identifier) || String(event.slug) === String(identifier) || String(event.staticPageHandle||'') === String(identifier));\n      if (fallback) {\n        renderDetail(fallback);\n        return;\n      }\n      if (hubHero) hubHero.hidden = false;\n      if (hubView) hubView.hidden = false;\n      if (detailView) detailView.hidden = true;\n      if (errorEl) {\n        errorEl.hidden = false;\n        errorEl.textContent = error.message || 'Could not load this event.';\n      }\n      loadEvents();\n    }\n  }\n\n  root.addEventListener('input', function (event) {\n    if (event.target && event.target.matches('[data-otc-discount-code]')) {\n      orbitDiscountInputValue=String(event.target.value||'').trim().toUpperCase();\n      if(orbitDiscountInputValue!==orbitDiscountCode){\n        orbitDiscountCode='';\n        orbitDiscountPercentage=0;\n        orbitDiscountMessage='';\n        orbitDiscountError='';\n      }\n    }\n  });\n\n  root.addEventListener('click', async function (event) {\n    const open = event.target.closest('[data-otc-open-tickets]');\n    const plus = event.target.closest('[data-ticket-plus]');\n    const minus = event.target.closest('[data-ticket-minus]');\n    const checkout = event.target.closest('[data-otc-checkout]');\n    const cont = event.target.closest('[data-otc-continue]');\n    const valueCheck = event.target.closest('[data-otc-value-check]');\n    const backToTickets = event.target.closest('[data-otc-back-to-tickets]');\n    const backToReview = event.target.closest('[data-otc-back-to-review]');\n    const upgrade = event.target.closest('[data-otc-upgrade]');\n    const updateDiscount = event.target.closest('[data-otc-update-discount]');\n    const descToggle = event.target.closest('[data-ticket-desc-toggle]');\n    const close = event.target.closest('[data-otc-modal-close]');\n    const card = event.target.closest('a.otc-event-card');\n\n    // V446 true-static navigation: event cards are real Shopify Page links.\n    // Never intercept them into SPA history; normal document navigation keeps\n    // browser Back/Forward, crawlers and paid-ad landing URLs deterministic.\n\n    if (descToggle) {\n      const id = descToggle.getAttribute('data-ticket-desc-toggle');\n      const desc = id ? document.getElementById(id) : null;\n      if (desc) {\n        const expanded = descToggle.getAttribute('aria-expanded') === 'true';\n        descToggle.setAttribute('aria-expanded', expanded ? 'false' : 'true');\n        desc.classList.toggle('is-collapsed', expanded);\n        desc.textContent = expanded ? teaserText(desc.getAttribute('data-full-description') || '', 132) : (desc.getAttribute('data-full-description') || '');\n        descToggle.textContent = expanded ? 'See full details' : 'Show less';\n      }\n      return;\n    }\n\n    if (open) openTicketModal('tickets');\n    if (close) closeTicketModal();\n    if (plus && currentEvent) {\n      const id = plus.getAttribute('data-ticket-plus');\n      selectedTickets.set(id, (selectedTickets.get(id) || 0) + 1);\n      openTicketModal('tickets', { scrollTop: false });\n    }\n    if (minus && currentEvent) {\n      const id = minus.getAttribute('data-ticket-minus');\n      selectedTickets.set(id, Math.max((selectedTickets.get(id) || 0) - 1, 0));\n      openTicketModal('tickets', { scrollTop: false });\n    }\n    if (updateDiscount && currentEvent) { event.preventDefault(); await validateDiscountFromReview(); return; }\n    if (checkout && selectedCounts() > 0) {\n      const totals=orderTotals(currentEvent);\n      const items=totals.lines.map(function(line){return {item_id:String(line.ticketClassId||line.name),item_name:String(line.name||'Orbit ticket'),price:Number(line.price||0),quantity:Number(line.count||0)};});\n      const contents=totals.lines.map(function(line){return {id:String(line.ticketClassId||line.name),quantity:Number(line.count||0),item_price:Number(line.price||0)};});\n      trackTicketFunnel('begin_checkout','',currentEvent,{\n        value:Number(totals.payableTotal||0),\n        num_items:Number(totals.qty||0),\n        items:items,\n        contents:contents,\n        content_ids:contents.map(function(item){return item.id;}),\n        content_type:'product'\n      },String(totals.qty||0)+':'+String(totals.payableTotal||0));\n      openTicketModal('review');\n    }\n    if (backToTickets) openTicketModal('tickets');\n    if (backToReview) openTicketModal('review');\n    if (valueCheck && selectedCounts() > 0) {\n      // V309 protected conversion rule: every ticket purchaser must see the\n      // optional Collectors Club upgrade page. Eligibility is enforced only\n      // when the customer actually chooses membership; Review/promo state must\n      // never bypass the upgrade opportunity.\n      openTicketModal('value');\n    }\n    if (cont) continueToShopifyCheckout();\n    if (upgrade) viewMembershipUpgrade();\n  });\n\n  document.addEventListener('keydown', function (event) {\n    if (event.key === 'Escape') closeTicketModal();\n  });\n\n  if (backButton) {\n    backButton.addEventListener('click', function () {\n      // V446: leave the static event document normally. Do not manufacture a\n      // client-side hub state that can contain a partial/stale event catalogue.\n      window.location.assign(ticketHubUrl());\n    });\n  }\n\n  const eventParam = eventIdentifierFromLocation();\n  if (eventParam) {\n    // V320: a genuine static event URL is an event page from first paint.\n    // Do not render or fetch the hub first and then jump to the event.\n    loadEvent(eventParam);\n  } else {\n    loadEvents();\n  }\n})();\n"],
  "mappings": "CAAC,UAAY,CAEX,MAAM,KAAO,SAAS,eAAe,mBAAmB,EACxD,GAAI,CAAC,KAAM,OACX,SAAS,KAAK,UAAU,IAAI,gBAAgB,EAE5C,MAAM,QAAU,KAAK,QAAQ,SAAW,gDAClC,QAAU,KAAK,QAAQ,iBAAmB,GAC1C,QAAU,KAAK,QAAQ,iBAAmB,GAC1C,sBAAwB,KAAK,QAAQ,uBAAyB,iMAC9D,UAAY,KAAK,cAAc,oBAAoB,EACnD,QAAU,KAAK,cAAc,kBAAkB,EAC/C,SAAW,KAAK,cAAc,mBAAmB,EACjD,QAAU,KAAK,cAAc,qBAAqB,EAClD,QAAU,KAAK,cAAc,qBAAqB,EAClD,WAAa,KAAK,cAAc,wBAAwB,EACxD,SAAW,KAAK,cAAc,mBAAmB,EACjD,gBAAkB,KAAK,cAAc,2BAA2B,EAChE,YAAc,KAAK,cAAc,uBAAuB,EACxD,kBAAoB,KAAK,cAAc,gCAAgC,EACvE,WAAa,KAAK,cAAc,iBAAiB,EACjD,MAAQ,KAAK,cAAc,kBAAkB,EAC7C,aAAe,KAAK,cAAc,0BAA0B,EAC5D,qBAAuB,KAAK,aAAa,qBAAqB,GAAK,6CAEzE,IAAI,aAAe,KACf,gBAAkB,IAAI,IACtB,kBAAoB,GACpB,wBAA0B,GAC1B,wBAA0B,EAC1B,qBAAuB,GACvB,mBAAqB,GACrB,UAAY,CAAC,EACb,oBAAsB,KAC1B,GAAI,kBACF,GAAI,CAAE,oBAAsB,KAAK,MAAM,kBAAkB,aAAe,IAAI,CAAG,MACrE,CAAE,oBAAsB,IAAM,CAG1C,SAAS,wBAAwB,MAAO,CACtC,MAAM,MAAM,OAAO,OAAO,SAAS,EAAE,KAAK,GAAG,UACvC,IAAI,MAAM,YAAY,EAAE,QAAQ,cAAc,GAAG,EAAE,QAAQ,SAAS,EAAE,EAE5E,MAAO,CAAC,MAAM,IAAI,KAAK,UAAU,KADrB,CAAC,UAAU,SAAI,eAAe,YAAK,cAAc,eAAK,kBAAkB,SAAI,WAAW,QAAG,EAC1D,GAAG,GAAG,iBAAK,CACzD,CAEA,SAAS,iBAAiB,MAAO,WAAY,CAC3C,MAAM,EAAE,wBAAwB,OAAO,kBAAkB,OAAO,UAAU,MAAM,UAAU,SAAS,EACnG,MAAO,qCAAqC,WAAW,YAAY,EAAE,CAAC,WAAW,WAAW,EAAE,GAAG,CAAC,sDAAsD,WAAW,EAAE,IAAI,CAAC,gBAAgB,WAAW,EAAE,KAAK,CAAC,gBAC/M,CAEA,MAAM,mBAAmB,IAAI,IAC7B,SAAS,kBAAkB,QAAQ,UAAU,MAAM,MAAM,aAAa,YAAY,CAChF,GAAG,CACD,MAAM,QAAQ,OAAO,OAAO,IAAI,OAAO,mBAAmB,OAAO,cAAc,OAAO,MAAM,EAAE,EACxF,IAAI,OAAO,SAAS,WAAW,OAAO,EAAE,IAAI,QAAQ,IAAI,OAAO,cAAc,EAAE,EACrF,GAAG,mBAAmB,IAAI,GAAG,EAAE,OAC/B,mBAAmB,IAAI,GAAG,EAC1B,MAAM,QAAQ,OAAO,cACrB,GAAG,CAAC,SAAS,OAAO,QAAQ,OAAQ,WAAW,OAC/C,MAAM,OAAO,OAAO,OAAO,CACzB,SAAS,MACT,eAAe,QACf,iBAAiB,OAAO,OAAO,MAAM,iBAAiB,EACtD,aAAa,OAAO,OAAO,MAAM,iBAAiB,EAClD,iBAAiB,yBACnB,EAAE,OAAO,CAAC,CAAC,EACX,QAAQ,MAAM,CAAC,QAAQ,SAAS,GAAG,UAAU,WAAW,GAAG,QAAQ,OAAO,aAAa,EAAE,EAAE,MAAM,CAAC,CACpG,MAAS,CAAC,CACZ,CAGA,SAAS,iBAAiB,KAAK,CAC7B,GAAG,CACD,MAAM,OAAO,OAAO,MAAM,EAAE,EAAE,IAC9B,OAAO,OAAO,SAAS,QAAQ,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,EAAE,WAAW,MAAM,CAAC,GAAG,MAAM,OAAO,MAAM,GAAG,EACtH,MAAS,CAAC,MAAO,EAAG,CACtB,CACA,SAAS,0BAA0B,CACjC,GAAG,CACD,MAAM,EAAE,IAAI,gBAAgB,OAAO,SAAS,QAAQ,EAAE,EAChD,OAAO,EAAE,IAAI,QAAQ,GAAG,eAAe,QAAQ,qBAAqB,GAAG,GAC1E,QAAO,eAAe,QAAQ,sBAAsB,MAAM,EAC7D,MAAM,IAAI,iBAAiB,MAAM,IAAI,OAAQ,QAAQ,KAAK,IAAI,EAAE,IAAI,OAAQ,IAC5E,MAAO,CACL,OAAc,IAAI,iBAAiB,MAAM,EAAE,IAC3C,UAAU,EAAE,IAAI,YAAY,GAAG,eAAe,QAAQ,yBAAyB,GAAG,GAClF,UAAU,EAAE,IAAI,YAAY,GAAG,eAAe,QAAQ,yBAAyB,GAAG,GAClF,YAAY,EAAE,IAAI,cAAc,GAAG,eAAe,QAAQ,2BAA2B,GAAG,GACxF,WAAW,EAAE,IAAI,aAAa,GAAG,eAAe,QAAQ,0BAA0B,GAAG,GACrF,YAAY,OAAO,SAAS,KAAK,SAAS,SAAS,UAAU,EAC/D,CACF,MAAS,CAAC,MAAO,CAAC,YAAY,OAAO,SAAS,KAAK,SAAS,SAAS,UAAU,EAAE,CAAE,CACrF,EACC,UAAmC,CAClC,GAAG,CACD,MAAM,EAAE,IAAI,gBAAgB,OAAO,SAAS,QAAQ,EAAE,EACtD,CAAC,aAAa,aAAa,eAAe,aAAa,EAAE,QAAQ,SAAS,IAAI,CAC5E,MAAM,MAAM,EAAE,IAAI,GAAG,EAAK,OAAM,eAAe,QAAQ,gBAAgB,IAAI,KAAK,CAClF,CAAC,CACH,MAAS,CAAC,CACZ,GAAG,EAKH,MAAM,uBAAuB,IAAM,GAAG,GAAG,IACnC,4BAA4B,qCAClC,SAAS,qBAAqB,MAAM,CAAC,MAAO,QAAQ,KAAK,OAAO,OAAO,EAAE,EAAE,KAAK,CAAC,CAAE,CACnF,SAAS,kBAAkB,QAAQ,CAAC,MAAO,yBAAyB,OAAO,SAAS,EAAE,EAAE,KAAK,CAAE,CAC/F,SAAS,eAAe,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,QAAQ,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,KAAK,MAAM,MAAM,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO,OAAO,OAAQ,SAAS,MAAM,IAAK,MAAS,CAAC,OAAO,IAAK,CAAC,CAC7L,SAAS,oBAAoB,MAAM,KAAK,QAAQ,GAAG,CACjD,GAAG,CACD,MAAM,QAAQ,OAAO,gBAAgB,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,cAAc,SAAS,KAAK,OAAO,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,EAAE,GACnL,MAAG,CAAC,SAAS,CAAC,qBAAqB,KAAK,EAAS,IACjD,aAAa,QAAQ,kBAAkB,OAAO,EAAE,KAAK,UAAU,CAAC,KAAK,MAAM,QAAQ,eAAe,KAAK,QAAQ,SAAS,GAAG,UAAU,GAAG,uBAAuB,YAAY,SAAS,UAAU,EAAE,CAAC,CAAC,EAClM,aAAa,WAAW,2BAA2B,EAC5C,GACT,MAAS,CAAC,MAAO,EAAM,CACzB,CACA,SAAS,sBAAsB,MAAM,CACnC,GAAG,CACD,MAAM,MAAM,IAAI,gBAAgB,OAAO,SAAS,QAAQ,EAAE,EAAE,UAAU,OAAO,MAAM,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,OAAO,MAAM,IAAI,WAAW,GAAG,EAAE,EAAE,KAAK,EAC7J,GAAG,qBAAqB,SAAS,EAAE,CACjC,GAAG,CAAC,oBAAoB,MAAM,UAAU,UAAU,EAAE,CAClD,MAAM,GAAG,KAAK,IAAI,EAClB,aAAa,QAAQ,4BAA4B,KAAK,UAAU,CAAC,KAAK,UAAU,QAAQ,SAAS,KAAK,UAAU,EAAE,WAAW,KAAK,SAAS,GAAG,UAAU,GAAG,uBAAuB,YAAY,SAAS,UAAU,EAAE,CAAC,CAAC,CACvN,CACA,OAAO,SACT,CACA,MAAM,QAAQ,eAAe,2BAA2B,EAAE,YAAY,CAAC,SAAS,aAAa,QAAQ,eAAe,SAAS,UAAU,IACvI,GAAG,SAAS,qBAAqB,QAAQ,IAAI,GAAG,OAAO,QAAQ,WAAW,CAAC,EAAE,KAAK,IAAI,GAAG,aAAa,oBAAoB,MAAM,QAAQ,KAAK,QAAQ,OAAO,EAAE,OAAO,QAAQ,KAC1K,SAAS,OAAO,QAAQ,WAAW,CAAC,GAAG,KAAK,IAAI,GAAE,aAAa,WAAW,2BAA2B,CAC1G,MAAS,CAAC,CACV,MAAO,EACT,CACA,SAAS,mBAAmB,MAAM,CAChC,GAAG,CACD,MAAM,SAAS,sBAAsB,KAAK,EAAE,GAAG,UAAU,OAAO,gBAAgB,KAAK,GAAG,EAAE,EAAE,OAAO,SACnG,MAAM,QAAQ,OAAO,gBAAgB,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,MAAO,GAC3E,MAAM,IAAI,kBAAkB,OAAO,EAAE,IAAI,aAAa,QAAQ,GAAG,GAAG,GACpE,GAAG,qBAAqB,GAAG,EAAG,OAAO,IACrC,MAAM,IAAI,eAAe,GAAG,EAC5B,MAAG,CAAC,KAAK,CAAC,qBAAqB,IAAI,IAAI,EAAS,GAC7C,OAAO,IAAI,WAAW,CAAC,GAAG,KAAK,IAAI,GACnC,IAAI,SAAS,OAAO,IAAI,OAAO,IAAI,SAAS,aAAa,WAAW,GAAG,EAAS,IAC5E,OAAO,IAAI,IAAI,CACxB,MAAS,CAAC,MAAO,EAAG,CACtB,CACA,SAAS,sBAAsB,MAAM,CACnC,GAAG,CACD,sBAAsB,KAAK,EAAE,MAAM,QAAQ,OAAO,gBAAgB,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,MAAO,GACxG,MAAM,IAAI,eAAe,kBAAkB,OAAO,CAAC,EAAE,MAAG,CAAC,KAAK,OAAO,IAAI,WAAW,CAAC,GAAG,KAAK,IAAI,GAAG,OAAO,IAAI,SAAS,OAAO,IAAI,QAAe,GAC3I,SAAS,KAAK,OAAO,IAAI,SAAS,EAAE,CAAC,EAAE,OAAO,IAAI,OAAO,EAAE,EACpE,MAAS,CAAC,MAAO,EAAG,CACtB,CAGA,sBAAsB,mBAAmB,EAEzC,SAAS,WAAW,MAAO,CACzB,OAAO,OAAO,OAAS,EAAE,EACtB,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,QAAQ,CAC3B,CAEA,SAAS,aAAa,KAAM,CAC1B,GAAI,CAAC,KAAM,MAAO,GAClB,MAAM,SAAW,SAAS,cAAc,UAAU,EAClD,SAAS,UAAY,KACrB,MAAM,YAAc,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,MAAM,MAAM,CAAC,EACrG,OAAS,SAAS,iBAAiB,SAAS,QAAS,WAAW,YAAY,EAC5E,OAAS,CAAC,EAChB,KAAO,OAAO,SAAS,GAAG,CACxB,MAAM,KAAO,OAAO,YACpB,GAAI,CAAC,YAAY,IAAI,KAAK,OAAO,EAAG,CAClC,OAAO,KAAK,IAAI,EAChB,QACF,CACA,CAAC,GAAG,KAAK,UAAU,EAAE,QAAQ,MAAQ,CACnC,MAAM,KAAO,KAAK,KAAK,YAAY,EACnC,GAAI,KAAK,UAAY,KAAO,OAAS,OAAQ,CAC3C,MAAM,KAAO,KAAK,OAAS,GACvB,CAAC,gBAAgB,KAAK,IAAI,GAAK,CAAC,YAAY,KAAK,IAAI,EAAG,KAAK,gBAAgB,KAAK,IAAI,EACrF,KAAK,aAAa,SAAU,QAAQ,EACzC,KAAK,aAAa,MAAO,qBAAqB,EAC9C,MACF,CACA,KAAK,gBAAgB,KAAK,IAAI,CAChC,CAAC,CACH,CACA,cAAO,QAAQ,MAAQ,KAAK,YAAY,SAAS,eAAe,KAAK,aAAe,EAAE,CAAC,CAAC,EACjF,SAAS,SAClB,CAEA,SAAS,UAAU,MAAO,CACxB,MAAM,GAAK,SAAS,cAAc,KAAK,EACvC,UAAG,UAAY,OAAS,IAChB,GAAG,aAAe,GAAG,WAAa,IAAI,KAAK,CACrD,CAEA,SAAS,cAAc,KAAM,CAC3B,GAAI,CAAC,KAAM,MAAO,GAClB,MAAM,SAAW,SAAS,cAAc,UAAU,EAClD,SAAS,UAAY,KACrB,MAAM,IAAM,SAAS,QAAQ,cAAc,UAAU,EAC/C,IAAM,IAAM,OAAO,IAAI,aAAa,KAAK,GAAK,EAAE,EAAI,GAC1D,MAAO,gBAAgB,KAAK,GAAG,EAAI,IAAM,EAC3C,CAEA,SAAS,YAAY,MAAO,CAE1B,MAAO,OADQ,OAAO,OAAS,CAAC,EACd,QAAQ,CAAC,CAAC,EAC9B,CAEA,SAAS,gBAAgB,MAAO,CAC9B,OAAO,MAAM,mBAAqB,MAAM,IAC1C,CAEA,SAAS,aAAa,MAAO,CAC3B,GAAI,OAAO,cAAe,OAAO,OAAO,MAAM,aAAa,EAC3D,MAAM,KAAK,OAAO,OAAO,SAAS,UAAU,EAAE,EAAE,YAAY,EAG5D,MAAO,GAFK,OAAO,0BAA0B,OAAO,6BAC/B,IAAI,eACP,UAAU,mBAAmB,gBAAgB,KAAK,CAAC,CAAC,EACxE,CACA,SAAS,2BAA4B,CAEnC,MAAM,MADK,OAAO,OAAO,SAAS,UAAU,EAAE,EAC7B,MAAM,0BAA0B,EACjD,GAAG,CAAC,MAAM,MAAO,GACjB,MAAM,OAAO,mBAAmB,MAAM,CAAC,CAAC,EACxC,MAAG,CAAC,SAAS,WAAW,cAAc,EAAE,SAAS,MAAM,EAAS,GACzD,MACT,CAEA,SAAS,2BAA2B,OAAQ,CAC1C,GAAG,CAAC,OAAO,OACX,MAAM,UAAU,UAAU,mBAAmB,MAAM,CAAC,GAEpD,GADkB,OAAO,OAAO,SAAS,UAAU,EAAE,EAAE,QAAQ,MAAM,EAAE,IACtD,YAAc,OAAO,SAAS,QAAQ,OAAO,SAAS,MACrE,GAAG,CAAC,OAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,CAAC,EAAE,GAAG,SAAS,CAAE,MAAS,CAAC,CAErF,CAEA,SAAS,6BAA8B,CAIrC,MAAM,aAAa,0BAA0B,EAC7C,GAAG,aACD,kCAA2B,YAAY,EAChC,aAET,MAAM,OAAO,IAAI,gBAAgB,OAAO,SAAS,MAAM,EACvD,OAAG,OAAO,IAAI,OAAO,EAAS,OAAO,IAAI,OAAO,EACzC,EACT,CAEA,SAAS,cAAe,CACtB,MAAM,KAAK,OAAO,OAAO,SAAS,UAAU,EAAE,EAAE,YAAY,EAC5D,OAAQ,OAAO,0BAA0B,OAAO,6BAA8B,IAAI,eACpF,CAEA,SAAS,UAAU,IAAK,CACtB,GAAI,CAAC,IAAK,OAAO,KACjB,MAAM,KAAO,IAAI,KAAK,GAAG,EACzB,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAI,KAAO,IAC/C,CAEA,SAAS,WAAW,MAAO,CACzB,MAAM,KAAO,UAAU,OAAO,OAAO,OAAS,OAAO,OAAO,KAAO,OAAO,OAAO,EACjF,OAAK,KACE,KAAK,mBAAmB,QAAS,CAAE,QAAS,QAAS,IAAK,UAAW,MAAO,QAAS,KAAM,SAAU,CAAC,EAD3F,kBAEpB,CAEA,SAAS,eAAe,MAAO,CAC7B,MAAM,KAAO,UAAU,OAAO,OAAO,OAAS,OAAO,OAAO,KAAO,OAAO,OAAO,EACjF,OAAK,KACE,KAAK,mBAAmB,QAAS,CAAE,QAAS,OAAQ,IAAK,UAAW,MAAO,OAAQ,KAAM,SAAU,CAAC,EADzF,kBAEpB,CAEA,SAAS,kBAAkB,IAAK,CAC9B,MAAM,KAAO,UAAU,GAAG,EAC1B,OAAK,KACE,KAAK,mBAAmB,QAAS,CAAE,KAAM,UAAW,OAAQ,SAAU,CAAC,EAD5D,EAEpB,CAEA,SAAS,gBAAgB,MAAO,CAC9B,MAAM,MAAQ,OAAO,OAAO,OAAS,OAAO,OAAO,IAC7C,IAAM,OAAO,KAAK,OAAS,OAAO,KAAK,IACvC,UAAY,kBAAkB,KAAK,EACnC,QAAU,kBAAkB,GAAG,EACrC,OAAI,WAAa,QAAgB,GAAG,SAAS,MAAM,OAAO,GACnD,WAAa,EACtB,CAEA,SAAS,YAAY,MAAO,CAC1B,MAAM,QAAU,OAAO,cAAgB,OAAO,OAAO,SAAW,CAAC,EACjE,MAAO,CAAC,QAAQ,UAAW,QAAQ,UAAW,QAAQ,KAAM,QAAQ,OAAQ,QAAQ,WAAW,EAC5F,OAAO,OAAO,EACd,KAAK,IAAI,CACd,CAEA,SAAS,SAAS,MAAO,CACvB,OAAO,MAAM,kBAAoB,MAAM,SAAW,OAAO,OAAO,aAAe,OAAO,OAAO,SAAW,EAC1G,CAEA,SAAS,aAAa,OAAQ,CAC5B,OAAI,QAAQ,OAAe,wBACpB,QAAQ,aAAa,OAAS,SACvC,CAEA,SAAS,oBAAoB,OAAQ,CACnC,MAAI,CAAC,QAAU,OAAO,OAAe,IAC7B,OAAO,aAAa,OAAS,aAAe,SACtD,CAEA,SAAS,cAAc,OAAQ,CAC7B,MAAM,KAAO,GAAG,QAAQ,MAAQ,EAAE,GAAG,YAAY,EACjD,MAAO,EAAQ,QAAQ,OAAU,KAAK,SAAS,aAAa,GAAK,KAAK,SAAS,QAAQ,GAAK,KAAK,SAAS,QAAQ,GAAK,KAAK,SAAS,eAAe,CACtJ,CAEA,SAAS,oBAAoB,OAAQ,CACnC,GAAI,CAAC,QAAU,CAAC,OAAO,KAAM,MAAO,GACpC,MAAM,KAAO,GAAG,OAAO,MAAQ,EAAE,GAAG,YAAY,EAAE,QAAQ,SAAU,GAAG,EACvE,MAAO,gGAAgG,KAAK,IAAI,CAClH,CAEA,SAAS,uBAAuB,MAAO,CACrC,OAAQ,MAAM,QAAQ,MAAM,aAAa,EAAI,MAAM,cAAgB,CAAC,GACjE,OAAO,QAAU,QAAU,OAAO,IAAM,CAAC,cAAc,MAAM,GAAK,oBAAoB,MAAM,CAAC,EAC7F,KAAK,CAAC,EAAG,IAAM,CACd,MAAM,SAAW,oBAAoB,CAAC,EAAI,EAAI,EACxC,SAAW,oBAAoB,CAAC,EAAI,EAAI,EAC9C,OAAI,WAAa,SAAiB,SAAW,SACtC,OAAO,EAAE,YAAc,CAAC,EAAI,OAAO,EAAE,YAAc,CAAC,CAC7D,CAAC,CACL,CAEA,SAAS,sBAAsB,MAAO,CACpC,OAAQ,MAAM,QAAQ,MAAM,YAAY,EAAI,MAAM,aAAe,CAAC,GAC/D,OAAO,QAAU,QAAU,OAAO,IAAM,oBAAoB,MAAM,CAAC,EACnE,KAAK,CAAC,EAAG,IAAM,OAAO,EAAE,YAAc,CAAC,EAAI,OAAO,EAAE,YAAc,CAAC,CAAC,CACzE,CAEA,SAAS,mBAAmB,MAAO,CACjC,MAAO,CAAC,GAAG,uBAAuB,KAAK,EAAG,GAAG,sBAAsB,KAAK,CAAC,CAC3E,CAEA,SAAS,YAAY,MAAO,CAC1B,MAAM,OAAS,uBAAuB,KAAK,EACxC,IAAI,QAAU,OAAO,OAAO,WAAW,CAAC,EACxC,OAAOA,QAAS,OAAO,SAASA,MAAK,CAAC,EACtC,KAAK,CAAC,EAAG,IAAM,EAAI,CAAC,EACvB,GAAI,CAAC,OAAO,OAEV,MADe,GAAG,OAAO,0BAA4B,EAAE,GAAG,KAAK,GAC9C,eAEnB,MAAM,MAAQ,OAAO,CAAC,EACtB,OAAO,QAAU,EAAI,aAAY,QAAQ,YAAY,KAAK,EAAE,QAAQ,MAAO,EAAE,CAAC,EAChF,CAEA,SAAS,UAAU,MAAO,CACxB,MAAM,MAAQ,SAAS,KAAK,EAAI,aAAa,WAAW,SAAS,KAAK,CAAC,CAAC,UAAU,WAAW,MAAM,IAAI,CAAC,kCAAoC,GACtI,MAAQ,MAAM,WAAa,OAAO,OAAO,MAAQ,oBACjD,KAAO,kBAAkB,OAAO,OAAO,OAAS,OAAO,OAAO,GAAG,EACvE,MAAO;AAAA,wCAC6B,WAAW,aAAa,KAAK,CAAC,CAAC,sBAAsB,WAAW,MAAM,IAAI,CAAC;AAAA,sCAC7E,KAAK;AAAA;AAAA,0CAED,WAAW,MAAM,MAAQ,aAAa,CAAC;AAAA,YACrE,MAAM,kBAAoB,MAAM,UAAY,iBAAiB,MAAM,0BAA0B,EAAI,EAAE;AAAA,yCACtE,WAAW,WAAW,KAAK,CAAC,CAAC,GAAG,KAAO,KAAO,WAAW,IAAI,EAAI,EAAE;AAAA,yCACnE,WAAW,KAAK,CAAC;AAAA,yCACjB,WAAW,YAAY,KAAK,CAAC,CAAC;AAAA;AAAA,WAGrE,CAEA,SAAS,gBAAiB,CACxB,IAAI,IAAM,EACV,0BAAmB,cAAgB,CAAC,CAAC,EAAE,QAAQ,QAAU,KAAO,gBAAgB,IAAI,OAAO,EAAE,GAAK,CAAC,EAC5F,GACT,CAEA,SAAS,cAAc,QAAS,CAC9B,MAAM,MAAQ,CACZ,CAAC,UAAW,SAAS,EACrB,CAAC,SAAU,QAAQ,EACnB,CAAC,QAAS,SAAS,EACnB,CAAC,WAAY,UAAU,CACzB,EACA,MAAO,2DAA2D,MAAM,IAAI,CAAC,CAAC,IAAK,KAAK,IAAM,gBAAgB,MAAQ,QAAU,aAAe,EAAE,IAAI,MAAM,UAAU,GAAK,EAAE,CAAC,IAAM,GAAG,EAAI,MAAM,UAAU,GAAK,EAAE,CAAC,IAAM,OAAO,EAAI,UAAY,EAAE,YAAY,KAAK,SAAS,EAAE,KAAK,EAAE,CAAC,QACvR,CAEA,SAAS,WAAW,MAAO,OAAQ,CACjC,MAAM,KAAO,UAAU,OAAS,EAAE,EAClC,OAAK,KACD,KAAK,QAAU,OAAe,KAC3B,KAAK,MAAM,EAAG,MAAM,EAAE,QAAQ,UAAW,EAAE,EAAI,SAFpC,EAGpB,CAEA,SAAS,WAAW,MAAO,CACzB,MAAM,QAAU,uBAAuB,KAAK,EAC5C,OAAK,QAAQ,OAGN,QAAQ,IAAI,QAAU,CAC3B,MAAM,MAAQ,QAAQ,aAAa,OAAS,UACtC,SAAW,CAAC,oBAAoB,MAAM,EACtC,SAAW,gBAAgB,IAAI,OAAO,EAAE,GAAK,EAC7C,MAAQ,OAAO,KAAO,OAAU,OAAO,cAAgB,YAAY,OAAO,WAAW,EACrF,gBAAkB,OAAO,aAAe,UAAU,OAAO,iBAAmB,EAAE,EAC9E,OAAS,gBAAkB,gCAAgC,WAAW,WAAW,gBAAiB,GAAG,CAAC,CAAC,OAAS,GAChH,SAAW,mBAAmB,OAAO,OAAO,IAAM,EAAE,EAAE,QAAQ,kBAAmB,EAAE,CAAC,GAC1F,MAAO;AAAA,4CAC+B,SAAW,cAAgB,EAAE,IAAI,SAAW,cAAgB,EAAE;AAAA;AAAA,kBAExF,WAAW,OAAO,IAAI,CAAC;AAAA;AAAA,yDAEgB,WAAW,OAAO,EAAE,CAAC,KAAK,UAAY,UAAY,EAAI,WAAa,EAAE;AAAA,sBACxG,QAAQ;AAAA,wDAC0B,WAAW,OAAO,EAAE,CAAC,KAAK,UAAY,UAAY,OAAO,OAAO,aAAe,EAAE,EAAI,WAAa,EAAE;AAAA;AAAA;AAAA;AAAA,gDAI5G,WAAW,KAAK,CAAC,YAAa,OAAO,KAAkD,GAA3C,2CAA6C;AAAA,yCAChG,WAAW,aAAa,MAAM,CAAC,CAAC;AAAA,YAC7D,OAAO,WAAa,6CAA6C,WAAW,IAAI,KAAK,OAAO,UAAU,EAAE,eAAe,QAAS,CAAE,UAAW,SAAU,UAAW,OAAQ,CAAC,CAAC,CAAC,OAAS,EAAE;AAAA,YACxL,OAAO,SAAW,2CAA2C,WAAW,IAAI,KAAK,OAAO,QAAQ,EAAE,eAAe,QAAS,CAAE,UAAW,SAAU,UAAW,OAAQ,CAAC,CAAC,CAAC,OAAS,EAAE;AAAA,YAClL,gBAAkB,4CAA4C,QAAQ,wEAAwE,WAAW,eAAe,CAAC,KAAK,WAAW,WAAW,gBAAiB,GAAG,CAAC,CAAC,OAAO,gBAAgB,OAAS,IAAM,sFAAsF,QAAQ,8BAA8B,QAAQ,8BAAgC,EAAE,SAAW,EAAE;AAAA,mBAE3b,CAAC,EAAE,KAAK,EAAE,EA3BD,uFA4BX,CAEA,SAAS,UAAU,MAAO,CACxB,MAAM,OAAS,sBAAsB,KAAK,EAC1C,OAAK,OAAO,OACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOD,OAAO,IAAI,QAAU,CACrB,MAAM,SAAW,CAAC,oBAAoB,MAAM,EACtC,SAAW,gBAAgB,IAAI,OAAO,EAAE,GAAK,EAC7C,MAAQ,OAAO,KAAO,OAAU,OAAO,cAAgB,YAAY,OAAO,WAAW,EAC3F,IAAI,SAAW,OAAO,aAAe,UAAU,OAAO,iBAAmB,EAAE,EACpD,OAAO,QAAQ,MAAQ,EAAE,EAAE,YAAY,EAG3C,SAAS,aAAa,IACvC,SAAW,OAAO,UAAY,EAAE,EAC7B,QAAQ,6BAA8B,QAAQ,EAC9C,QAAQ,wBAAyB,QAAQ,GAE9C,MAAM,KAAO,SAAW,oCAAoC,WAAW,QAAQ,CAAC,OAAS,GACnF,cAAgB,OAAO,UAAY,OAAO,WAAa,OAAO,YAAc,OAAO,aAAe,cAAc,OAAO,iBAAmB,EAAE,GAAK,sBACjJ,MAAQ,cAAgB,0CAA0C,WAAW,aAAa,CAAC,UAAU,WAAW,OAAO,IAAI,CAAC,0BAA4B,GAC9J,MAAO;AAAA,6CAC4B,SAAW,cAAgB,EAAE,IAAI,SAAW,cAAgB,EAAE;AAAA,gBAC3F,KAAK;AAAA;AAAA;AAAA;AAAA,wBAIG,WAAW,OAAO,IAAI,CAAC;AAAA,oBAC3B,MAAQ,iGAAiG;AAAA;AAAA;AAAA,4BAGjG,WAAW,KAAK,CAAC;AAAA;AAAA,+DAEkB,WAAW,OAAO,EAAE,CAAC,KAAK,UAAY,UAAY,EAAI,WAAa,EAAE;AAAA,4BACxG,QAAQ;AAAA,8DAC0B,WAAW,OAAO,EAAE,CAAC,KAAK,UAAY,UAAY,OAAO,OAAO,aAAe,EAAE,EAAI,WAAa,EAAE;AAAA;AAAA;AAAA;AAAA,uBAK1J,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBA3CY,EAkD7B,CAGA,SAAS,YAAY,MAAO,CAC1B,MAAM,QAAU,mBAAmB,KAAK,EACxC,IAAI,YAAc,EACd,KAAO,EACP,IAAM,EACV,MAAM,MAAQ,CAAC,EACf,QAAQ,QAAQ,QAAU,CACxB,MAAM,MAAQ,gBAAgB,IAAI,OAAO,EAAE,GAAK,EAChD,GAAI,CAAC,MAAO,OACZ,KAAO,MACP,MAAM,MAAQ,OAAO,OAAO,aAAe,CAAC,EACtC,IAAM,OAAO,MAAQ,cAAc,MAAM,EAAI,EAAI,OAAO,OAAO,gBAAkB,CAAC,EACxF,aAAe,MAAQ,MACvB,MAAQ,MAAQ,IAChB,MAAM,KAAK,CAAE,KAAM,OAAO,KAAM,MAAO,cAAe,OAAO,GAAI,MAAO,IAAK,MAAO,MAAQ,MAAO,SAAU,MAAQ,IAAK,MAAO,cAAc,MAAM,CAAE,CAAC,CAC1J,CAAC,EACD,MAAM,MAAQ,QAAQ,YAAc,MAAM,QAAQ,CAAC,CAAC,EAC9C,aAAe,kBAAoB,KAAK,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,yBAAyB,CAAC,CAAC,CAAC,EAAI,EAClG,cAAgB,QAAQ,OAAS,aAAe,MAAM,QAAQ,CAAC,CAAC,EAChE,aAAe,KAAK,IAAI,EAAG,QAAQ,MAAQ,eAAe,QAAQ,CAAC,CAAC,CAAC,EAC3E,MAAO,CAAE,IAAK,YAAa,OAAO,YAAY,QAAQ,CAAC,CAAC,EAAG,KAAM,OAAO,KAAK,QAAQ,CAAC,CAAC,EAAG,MAAO,aAAc,cAAe,aAAc,KAAM,CACpJ,CAEA,SAAS,aAAa,MAAO,CAC3B,MAAM,OAAS,YAAY,KAAK,EAChC,OAAK,OAAO,IAOL;AAAA;AAAA,uCAE4B,SAAS,KAAK,EAAI,aAAa,WAAW,SAAS,KAAK,CAAC,CAAC,UAAU,WAAW,MAAM,IAAI,CAAC,aAAe,EAAE;AAAA;AAAA;AAAA;AAAA,YAItI,OAAO,MAAM,IAAI,MAAQ;AAAA;AAAA,sBAEf,KAAK,KAAK,SAAM,WAAW,KAAK,IAAI,CAAC;AAAA,wBACnC,YAAY,KAAK,KAAK,CAAC;AAAA,mBAC5B,EAAE,KAAK,EAAE,CAAC;AAAA,gFACmD,YAAY,OAAO,IAAI,CAAC;AAAA,YAC5F,kBAAoB,4DAA4D,WAAW,iBAAiB,CAAC,SAAM,WAAW,OAAO,YAAY,CAAC,wBAAwB,YAAY,OAAO,aAAa,CAAC,kBAAoB,EAAE;AAAA,2EAClK,YAAY,OAAO,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAnB9F;AAAA;AAAA,yCAE4B,SAAS,KAAK,EAAI,aAAa,WAAW,SAAS,KAAK,CAAC,CAAC,UAAU,WAAW,MAAM,IAAI,CAAC,aAAe,EAAE;AAAA;AAAA,iBAyBlJ,CAGA,SAAS,mBAAmB,MAAO,CACjC,MAAM,OAAS,YAAY,KAAK,EAChC,MAAO;AAAA;AAAA;AAAA;AAAA,2EAIgE,WAAW,MAAM,MAAQ,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,wJAKsC,WAAW,yBAA2B,iBAAiB,CAAC;AAAA;AAAA;AAAA,cAGlM,mBAAqB,8CAA8C,WAAW,kBAAkB,CAAC,OAAU,kBAAoB,qCAAqC,WAAW,sBAAwB,QAAQ,kBAAkB,YAAY,CAAC,WAAW,CAAC,OAAS,4DAA6D;AAAA;AAAA,YAElU,OAAO,MAAM,IAAI,MAAQ;AAAA,0CACK,KAAK,MAAQ,wBAA0B,EAAE;AAAA,6BACtD,WAAW,KAAK,IAAI,CAAC,kBAAkB,KAAK,MAAQ,eAAiB,kBAAkB,mBAAgB,KAAK,KAAK;AAAA,mBAC3H,YAAY,KAAK,KAAK,CAAC;AAAA,mBACvB,EAAE,KAAK,EAAE,CAAC;AAAA,wIACwG,YAAY,OAAO,IAAI,CAAC;AAAA,YACjJ,kBAAoB,6FAA6F,WAAW,kBAAkB,YAAY,CAAC,CAAC,SAAM,WAAW,OAAO,YAAY,CAAC,yBAAyB,YAAY,OAAO,aAAa,CAAC,aAAe,EAAE;AAAA,0EAC9M,YAAY,OAAO,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAOxG,CAEA,SAAS,2BAA2B,MAAO,CACzC,MAAM,SAAW,mBAAmB,OAAS,CAAC,CAAC,EAAE,IAAI,SAAW,CAC9D,OACA,SAAU,gBAAgB,IAAI,OAAO,EAAE,GAAK,CAC9C,EAAE,EAAE,OAAO,MAAQ,KAAK,SAAW,CAAC,EAC9B,kBAAoB,SAAS,OAAO,MAAQ,CAAC,KAAK,OAAO,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO,IAAI,KAAK,SAAS,CAAC,EACtG,cAAgB,SAAS,OAAO,MAAQ,KAAK,OAAO,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO,IAAI,KAAK,SAAS,CAAC,EACvG,MAAO,CACL,WAAY,mBAAqB,GAAK,mBAAqB,GAAK,gBAAkB,EAClF,kBACA,aACF,CACF,CAEA,SAAS,iBAAiB,MAAO,CAC/B,MAAM,OAAS,YAAY,KAAK,EAC1B,cAAgB,2BAA2B,KAAK,EAChD,gBAAkB,MAClB,gBAAkB,OAAO,aACzB,KAAO,KAAK,IAAI,EAAG,gBAAkB,eAAe,EACpD,SAAW,KAAO,EAAI,GAAG,YAAY,IAAI,CAAC,cAAgB,qCAEhE,MAAO;AAAA;AAAA,UAED,cAAc,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAsBW,YAAY,eAAe,CAAC;AAAA,kCACrC,WAAW,QAAQ,CAAC;AAAA;AAAA;AAAA,2DAGA,YAAY,eAAe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAUhF,CAEA,SAAS,wBAAwB,MAAO,CACtC,MAAM,OAAS,YAAY,KAAK,EAChC,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0EAM+D,YAAY,OAAO,YAAY,CAAC;AAAA,aAExG,CAEA,SAAS,YAAY,MAAO,KAAM,CAChC,MAAM,MAAQ,WAAW,MAAM,MAAQ,aAAa,EAC9C,SAAW,GAAG,WAAW,KAAK,CAAC,GAAG,gBAAgB,KAAK,EAAI,SAAQ,gBAAgB,KAAK,EAAI,EAAE,GACpG,GAAI,OAAS,SACX,MAAO;AAAA;AAAA,qCAEwB,KAAK;AAAA,eAC3B,WAAW,QAAQ,CAAC;AAAA;AAAA,UAEzB,cAAc,QAAQ,CAAC;AAAA,UACvB,mBAAmB,KAAK,CAAC,GAE/B,GAAI,OAAS,QACX,MAAO;AAAA;AAAA,qCAEwB,KAAK;AAAA,eAC3B,WAAW,QAAQ,CAAC;AAAA;AAAA,UAEzB,iBAAiB,KAAK,CAAC,GAE7B,GAAI,OAAS,WACX,MAAO;AAAA;AAAA,qCAEwB,KAAK;AAAA,eAC3B,WAAW,QAAQ,CAAC;AAAA;AAAA,UAEzB,cAAc,UAAU,CAAC;AAAA,UACzB,wBAAwB,KAAK,CAAC,GAEpC,MAAM,OAAS,YAAY,KAAK,EAChC,MAAO;AAAA;AAAA,mCAEwB,KAAK;AAAA,aAC3B,WAAW,QAAQ,CAAC;AAAA;AAAA,QAEzB,cAAc,SAAS,CAAC;AAAA,+CACe,iBAAiB,MAAM,yBAAyB,CAAC;AAAA;AAAA;AAAA;AAAA,YAIpF,WAAW,KAAK,CAAC;AAAA,YACjB,UAAU,KAAK,CAAC;AAAA;AAAA,UAElB,aAAa,KAAK,CAAC;AAAA;AAAA;AAAA,wFAG2D,OAAO,IAAM,GAAK,UAAU;AAAA,aAElH,CAEA,SAAS,0BAA0B,MAAO,CACxC,MAAM,OAAS,IAAI,gBACnB,cAAO,IAAI,eAAgB,eAAe,EAC1C,uBAAuB,OAAS,CAAC,CAAC,EAAE,QAAQ,QAAU,CACpD,MAAM,IAAM,gBAAgB,IAAI,OAAO,EAAE,GAAK,EAC1C,IAAM,GAAG,OAAO,OAAO,UAAY,OAAO,GAAI,OAAO,GAAG,CAAC,CAC/D,CAAC,EACM,OAAO,SAAS,CACzB,CAEA,SAAS,iBAAkB,CACzB,OAAO,mBAAmB,cAAgB,CAAC,CAAC,EACzC,IAAI,SAAW,CAAE,cAAe,OAAO,GAAI,SAAU,gBAAgB,IAAI,OAAO,EAAE,GAAK,CAAE,EAAE,EAC3F,OAAO,MAAQ,KAAK,SAAW,CAAC,CACrC,CAEA,SAAS,qBAAsB,CAE7B,MAAM,OADS,SAAS,eAAiB,SAAS,cAAc,SAAW,SAAS,cAAc,QAAQ,0BAA0B,EAAI,SAAS,cAAgB,OACzI,SAAS,cAAc,6CAA6C,GAAK,SAAS,cAAc,0BAA0B,EAClJ,OAAO,MAAQ,OAAO,MAAM,OAAS,EAAE,EAAE,KAAK,EAAK,yBAA2B,iBAChF,CAEA,eAAe,4BAA6B,CAC1C,MAAM,KAAK,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAIpD,GAHA,wBAAwB,KACxB,mBAAmB,GACnB,qBAAqB,GAClB,CAAC,KACF,yBAAkB,GAClB,wBAAwB,EACxB,gBAAgB,SAAS,CAAC,UAAU,EAAK,CAAC,EACnC,GAET,GAAG,CACD,MAAM,SAAS,MAAM,MAAM,GAAG,OAAO,uCAAuC,CAC1E,OAAO,OACP,QAAQ,CAAC,eAAe,mBAAmB,OAAO,kBAAkB,EACpE,KAAK,KAAK,UAAU,CAAC,IAAI,CAAC,CAC5B,CAAC,EACK,KAAK,MAAM,SAAS,KAAK,EAAE,MAAM,KAAK,CAAC,EAAE,EAC/C,MAAG,CAAC,SAAS,IAAM,CAAC,KAAK,OACvB,kBAAkB,GAClB,wBAAwB,EACxB,mBAAmB,KAAK,SAAW,KAAK,OAAS,qCACjD,gBAAgB,SAAS,CAAC,UAAU,EAAK,CAAC,EACnC,KAET,kBAAkB,OAAO,KAAK,MAAM,IAAI,EAAE,YAAY,EACtD,wBAAwB,kBACxB,wBAAwB,OAAO,KAAK,YAAY,CAAC,EACjD,qBAAqB,KAAK,SAAW,GAAG,iBAAiB,mBAAc,uBAAuB,SAC9F,gBAAgB,SAAS,CAAC,UAAU,EAAK,CAAC,EACnC,GACT,MAAa,CACX,yBAAkB,GAClB,wBAAwB,EACxB,mBAAmB,wDACnB,gBAAgB,SAAS,CAAC,UAAU,EAAK,CAAC,EACnC,EACT,CACF,CAEA,eAAe,2BAA4B,CACzC,GAAI,GAAC,cAAgB,CAAC,eAAe,GACrC,iBAAgB,UAAU,EAC1B,GAAI,CACF,MAAM,OAAO,YAAY,YAAY,EAC/B,gBAAgB,OAAO,MAAM,IAAI,SAAS,KAAK,CAAC,MAAO,CAAC,GAAG,OAAO,KAAK,eAAe,KAAK,IAAI,EAAE,SAAS,OAAO,KAAK,OAAO,CAAC,EAAE,WAAW,OAAO,KAAK,OAAO,CAAC,CAAC,CAAE,CAAC,EACzK,kBAAkB,0BAA0B,GAAG,aAAa,CAC1D,MAAM,OAAO,OAAO,cAAc,CAAC,EACnC,UAAU,OAAO,OAAO,KAAK,CAAC,EAC9B,OAAO,OAAO,mBAAmB,EAAE,EACnC,SAAS,gBACT,YAAY,gBAAgB,IAAI,SAAS,KAAK,CAAC,OAAO,KAAK,EAAG,CAAC,EAC/D,aAAa,SACf,EAAE,WAAW,OAAO,OAAO,KAAK,CAAC,EAAE,IAAI,OAAO,OAAO,cAAc,CAAC,CAAC,EACrE,MAAM,SAAW,MAAM,MAAM,GAAG,OAAO,sCAAuC,CAC5E,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAC1E,KAAM,KAAK,UAAU,CACnB,kBAAmB,gBAAgB,YAAY,EAC/C,QAAS,gBAAgB,EACzB,aAAc,kBACd,cAAe,UAAU,CACvB,GAAI,CACF,MAAM,WAAW,mBAAmB,YAAY,EAAE,GAAG,WAAW,OAAO,WACvE,MAAM,SAAS,OAAO,IAAI,gBAAgB,OAAO,SAAS,QAAQ,EAAE,EAAE,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,EAC3F,OAAG,UAAU,CAAC,qBAAqB,QAAQ,GAAE,aAAa,QAAQ,sBAAsB,QAAQ,EACzF,UAAU,CAAC,qBAAqB,QAAQ,EAAE,SAAU,aAAa,QAAQ,qBAAqB,GAAG,EAC1G,MAAY,CAAE,MAAO,EAAI,CAC3B,GAAG,EACH,gBAAiB,sBAAsB,YAAY,EACnD,SAAU,yBAAyB,CACrC,CAAC,CACH,CAAC,EACK,KAAO,MAAM,SAAS,KAAK,EACjC,GAAI,CAAC,SAAS,IAAM,CAAC,KAAK,SAAW,CAAC,KAAK,YAAa,MAAM,IAAI,MAAM,KAAK,OAAS,kCAAkC,EAKxH,MAAM,YAAY,iCAAiC,OAAO,KAAK,YAAY,EAAE,EAC7E,kBAAkB,mBAAmB,mBAAmB,aAAa,CACnE,MAAM,OAAO,OAAO,cAAc,CAAC,EACnC,UAAU,OAAO,OAAO,KAAK,CAAC,EAC9B,SAAS,gBACT,YAAY,gBAAgB,IAAI,SAAS,KAAK,CAAC,OAAO,KAAK,EAAG,CAAC,EAC/D,aAAa,UACb,kBAAkB,OAAO,KAAK,YAAY,EAAE,CAC9C,EAAE,OAAO,KAAK,YAAY,EAAE,EAAE,WAAW,EAEzC,WAAW,IAAM,CAAE,mBAAmB,EACtC,OAAO,SAAS,KAAO,KAAK,WAAa,EAAG,GAAG,CACjD,OAAS,MAAO,CACd,MAAM,MAAM,SAAW,kCAAkC,EACzD,gBAAgB,OAAO,CACzB,EACF,CAEA,eAAe,uBAAwB,CACrC,MAAM,OAAS,SAAS,cAAc,oBAAoB,EAC1D,GAAG,aAAa,CACd,MAAM,OAAO,YAAY,YAAY,EACrC,kBAAkB,6BAA6B,OAAO,aAAa,CACjE,MAAM,OAAO,OAAO,cAAc,CAAC,EACnC,aAAa,oDACb,iBAAiB,oBACnB,EAAE,oBAAoB,CACxB,CACI,SAAU,OAAO,SAAW,GAAM,OAAO,YAAc,kCAC3D,GAAI,CACF,MAAM,SAAW,MAAM,MAAM,GAAG,OAAO,iCAAkC,CACvE,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAC1E,KAAM,KAAK,UAAU,CAAE,kBAAmB,aAAe,gBAAgB,YAAY,EAAI,KAAM,QAAS,gBAAgB,CAAE,CAAC,CAC7H,CAAC,EACK,KAAO,MAAM,SAAS,KAAK,EACjC,GAAI,CAAC,SAAS,IAAM,CAAC,KAAK,SAAW,CAAC,KAAK,YAAa,MAAM,IAAI,MAAM,KAAK,OAAS,2CAA2C,EACjI,WAAW,IAAM,CAAE,OAAO,SAAS,KAAO,KAAK,WAAa,EAAG,GAAG,CACpE,OAAS,MAAO,CACV,SAAU,OAAO,SAAW,GAAO,OAAO,YAAc,qBAC5D,OAAO,MAAM,MAAM,SAAW,4EAA4E,EAC1G,gBAAgB,QAAQ,CAC1B,CACF,CACA,SAAS,sBAAuB,CAC9B,GAAI,CAAC,aAAc,OAAO,KAC1B,MAAM,WAAa,CACjB,aAAa,cAAc,oBAAoB,EAC/C,aAAa,cAAc,mBAAmB,EAC9C,aAAa,cAAc,oBAAoB,EAC/C,aAAa,cAAc,kBAAkB,EAC7C,YACF,EAAE,OAAO,OAAO,EAChB,OAAO,WAAW,KAAK,SAAW,QAAQ,aAAe,QAAQ,aAAe,CAAC,GAAK,WAAW,CAAC,GAAK,IACzG,CAEA,SAAS,qBAAsB,CAC7B,GAAI,CAAC,aAAc,MAAO,CAAC,EAC3B,MAAM,OAAS,aAAa,QAAQ,mBAAmB,EACjD,SAAW,CACf,MACA,OACA,aACA,GAAG,aAAa,iBAAiB,mHAAmH,CACtJ,EAAE,OAAO,OAAO,EAChB,MAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,CAC9B,CAEA,SAAS,oBAAoB,QAAS,MAAO,CAC3C,GAAK,QACL,IAAI,CAAE,QAAQ,UAAY,KAAO,MAAgB,CAAC,CAClD,GAAI,CAAE,QAAQ,SAAS,CAAE,IAAK,MAAO,KAAM,EAAG,SAAU,MAAO,CAAC,CAAG,MAAgB,CAAC,EACtF,CAEA,SAAS,oBAAqB,CAC5B,MAAM,IAAM,IAAM,oBAAoB,EAAE,QAAQ,SAAW,oBAAoB,QAAS,CAAC,CAAC,EAC1F,IAAI,EACJ,sBAAsB,IAAM,CAC1B,IAAI,EACJ,sBAAsB,GAAG,CAC3B,CAAC,EACD,CAAC,GAAI,GAAI,IAAK,GAAG,EAAE,QAAQ,OAAS,WAAW,IAAK,KAAK,CAAC,CAC5D,CAEA,SAAS,gBAAgB,KAAM,QAAU,CAAC,EAAG,CAC3C,GAAI,CAAC,cAAgB,CAAC,OAAS,CAAC,aAAc,OAC9C,MAAM,iBAAmB,qBAAqB,EACxC,kBAAoB,iBAAmB,iBAAiB,UAAY,EAK1E,GAJA,aAAa,UAAY,YAAY,aAAc,MAAQ,SAAS,EACpE,MAAM,OAAS,GACf,+BAA+B,KAAK,EACpC,SAAS,gBAAgB,UAAU,IAAI,gBAAgB,EACnD,QAAQ,YAAc,GAAO,CAC/B,MAAM,QAAU,IAAM,CACpB,MAAM,aAAe,qBAAqB,EACtC,eAAc,aAAa,UAAY,kBAC7C,EACA,QAAQ,EACR,sBAAsB,OAAO,EAC7B,WAAW,QAAS,EAAE,CACxB,MACE,mBAAmB,CAEvB,CAEA,SAAS,kBAAmB,CACrB,QACL,MAAM,OAAS,GACf,SAAS,gBAAgB,UAAU,OAAO,gBAAgB,EAC5D,CAGA,SAAS,kCAAkC,MAAM,CAC/C,MAAM,UAAU,OAAO,SAEjB,OAAO,UAAU,gBAAgB,mBAAmB,EAC1D,GAAG,OAAO,CACR,MAAM,SAAS,OAAO,cAAc,oBAAoB,EAClD,MAAM,UAAU,cAAc,IAAI,EAClC,UAAU,UAAU,cAAc,uBAAuB,EAC/D,IAAI,IAAI,UAAU,cAAc,6BAA6B,EACzD,MAAM,KAAK,cAAc,uBAAuB,GAAK,OAAO,cAAc,sCAAsC,EACjH,UAAU,OAAO,WAAW,QACzB,MACF,IAAI,SAAS,cAAc,KAAK,EAChC,IAAI,UAAU,8BAEhB,MAAM,UAAU,IAAI,wBAAwB,EAC5C,MAAM,MAAM,eAAe,UAAU,EACrC,IAAI,YAAY,KAAK,EAClB,MAAM,cAAc,KAAI,MAAM,sBAAsB,WAAW,GAAG,EAEzE,CAEA,MAAM,UAAU,UAAU,gBAAgB,mBAAmB,GAAK,UAAU,UAAU,mBAAmB,EACzG,GAAG,UAAU,CACX,MAAM,SAAS,UAAU,cAAc,cAAc,EAC/C,QAAQ,UAAU,cAAc,8BAA8B,EACpE,IAAI,IAAI,UAAU,cAAc,4BAA4B,EACxD,MAAM,KAAK,cAAc,gDAAgD,GAAK,SAAS,cAAc,gDAAgD,EACtJ,UAAU,SAAS,QAChB,MACF,IAAI,SAAS,cAAc,KAAK,EAChC,IAAI,UAAU,6BAEhB,MAAM,UAAU,IAAI,yBAAyB,EAC7C,IAAI,YAAY,KAAK,EACP,OAAO,WAAW,oBAAoB,EAAE,SAEpD,QAAQ,YAAY,GAAG,EACvB,IAAI,QAAQ,eAAe,oBAE3B,SAAS,sBAAsB,WAAW,GAAG,EAC7C,IAAI,QAAQ,eAAe,mBAGjC,CACF,CAEA,SAAS,+BAA+B,MAAM,CAC5C,kCAAkC,KAAK,EACvC,sBAAsB,UAAU,CAAC,kCAAkC,KAAK,CAAE,CAAC,EAC3E,WAAW,UAAU,CAAC,kCAAkC,KAAK,CAAE,EAAE,EAAE,CACrE,CAEA,OAAO,sBAAsB,CAC3B,QAAQ,WACR,UAAU,UAAU,CAAC,+BAA+B,QAAQ,CAAE,CAChE,EACA,OAAO,iBAAiB,SAAS,UAAU,CAAC,+BAA+B,QAAQ,CAAE,EAAE,CAAC,QAAQ,EAAI,CAAC,EAGrG,SAAS,UAAU,MAAO,CACxB,MAAM,KAAO,MAAM,QAAQ,MAAM,IAAI,EAAI,MAAM,KAAO,CAAC,EACvD,OAAK,KAAK,OACH;AAAA;AAAA;AAAA;AAAA,YAIC,KAAK,IAAI,KAAO;AAAA;AAAA,yBAEH,WAAW,IAAI,UAAY,UAAU,CAAC;AAAA,qBAC1C,aAAa,IAAI,YAAc,WAAW,IAAI,QAAU,EAAE,EAAE,QAAQ,MAAO,MAAM,CAAC,CAAC;AAAA,uBACjF,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,kBATJ,EAY3B,CAGA,SAAS,yBAAyB,MAAO,CACvC,OAAO,OAAO,OAAS,EAAE,EACtB,QAAQ,WAAY,GAAG,EACvB,QAAQ,WAAY,GAAG,EACvB,QAAQ,UAAW,GAAG,EACtB,QAAQ,OAAQ,GAAG,EACnB,KAAK,CACV,CAEA,SAAS,uBAAuB,KAAM,QAAS,CAC7C,MAAM,YAAc,yBAAyB,OAAO,EACpD,GAAI,CAAC,MAAQ,CAAC,YAAa,OAAO,MAAQ,GAC1C,MAAM,KAAO,SAAS,cAAc,KAAK,EACzC,KAAK,UAAY,KACjB,MAAM,gBAAkB,MAAM,KAAK,KAAK,QAAQ,EAAE,KAAK,MAAQ,yBAAyB,KAAK,WAAW,CAAC,EACzG,GAAI,gBAAiB,CACnB,MAAM,UAAY,yBAAyB,gBAAgB,WAAW,EACtE,GAAI,YAAc,aAAe,UAAU,WAAW,WAAW,EAC/D,uBAAgB,OAAO,EAChB,KAAK,SAEhB,CAEA,GADc,yBAAyB,KAAK,WAAW,EAC7C,WAAW,WAAW,EAAG,CACjC,MAAM,QAAU,OAAO,KAAK,aAAe,EAAE,EAAE,KAAK,EAC9C,UAAY,QAAQ,MAAM,QAAQ,QAAQ,WAAW,EAAI,YAAY,MAAM,EAAE,KAAK,EACxF,OAAO,WAAW,SAAS,EAAE,QAAQ,MAAO,MAAM,CACpD,CACA,OAAO,IACT,CAEA,SAAS,uBAAuB,MAAO,CACrC,MAAM,eAAiB,CACrB,MAAM,gBACN,MAAM,iBACN,OAAO,aAAa,KACpB,OAAO,UAAU,aAAa,KAC9B,OAAO,WAAW,aAAa,KAC/B,OAAO,UAAU,iBACjB,OAAO,WAAW,gBACpB,EAAE,OAAO,OAAO,EACV,eAAiB,CACrB,MAAM,gBACN,MAAM,iBACN,OAAO,aAAa,KACpB,OAAO,UAAU,aAAa,KAC9B,OAAO,WAAW,aAAa,KAC/B,OAAO,UAAU,iBACjB,OAAO,WAAW,gBACpB,EAAE,OAAO,OAAO,EACV,SAAW,eAAe,IAAI,MAAM,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,OAAS,EAAE,MAAM,EAAE,CAAC,EACjF,GAAI,SAAU,OAAO,uBAAuB,aAAa,QAAQ,EAAG,MAAM,OAAO,EACjF,MAAM,SAAW,eAAe,IAAI,MAAM,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,OAAS,EAAE,MAAM,EAAE,CAAC,EACjF,GAAI,SAAU,CACZ,MAAM,YAAc,yBAAyB,MAAM,OAAO,EACpD,SAAW,OAAO,QAAQ,EAC1B,UAAY,aAAe,yBAAyB,QAAQ,EAAE,WAAW,WAAW,EACtF,SAAS,QAAQ,OAAO,MAAM,SAAW,EAAE,EAAG,EAAE,EAAE,KAAK,EACvD,SACJ,OAAO,WAAW,SAAS,EAAE,QAAQ,MAAO,MAAM,CACpD,CACA,MAAO,EACT,CAGA,SAAS,qBAAqB,KAAM,CAClC,MAAM,KAAO,SAAS,cAAc,KAAK,EACzC,KAAK,UAAY,MAAQ,GACzB,MAAM,MAAQ,KAAK,cAAc,GAAG,EAC9B,WAAa,KAAK,iBAAiB,GAAG,EAC5C,GAAI,OAAS,WAAW,OAAS,EAAG,CAClC,MAAM,KAAO,OAAO,MAAM,aAAe,EAAE,EAAE,KAAK,EAC9C,MAAQ,KAAK,QAAU,KAAK,MAAM,OAAO,CAC/C,CACA,OAAO,KAAK,SACd,CAEA,SAAS,aAAa,MAAO,CAC3B,MAAM,MAAQ,SAAS,KAAK,EAAI,aAAa,WAAW,SAAS,KAAK,CAAC,CAAC,UAAU,WAAW,MAAM,IAAI,CAAC,mBAAqB,GACvH,MAAQ,MAAM,WAAa,OAAO,OAAO,MAAQ,oBACjD,QAAU,YAAY,KAAK,EAC3B,QAAU,QAAU,mDAAmD,mBAAmB,OAAO,CAAC,GAAK,GACvG,iBAAmB,uBAAuB,KAAK,EAC/C,cAAgB,MAAM,eAAiB,OAAO,WAAW,MAAQ,kBACjE,WAAW,OAAO,OAAO,YAAY,KAAK,CAAC,EAAE,QAAQ,WAAW,EAAE,GAAG,CAAC,EAC5E,yBAAkB,YAAY,cAAc,MAAM,CAChD,MAAM,WACN,YAAY,CAAC,OAAO,OAAO,IAAI,OAAO,mBAAmB,OAAO,cAAc,EAAE,CAAC,EACjF,aAAa,SACf,EAAE,QAAQ,EACH;AAAA;AAAA;AAAA,uCAG4B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,kBAK1B,WAAW,MAAM,MAAQ,aAAa,CAAC;AAAA,sDACH,iBAAiB,MAAM,wBAAwB,CAAC;AAAA;AAAA,gBAEtF,QAAU,aAAa,WAAW,OAAO,CAAC,+BAAiC,EAAE;AAAA;AAAA,2BAElE,WAAW,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,yEAKc,WAAW,KAAK,CAAC;AAAA,wEAClB,WAAW,eAAe,KAAK,CAAC,CAAC;AAAA,wEACjC,WAAW,gBAAgB,KAAK,GAAK,kBAAkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKnG,WAAW,YAAY,KAAK,CAAC,CAAC;AAAA,oBAChC,WAAW,WAAW,KAAK,CAAC,CAAC,GAAG,kBAAkB,OAAO,OAAO,OAAS,OAAO,OAAO,GAAG,EAAI,SAAQ,WAAW,kBAAkB,OAAO,OAAO,OAAS,OAAO,OAAO,GAAG,CAAC,EAAI,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CASzJ,kBAAoB,4FAA4F;AAAA;AAAA;AAAA,cAG/I,UAAU,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,0CAIY,WAAW,KAAK,CAAC;AAAA,gBAC3C,QAAU,MAAM,WAAW,OAAO,CAAC,OAAS,uDAAuD;AAAA,gBACnG,QAAU,2DAA2D,WAAW,KAAK,CAAC,mGAAmG,mBAAmB,OAAO,CAAC,kEAAkE,WAAW,OAAO,CAAC,oHAA+G,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMjZ,WAAW,YAAY,KAAK,CAAC,CAAC,kBAAkB,WAAW,WAAW,KAAK,CAAC,CAAC,GAAG,kBAAkB,OAAO,OAAO,OAAS,OAAO,OAAO,GAAG,EAAI,SAAQ,WAAW,kBAAkB,OAAO,OAAO,OAAS,OAAO,OAAO,GAAG,CAAC,EAAI,EAAE;AAAA;AAAA;AAAA,iBAIzP,CAEA,SAAS,aAAa,MAAO,QAAS,CACpC,MAAM,aAAe,CAAC,SAAW,QAAQ,SAAW,GACpD,aAAe,MACf,sBAAsB,KAAK,EAC3B,gBAAkB,IAAI,IAClB,UAAS,QAAQ,OAAS,IAC1B,UAAS,QAAQ,OAAS,IAC1B,aAAY,WAAW,OAAS,IAChC,kBAAiB,gBAAgB,OAAS,IAC1C,UAAS,QAAQ,OAAS,IAC1B,WACF,SAAS,UAAY,aAAa,KAAK,EACvC,+BAA+B,QAAQ,GAErC,cAAc,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,QAAS,CAAC,CAClE,CAEA,SAAS,UAAU,OAAQ,CAOzB,GANA,UAAY,MAAM,QAAQ,MAAM,EAAI,OAAS,CAAC,EAC1C,YAAW,UAAU,OAAS,IAC9B,UAAS,QAAQ,OAAS,IAI1B,CAAC,SAAU,CACT,cAAa,YAAY,OAAS,IACtC,MACF,CACA,GAAI,CAAC,UAAU,OAAQ,CACrB,SAAS,UAAY,+EACrB,MACF,CACA,SAAS,UAAY,UAAU,IAAI,SAAS,EAAE,KAAK,EAAE,CACvD,CAEA,MAAM,mBAAmB,+BACnB,sBAAsB,KAAM,IAClC,SAAS,kBAAkB,CACzB,GAAG,CACD,MAAM,OAAO,KAAK,MAAM,aAAa,QAAQ,kBAAkB,GAAG,MAAM,EAExE,MADG,CAAC,QAAQ,CAAC,MAAM,QAAQ,OAAO,MAAM,GAAG,CAAC,OAAO,OAAO,QACvD,KAAK,IAAI,EAAE,OAAO,OAAO,SAAS,CAAC,EAAE,sBAA6B,KAC9D,OAAO,MAChB,MAAS,CAAC,OAAO,IAAK,CACxB,CACA,SAAS,kBAAkB,OAAO,CAChC,GAAG,CAAC,aAAa,QAAQ,mBAAmB,KAAK,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC,CAAE,MAAS,CAAC,CACrG,CACA,eAAe,YAAa,CAC1B,MAAM,OAAO,iBAAiB,EACxB,aAAa,EAAQ,YACxB,cACE,YAAU,UAAU,OAAO,IAC3B,WAAS,SAAS,OAAO,KACrB,OACP,UAAU,MAAM,EACT,YACP,UAAU,OAAO,IAEnB,GAAI,CACF,MAAM,WAAW,IAAI,gBACf,QAAQ,OAAO,WAAW,IAAI,WAAW,MAAM,EAAE,IAAK,EACtD,SAAW,MAAM,MAAM,GAAG,OAAO,+BAAgC,CACrE,QAAS,CAAE,OAAQ,kBAAmB,EACtC,OAAO,WAAW,MACpB,CAAC,EAAE,QAAQ,IAAI,OAAO,aAAa,OAAO,CAAC,EACrC,KAAO,MAAM,SAAS,KAAK,EACjC,GAAI,CAAC,SAAS,IAAM,CAAC,KAAK,QAAS,MAAM,IAAI,MAAM,KAAK,OAAS,8BAA8B,EAC/F,MAAM,OAAO,MAAM,QAAQ,KAAK,MAAM,EAAI,KAAK,OAAS,CAAC,EAEzD,GADA,kBAAkB,MAAM,EACrB,aAAa,CACd,UAAU,OACV,MAAM,YAAY,YAAY,iBAAiB,kBAAkB,EAAE,OAChE,UAAY,OAAO,QAAQ,aAAe,OAAO,SAClD,YAAY,OAAO,GACnB,SAAS,OAAO,GAChB,UAAU,MAAM,EAEpB,MACE,UAAU,MAAM,CAEpB,OAAS,MAAO,CACV,YAAW,UAAU,OAAS,IAC9B,CAAC,QAAU,UACb,QAAQ,OAAS,GACjB,QAAQ,YAAc,OAAO,OAAO,aAChC,0EACC,MAAM,SAAW,+BAE1B,CACF,CAEA,eAAe,mBAAmB,WAAY,CAC5C,GAAI,CACF,MAAM,SAAW,MAAM,MAAM,GAAG,OAAO,sBAAsB,mBAAmB,UAAU,CAAC,GAAI,CAAE,QAAS,CAAE,OAAQ,kBAAmB,CAAE,CAAC,EACpI,KAAO,MAAM,SAAS,KAAK,EACjC,GAAI,CAAC,SAAS,IAAM,CAAC,KAAK,SAAW,CAAC,KAAK,MAAO,OAClD,MAAM,MAAQ,UAAU,UAAU,MAAQ,OAAO,KAAK,iBAAiB,IAAM,OAAO,UAAU,GAAK,OAAO,KAAK,IAAI,IAAM,OAAO,UAAU,GAAK,OAAO,KAAK,kBAAkB,EAAE,IAAM,OAAO,UAAU,CAAC,EACnM,OAAS,IAAG,UAAU,KAAK,EAAI,KAAK,OACpC,cAAgB,OAAO,gBAAgB,YAAY,CAAC,IAAM,OAAO,UAAU,GAC7E,aAAa,KAAK,MAAO,CAAE,OAAQ,EAAM,CAAC,CAE9C,MAAgB,CAEhB,CACF,CAEA,IAAI,uBAAuB,KAC3B,SAAS,uBAAuB,CAC9B,OAAG,yBACH,wBAAwB,gBAAgB,CACtC,MAAM,WAAW,IAAI,gBACf,QAAQ,OAAO,WAAW,IAAI,WAAW,MAAM,EAAE,IAAK,EAC5D,GAAG,CACD,MAAM,SAAS,MAAM,MAAM,GAAG,OAAO,+BAA+B,CAAC,QAAQ,CAAC,OAAO,kBAAkB,EAAE,OAAO,WAAW,MAAM,CAAC,EAC5H,KAAK,MAAM,SAAS,KAAK,EAC/B,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,QAAQ,MAAM,IAAI,MAAM,KAAK,OAAO,iCAAiC,EAC5F,MAAM,OAAO,MAAM,QAAQ,KAAK,MAAM,EAAE,KAAK,OAAO,CAAC,EACrD,OAAG,OAAO,SAAQ,UAAU,OAAO,kBAAkB,MAAM,GACpD,MACT,QAAC,CACC,OAAO,aAAa,OAAO,EAC3B,uBAAuB,IACzB,CACF,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,eAAQ,KAAK,mCAAmC,OAAO,SAAS,KAAK,EAAS,CAAC,CAAE,CAAC,EACtG,uBACT,CAEA,eAAe,UAAU,WAAY,CACnC,MAAM,aAAa,iBAAiB,GAAG,CAAC,EACxC,sBAAsB,EACtB,MAAM,QAAQ,qBAAuB,aAAa,KAAK,OACrD,OAAO,MAAM,iBAAiB,IAAI,OAAO,UAAU,GACnD,OAAO,MAAM,IAAI,IAAI,OAAO,UAAU,GACtC,OAAO,MAAM,kBAAkB,EAAE,IAAI,OAAO,UAAU,CACxD,GAAK,KACL,GAAI,CACE,UAAS,QAAQ,OAAS,IAC1B,UAAS,QAAQ,OAAS,IAC1B,aAAY,WAAW,OAAS,IAChC,SACF,UAAU,aACV,aAAa,QACb,sBAAsB,OAAO,EAC7B,gBAAgB,IAAI,IAChB,qBAAoB,aAAa,QAAQ,CAAC,OAAO,EAAK,CAAC,EACxD,kBAAgB,gBAAgB,OAAO,KACjC,kBAAiB,gBAAgB,OAAS,IACjD,YAAW,UAAU,OAAS,IAC9B,UAAS,QAAQ,OAAS,IAC9B,MAAM,SAAW,MAAM,MAAM,GAAG,OAAO,sBAAsB,mBAAmB,UAAU,CAAC,GAAI,CAAE,QAAS,CAAE,OAAQ,kBAAmB,CAAE,CAAC,EACpI,KAAO,MAAM,SAAS,KAAK,EACjC,GAAI,CAAC,SAAS,IAAM,CAAC,KAAK,QAAS,MAAM,IAAI,MAAM,KAAK,OAAS,4BAA4B,EAI7F,GAAG,aAAa,OAAO,CACrB,MAAM,OAAO,CAAC,GAAG,aAAa,OAAO,MACnC,OAAO,KAAK,iBAAiB,IAAI,OAAO,KAAK,OAAO,iBAAiB,GACrE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,OAAO,IAAI,CAC7C,EAAE,KAAK,KAAK,EAAE,OAAO,OAAO,EAC5B,UAAU,OACV,kBAAkB,MAAM,CAC1B,CACA,aAAa,KAAK,MAClB,sBAAsB,KAAK,KAAK,EAC5B,qBAAoB,aAAa,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CACnE,OAAS,MAAO,CACV,kBAAiB,gBAAgB,OAAS,IAC9C,MAAM,SAAW,UAAU,KAAK,OAAS,OAAO,MAAM,iBAAiB,IAAM,OAAO,UAAU,GAAK,OAAO,MAAM,IAAI,IAAM,OAAO,UAAU,GAAK,OAAO,MAAM,kBAAkB,EAAE,IAAM,OAAO,UAAU,CAAC,EACzM,GAAI,SAAU,CACZ,aAAa,QAAQ,EACrB,MACF,CACI,UAAS,QAAQ,OAAS,IAC1B,UAAS,QAAQ,OAAS,IAC1B,aAAY,WAAW,OAAS,IAChC,UACF,QAAQ,OAAS,GACjB,QAAQ,YAAc,MAAM,SAAW,8BAEzC,WAAW,CACb,CACF,CAEA,KAAK,iBAAiB,QAAS,SAAU,MAAO,CAC1C,MAAM,QAAU,MAAM,OAAO,QAAQ,0BAA0B,IACjE,wBAAwB,OAAO,MAAM,OAAO,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EACvE,0BAA0B,oBAC3B,kBAAkB,GAClB,wBAAwB,EACxB,qBAAqB,GACrB,mBAAmB,IAGzB,CAAC,EAED,KAAK,iBAAiB,QAAS,eAAgB,MAAO,CACpD,MAAM,KAAO,MAAM,OAAO,QAAQ,yBAAyB,EACrD,KAAO,MAAM,OAAO,QAAQ,oBAAoB,EAChD,MAAQ,MAAM,OAAO,QAAQ,qBAAqB,EAClD,SAAW,MAAM,OAAO,QAAQ,qBAAqB,EACrD,KAAO,MAAM,OAAO,QAAQ,qBAAqB,EACjD,WAAa,MAAM,OAAO,QAAQ,wBAAwB,EAC1D,cAAgB,MAAM,OAAO,QAAQ,4BAA4B,EACjE,aAAe,MAAM,OAAO,QAAQ,2BAA2B,EAC/D,QAAU,MAAM,OAAO,QAAQ,oBAAoB,EACnD,eAAiB,MAAM,OAAO,QAAQ,4BAA4B,EAClE,WAAa,MAAM,OAAO,QAAQ,2BAA2B,EAC7D,MAAQ,MAAM,OAAO,QAAQ,wBAAwB,EACrD,KAAO,MAAM,OAAO,QAAQ,kBAAkB,EAMpD,GAAI,WAAY,CACd,MAAM,GAAK,WAAW,aAAa,yBAAyB,EACtD,KAAO,GAAK,SAAS,eAAe,EAAE,EAAI,KAChD,GAAI,KAAM,CACR,MAAM,SAAW,WAAW,aAAa,eAAe,IAAM,OAC9D,WAAW,aAAa,gBAAiB,SAAW,QAAU,MAAM,EACpE,KAAK,UAAU,OAAO,eAAgB,QAAQ,EAC9C,KAAK,YAAc,SAAW,WAAW,KAAK,aAAa,uBAAuB,GAAK,GAAI,GAAG,EAAK,KAAK,aAAa,uBAAuB,GAAK,GACjJ,WAAW,YAAc,SAAW,mBAAqB,WAC3D,CACA,MACF,CAIA,GAFI,MAAM,gBAAgB,SAAS,EAC/B,OAAO,iBAAiB,EACxB,MAAQ,aAAc,CACxB,MAAM,GAAK,KAAK,aAAa,kBAAkB,EAC/C,gBAAgB,IAAI,IAAK,gBAAgB,IAAI,EAAE,GAAK,GAAK,CAAC,EAC1D,gBAAgB,UAAW,CAAE,UAAW,EAAM,CAAC,CACjD,CACA,GAAI,OAAS,aAAc,CACzB,MAAM,GAAK,MAAM,aAAa,mBAAmB,EACjD,gBAAgB,IAAI,GAAI,KAAK,KAAK,gBAAgB,IAAI,EAAE,GAAK,GAAK,EAAG,CAAC,CAAC,EACvE,gBAAgB,UAAW,CAAE,UAAW,EAAM,CAAC,CACjD,CACA,GAAI,gBAAkB,aAAc,CAAE,MAAM,eAAe,EAAG,MAAM,2BAA2B,EAAG,MAAQ,CAC1G,GAAI,UAAY,eAAe,EAAI,EAAG,CACpC,MAAM,OAAO,YAAY,YAAY,EAC/B,MAAM,OAAO,MAAM,IAAI,SAAS,KAAK,CAAC,MAAO,CAAC,QAAQ,OAAO,KAAK,eAAe,KAAK,IAAI,EAAE,UAAU,OAAO,KAAK,MAAM,cAAc,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC,EAAE,SAAS,OAAO,KAAK,OAAO,CAAC,CAAC,CAAE,CAAC,EACrM,SAAS,OAAO,MAAM,IAAI,SAAS,KAAK,CAAC,MAAO,CAAC,GAAG,OAAO,KAAK,eAAe,KAAK,IAAI,EAAE,SAAS,OAAO,KAAK,OAAO,CAAC,EAAE,WAAW,OAAO,KAAK,OAAO,CAAC,CAAC,CAAE,CAAC,EAClK,kBAAkB,iBAAiB,GAAG,aAAa,CACjD,MAAM,OAAO,OAAO,cAAc,CAAC,EACnC,UAAU,OAAO,OAAO,KAAK,CAAC,EAC9B,MACA,SACA,YAAY,SAAS,IAAI,SAAS,KAAK,CAAC,OAAO,KAAK,EAAG,CAAC,EACxD,aAAa,SACf,EAAE,OAAO,OAAO,KAAK,CAAC,EAAE,IAAI,OAAO,OAAO,cAAc,CAAC,CAAC,EAC1D,gBAAgB,QAAQ,CAC1B,CACI,eAAe,gBAAgB,SAAS,EACxC,cAAc,gBAAgB,QAAQ,EACtC,YAAc,eAAe,EAAI,GAKnC,gBAAgB,OAAO,EAErB,MAAM,0BAA0B,EAChC,SAAS,sBAAsB,CACrC,CAAC,EAED,SAAS,iBAAiB,UAAW,SAAU,MAAO,CAChD,MAAM,MAAQ,UAAU,iBAAiB,CAC/C,CAAC,EAEG,YACF,WAAW,iBAAiB,QAAS,UAAY,CAG/C,OAAO,SAAS,OAAO,aAAa,CAAC,CACvC,CAAC,EAGH,MAAM,WAAa,4BAA4B,EAC3C,WAGF,UAAU,UAAU,EAEpB,WAAW,CAEf,GAAG",
  "names": ["value"]
}
