{
  "version": 3,
  "sources": ["/cdn/shop/t/16/assets/dd-ai-preview-all-pdp.js?ddv=20260629-email-gate"],
  "sourcesContent": ["(function () {\n  const MAX_ATTEMPTS = 5;\n  const VISITOR_ID_KEY = 'ddAiPreviewVisitorId';\n  const ANALYTICS_VERSION = '2';\n  const GA4_MEASUREMENT_ID = 'G-WN0SELMF2M';\n  const CONFIG_CACHE = new Map();\n  const LOADING_STEPS = [\n    {\n      title: 'Reading your pet photo',\n      copy: 'Finding the face, ears, muzzle, and markings that make your pet recognizable.',\n      status: 'Reading your pet photo...',\n      progress: 16\n    },\n    {\n      title: 'Finding the face details',\n      copy: 'Checking the photo before we draw so the preview stays close to your pet.',\n      status: 'Finding your pet\u2019s face details...',\n      progress: 30\n    },\n    {\n      title: 'Drawing custom line art',\n      copy: 'Our AI artist is sketching a clean portrait from your uploaded photo.',\n      status: 'Drawing your custom pet line art...',\n      progress: 52\n    },\n    {\n      title: 'Placing it on your product',\n      copy: 'Positioning the artwork on this item and print placement.',\n      status: 'Placing the artwork on this product...',\n      progress: 70\n    },\n    {\n      title: 'Checking the artwork',\n      copy: 'Still working \u2014 detailed fur, darker photos, or close crops can take a little longer.',\n      status: 'Still working. Checking the artwork before we show it...',\n      progress: 84\n    },\n    {\n      title: 'Almost there',\n      copy: 'Final quality check. Please keep this page open while we prepare your preview.',\n      status: 'Almost there. Preparing your preview...',\n      progress: 93\n    }\n  ];\n\n  function analyticsProcessingAllowed() {\n    try {\n      const privacy = window.Shopify && window.Shopify.customerPrivacy;\n      return !privacy ||\n        typeof privacy.analyticsProcessingAllowed !== 'function' ||\n        privacy.analyticsProcessingAllowed();\n    } catch (error) {\n      return false;\n    }\n  }\n\n  function ensureGa4() {\n    if (!analyticsProcessingAllowed()) return false;\n    window.dataLayer = window.dataLayer || [];\n    if (typeof window.gtag !== 'function') {\n      window.gtag = function () {\n        window.dataLayer.push(arguments);\n      };\n    }\n    if (!window.ddAiPreviewGa4Initialized) {\n      window.ddAiPreviewGa4Initialized = true;\n      window.gtag('js', new Date());\n      window.gtag('config', GA4_MEASUREMENT_ID, { send_page_view: false });\n      const script = document.createElement('script');\n      script.async = true;\n      script.src = `https://www.googletagmanager.com/gtag/js?id=${encodeURIComponent(GA4_MEASUREMENT_ID)}`;\n      script.setAttribute('data-dd-ai-preview-ga4', 'true');\n      document.head.appendChild(script);\n    }\n    return true;\n  }\n\n  function track(eventName, detail) {\n    const payload = Object.assign({\n      event_category: 'ai_preview',\n      funnel_version: ANALYTICS_VERSION\n    }, detail || {});\n    try {\n      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {\n        window.Shopify.analytics.publish(eventName, payload);\n      }\n      if (ensureGa4()) {\n        window.gtag('event', eventName, Object.assign({\n          send_to: GA4_MEASUREMENT_ID\n        }, payload));\n      }\n    } catch (error) {\n      console.warn('Dilly AI preview analytics emit failed', error);\n    }\n    document.dispatchEvent(new CustomEvent(eventName, { detail: payload }));\n  }\n\n  function fileSizeBucket(bytes) {\n    if (bytes < 1024 * 1024) return 'under_1mb';\n    if (bytes < 4 * 1024 * 1024) return '1_to_4mb';\n    if (bytes <= 8 * 1024 * 1024) return '4_to_8mb';\n    return 'over_8mb';\n  }\n\n  function generationFailureType(error) {\n    const message = String(error && error.message || error || '').toLowerCase();\n    if (message.includes('429') || message.includes('rate limit') || message.includes('preview limit')) return 'rate_limited';\n    if (message.includes('taking longer') || message.includes('timeout') || message.includes('aborted')) return 'timeout';\n    if (message.includes('form was not ready')) return 'product_form_unavailable';\n    if (\n      message.includes('clear photo') ||\n      message.includes('single pet') ||\n      message.includes('not a pet') ||\n      message.includes('pet photo') ||\n      message.includes('face visible')\n    ) return 'photo_rejected';\n    if (\n      message.includes('did not respond') ||\n      message.includes('load failed') ||\n      message.includes('failed to fetch') ||\n      message.includes('network')\n    ) return 'network_error';\n    if (\n      message.includes('temporarily unavailable') ||\n      message.includes('returned 500') ||\n      message.includes('returned 502') ||\n      message.includes('returned 503') ||\n      message.includes('returned 504')\n    ) return 'service_unavailable';\n    return 'unknown';\n  }\n\n  function getVisitorId() {\n    try {\n      let visitorId = window.localStorage.getItem(VISITOR_ID_KEY);\n      if (!visitorId) {\n        visitorId = window.crypto && window.crypto.randomUUID\n          ? window.crypto.randomUUID()\n          : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n        window.localStorage.setItem(VISITOR_ID_KEY, visitorId);\n      }\n      return visitorId;\n    } catch (error) {\n      return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n    }\n  }\n\n  function fileToDataUrl(file) {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = () => resolve(String(reader.result || ''));\n      reader.onerror = () => reject(reader.error || new Error('Could not read file'));\n      reader.readAsDataURL(file);\n    });\n  }\n\n  function previewServiceBaseUrl(endpoint) {\n    return String(endpoint || '').replace(/\\/+(preview|api\\/dilly\\/preview)?\\/?$/, '');\n  }\n\n  function previewApiUrl(endpoint) {\n    return `${previewServiceBaseUrl(endpoint)}/preview`;\n  }\n\n  function previewUnlockApiUrl(endpoint) {\n    return `${previewServiceBaseUrl(endpoint)}/preview-unlock`;\n  }\n\n  function warmPreviewService(endpoint) {\n    const healthUrl = `${previewServiceBaseUrl(endpoint)}/health`;\n    fetch(healthUrl, { method: 'GET', mode: 'cors', cache: 'no-store' }).catch(() => {});\n  }\n\n  async function requestPreview(endpoint, payload) {\n    const controller = new AbortController();\n    const timeout = window.setTimeout(() => controller.abort(), 210000);\n    let response;\n    try {\n      response = await fetch(previewApiUrl(endpoint), {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(payload),\n        signal: controller.signal\n      });\n    } catch (error) {\n      if (error && error.name === 'AbortError') {\n        throw new Error(\n          'The instant preview is taking longer than expected. You can still upload your photo for an artist proof.'\n        );\n      }\n      throw new Error(\n        error && String(error.message || error) !== 'Load failed'\n          ? String(error.message || error)\n          : 'The instant preview could not finish. Try another clear front-facing photo, or continue with your artist proof.'\n      );\n    } finally {\n      window.clearTimeout(timeout);\n    }\n\n    const responseText = await response.text();\n    let result = {};\n    try {\n      result = responseText ? JSON.parse(responseText) : {};\n    } catch (error) {\n      result = {};\n    }\n    if (response.ok && result.ok) return result;\n    throw new Error(\n      result.error ||\n      (response.status >= 500\n        ? 'The instant preview is temporarily unavailable. You can still upload your photo for an artist proof.'\n        : `Preview service returned ${response.status}`)\n    );\n  }\n\n  async function requestPreviewUnlock(endpoint, payload) {\n    const controller = new AbortController();\n    const timeout = window.setTimeout(() => controller.abort(), 8000);\n    try {\n      const response = await fetch(previewUnlockApiUrl(endpoint), {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(payload),\n        signal: controller.signal\n      });\n      const responseText = await response.text();\n      let result = {};\n      try {\n        result = responseText ? JSON.parse(responseText) : {};\n      } catch (error) {\n        result = {};\n      }\n      if (response.ok && result.ok) return result;\n      throw new Error(result.error || `Preview unlock returned ${response.status}`);\n    } finally {\n      window.clearTimeout(timeout);\n    }\n  }\n\n  function emailLooksValid(email) {\n    return /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(String(email || '').trim());\n  }\n\n  function utmFields() {\n    const out = {};\n    try {\n      const params = new URLSearchParams(window.location.search || '');\n      ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'].forEach((key) => {\n        const value = params.get(key);\n        if (value) out[key] = value.slice(0, 220);\n      });\n    } catch (error) {}\n    return out;\n  }\n\n  function previewUnlockPayload(module, result, email, consentText) {\n    const placement = currentPlacement(module);\n    return Object.assign({\n      email,\n      marketing_consent: true,\n      consent_text: consentText,\n      job_id: result.job_id || '',\n      visitor_id: getVisitorId(),\n      product_handle: module.dataset.productHandle || '',\n      product_title: module.dataset.productTitle || '',\n      variant_id: getVariantId(module),\n      print_location: result.print_location_label || (placement && placement.label) || '',\n      ai_preview_url: result.ai_preview_url || '',\n      pet_photo_url: result.pet_photo_url || result.dog_photo_url || '',\n      page_url: window.location.href\n    }, utmFields());\n  }\n\n  function normalizeId(value) {\n    return String(value || '').split('/').pop();\n  }\n\n  async function loadConfig(url) {\n    if (!url) return null;\n    if (!CONFIG_CACHE.has(url)) {\n      CONFIG_CACHE.set(url, fetch(url, { credentials: 'same-origin' }).then((response) => {\n        if (!response.ok) throw new Error('Preview product configuration could not be loaded');\n        return response.json();\n      }));\n    }\n    return CONFIG_CACHE.get(url);\n  }\n\n  function getProductForm(module) {\n    const scope = module.closest('product-info') || document;\n    const forms = Array.from(scope.querySelectorAll('form[action*=\"/cart/add\"]'));\n    return forms.find((form) => form.querySelector('button[name=\"add\"], [type=\"submit\"][name=\"add\"]')) ||\n      scope.querySelector('product-form form[action*=\"/cart/add\"]') ||\n      forms[0] ||\n      document.querySelector('product-form form[action*=\"/cart/add\"], form[action*=\"/cart/add\"]');\n  }\n\n  function getVariantId(module) {\n    const form = getProductForm(module);\n    const input = form && form.querySelector('[name=\"id\"]');\n    return normalizeId(input ? input.value : module.dataset.variantId);\n  }\n\n  function productConfig(module) {\n    const all = module.ddAiPreviewConfig;\n    return all && all.products && all.products[module.dataset.productHandle];\n  }\n\n  function variantConfig(module) {\n    const product = productConfig(module);\n    if (!product) return null;\n    const variantId = getVariantId(module);\n    return (product.variants && product.variants[variantId]) ||\n      (product.variants && product.variants[String(product.default_variant_id || '')]) ||\n      null;\n  }\n\n  function placements(module) {\n    const product = productConfig(module);\n    return product && Array.isArray(product.placements) && product.placements.length\n      ? product.placements\n      : [];\n  }\n\n  function currentPlacement(module) {\n    const checked = module.querySelector('[data-dd-preview-placement-input]:checked');\n    const available = placements(module);\n    if (checked) {\n      const found = available.find((placement) => placement.key === checked.value || placement.label === checked.value);\n      if (found) return found;\n    }\n    return available[0] || null;\n  }\n\n  function currentMockupUrl(module) {\n    const variant = variantConfig(module);\n    const product = productConfig(module);\n    return (variant && variant.mockup_url) || (product && product.default_mockup_url) || '';\n  }\n\n  function renderPlacementChoices(module, keepKey) {\n    const fieldset = module.querySelector('[data-dd-preview-placement]');\n    const container = module.querySelector('[data-dd-preview-placement-options]');\n    const available = placements(module);\n    if (!fieldset || !container || !available.length) return;\n    fieldset.hidden = available.length <= 1;\n    const selectedKey = keepKey && available.some((placement) => placement.key === keepKey)\n      ? keepKey\n      : available[0].key;\n    container.innerHTML = available.map((placement, index) => `\n      <label class=\"dd-ai-preview__placement-choice\">\n        <input\n          type=\"radio\"\n          name=\"dd-ai-preview-placement-${module.dataset.sectionId || 'main'}\"\n          value=\"${placement.key}\"\n          data-dd-preview-placement-input\n          ${placement.key === selectedKey || (!selectedKey && index === 0) ? 'checked' : ''}\n        >\n        <span>${placement.label}<small>${placement.help || 'Preview placement'}</small></span>\n      </label>\n    `).join('');\n  }\n\n  function syncGpoPrintLocation(module, placement, attempt) {\n    if (!placement || !placement.label) return false;\n    const scope = module.closest('product-info') || document;\n    const input = Array.from(scope.querySelectorAll('input[name=\"radio-1\"]'))\n      .find((candidate) => candidate.value === placement.label);\n    if (input) {\n      if (!input.checked) input.click();\n      input.dispatchEvent(new Event('input', { bubbles: true }));\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n      return true;\n    }\n    if ((attempt || 0) < 10) {\n      window.setTimeout(() => syncGpoPrintLocation(module, placement, (attempt || 0) + 1), 350);\n    }\n    return false;\n  }\n\n  function syncGpoFieldBypass(module, attempt, options) {\n    const bypassPhoto = Boolean(options && options.photo);\n    const hidePhoto = Boolean(options && options.hidePhoto);\n    const bypassPlacement = !options || options.placement !== false;\n    const scope = module.closest('product-info') || document;\n    const fileInput = scope.querySelector('input.gpo-file[name=\"Pet-image\"], input#file-1[name=\"Pet-image\"]');\n    if (fileInput) {\n      const field = fileInput.closest('.gpo-element') || fileInput.parentElement;\n      const wasBypassed = fileInput.dataset.ddAiPreviewBypassed === 'true';\n      if (!('ddAiPreviewHadPresence' in fileInput.dataset)) {\n        fileInput.dataset.ddAiPreviewHadPresence = fileInput.hasAttribute('presence') ? 'true' : 'false';\n        fileInput.dataset.ddAiPreviewWasDisabled = fileInput.disabled ? 'true' : 'false';\n      }\n\n      if (bypassPhoto) {\n        fileInput.dataset.ddAiPreviewBypassed = 'true';\n        fileInput.removeAttribute('presence');\n        fileInput.required = false;\n        fileInput.disabled = true;\n        if (field) {\n          field.classList.remove('has-error');\n          field.querySelectorAll('.messages .help-block.error').forEach((error) => error.remove());\n        }\n      } else if (wasBypassed) {\n        delete fileInput.dataset.ddAiPreviewBypassed;\n        if (fileInput.dataset.ddAiPreviewHadPresence === 'true') {\n          fileInput.setAttribute('presence', '');\n        }\n        fileInput.disabled = fileInput.dataset.ddAiPreviewWasDisabled === 'true';\n      }\n\n      if (field && (hidePhoto || bypassPhoto)) {\n        field.classList.add('dd-ai-preview__gpo-photo-hidden');\n        field.setAttribute('aria-hidden', 'true');\n      } else if (field) {\n        field.classList.remove('dd-ai-preview__gpo-photo-hidden');\n        field.removeAttribute('aria-hidden');\n      }\n\n      if (wasBypassed !== bypassPhoto) {\n        // Globo caches its validation constraints. A change event forces it to\n        // rebuild them after the custom `presence` requirement changes.\n        fileInput.dispatchEvent(new Event('change', { bubbles: true }));\n      }\n    }\n\n    const printInput = scope.querySelector('input[name=\"radio-1\"][value=\"Left Chest\"], input[name=\"radio-1\"][value=\"Big Center Print\"]');\n    if (printInput) {\n      const field = printInput.closest('.gpo-element') || printInput.parentElement;\n      if (field && bypassPlacement) {\n        field.classList.add('dd-ai-preview__gpo-placement-bypassed');\n        field.setAttribute('aria-hidden', 'true');\n      } else if (field) {\n        field.classList.remove('dd-ai-preview__gpo-placement-bypassed');\n        field.removeAttribute('aria-hidden');\n      }\n    }\n\n    if ((bypassPhoto || hidePhoto || bypassPlacement) && !fileInput && (attempt || 0) < 12) {\n      window.setTimeout(() => syncGpoFieldBypass(module, (attempt || 0) + 1, options), 350);\n    }\n  }\n\n  function syncAiPlacementFromGpo(module, value) {\n    if (!value || value === 'N/A') return;\n    const placement = placements(module).find((item) => item.label === value || item.key === value);\n    if (!placement) return;\n    const input = Array.from(module.querySelectorAll('[data-dd-preview-placement-input]'))\n      .find((candidate) => candidate.value === placement.key);\n    if (!input || input.checked) return;\n    input.checked = true;\n    input.dispatchEvent(new Event('change', { bubbles: true }));\n  }\n\n  function repairGpoRadioClicks(module, scope) {\n    scope.addEventListener('click', (event) => {\n      const target = event.target;\n      if (!target || !target.closest) return;\n      const choice = target.closest('.gpo-choicelist');\n      if (!choice || !scope.contains(choice)) return;\n      const input = choice.querySelector('input[type=\"radio\"][name=\"radio-1\"]');\n      if (!input || input.disabled) return;\n      const applyChoice = () => {\n        input.checked = true;\n        input.dispatchEvent(new Event('input', { bubbles: true }));\n        input.dispatchEvent(new Event('change', { bubbles: true }));\n        syncAiPlacementFromGpo(module, input.value);\n      };\n      applyChoice();\n      window.setTimeout(applyChoice, 0);\n      window.setTimeout(applyChoice, 120);\n    }, { capture: true });\n  }\n\n  function setLineProperty(form, name, value) {\n    let input = form.querySelector(`input[name=\"properties[${name}]\"]`);\n    if (!input) {\n      input = document.createElement('input');\n      input.type = 'hidden';\n      input.name = `properties[${name}]`;\n      input.setAttribute('data-dd-ai-preview-property', 'true');\n      form.appendChild(input);\n    }\n    input.value = value || '';\n  }\n\n  function clearLineProperties(module) {\n    const form = getProductForm(module);\n    if (!form) return;\n    form.querySelectorAll('[data-dd-ai-preview-property]').forEach((input) => input.remove());\n  }\n\n  function attachProperties(module, result) {\n    const form = getProductForm(module);\n    if (!form) return false;\n    const placement = currentPlacement(module);\n    setLineProperty(form, 'Reference Photo', result.pet_photo_url || result.dog_photo_url || '');\n    setLineProperty(form, 'AI Preview', result.ai_preview_url || '');\n    setLineProperty(form, '_Preview Job ID', result.job_id || '');\n    setLineProperty(form, '_Preview Status', result.status || 'complete');\n    setLineProperty(form, '_Preview Print Location', result.print_location_label || (placement && placement.label) || '');\n    setLineProperty(form, '_Preview Product Mockup', currentMockupUrl(module));\n    setLineProperty(form, '_Product Handle', module.dataset.productHandle || '');\n    setLineProperty(form, '_Variant ID', getVariantId(module));\n    syncGpoPrintLocation(module, placement);\n    syncGpoFieldBypass(module, 0, { photo: true, placement: true });\n    return true;\n  }\n\n  function showError(module, message) {\n    hideLoadingPanel(module);\n    module.querySelector('[data-dd-preview-error]').textContent = message;\n    module.querySelector('[data-dd-preview-status]').textContent = '';\n  }\n\n  function clearError(module) {\n    module.querySelector('[data-dd-preview-error]').textContent = '';\n  }\n\n  function loadingElements(module) {\n    return {\n      panel: module.querySelector('[data-dd-preview-loader]'),\n      title: module.querySelector('[data-dd-preview-loader-title]'),\n      copy: module.querySelector('[data-dd-preview-loader-copy]'),\n      progress: module.querySelector('[data-dd-preview-loader-progress]'),\n      steps: Array.from(module.querySelectorAll('[data-dd-preview-loader-step]')),\n      note: module.querySelector('[data-dd-preview-loader-note]'),\n      status: module.querySelector('[data-dd-preview-status]')\n    };\n  }\n\n  function setLoadingStep(module, index) {\n    const loader = loadingElements(module);\n    const stepIndex = Math.max(0, Math.min(index, LOADING_STEPS.length - 1));\n    const step = LOADING_STEPS[stepIndex];\n    if (loader.title) loader.title.textContent = step.title;\n    if (loader.copy) loader.copy.textContent = step.copy;\n    if (loader.status) loader.status.textContent = step.status;\n    if (loader.progress) loader.progress.style.width = `${step.progress}%`;\n    loader.steps.forEach((item, itemIndex) => {\n      item.classList.toggle('is-complete', itemIndex < Math.min(stepIndex, 4));\n      item.classList.toggle('is-active', itemIndex === Math.min(stepIndex, 4));\n    });\n    if (loader.note) {\n      loader.note.textContent = stepIndex >= 4\n        ? 'Some previews take a little longer because we check the artwork before showing it.'\n        : 'Custom previews usually take 30\u201360 seconds. Please keep this page open.';\n    }\n  }\n\n  function loadingStepForElapsed(elapsedMs) {\n    if (elapsedMs >= 50000) return 5;\n    if (elapsedMs >= 30000) return 4;\n    if (elapsedMs >= 18000) return 3;\n    if (elapsedMs >= 9000) return 2;\n    if (elapsedMs >= 4000) return 1;\n    return 0;\n  }\n\n  function showLoadingPanel(module) {\n    const loader = loadingElements(module);\n    if (!loader.panel) return;\n    loader.panel.hidden = false;\n    setLoadingStep(module, 0);\n    safeScrollIntoView(loader.panel);\n  }\n\n  function hideLoadingPanel(module) {\n    const loader = loadingElements(module);\n    if (loader.panel) loader.panel.hidden = true;\n    if (loader.progress) loader.progress.style.width = '14%';\n    loader.steps.forEach((item) => {\n      item.classList.remove('is-active', 'is-complete');\n    });\n  }\n\n  function setBusy(module, busy) {\n    module.querySelectorAll('button').forEach((button) => {\n      if (button.hasAttribute('data-dd-preview-replace')) return;\n      button.disabled = busy;\n    });\n    const generateButton = module.querySelector('[data-dd-preview-generate]');\n    if (generateButton) {\n      if (!generateButton.dataset.idleText) generateButton.dataset.idleText = generateButton.textContent.trim();\n      generateButton.textContent = busy ? 'Creating Preview\u2026' : generateButton.dataset.idleText;\n    }\n    module.setAttribute('aria-busy', busy ? 'true' : 'false');\n  }\n\n  function safeScrollIntoView(element) {\n    if (!element || !element.scrollIntoView) return;\n    window.setTimeout(() => {\n      element.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\n    }, 120);\n  }\n\n  function gateElements(module) {\n    return {\n      gate: module.querySelector('[data-dd-preview-gate]'),\n      email: module.querySelector('[data-dd-preview-email]'),\n      consent: module.querySelector('[data-dd-preview-consent]'),\n      unlock: module.querySelector('[data-dd-preview-unlock]'),\n      skip: module.querySelector('[data-dd-preview-skip-email]'),\n      error: module.querySelector('[data-dd-preview-gate-error]')\n    };\n  }\n\n  function setGateBusy(module, busy) {\n    const gate = gateElements(module);\n    [gate.unlock, gate.skip, gate.email, gate.consent].forEach((item) => {\n      if (item) item.disabled = busy;\n    });\n  }\n\n  function hidePreviewGate(module) {\n    const gate = gateElements(module);\n    if (gate.gate) gate.gate.hidden = true;\n    if (gate.error) gate.error.textContent = '';\n    setGateBusy(module, false);\n  }\n\n  function showPreviewGate(module, result) {\n    const gate = gateElements(module);\n    hideLoadingPanel(module);\n    module.ddAiPreviewPendingResult = result;\n    module.ddAiPreviewLatestResult = null;\n    if (gate.gate) gate.gate.hidden = false;\n    if (gate.error) gate.error.textContent = '';\n    setGateBusy(module, false);\n    track('dd_ai_preview_gate_shown', {\n      product_handle: module.dataset.productHandle,\n      variant_id: getVariantId(module),\n      job_id: result.job_id || '',\n      print_location: result.print_location_label || (currentPlacement(module) && currentPlacement(module).label)\n    });\n    safeScrollIntoView(gate.gate);\n  }\n\n  function revealGeneratedPreview(module, result, options) {\n    const placement = currentPlacement(module);\n    const previewImage = module.querySelector('[data-dd-preview-result]');\n    const previewCaption = module.querySelector('[data-dd-preview-result-caption]');\n    const previewFigure = module.querySelector('[data-dd-preview-result-figure]');\n    const status = module.querySelector('[data-dd-preview-status]');\n    const accepted = module.querySelector('[data-dd-preview-accepted]');\n    const manualButton = module.querySelector('[data-dd-preview-manual]');\n    module.ddAiPreviewLatestResult = result;\n    module.ddAiPreviewPendingResult = null;\n    const attached = attachProperties(module, result);\n    if (!attached) {\n      throw new Error('Preview created, but the product form was not ready. Please refresh and try again.');\n    }\n    if (previewImage) previewImage.src = result.ai_preview_url;\n    if (previewCaption) previewCaption.textContent = `Line art on this item: ${result.print_location_label || (placement && placement.label) || 'Preview'}`;\n    if (previewFigure) previewFigure.hidden = false;\n    if (status) status.textContent = 'Preview ready and attached to your order.';\n    if (accepted) accepted.textContent = 'Your pet photo and AI preview will be included for artist reference.';\n    if (manualButton) manualButton.hidden = true;\n    hideLoadingPanel(module);\n    hidePreviewGate(module);\n    safeScrollIntoView(previewFigure || accepted);\n    return true;\n  }\n\n  function clearGeneratedPreview(module, message) {\n    module.ddAiPreviewLatestResult = null;\n    module.ddAiPreviewPendingResult = null;\n    module.ddAiPreviewManualUpload = false;\n    clearLineProperties(module);\n    syncGpoFieldBypass(module, 0, { photo: false, hidePhoto: true, placement: true });\n    const previewImage = module.querySelector('[data-dd-preview-result]');\n    const previewFigure = module.querySelector('[data-dd-preview-result-figure]');\n    const accepted = module.querySelector('[data-dd-preview-accepted]');\n    const manualButton = module.querySelector('[data-dd-preview-manual]');\n    if (previewImage) previewImage.removeAttribute('src');\n    if (previewFigure) previewFigure.hidden = true;\n    if (accepted) accepted.textContent = '';\n    if (manualButton) manualButton.hidden = false;\n    hideLoadingPanel(module);\n    hidePreviewGate(module);\n    if (message) module.querySelector('[data-dd-preview-status]').textContent = message;\n  }\n\n  function refreshVariantContext(module, messageIfChanged) {\n    const previousVariant = module.ddAiPreviewVariantId;\n    const nextVariant = getVariantId(module);\n    module.ddAiPreviewVariantId = nextVariant;\n    const mockupUrl = currentMockupUrl(module);\n    module.dataset.mockupUrl = mockupUrl;\n    const placement = currentPlacement(module);\n    syncGpoPrintLocation(module, placement);\n    if (previousVariant && previousVariant !== nextVariant && (module.ddAiPreviewLatestResult || module.ddAiPreviewPendingResult)) {\n      clearGeneratedPreview(module, messageIfChanged || 'Product option changed. Generate a fresh preview for this selection.');\n    }\n  }\n\n  async function initModule(module) {\n    if (module.dataset.ddAiPreviewInitialized === 'true') return;\n    module.dataset.ddAiPreviewInitialized = 'true';\n\n    const endpoint = module.dataset.endpoint;\n    if (!endpoint) {\n      module.hidden = true;\n      return;\n    }\n    try {\n      module.ddAiPreviewConfig = await loadConfig(module.dataset.configUrl);\n    } catch (error) {\n      module.hidden = true;\n      return;\n    }\n    const config = productConfig(module);\n    if (!config || !config.default_mockup_url || !placements(module).length) {\n      module.hidden = true;\n      return;\n    }\n\n    module.hidden = false;\n    warmPreviewService(endpoint);\n    module.ddAiPreviewLatestResult = null;\n    module.ddAiPreviewPendingResult = null;\n    module.ddAiPreviewManualUpload = false;\n    module.ddAiPreviewVariantId = getVariantId(module);\n    renderPlacementChoices(module);\n    refreshVariantContext(module);\n    syncGpoFieldBypass(module, 0, { photo: false, hidePhoto: true, placement: true });\n\n    const fileInput = module.querySelector('[data-dd-preview-file]');\n    const dropZone = module.querySelector('[data-dd-preview-drop]');\n    const generateButton = module.querySelector('[data-dd-preview-generate]');\n    const manualButton = module.querySelector('[data-dd-preview-manual]');\n    const replaceButtons = module.querySelectorAll('[data-dd-preview-replace]');\n    const originalImage = module.querySelector('[data-dd-preview-original]');\n    const previewImage = module.querySelector('[data-dd-preview-result]');\n    const previewCaption = module.querySelector('[data-dd-preview-result-caption]');\n    const previewFigure = module.querySelector('[data-dd-preview-result-figure]');\n    const status = module.querySelector('[data-dd-preview-status]');\n    const resultPanel = module.querySelector('[data-dd-preview-panel]');\n    const accepted = module.querySelector('[data-dd-preview-accepted]');\n    const gate = gateElements(module);\n    const consentText = 'I agree to receive emails from Dilly Dally Dog about my preview and custom pet products.';\n\n    let selectedFile = null;\n    let selectedDataUrl = '';\n    let attempts = Number(sessionStorage.getItem('ddAiPreviewAttempts') || '0');\n\n    fileInput.addEventListener('change', async () => {\n      clearError(module);\n      clearGeneratedPreview(module);\n      hideLoadingPanel(module);\n      selectedDataUrl = '';\n      originalImage.removeAttribute('src');\n      resultPanel.hidden = true;\n      generateButton.disabled = true;\n      selectedFile = fileInput.files && fileInput.files[0];\n      if (!selectedFile) return;\n      track('dd_ai_preview_photo_selected', {\n        product_handle: module.dataset.productHandle,\n        variant_id: getVariantId(module),\n        file_type: selectedFile.type || 'unknown',\n        file_size_bucket: fileSizeBucket(selectedFile.size),\n        selection_status: selectedFile.size > 8 * 1024 * 1024 ? 'rejected_too_large' : 'accepted'\n      });\n      if (selectedFile.size > 8 * 1024 * 1024) {\n        showError(module, 'That photo is too large. Please upload an image under 8MB.');\n        selectedFile = null;\n        return;\n      }\n      selectedDataUrl = await fileToDataUrl(selectedFile);\n      originalImage.src = selectedDataUrl;\n      resultPanel.hidden = false;\n      generateButton.disabled = false;\n      status.textContent = 'Photo ready. Generate your preview when you are ready.';\n      safeScrollIntoView(generateButton);\n    });\n\n    if (dropZone) {\n      dropZone.addEventListener('dragover', (event) => {\n        event.preventDefault();\n      });\n      dropZone.addEventListener('drop', async (event) => {\n        event.preventDefault();\n        if (!event.dataTransfer || !event.dataTransfer.files || !event.dataTransfer.files.length) return;\n        const transfer = new DataTransfer();\n        transfer.items.add(event.dataTransfer.files[0]);\n        fileInput.files = transfer.files;\n        fileInput.dispatchEvent(new Event('change', { bubbles: true }));\n      });\n    }\n\n    module.addEventListener('change', (event) => {\n      const target = event.target;\n      if (target && target.matches && target.matches('[data-dd-preview-placement-input]')) {\n        const placement = currentPlacement(module);\n        syncGpoPrintLocation(module, placement);\n        if (module.ddAiPreviewLatestResult || module.ddAiPreviewPendingResult) {\n          clearGeneratedPreview(module, 'Placement changed. Generate a fresh preview for this print location.');\n        }\n      }\n    });\n\n    module.addEventListener('click', (event) => {\n      const choice = event.target && event.target.closest && event.target.closest('.dd-ai-preview__placement-choice');\n      if (!choice || !module.contains(choice)) return;\n      const input = choice.querySelector('[data-dd-preview-placement-input]');\n      if (!input || input.checked) return;\n      input.checked = true;\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n    });\n\n    const productScope = module.closest('product-info') || document;\n    repairGpoRadioClicks(module, productScope);\n    productScope.addEventListener('change', (event) => {\n      const target = event.target;\n      if (target && target.matches && target.matches('input[name=\"radio-1\"]')) return;\n      window.setTimeout(() => refreshVariantContext(module), 0);\n    });\n    productScope.addEventListener('variant:change', () => refreshVariantContext(module));\n\n    generateButton.addEventListener('click', async () => {\n      clearError(module);\n      accepted.textContent = '';\n      refreshVariantContext(module);\n      const placement = currentPlacement(module);\n      const mockupUrl = currentMockupUrl(module);\n      if (!mockupUrl) {\n        showError(module, 'This product selection is missing a preview mockup. Please choose another option or order normally for an artist proof.');\n        return;\n      }\n      if (!selectedFile || !selectedDataUrl) {\n        fileInput.click();\n        return;\n      }\n      if (attempts >= MAX_ATTEMPTS) {\n        showError(module, 'Preview limit reached for this visit. You can still order and our artists will create your proof.');\n        return;\n      }\n      const attemptNumber = attempts + 1;\n      setBusy(module, true);\n      showLoadingPanel(module);\n      track('dd_ai_preview_generation_started', {\n        product_handle: module.dataset.productHandle,\n        variant_id: getVariantId(module),\n        attempt_number: attemptNumber,\n        print_location: placement && placement.label\n      });\n      const loadingStartedAt = Date.now();\n      const statusTimer = window.setInterval(() => {\n        setLoadingStep(module, loadingStepForElapsed(Date.now() - loadingStartedAt));\n      }, 3000);\n      setLoadingStep(module, 0);\n\n      try {\n        const result = await requestPreview(endpoint, {\n          filename: selectedFile.name,\n          mime_type: selectedFile.type || 'image/jpeg',\n          image_base64: selectedDataUrl,\n          product_handle: module.dataset.productHandle,\n          product_title: module.dataset.productTitle,\n          variant_id: getVariantId(module),\n          mockup_url: mockupUrl,\n          print_location: placement && placement.label,\n          placement_config: placement,\n          visitor_id: getVisitorId()\n        });\n        attempts = attemptNumber;\n        sessionStorage.setItem('ddAiPreviewAttempts', String(attempts));\n        previewImage.removeAttribute('src');\n        if (previewFigure) previewFigure.hidden = true;\n        hideLoadingPanel(module);\n        status.textContent = 'Your free preview is ready. Unlock it below to see it.';\n        accepted.textContent = '';\n        manualButton.hidden = true;\n        showPreviewGate(module, result);\n        track('dd_ai_preview_generation_completed', {\n          product_handle: module.dataset.productHandle,\n          variant_id: getVariantId(module),\n          elapsed_ms: result.elapsed_ms,\n          print_location: result.print_location_label || (placement && placement.label),\n          model: result.model || 'unknown'\n        });\n      } catch (error) {\n        module.ddAiPreviewLatestResult = null;\n        module.ddAiPreviewManualUpload = true;\n        clearLineProperties(module);\n        syncGpoFieldBypass(module, 0, { photo: false, hidePhoto: false, placement: true });\n        manualButton.hidden = true;\n        previewImage.removeAttribute('src');\n        if (previewFigure) previewFigure.hidden = true;\n        hideLoadingPanel(module);\n        const message = String(error && error.message || error || '');\n        showError(module, message && message !== 'Preview generation failed'\n          ? message\n          : 'We could not generate a preview from this photo, but you can still order and our artists will create your proof.');\n        track('dd_ai_preview_generation_failed', {\n          product_handle: module.dataset.productHandle,\n          variant_id: getVariantId(module),\n          attempt_number: attemptNumber,\n          print_location: placement && placement.label,\n          failure_type: generationFailureType(error)\n        });\n      } finally {\n        window.clearInterval(statusTimer);\n        setBusy(module, false);\n      }\n    });\n\n    replaceButtons.forEach((button) => button.addEventListener('click', () => {\n      fileInput.value = '';\n      fileInput.click();\n    }));\n\n    if (gate.unlock) {\n      gate.unlock.addEventListener('click', async () => {\n        const result = module.ddAiPreviewPendingResult;\n        if (!result) return;\n        const email = gate.email ? String(gate.email.value || '').trim().toLowerCase() : '';\n        if (!emailLooksValid(email)) {\n          if (gate.error) gate.error.textContent = 'Please enter a valid email address.';\n          if (gate.email) gate.email.focus();\n          return;\n        }\n        if (!gate.consent || !gate.consent.checked) {\n          if (gate.error) gate.error.textContent = 'Please check the email permission box, or use the no-thanks link below.';\n          if (gate.consent) gate.consent.focus();\n          return;\n        }\n        if (gate.error) gate.error.textContent = '';\n        requestPreviewUnlock(endpoint, previewUnlockPayload(module, result, email, consentText)).catch((error) => {\n          console.warn('Dilly AI preview email sync failed; revealing preview anyway', error);\n        });\n        track('dd_ai_preview_email_submitted', {\n          product_handle: module.dataset.productHandle,\n          variant_id: getVariantId(module),\n          job_id: result.job_id || '',\n          print_location: result.print_location_label || (currentPlacement(module) && currentPlacement(module).label)\n        });\n        revealGeneratedPreview(module, result, { source: 'email_submit' });\n      });\n    }\n\n    if (gate.skip) {\n      gate.skip.addEventListener('click', () => {\n        const result = module.ddAiPreviewPendingResult;\n        if (!result) return;\n        track('dd_ai_preview_email_skipped', {\n          product_handle: module.dataset.productHandle,\n          variant_id: getVariantId(module),\n          job_id: result.job_id || '',\n          source: 'gate_skip'\n        });\n        revealGeneratedPreview(module, result, { source: 'gate_skip' });\n      });\n    }\n\n    manualButton.addEventListener('click', () => {\n      module.ddAiPreviewManualUpload = true;\n      manualButton.hidden = true;\n      hidePreviewGate(module);\n      syncGpoFieldBypass(module, 0, { photo: false, hidePhoto: false, placement: true });\n      status.textContent = 'Upload your pet photo below, then add the item to your cart.';\n      const gpoFile = productScope.querySelector('input.gpo-file[name=\"Pet-image\"], input#file-1[name=\"Pet-image\"]');\n      safeScrollIntoView(gpoFile && (gpoFile.closest('.gpo-element') || gpoFile));\n      track('dd_ai_preview_manual_upload_selected', {\n        product_handle: module.dataset.productHandle,\n        variant_id: getVariantId(module)\n      });\n    });\n\n    function guardAndAttachForCart(event) {\n      if (!module.ddAiPreviewLatestResult && module.ddAiPreviewPendingResult) {\n        track('dd_ai_preview_email_skipped', {\n          product_handle: module.dataset.productHandle,\n          variant_id: getVariantId(module),\n          job_id: module.ddAiPreviewPendingResult.job_id || '',\n          source: 'cart_submit'\n        });\n        revealGeneratedPreview(module, module.ddAiPreviewPendingResult, { source: 'cart_submit' });\n      }\n      const hasPreview = Boolean(module.ddAiPreviewLatestResult);\n      syncGpoFieldBypass(module, 0, { photo: hasPreview, hidePhoto: hasPreview, placement: true });\n      if (!module.ddAiPreviewLatestResult) {\n        module.ddAiPreviewManualUpload = true;\n        manualButton.hidden = true;\n        syncGpoFieldBypass(module, 0, { photo: false, hidePhoto: false, placement: true });\n        status.textContent = 'Upload your pet photo below to continue with your order.';\n        track('dd_ai_preview_cart_submit_without_preview', {\n          product_handle: module.dataset.productHandle,\n          variant_id: getVariantId(module),\n          has_preview: false\n        });\n        return true;\n      }\n      attachProperties(module, module.ddAiPreviewLatestResult);\n      track('dd_ai_preview_cart_submit', {\n        product_handle: module.dataset.productHandle,\n        variant_id: getVariantId(module),\n        has_preview: true\n      });\n      return true;\n    }\n\n    function isAddToCartTarget(event) {\n      const target = event.target;\n      if (!target || !target.closest) return false;\n      const button = target.closest('button[name=\"add\"], input[type=\"submit\"][name=\"add\"], .gpo-clone-atc-button');\n      if (!button) return false;\n\n      const form = getProductForm(module);\n      const productInfo = module.closest('product-info');\n      return Boolean(\n        (form && (form.contains(button) || button.form === form)) ||\n        (productInfo && productInfo.contains(button)) ||\n        button.classList.contains('gpo-clone-atc-button')\n      );\n    }\n\n    const form = getProductForm(module);\n    if (form) {\n      form.addEventListener('submit', guardAndAttachForCart, { capture: true });\n    }\n    document.addEventListener('click', (event) => {\n      if (isAddToCartTarget(event)) guardAndAttachForCart(event);\n    }, { capture: true });\n  }\n\n  function boot() {\n    document.querySelectorAll('[data-dd-ai-preview]').forEach((module) => initModule(module));\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot, { once: true });\n  } else {\n    boot();\n  }\n})();"],
  "mappings": "CAAC,UAAY,CAEX,MAAM,eAAiB,uBAEjB,mBAAqB,eACrB,aAAe,IAAI,IACnB,cAAgB,CACpB,CACE,MAAO,yBACP,KAAM,gFACN,OAAQ,4BACR,SAAU,EACZ,EACA,CACE,MAAO,2BACP,KAAM,4EACN,OAAQ,0CACR,SAAU,EACZ,EACA,CACE,MAAO,0BACP,KAAM,wEACN,OAAQ,sCACR,SAAU,EACZ,EACA,CACE,MAAO,6BACP,KAAM,4DACN,OAAQ,yCACR,SAAU,EACZ,EACA,CACE,MAAO,uBACP,KAAM,6FACN,OAAQ,2DACR,SAAU,EACZ,EACA,CACE,MAAO,eACP,KAAM,iFACN,OAAQ,0CACR,SAAU,EACZ,CACF,EAEA,SAAS,4BAA6B,CACpC,GAAI,CACF,MAAM,QAAU,OAAO,SAAW,OAAO,QAAQ,gBACjD,MAAO,CAAC,SACN,OAAO,QAAQ,4BAA+B,YAC9C,QAAQ,2BAA2B,CACvC,MAAgB,CACd,MAAO,EACT,CACF,CAEA,SAAS,WAAY,CACnB,GAAI,CAAC,2BAA2B,EAAG,MAAO,GAO1C,GANA,OAAO,UAAY,OAAO,WAAa,CAAC,EACpC,OAAO,OAAO,MAAS,aACzB,OAAO,KAAO,UAAY,CACxB,OAAO,UAAU,KAAK,SAAS,CACjC,GAEE,CAAC,OAAO,0BAA2B,CACrC,OAAO,0BAA4B,GACnC,OAAO,KAAK,KAAM,IAAI,IAAM,EAC5B,OAAO,KAAK,SAAU,mBAAoB,CAAE,eAAgB,EAAM,CAAC,EACnE,MAAM,OAAS,SAAS,cAAc,QAAQ,EAC9C,OAAO,MAAQ,GACf,OAAO,IAAM,+CAA+C,mBAAmB,kBAAkB,CAAC,GAClG,OAAO,aAAa,yBAA0B,MAAM,EACpD,SAAS,KAAK,YAAY,MAAM,CAClC,CACA,MAAO,EACT,CAEA,SAAS,MAAM,UAAW,OAAQ,CAChC,MAAM,QAAU,OAAO,OAAO,CAC5B,eAAgB,aAChB,eAAgB,GAClB,EAAG,QAAU,CAAC,CAAC,EACf,GAAI,CACE,OAAO,SAAW,OAAO,QAAQ,WAAa,OAAO,OAAO,QAAQ,UAAU,SAAY,YAC5F,OAAO,QAAQ,UAAU,QAAQ,UAAW,OAAO,EAEjD,UAAU,GACZ,OAAO,KAAK,QAAS,UAAW,OAAO,OAAO,CAC5C,QAAS,kBACX,EAAG,OAAO,CAAC,CAEf,OAAS,MAAO,CACd,QAAQ,KAAK,yCAA0C,KAAK,CAC9D,CACA,SAAS,cAAc,IAAI,YAAY,UAAW,CAAE,OAAQ,OAAQ,CAAC,CAAC,CACxE,CAEA,SAAS,eAAe,MAAO,CAC7B,OAAI,MAAQ,KAAO,KAAa,YAC5B,MAAQ,EAAI,KAAO,KAAa,WAChC,OAAS,EAAI,KAAO,KAAa,WAC9B,UACT,CAEA,SAAS,sBAAsB,MAAO,CACpC,MAAM,QAAU,OAAO,OAAS,MAAM,SAAW,OAAS,EAAE,EAAE,YAAY,EAC1E,OAAI,QAAQ,SAAS,KAAK,GAAK,QAAQ,SAAS,YAAY,GAAK,QAAQ,SAAS,eAAe,EAAU,eACvG,QAAQ,SAAS,eAAe,GAAK,QAAQ,SAAS,SAAS,GAAK,QAAQ,SAAS,SAAS,EAAU,UACxG,QAAQ,SAAS,oBAAoB,EAAU,2BAEjD,QAAQ,SAAS,aAAa,GAC9B,QAAQ,SAAS,YAAY,GAC7B,QAAQ,SAAS,WAAW,GAC5B,QAAQ,SAAS,WAAW,GAC5B,QAAQ,SAAS,cAAc,EACxB,iBAEP,QAAQ,SAAS,iBAAiB,GAClC,QAAQ,SAAS,aAAa,GAC9B,QAAQ,SAAS,iBAAiB,GAClC,QAAQ,SAAS,SAAS,EACnB,gBAEP,QAAQ,SAAS,yBAAyB,GAC1C,QAAQ,SAAS,cAAc,GAC/B,QAAQ,SAAS,cAAc,GAC/B,QAAQ,SAAS,cAAc,GAC/B,QAAQ,SAAS,cAAc,EACxB,sBACF,SACT,CAEA,SAAS,cAAe,CACtB,GAAI,CACF,IAAI,UAAY,OAAO,aAAa,QAAQ,cAAc,EAC1D,OAAK,YACH,UAAY,OAAO,QAAU,OAAO,OAAO,WACvC,OAAO,OAAO,WAAW,EACzB,GAAG,KAAK,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,GACrE,OAAO,aAAa,QAAQ,eAAgB,SAAS,GAEhD,SACT,MAAgB,CACd,MAAO,GAAG,KAAK,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,EAC1E,CACF,CAEA,SAAS,cAAc,KAAM,CAC3B,OAAO,IAAI,QAAQ,CAAC,QAAS,SAAW,CACtC,MAAM,OAAS,IAAI,WACnB,OAAO,OAAS,IAAM,QAAQ,OAAO,OAAO,QAAU,EAAE,CAAC,EACzD,OAAO,QAAU,IAAM,OAAO,OAAO,OAAS,IAAI,MAAM,qBAAqB,CAAC,EAC9E,OAAO,cAAc,IAAI,CAC3B,CAAC,CACH,CAEA,SAAS,sBAAsB,SAAU,CACvC,OAAO,OAAO,UAAY,EAAE,EAAE,QAAQ,wCAAyC,EAAE,CACnF,CAEA,SAAS,cAAc,SAAU,CAC/B,MAAO,GAAG,sBAAsB,QAAQ,CAAC,UAC3C,CAEA,SAAS,oBAAoB,SAAU,CACrC,MAAO,GAAG,sBAAsB,QAAQ,CAAC,iBAC3C,CAEA,SAAS,mBAAmB,SAAU,CACpC,MAAM,UAAY,GAAG,sBAAsB,QAAQ,CAAC,UACpD,MAAM,UAAW,CAAE,OAAQ,MAAO,KAAM,OAAQ,MAAO,UAAW,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,CACrF,CAEA,eAAe,eAAe,SAAU,QAAS,CAC/C,MAAM,WAAa,IAAI,gBACjB,QAAU,OAAO,WAAW,IAAM,WAAW,MAAM,EAAG,IAAM,EAClE,IAAI,SACJ,GAAI,CACF,SAAW,MAAM,MAAM,cAAc,QAAQ,EAAG,CAC9C,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,OAAO,EAC5B,OAAQ,WAAW,MACrB,CAAC,CACH,OAAS,MAAO,CACd,MAAI,OAAS,MAAM,OAAS,aACpB,IAAI,MACR,0GACF,EAEI,IAAI,MACR,OAAS,OAAO,MAAM,SAAW,KAAK,IAAM,cACxC,OAAO,MAAM,SAAW,KAAK,EAC7B,iHACN,CACF,QAAE,CACA,OAAO,aAAa,OAAO,CAC7B,CAEA,MAAM,aAAe,MAAM,SAAS,KAAK,EACzC,IAAI,OAAS,CAAC,EACd,GAAI,CACF,OAAS,aAAe,KAAK,MAAM,YAAY,EAAI,CAAC,CACtD,MAAgB,CACd,OAAS,CAAC,CACZ,CACA,GAAI,SAAS,IAAM,OAAO,GAAI,OAAO,OACrC,MAAM,IAAI,MACR,OAAO,QACN,SAAS,QAAU,IAChB,uGACA,4BAA4B,SAAS,MAAM,GACjD,CACF,CAEA,eAAe,qBAAqB,SAAU,QAAS,CACrD,MAAM,WAAa,IAAI,gBACjB,QAAU,OAAO,WAAW,IAAM,WAAW,MAAM,EAAG,GAAI,EAChE,GAAI,CACF,MAAM,SAAW,MAAM,MAAM,oBAAoB,QAAQ,EAAG,CAC1D,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,OAAO,EAC5B,OAAQ,WAAW,MACrB,CAAC,EACK,aAAe,MAAM,SAAS,KAAK,EACzC,IAAI,OAAS,CAAC,EACd,GAAI,CACF,OAAS,aAAe,KAAK,MAAM,YAAY,EAAI,CAAC,CACtD,MAAgB,CACd,OAAS,CAAC,CACZ,CACA,GAAI,SAAS,IAAM,OAAO,GAAI,OAAO,OACrC,MAAM,IAAI,MAAM,OAAO,OAAS,2BAA2B,SAAS,MAAM,EAAE,CAC9E,QAAE,CACA,OAAO,aAAa,OAAO,CAC7B,CACF,CAEA,SAAS,gBAAgB,MAAO,CAC9B,MAAO,6BAA6B,KAAK,OAAO,OAAS,EAAE,EAAE,KAAK,CAAC,CACrE,CAEA,SAAS,WAAY,CACnB,MAAM,IAAM,CAAC,EACb,GAAI,CACF,MAAM,OAAS,IAAI,gBAAgB,OAAO,SAAS,QAAU,EAAE,EAC/D,CAAC,aAAc,aAAc,eAAgB,WAAY,aAAa,EAAE,QAAS,KAAQ,CACvF,MAAM,MAAQ,OAAO,IAAI,GAAG,EACxB,QAAO,IAAI,GAAG,EAAI,MAAM,MAAM,EAAG,GAAG,EAC1C,CAAC,CACH,MAAgB,CAAC,CACjB,OAAO,GACT,CAEA,SAAS,qBAAqB,OAAQ,OAAQ,MAAO,YAAa,CAChE,MAAM,UAAY,iBAAiB,MAAM,EACzC,OAAO,OAAO,OAAO,CACnB,MACA,kBAAmB,GACnB,aAAc,YACd,OAAQ,OAAO,QAAU,GACzB,WAAY,aAAa,EACzB,eAAgB,OAAO,QAAQ,eAAiB,GAChD,cAAe,OAAO,QAAQ,cAAgB,GAC9C,WAAY,aAAa,MAAM,EAC/B,eAAgB,OAAO,sBAAyB,WAAa,UAAU,OAAU,GACjF,eAAgB,OAAO,gBAAkB,GACzC,cAAe,OAAO,eAAiB,OAAO,eAAiB,GAC/D,SAAU,OAAO,SAAS,IAC5B,EAAG,UAAU,CAAC,CAChB,CAEA,SAAS,YAAY,MAAO,CAC1B,OAAO,OAAO,OAAS,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,CAC5C,CAEA,eAAe,WAAW,IAAK,CAC7B,OAAK,KACA,aAAa,IAAI,GAAG,GACvB,aAAa,IAAI,IAAK,MAAM,IAAK,CAAE,YAAa,aAAc,CAAC,EAAE,KAAM,UAAa,CAClF,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAM,mDAAmD,EACrF,OAAO,SAAS,KAAK,CACvB,CAAC,CAAC,EAEG,aAAa,IAAI,GAAG,GAPV,IAQnB,CAEA,SAAS,eAAe,OAAQ,CAC9B,MAAM,MAAQ,OAAO,QAAQ,cAAc,GAAK,SAC1C,MAAQ,MAAM,KAAK,MAAM,iBAAiB,2BAA2B,CAAC,EAC5E,OAAO,MAAM,KAAM,MAAS,KAAK,cAAc,iDAAiD,CAAC,GAC/F,MAAM,cAAc,wCAAwC,GAC5D,MAAM,CAAC,GACP,SAAS,cAAc,mEAAmE,CAC9F,CAEA,SAAS,aAAa,OAAQ,CAC5B,MAAM,KAAO,eAAe,MAAM,EAC5B,MAAQ,MAAQ,KAAK,cAAc,aAAa,EACtD,OAAO,YAAY,MAAQ,MAAM,MAAQ,OAAO,QAAQ,SAAS,CACnE,CAEA,SAAS,cAAc,OAAQ,CAC7B,MAAM,IAAM,OAAO,kBACnB,OAAO,KAAO,IAAI,UAAY,IAAI,SAAS,OAAO,QAAQ,aAAa,CACzE,CAEA,SAAS,cAAc,OAAQ,CAC7B,MAAM,QAAU,cAAc,MAAM,EACpC,GAAI,CAAC,QAAS,OAAO,KACrB,MAAM,UAAY,aAAa,MAAM,EACrC,OAAQ,QAAQ,UAAY,QAAQ,SAAS,SAAS,GACnD,QAAQ,UAAY,QAAQ,SAAS,OAAO,QAAQ,oBAAsB,EAAE,CAAC,GAC9E,IACJ,CAEA,SAAS,WAAW,OAAQ,CAC1B,MAAM,QAAU,cAAc,MAAM,EACpC,OAAO,SAAW,MAAM,QAAQ,QAAQ,UAAU,GAAK,QAAQ,WAAW,OACtE,QAAQ,WACR,CAAC,CACP,CAEA,SAAS,iBAAiB,OAAQ,CAChC,MAAM,QAAU,OAAO,cAAc,2CAA2C,EAC1E,UAAY,WAAW,MAAM,EACnC,GAAI,QAAS,CACX,MAAM,MAAQ,UAAU,KAAM,WAAc,UAAU,MAAQ,QAAQ,OAAS,UAAU,QAAU,QAAQ,KAAK,EAChH,GAAI,MAAO,OAAO,KACpB,CACA,OAAO,UAAU,CAAC,GAAK,IACzB,CAEA,SAAS,iBAAiB,OAAQ,CAChC,MAAM,QAAU,cAAc,MAAM,EAC9B,QAAU,cAAc,MAAM,EACpC,OAAQ,SAAW,QAAQ,YAAgB,SAAW,QAAQ,oBAAuB,EACvF,CAEA,SAAS,uBAAuB,OAAQ,QAAS,CAC/C,MAAM,SAAW,OAAO,cAAc,6BAA6B,EAC7D,UAAY,OAAO,cAAc,qCAAqC,EACtE,UAAY,WAAW,MAAM,EACnC,GAAI,CAAC,UAAY,CAAC,WAAa,CAAC,UAAU,OAAQ,OAClD,SAAS,OAAS,UAAU,QAAU,EACtC,MAAM,YAAc,SAAW,UAAU,KAAM,WAAc,UAAU,MAAQ,OAAO,EAClF,QACA,UAAU,CAAC,EAAE,IACjB,UAAU,UAAY,UAAU,IAAI,CAAC,UAAW,QAAU;AAAA;AAAA;AAAA;AAAA,0CAIpB,OAAO,QAAQ,WAAa,MAAM;AAAA,mBACzD,UAAU,GAAG;AAAA;AAAA,YAEpB,UAAU,MAAQ,aAAgB,CAAC,aAAe,QAAU,EAAK,UAAY,EAAE;AAAA;AAAA,gBAE3E,UAAU,KAAK,UAAU,UAAU,MAAQ,mBAAmB;AAAA;AAAA,KAEzE,EAAE,KAAK,EAAE,CACZ,CAEA,SAAS,qBAAqB,OAAQ,UAAW,QAAS,CACxD,GAAI,CAAC,WAAa,CAAC,UAAU,MAAO,MAAO,GAC3C,MAAM,MAAQ,OAAO,QAAQ,cAAc,GAAK,SAC1C,MAAQ,MAAM,KAAK,MAAM,iBAAiB,uBAAuB,CAAC,EACrE,KAAM,WAAc,UAAU,QAAU,UAAU,KAAK,EAC1D,OAAI,OACG,MAAM,SAAS,MAAM,MAAM,EAChC,MAAM,cAAc,IAAI,MAAM,QAAS,CAAE,QAAS,EAAK,CAAC,CAAC,EACzD,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EACnD,MAEJ,SAAW,GAAK,IACnB,OAAO,WAAW,IAAM,qBAAqB,OAAQ,WAAY,SAAW,GAAK,CAAC,EAAG,GAAG,EAEnF,GACT,CAEA,SAAS,mBAAmB,OAAQ,QAAS,QAAS,CACpD,MAAM,YAAc,GAAQ,SAAW,QAAQ,OACzC,UAAY,GAAQ,SAAW,QAAQ,WACvC,gBAAkB,CAAC,SAAW,QAAQ,YAAc,GACpD,MAAQ,OAAO,QAAQ,cAAc,GAAK,SAC1C,UAAY,MAAM,cAAc,kEAAkE,EACxG,GAAI,UAAW,CACb,MAAM,MAAQ,UAAU,QAAQ,cAAc,GAAK,UAAU,cACvD,YAAc,UAAU,QAAQ,sBAAwB,OACxD,2BAA4B,UAAU,UAC1C,UAAU,QAAQ,uBAAyB,UAAU,aAAa,UAAU,EAAI,OAAS,QACzF,UAAU,QAAQ,uBAAyB,UAAU,SAAW,OAAS,SAGvE,aACF,UAAU,QAAQ,oBAAsB,OACxC,UAAU,gBAAgB,UAAU,EACpC,UAAU,SAAW,GACrB,UAAU,SAAW,GACjB,QACF,MAAM,UAAU,OAAO,WAAW,EAClC,MAAM,iBAAiB,6BAA6B,EAAE,QAAS,OAAU,MAAM,OAAO,CAAC,IAEhF,cACT,OAAO,UAAU,QAAQ,oBACrB,UAAU,QAAQ,yBAA2B,QAC/C,UAAU,aAAa,WAAY,EAAE,EAEvC,UAAU,SAAW,UAAU,QAAQ,yBAA2B,QAGhE,QAAU,WAAa,cACzB,MAAM,UAAU,IAAI,iCAAiC,EACrD,MAAM,aAAa,cAAe,MAAM,GAC/B,QACT,MAAM,UAAU,OAAO,iCAAiC,EACxD,MAAM,gBAAgB,aAAa,GAGjC,cAAgB,aAGlB,UAAU,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,CAElE,CAEA,MAAM,WAAa,MAAM,cAAc,4FAA4F,EACnI,GAAI,WAAY,CACd,MAAM,MAAQ,WAAW,QAAQ,cAAc,GAAK,WAAW,cAC3D,OAAS,iBACX,MAAM,UAAU,IAAI,uCAAuC,EAC3D,MAAM,aAAa,cAAe,MAAM,GAC/B,QACT,MAAM,UAAU,OAAO,uCAAuC,EAC9D,MAAM,gBAAgB,aAAa,EAEvC,EAEK,aAAe,WAAa,kBAAoB,CAAC,YAAc,SAAW,GAAK,IAClF,OAAO,WAAW,IAAM,mBAAmB,QAAS,SAAW,GAAK,EAAG,OAAO,EAAG,GAAG,CAExF,CAEA,SAAS,uBAAuB,OAAQ,MAAO,CAC7C,GAAI,CAAC,OAAS,QAAU,MAAO,OAC/B,MAAM,UAAY,WAAW,MAAM,EAAE,KAAM,MAAS,KAAK,QAAU,OAAS,KAAK,MAAQ,KAAK,EAC9F,GAAI,CAAC,UAAW,OAChB,MAAM,MAAQ,MAAM,KAAK,OAAO,iBAAiB,mCAAmC,CAAC,EAClF,KAAM,WAAc,UAAU,QAAU,UAAU,GAAG,EACpD,CAAC,OAAS,MAAM,UACpB,MAAM,QAAU,GAChB,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EAC5D,CAEA,SAAS,qBAAqB,OAAQ,MAAO,CAC3C,MAAM,iBAAiB,QAAU,OAAU,CACzC,MAAM,OAAS,MAAM,OACrB,GAAI,CAAC,QAAU,CAAC,OAAO,QAAS,OAChC,MAAM,OAAS,OAAO,QAAQ,iBAAiB,EAC/C,GAAI,CAAC,QAAU,CAAC,MAAM,SAAS,MAAM,EAAG,OACxC,MAAM,MAAQ,OAAO,cAAc,qCAAqC,EACxE,GAAI,CAAC,OAAS,MAAM,SAAU,OAC9B,MAAM,YAAc,IAAM,CACxB,MAAM,QAAU,GAChB,MAAM,cAAc,IAAI,MAAM,QAAS,CAAE,QAAS,EAAK,CAAC,CAAC,EACzD,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EAC1D,uBAAuB,OAAQ,MAAM,KAAK,CAC5C,EACA,YAAY,EACZ,OAAO,WAAW,YAAa,CAAC,EAChC,OAAO,WAAW,YAAa,GAAG,CACpC,EAAG,CAAE,QAAS,EAAK,CAAC,CACtB,CAEA,SAAS,gBAAgB,KAAM,KAAM,MAAO,CAC1C,IAAI,MAAQ,KAAK,cAAc,0BAA0B,IAAI,KAAK,EAC7D,QACH,MAAQ,SAAS,cAAc,OAAO,EACtC,MAAM,KAAO,SACb,MAAM,KAAO,cAAc,IAAI,IAC/B,MAAM,aAAa,8BAA+B,MAAM,EACxD,KAAK,YAAY,KAAK,GAExB,MAAM,MAAQ,OAAS,EACzB,CAEA,SAAS,oBAAoB,OAAQ,CACnC,MAAM,KAAO,eAAe,MAAM,EAC7B,MACL,KAAK,iBAAiB,+BAA+B,EAAE,QAAS,OAAU,MAAM,OAAO,CAAC,CAC1F,CAEA,SAAS,iBAAiB,OAAQ,OAAQ,CACxC,MAAM,KAAO,eAAe,MAAM,EAClC,GAAI,CAAC,KAAM,MAAO,GAClB,MAAM,UAAY,iBAAiB,MAAM,EACzC,uBAAgB,KAAM,kBAAmB,OAAO,eAAiB,OAAO,eAAiB,EAAE,EAC3F,gBAAgB,KAAM,aAAc,OAAO,gBAAkB,EAAE,EAC/D,gBAAgB,KAAM,kBAAmB,OAAO,QAAU,EAAE,EAC5D,gBAAgB,KAAM,kBAAmB,OAAO,QAAU,UAAU,EACpE,gBAAgB,KAAM,0BAA2B,OAAO,sBAAyB,WAAa,UAAU,OAAU,EAAE,EACpH,gBAAgB,KAAM,0BAA2B,iBAAiB,MAAM,CAAC,EACzE,gBAAgB,KAAM,kBAAmB,OAAO,QAAQ,eAAiB,EAAE,EAC3E,gBAAgB,KAAM,cAAe,aAAa,MAAM,CAAC,EACzD,qBAAqB,OAAQ,SAAS,EACtC,mBAAmB,OAAQ,EAAG,CAAE,MAAO,GAAM,UAAW,EAAK,CAAC,EACvD,EACT,CAEA,SAAS,UAAU,OAAQ,QAAS,CAClC,iBAAiB,MAAM,EACvB,OAAO,cAAc,yBAAyB,EAAE,YAAc,QAC9D,OAAO,cAAc,0BAA0B,EAAE,YAAc,EACjE,CAEA,SAAS,WAAW,OAAQ,CAC1B,OAAO,cAAc,yBAAyB,EAAE,YAAc,EAChE,CAEA,SAAS,gBAAgB,OAAQ,CAC/B,MAAO,CACL,MAAO,OAAO,cAAc,0BAA0B,EACtD,MAAO,OAAO,cAAc,gCAAgC,EAC5D,KAAM,OAAO,cAAc,+BAA+B,EAC1D,SAAU,OAAO,cAAc,mCAAmC,EAClE,MAAO,MAAM,KAAK,OAAO,iBAAiB,+BAA+B,CAAC,EAC1E,KAAM,OAAO,cAAc,+BAA+B,EAC1D,OAAQ,OAAO,cAAc,0BAA0B,CACzD,CACF,CAEA,SAAS,eAAe,OAAQ,MAAO,CACrC,MAAM,OAAS,gBAAgB,MAAM,EAC/B,UAAY,KAAK,IAAI,EAAG,KAAK,IAAI,MAAO,cAAc,OAAS,CAAC,CAAC,EACjE,KAAO,cAAc,SAAS,EAChC,OAAO,QAAO,OAAO,MAAM,YAAc,KAAK,OAC9C,OAAO,OAAM,OAAO,KAAK,YAAc,KAAK,MAC5C,OAAO,SAAQ,OAAO,OAAO,YAAc,KAAK,QAChD,OAAO,WAAU,OAAO,SAAS,MAAM,MAAQ,GAAG,KAAK,QAAQ,KACnE,OAAO,MAAM,QAAQ,CAAC,KAAM,YAAc,CACxC,KAAK,UAAU,OAAO,cAAe,UAAY,KAAK,IAAI,UAAW,CAAC,CAAC,EACvE,KAAK,UAAU,OAAO,YAAa,YAAc,KAAK,IAAI,UAAW,CAAC,CAAC,CACzE,CAAC,EACG,OAAO,OACT,OAAO,KAAK,YAAc,WAAa,EACnC,qFACA,+EAER,CAEA,SAAS,sBAAsB,UAAW,CACxC,OAAI,WAAa,IAAc,EAC3B,WAAa,IAAc,EAC3B,WAAa,KAAc,EAC3B,WAAa,IAAa,EAC1B,WAAa,IAAa,EACvB,CACT,CAEA,SAAS,iBAAiB,OAAQ,CAChC,MAAM,OAAS,gBAAgB,MAAM,EAChC,OAAO,QACZ,OAAO,MAAM,OAAS,GACtB,eAAe,OAAQ,CAAC,EACxB,mBAAmB,OAAO,KAAK,EACjC,CAEA,SAAS,iBAAiB,OAAQ,CAChC,MAAM,OAAS,gBAAgB,MAAM,EACjC,OAAO,QAAO,OAAO,MAAM,OAAS,IACpC,OAAO,WAAU,OAAO,SAAS,MAAM,MAAQ,OACnD,OAAO,MAAM,QAAS,MAAS,CAC7B,KAAK,UAAU,OAAO,YAAa,aAAa,CAClD,CAAC,CACH,CAEA,SAAS,QAAQ,OAAQ,KAAM,CAC7B,OAAO,iBAAiB,QAAQ,EAAE,QAAS,QAAW,CAChD,OAAO,aAAa,yBAAyB,IACjD,OAAO,SAAW,KACpB,CAAC,EACD,MAAM,eAAiB,OAAO,cAAc,4BAA4B,EACpE,iBACG,eAAe,QAAQ,WAAU,eAAe,QAAQ,SAAW,eAAe,YAAY,KAAK,GACxG,eAAe,YAAc,KAAO,yBAAsB,eAAe,QAAQ,UAEnF,OAAO,aAAa,YAAa,KAAO,OAAS,OAAO,CAC1D,CAEA,SAAS,mBAAmB,QAAS,CAC/B,CAAC,SAAW,CAAC,QAAQ,gBACzB,OAAO,WAAW,IAAM,CACtB,QAAQ,eAAe,CAAE,SAAU,SAAU,MAAO,SAAU,OAAQ,SAAU,CAAC,CACnF,EAAG,GAAG,CACR,CAEA,SAAS,aAAa,OAAQ,CAC5B,MAAO,CACL,KAAM,OAAO,cAAc,wBAAwB,EACnD,MAAO,OAAO,cAAc,yBAAyB,EACrD,QAAS,OAAO,cAAc,2BAA2B,EACzD,OAAQ,OAAO,cAAc,0BAA0B,EACvD,KAAM,OAAO,cAAc,8BAA8B,EACzD,MAAO,OAAO,cAAc,8BAA8B,CAC5D,CACF,CAEA,SAAS,YAAY,OAAQ,KAAM,CACjC,MAAM,KAAO,aAAa,MAAM,EAChC,CAAC,KAAK,OAAQ,KAAK,KAAM,KAAK,MAAO,KAAK,OAAO,EAAE,QAAS,MAAS,CAC/D,OAAM,KAAK,SAAW,KAC5B,CAAC,CACH,CAEA,SAAS,gBAAgB,OAAQ,CAC/B,MAAM,KAAO,aAAa,MAAM,EAC5B,KAAK,OAAM,KAAK,KAAK,OAAS,IAC9B,KAAK,QAAO,KAAK,MAAM,YAAc,IACzC,YAAY,OAAQ,EAAK,CAC3B,CAEA,SAAS,gBAAgB,OAAQ,OAAQ,CACvC,MAAM,KAAO,aAAa,MAAM,EAChC,iBAAiB,MAAM,EACvB,OAAO,yBAA2B,OAClC,OAAO,wBAA0B,KAC7B,KAAK,OAAM,KAAK,KAAK,OAAS,IAC9B,KAAK,QAAO,KAAK,MAAM,YAAc,IACzC,YAAY,OAAQ,EAAK,EACzB,MAAM,2BAA4B,CAChC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,OAAQ,OAAO,QAAU,GACzB,eAAgB,OAAO,sBAAyB,iBAAiB,MAAM,GAAK,iBAAiB,MAAM,EAAE,KACvG,CAAC,EACD,mBAAmB,KAAK,IAAI,CAC9B,CAEA,SAAS,uBAAuB,OAAQ,OAAQ,QAAS,CACvD,MAAM,UAAY,iBAAiB,MAAM,EACnC,aAAe,OAAO,cAAc,0BAA0B,EAC9D,eAAiB,OAAO,cAAc,kCAAkC,EACxE,cAAgB,OAAO,cAAc,iCAAiC,EACtE,OAAS,OAAO,cAAc,0BAA0B,EACxD,SAAW,OAAO,cAAc,4BAA4B,EAC5D,aAAe,OAAO,cAAc,0BAA0B,EAIpE,GAHA,OAAO,wBAA0B,OACjC,OAAO,yBAA2B,KAE9B,CADa,iBAAiB,OAAQ,MAAM,EAE9C,MAAM,IAAI,MAAM,oFAAoF,EAEtG,OAAI,eAAc,aAAa,IAAM,OAAO,gBACxC,iBAAgB,eAAe,YAAc,0BAA0B,OAAO,sBAAyB,WAAa,UAAU,OAAU,SAAS,IACjJ,gBAAe,cAAc,OAAS,IACtC,SAAQ,OAAO,YAAc,6CAC7B,WAAU,SAAS,YAAc,wEACjC,eAAc,aAAa,OAAS,IACxC,iBAAiB,MAAM,EACvB,gBAAgB,MAAM,EACtB,mBAAmB,eAAiB,QAAQ,EACrC,EACT,CAEA,SAAS,sBAAsB,OAAQ,QAAS,CAC9C,OAAO,wBAA0B,KACjC,OAAO,yBAA2B,KAClC,OAAO,wBAA0B,GACjC,oBAAoB,MAAM,EAC1B,mBAAmB,OAAQ,EAAG,CAAE,MAAO,GAAO,UAAW,GAAM,UAAW,EAAK,CAAC,EAChF,MAAM,aAAe,OAAO,cAAc,0BAA0B,EAC9D,cAAgB,OAAO,cAAc,iCAAiC,EACtE,SAAW,OAAO,cAAc,4BAA4B,EAC5D,aAAe,OAAO,cAAc,0BAA0B,EAChE,cAAc,aAAa,gBAAgB,KAAK,EAChD,gBAAe,cAAc,OAAS,IACtC,WAAU,SAAS,YAAc,IACjC,eAAc,aAAa,OAAS,IACxC,iBAAiB,MAAM,EACvB,gBAAgB,MAAM,EAClB,UAAS,OAAO,cAAc,0BAA0B,EAAE,YAAc,QAC9E,CAEA,SAAS,sBAAsB,OAAQ,iBAAkB,CACvD,MAAM,gBAAkB,OAAO,qBACzB,YAAc,aAAa,MAAM,EACvC,OAAO,qBAAuB,YAC9B,MAAM,UAAY,iBAAiB,MAAM,EACzC,OAAO,QAAQ,UAAY,UAC3B,MAAM,UAAY,iBAAiB,MAAM,EACzC,qBAAqB,OAAQ,SAAS,EAClC,iBAAmB,kBAAoB,cAAgB,OAAO,yBAA2B,OAAO,2BAClG,sBAAsB,OAAQ,kBAAoB,sEAAsE,CAE5H,CAEA,eAAe,WAAW,OAAQ,CAChC,GAAI,OAAO,QAAQ,yBAA2B,OAAQ,OACtD,OAAO,QAAQ,uBAAyB,OAExC,MAAM,SAAW,OAAO,QAAQ,SAChC,GAAI,CAAC,SAAU,CACb,OAAO,OAAS,GAChB,MACF,CACA,GAAI,CACF,OAAO,kBAAoB,MAAM,WAAW,OAAO,QAAQ,SAAS,CACtE,MAAgB,CACd,OAAO,OAAS,GAChB,MACF,CACA,MAAM,OAAS,cAAc,MAAM,EACnC,GAAI,CAAC,QAAU,CAAC,OAAO,oBAAsB,CAAC,WAAW,MAAM,EAAE,OAAQ,CACvE,OAAO,OAAS,GAChB,MACF,CAEA,OAAO,OAAS,GAChB,mBAAmB,QAAQ,EAC3B,OAAO,wBAA0B,KACjC,OAAO,yBAA2B,KAClC,OAAO,wBAA0B,GACjC,OAAO,qBAAuB,aAAa,MAAM,EACjD,uBAAuB,MAAM,EAC7B,sBAAsB,MAAM,EAC5B,mBAAmB,OAAQ,EAAG,CAAE,MAAO,GAAO,UAAW,GAAM,UAAW,EAAK,CAAC,EAEhF,MAAM,UAAY,OAAO,cAAc,wBAAwB,EACzD,SAAW,OAAO,cAAc,wBAAwB,EACxD,eAAiB,OAAO,cAAc,4BAA4B,EAClE,aAAe,OAAO,cAAc,0BAA0B,EAC9D,eAAiB,OAAO,iBAAiB,2BAA2B,EACpE,cAAgB,OAAO,cAAc,4BAA4B,EACjE,aAAe,OAAO,cAAc,0BAA0B,EAC9D,eAAiB,OAAO,cAAc,kCAAkC,EACxE,cAAgB,OAAO,cAAc,iCAAiC,EACtE,OAAS,OAAO,cAAc,0BAA0B,EACxD,YAAc,OAAO,cAAc,yBAAyB,EAC5D,SAAW,OAAO,cAAc,4BAA4B,EAC5D,KAAO,aAAa,MAAM,EAC1B,YAAc,2FAEpB,IAAI,aAAe,KACf,gBAAkB,GAClB,SAAW,OAAO,eAAe,QAAQ,qBAAqB,GAAK,GAAG,EAE1E,UAAU,iBAAiB,SAAU,SAAY,CAS/C,GARA,WAAW,MAAM,EACjB,sBAAsB,MAAM,EAC5B,iBAAiB,MAAM,EACvB,gBAAkB,GAClB,cAAc,gBAAgB,KAAK,EACnC,YAAY,OAAS,GACrB,eAAe,SAAW,GAC1B,aAAe,UAAU,OAAS,UAAU,MAAM,CAAC,EAC/C,EAAC,aAQL,IAPA,MAAM,+BAAgC,CACpC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,UAAW,aAAa,MAAQ,UAChC,iBAAkB,eAAe,aAAa,IAAI,EAClD,iBAAkB,aAAa,KAAO,EAAI,KAAO,KAAO,qBAAuB,UACjF,CAAC,EACG,aAAa,KAAO,EAAI,KAAO,KAAM,CACvC,UAAU,OAAQ,4DAA4D,EAC9E,aAAe,KACf,MACF,CACA,gBAAkB,MAAM,cAAc,YAAY,EAClD,cAAc,IAAM,gBACpB,YAAY,OAAS,GACrB,eAAe,SAAW,GAC1B,OAAO,YAAc,yDACrB,mBAAmB,cAAc,EACnC,CAAC,EAEG,WACF,SAAS,iBAAiB,WAAa,OAAU,CAC/C,MAAM,eAAe,CACvB,CAAC,EACD,SAAS,iBAAiB,OAAQ,MAAO,OAAU,CAEjD,GADA,MAAM,eAAe,EACjB,CAAC,MAAM,cAAgB,CAAC,MAAM,aAAa,OAAS,CAAC,MAAM,aAAa,MAAM,OAAQ,OAC1F,MAAM,SAAW,IAAI,aACrB,SAAS,MAAM,IAAI,MAAM,aAAa,MAAM,CAAC,CAAC,EAC9C,UAAU,MAAQ,SAAS,MAC3B,UAAU,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,CAChE,CAAC,GAGH,OAAO,iBAAiB,SAAW,OAAU,CAC3C,MAAM,OAAS,MAAM,OACrB,GAAI,QAAU,OAAO,SAAW,OAAO,QAAQ,mCAAmC,EAAG,CACnF,MAAM,UAAY,iBAAiB,MAAM,EACzC,qBAAqB,OAAQ,SAAS,GAClC,OAAO,yBAA2B,OAAO,2BAC3C,sBAAsB,OAAQ,sEAAsE,CAExG,CACF,CAAC,EAED,OAAO,iBAAiB,QAAU,OAAU,CAC1C,MAAM,OAAS,MAAM,QAAU,MAAM,OAAO,SAAW,MAAM,OAAO,QAAQ,kCAAkC,EAC9G,GAAI,CAAC,QAAU,CAAC,OAAO,SAAS,MAAM,EAAG,OACzC,MAAM,MAAQ,OAAO,cAAc,mCAAmC,EAClE,CAAC,OAAS,MAAM,UACpB,MAAM,QAAU,GAChB,MAAM,cAAc,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CAAC,EAC5D,CAAC,EAED,MAAM,aAAe,OAAO,QAAQ,cAAc,GAAK,SACvD,qBAAqB,OAAQ,YAAY,EACzC,aAAa,iBAAiB,SAAW,OAAU,CACjD,MAAM,OAAS,MAAM,OACjB,QAAU,OAAO,SAAW,OAAO,QAAQ,uBAAuB,GACtE,OAAO,WAAW,IAAM,sBAAsB,MAAM,EAAG,CAAC,CAC1D,CAAC,EACD,aAAa,iBAAiB,iBAAkB,IAAM,sBAAsB,MAAM,CAAC,EAEnF,eAAe,iBAAiB,QAAS,SAAY,CACnD,WAAW,MAAM,EACjB,SAAS,YAAc,GACvB,sBAAsB,MAAM,EAC5B,MAAM,UAAY,iBAAiB,MAAM,EACnC,UAAY,iBAAiB,MAAM,EACzC,GAAI,CAAC,UAAW,CACd,UAAU,OAAQ,yHAAyH,EAC3I,MACF,CACA,GAAI,CAAC,cAAgB,CAAC,gBAAiB,CACrC,UAAU,MAAM,EAChB,MACF,CACA,GAAI,UAAY,EAAc,CAC5B,UAAU,OAAQ,mGAAmG,EACrH,MACF,CACA,MAAM,cAAgB,SAAW,EACjC,QAAQ,OAAQ,EAAI,EACpB,iBAAiB,MAAM,EACvB,MAAM,mCAAoC,CACxC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,eAAgB,cAChB,eAAgB,WAAa,UAAU,KACzC,CAAC,EACD,MAAM,iBAAmB,KAAK,IAAI,EAC5B,YAAc,OAAO,YAAY,IAAM,CAC3C,eAAe,OAAQ,sBAAsB,KAAK,IAAI,EAAI,gBAAgB,CAAC,CAC7E,EAAG,GAAI,EACP,eAAe,OAAQ,CAAC,EAExB,GAAI,CACF,MAAM,OAAS,MAAM,eAAe,SAAU,CAC5C,SAAU,aAAa,KACvB,UAAW,aAAa,MAAQ,aAChC,aAAc,gBACd,eAAgB,OAAO,QAAQ,cAC/B,cAAe,OAAO,QAAQ,aAC9B,WAAY,aAAa,MAAM,EAC/B,WAAY,UACZ,eAAgB,WAAa,UAAU,MACvC,iBAAkB,UAClB,WAAY,aAAa,CAC3B,CAAC,EACD,SAAW,cACX,eAAe,QAAQ,sBAAuB,OAAO,QAAQ,CAAC,EAC9D,aAAa,gBAAgB,KAAK,EAC9B,gBAAe,cAAc,OAAS,IAC1C,iBAAiB,MAAM,EACvB,OAAO,YAAc,yDACrB,SAAS,YAAc,GACvB,aAAa,OAAS,GACtB,gBAAgB,OAAQ,MAAM,EAC9B,MAAM,qCAAsC,CAC1C,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,WAAY,OAAO,WACnB,eAAgB,OAAO,sBAAyB,WAAa,UAAU,MACvE,MAAO,OAAO,OAAS,SACzB,CAAC,CACH,OAAS,MAAO,CACd,OAAO,wBAA0B,KACjC,OAAO,wBAA0B,GACjC,oBAAoB,MAAM,EAC1B,mBAAmB,OAAQ,EAAG,CAAE,MAAO,GAAO,UAAW,GAAO,UAAW,EAAK,CAAC,EACjF,aAAa,OAAS,GACtB,aAAa,gBAAgB,KAAK,EAC9B,gBAAe,cAAc,OAAS,IAC1C,iBAAiB,MAAM,EACvB,MAAM,QAAU,OAAO,OAAS,MAAM,SAAW,OAAS,EAAE,EAC5D,UAAU,OAAQ,SAAW,UAAY,4BACrC,QACA,kHAAkH,EACtH,MAAM,kCAAmC,CACvC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,eAAgB,cAChB,eAAgB,WAAa,UAAU,MACvC,aAAc,sBAAsB,KAAK,CAC3C,CAAC,CACH,QAAE,CACA,OAAO,cAAc,WAAW,EAChC,QAAQ,OAAQ,EAAK,CACvB,CACF,CAAC,EAED,eAAe,QAAS,QAAW,OAAO,iBAAiB,QAAS,IAAM,CACxE,UAAU,MAAQ,GAClB,UAAU,MAAM,CAClB,CAAC,CAAC,EAEE,KAAK,QACP,KAAK,OAAO,iBAAiB,QAAS,SAAY,CAChD,MAAM,OAAS,OAAO,yBACtB,GAAI,CAAC,OAAQ,OACb,MAAM,MAAQ,KAAK,MAAQ,OAAO,KAAK,MAAM,OAAS,EAAE,EAAE,KAAK,EAAE,YAAY,EAAI,GACjF,GAAI,CAAC,gBAAgB,KAAK,EAAG,CACvB,KAAK,QAAO,KAAK,MAAM,YAAc,uCACrC,KAAK,OAAO,KAAK,MAAM,MAAM,EACjC,MACF,CACA,GAAI,CAAC,KAAK,SAAW,CAAC,KAAK,QAAQ,QAAS,CACtC,KAAK,QAAO,KAAK,MAAM,YAAc,2EACrC,KAAK,SAAS,KAAK,QAAQ,MAAM,EACrC,MACF,CACI,KAAK,QAAO,KAAK,MAAM,YAAc,IACzC,qBAAqB,SAAU,qBAAqB,OAAQ,OAAQ,MAAO,WAAW,CAAC,EAAE,MAAO,OAAU,CACxG,QAAQ,KAAK,+DAAgE,KAAK,CACpF,CAAC,EACD,MAAM,gCAAiC,CACrC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,OAAQ,OAAO,QAAU,GACzB,eAAgB,OAAO,sBAAyB,iBAAiB,MAAM,GAAK,iBAAiB,MAAM,EAAE,KACvG,CAAC,EACD,uBAAuB,OAAQ,OAAQ,CAAE,OAAQ,cAAe,CAAC,CACnE,CAAC,EAGC,KAAK,MACP,KAAK,KAAK,iBAAiB,QAAS,IAAM,CACxC,MAAM,OAAS,OAAO,yBACjB,SACL,MAAM,8BAA+B,CACnC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,OAAQ,OAAO,QAAU,GACzB,OAAQ,WACV,CAAC,EACD,uBAAuB,OAAQ,OAAQ,CAAE,OAAQ,WAAY,CAAC,EAChE,CAAC,EAGH,aAAa,iBAAiB,QAAS,IAAM,CAC3C,OAAO,wBAA0B,GACjC,aAAa,OAAS,GACtB,gBAAgB,MAAM,EACtB,mBAAmB,OAAQ,EAAG,CAAE,MAAO,GAAO,UAAW,GAAO,UAAW,EAAK,CAAC,EACjF,OAAO,YAAc,+DACrB,MAAM,QAAU,aAAa,cAAc,kEAAkE,EAC7G,mBAAmB,UAAY,QAAQ,QAAQ,cAAc,GAAK,QAAQ,EAC1E,MAAM,uCAAwC,CAC5C,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,CACjC,CAAC,CACH,CAAC,EAED,SAAS,sBAAsB,MAAO,CAChC,CAAC,OAAO,yBAA2B,OAAO,2BAC5C,MAAM,8BAA+B,CACnC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,OAAQ,OAAO,yBAAyB,QAAU,GAClD,OAAQ,aACV,CAAC,EACD,uBAAuB,OAAQ,OAAO,yBAA0B,CAAE,OAAQ,aAAc,CAAC,GAE3F,MAAM,WAAa,EAAQ,OAAO,wBAElC,OADA,mBAAmB,OAAQ,EAAG,CAAE,MAAO,WAAY,UAAW,WAAY,UAAW,EAAK,CAAC,EACtF,OAAO,yBAYZ,iBAAiB,OAAQ,OAAO,uBAAuB,EACvD,MAAM,4BAA6B,CACjC,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,YAAa,EACf,CAAC,EACM,KAjBL,OAAO,wBAA0B,GACjC,aAAa,OAAS,GACtB,mBAAmB,OAAQ,EAAG,CAAE,MAAO,GAAO,UAAW,GAAO,UAAW,EAAK,CAAC,EACjF,OAAO,YAAc,2DACrB,MAAM,4CAA6C,CACjD,eAAgB,OAAO,QAAQ,cAC/B,WAAY,aAAa,MAAM,EAC/B,YAAa,EACf,CAAC,EACM,GASX,CAEA,SAAS,kBAAkB,MAAO,CAChC,MAAM,OAAS,MAAM,OACrB,GAAI,CAAC,QAAU,CAAC,OAAO,QAAS,MAAO,GACvC,MAAM,OAAS,OAAO,QAAQ,6EAA6E,EAC3G,GAAI,CAAC,OAAQ,MAAO,GAEpB,MAAMA,MAAO,eAAe,MAAM,EAC5B,YAAc,OAAO,QAAQ,cAAc,EACjD,MAAO,GACJA,QAASA,MAAK,SAAS,MAAM,GAAK,OAAO,OAASA,QAClD,aAAe,YAAY,SAAS,MAAM,GAC3C,OAAO,UAAU,SAAS,sBAAsB,EAEpD,CAEA,MAAM,KAAO,eAAe,MAAM,EAC9B,MACF,KAAK,iBAAiB,SAAU,sBAAuB,CAAE,QAAS,EAAK,CAAC,EAE1E,SAAS,iBAAiB,QAAU,OAAU,CACxC,kBAAkB,KAAK,GAAG,sBAAsB,KAAK,CAC3D,EAAG,CAAE,QAAS,EAAK,CAAC,CACtB,CAEA,SAAS,MAAO,CACd,SAAS,iBAAiB,sBAAsB,EAAE,QAAS,QAAW,WAAW,MAAM,CAAC,CAC1F,CAEI,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoB,KAAM,CAAE,KAAM,EAAK,CAAC,EAElE,KAAK,CAET,GAAG",
  "names": ["form"]
}
