{
  "version": 3,
  "sources": ["/cdn/shop/t/996/assets/subscription-selector.js?utm_bot_source=7516fd43adaa"],
  "sourcesContent": ["\nconst productCache = new Map();\n\nlet activeCount = 0;\n\nfunction setGlobalActive(active) {\n  const wasActive = activeCount > 0;\n  activeCount = Math.max(0, activeCount + (active ? 1 : -1));\n  const isActive = activeCount > 0;\n  if (isActive !== wasActive) {\n    document.dispatchEvent(new CustomEvent(\"subscription:operation-active\", { detail: { active: isActive } }));\n  }\n}\n\nfunction getProductData(handle) {\n  if (productCache.has(handle)) return productCache.get(handle);\n  const request = fetch(`/products/${handle}.js`)\n    .then((response) => {\n      if (!response.ok) {\n        throw new Error(`subscription-selector: failed to fetch /products/${handle}.js`);\n      }\n      return response.json();\n    })\n    .catch((err) => {\n      productCache.delete(handle);\n      throw err;\n    });\n  productCache.set(handle, request);\n  return request;\n}\n\n// Exposed for manual cache-busting during testing \u2014 see extending-this notes.\nif (typeof window !== \"undefined\") {\n  window.__subscriptionSelectorProductCache = productCache;\n}\n\nconst badgesCache = new Map();\n\nfunction getSubscriptionBadges(handle) {\n  if (badgesCache.has(handle)) return badgesCache.get(handle);\n  const request = fetch(`/products/${handle}?view=subscription-badges`)\n    .then((response) => {\n      if (!response.ok) {\n        throw new Error(`subscription-selector: failed to fetch subscription-badges view for ${handle}`);\n      }\n      return response.json();\n    })\n    .catch((err) => {\n      badgesCache.delete(handle);\n      throw err;\n    });\n  badgesCache.set(handle, request);\n  return request;\n}\n\n/** Flattens the {badges} response into the list of items renderSubscriptionInfo\n * needs, or null if there's nothing to show. badges is a list.single_line_text_field\n * metafield, always plain text, so items stay escaped. */\nfunction flattenSubscriptionBadges(data) {\n  if (!data || !Array.isArray(data.badges) || !data.badges.length) return null;\n  return data.badges.map((text) => ({ text, allowHtml: false }));\n}\n\n// Picks a perk icon from the badge text's own content \u2014 badge copy comes\n// straight from the merchant-editable metafield (see renderSubscriptionInfo\n// below), so there's no separate per-badge \"icon type\" field to key off of.\n// Order matters: checked top to bottom, first match wins. Falls back to a\n// plain checkmark for any badge that doesn't hit one of these.\nconst PERK_ICON_RULES = [\n  { type: \"percent\", pattern: /%|percent|save|discount/i },\n  { type: \"shipping\", pattern: /ship|deliver/i },\n  { type: \"calendar\", pattern: /cancel|commitment|anytime/i },\n  { type: \"gift\", pattern: /gift|coupon|\\bcode\\b/i },\n];\n\nfunction pickPerkIcon(text) {\n  const match = PERK_ICON_RULES.find((rule) => rule.pattern.test(text));\n  return match ? match.type : \"check\";\n}\n\n\nfunction renderSubscriptionInfo(idSuffix, benefits) {\n  if (!benefits || !benefits.length) return \"\";\n\n  const tooltipId = `subscription-info-${idSuffix}`;\n  const titleId = `${tooltipId}-title`;\n  const items = benefits\n    .map(({ text, allowHtml }) => {\n      const content = allowHtml ? text : escapeHtml(text);\n      return `<li><span class=\"subscription-perk-icon subscription-perk-icon--${pickPerkIcon(text)}\" aria-hidden=\"true\"></span><span class=\"subscription-perk-text\">${content}</span></li>`;\n    })\n    .join(\"\");\n  return `\n    <span class=\"subscription-info\">\n      <button\n        type=\"button\"\n        class=\"subscription-info-toggle\"\n        aria-expanded=\"false\"\n        aria-controls=\"${tooltipId}\"\n        aria-label=\"Subscription benefits\"\n      >i</button>\n      <div class=\"subscription-info-scrim\" hidden></div>\n      <div class=\"subscription-info-tooltip\" id=\"${tooltipId}\" aria-labelledby=\"${titleId}\" hidden>\n        <div class=\"subscription-info-tooltip-body\">\n          <div class=\"subscription-info-tooltip-header\">\n            <p class=\"subscription-info-tooltip-title\" id=\"${titleId}\">Subscription Perks</p>\n            <button type=\"button\" class=\"subscription-info-close\" aria-label=\"Close subscription benefits\"></button>\n          </div>\n          <ul>${items}</ul>\n        </div>\n      </div>\n    </span>\n  `;\n}\n\n\nfunction findItemWithFallback(cart, key, expectedSellingPlanId) {\n  if (!cart || !Array.isArray(cart.items) || !key) return null;\n\n  const exact = cart.items.find((item) => item.key === key);\n  if (exact) return exact;\n\n  const parts = String(key).split(\":\");\n  if (parts.length === 2) {\n    const variantId = parseInt(parts[0], 10);\n    if (!Number.isNaN(variantId)) {\n      const matches = cart.items.filter((item) => item.variant_id === variantId);\n      if (matches.length === 1) return matches[0];\n      if (matches.length > 1) return resolveMultipleMatches(matches, parts[1], expectedSellingPlanId);\n    }\n  }\n\n  const numericId = parseInt(key, 10);\n  if (!Number.isNaN(numericId)) {\n    const byVariantId = cart.items.find((item) => item.variant_id === numericId);\n    if (byVariantId) return byVariantId;\n  }\n\n  return null;\n}\n\nfunction resolveMultipleMatches(matches, checksum, expectedSellingPlanId) {\n  if (checksum) {\n    const checksumMatch = matches.find((item) => item.key.includes(checksum));\n    if (checksumMatch) return checksumMatch;\n  }\n  if (expectedSellingPlanId !== undefined) {\n    const planMatch = matches.find((item) =>\n      expectedSellingPlanId\n        ? String(item.selling_plan_allocation?.selling_plan_id) === String(expectedSellingPlanId)\n        : !item.selling_plan_allocation\n    );\n    if (planMatch) return planMatch;\n  }\n  const oneTime = matches.find((item) => !item.selling_plan_allocation);\n  if (oneTime) return oneTime;\n  const subscription = matches.find((item) => !!item.selling_plan_allocation);\n  if (subscription) return subscription;\n  return matches[0];\n}\n\nfunction findFixedContainingBlock(el) {\n  let node = el.parentElement;\n  while (node && node !== document.body) {\n    const style = getComputedStyle(node);\n    if (\n      style.transform !== \"none\" ||\n      style.perspective !== \"none\" ||\n      style.filter !== \"none\" ||\n      style.willChange === \"transform\"\n    ) {\n      return node;\n    }\n    node = node.parentElement;\n  }\n  return null;\n}\n\nfunction escapeHtml(value) {\n  return String(value).replace(/[&<>\"']/g, (char) => ({\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': \"&quot;\",\n    \"'\": \"&#39;\",\n  }[char]));\n}\n\nclass SubscriptionSelector extends HTMLElement {\n  constructor() {\n    super();\n    this._productData = null;\n    this._subscriptionBenefits = null;\n    this._disabled = false;\n    this._deliveryOpen = false;\n    this._deliveryActiveIndex = -1;\n    this._deliveryAllocations = [];\n    this._infoOpen = false;\n    this._onToggleChange = this.handleToggleChange.bind(this);\n    this._onDeliveryToggleClick = this.handleDeliveryToggleClick.bind(this);\n    this._onDeliveryToggleKeydown = this.handleDeliveryToggleKeydown.bind(this);\n    this._onDeliveryListKeydown = this.handleDeliveryListKeydown.bind(this);\n    this._onDeliveryOptionClick = this.handleDeliveryOptionClick.bind(this);\n    this._onInfoToggleClick = this.handleInfoToggleClick.bind(this);\n    this._onInfoToggleKeydown = this.handleInfoToggleKeydown.bind(this);\n    this._onInfoCloseClick = this.handleInfoCloseClick.bind(this);\n    this._onDocumentClick = this.handleDocumentClick.bind(this);\n    // The tooltip is `position: fixed` (see subscription-selector.css) with\n    // its on-screen position computed once at open time \u2014 it doesn't track\n    // the icon as the item list scrolls, so scrolling that list while open\n    // would leave it visually stranded. Closing on scroll is simpler than\n    // repositioning continuously and matches the existing close-on-outside-\n    // interaction pattern (click-away, Escape) below.\n    this._onInfoScroll = () => this.closeInfoTooltip();\n    this._infoScrollContainer = null;\n  }\n\n  connectedCallback() {\n    this._itemKey = this.dataset.itemKey;\n    this._variantId = this.dataset.itemVariantId;\n    this._itemHandle = this.dataset.itemHandle;\n    this._sellingPlanId = this.dataset.itemSellingPlanId || null;\n     this._disabled = false;\n\n    if (!this._itemHandle) return;\n\n    getProductData(this._itemHandle)\n      .then((data) => {\n        this._productData = data;\n        this.render();\n      })\n      .catch((err) => {\n        console.error(\"subscription-selector: could not load product data\", err);\n      });\n\n    // Independent of the product-data fetch above (and its own render() call)\n    // \u2014 this only affects the tooltip's content, so it re-renders on its own\n    // once resolved rather than blocking the main render on a second request.\n    getSubscriptionBadges(this._itemHandle)\n      .then((data) => {\n        this._subscriptionBenefits = flattenSubscriptionBadges(data);\n        if (this._productData) this.render();\n      })\n      .catch((err) => {\n        console.error(\"subscription-selector: could not load subscription badges\", err);\n      });\n  }\n\n  disconnectedCallback() {\n    document.removeEventListener(\"click\", this._onDocumentClick, true);\n    if (this._infoScrollContainer) {\n      this._infoScrollContainer.removeEventListener(\"scroll\", this._onInfoScroll);\n      this._infoScrollContainer = null;\n    }\n  }\n\n  setDisabled(disabled) {\n    this._disabled = disabled;\n\n    if (disabled) {\n      this.closeDeliveryList();\n    }\n    this.classList.toggle(\"is-updating\", disabled);\n  }\n\n  findPlan(sellingPlanId) {\n    const groups = this._productData?.selling_plan_groups || [];\n    for (const group of groups) {\n      const plan = (group.selling_plans || []).find((p) => String(p.id) === String(sellingPlanId));\n      if (plan) return plan;\n    }\n    return null;\n  }\n\n  render() {\n    if (!this._productData) {\n      this.innerHTML = \"\";\n      this.hidden = true;\n      return;\n    }\n\n    const variant = this._productData.variants?.find((v) => String(v.id) === String(this._variantId));\n    const allocations = variant?.selling_plan_allocations || [];\n\n    if (!allocations.length) {\n      this.innerHTML = \"\";\n      this.hidden = true;\n      return;\n    }\n\n    this.hidden = false;\n\n    const isSubscribed = !!this._sellingPlanId;\n    const disabled = this._disabled;\n\n    if (isSubscribed) {\n      this._deliveryAllocations = allocations;\n      this._deliveryActiveIndex = Math.max(\n        0,\n        allocations.findIndex((a) => String(a.selling_plan_id) === String(this._sellingPlanId)),\n      );\n\n      const selectedAllocation = allocations[this._deliveryActiveIndex] || allocations[0];\n      const selectedPlan = selectedAllocation ? this.findPlan(selectedAllocation.selling_plan_id) : null;\n      const selectedName = selectedPlan ? selectedPlan.name.toLowerCase() : \"\";\n     \n      const discount = selectedPlan?.price_adjustments?.[0]?.value;\n      const discountLabel = discount ? ` and Save ${discount}%` : \"\";\n\n      const selectId = `subscription-delivery-${this._variantId}`;\n      const listId = `${selectId}-list`;\n\n      const optionsHtml = allocations\n        .map((allocation) => {\n          const plan = this.findPlan(allocation.selling_plan_id);\n          const name = plan ? plan.name.toLowerCase() : \"\";\n          const isSelected = String(allocation.selling_plan_id) === String(this._sellingPlanId);\n          return `<li\n              role=\"option\"\n              class=\"subscription-delivery-option\"\n              id=\"${listId}-opt-${allocation.selling_plan_id}\"\n              data-value=\"${allocation.selling_plan_id}\"\n              aria-selected=\"${isSelected}\"\n            >${escapeHtml(name)}</li>`;\n        })\n        .join(\"\");\n\n      this.innerHTML = `\n        <label class=\"subscription-toggle\">\n          <input type=\"checkbox\" class=\"subscription-toggle-input\" checked${disabled ? \" disabled\" : \"\"}>\n          <span class=\"subscription-toggle-label\">Subscribe${discountLabel}</span>\n       </label>\n          ${renderSubscriptionInfo(this._variantId, this._subscriptionBenefits)}\n      \n          <div class=\"subscription-delivery\">\n          <label class=\"subscription-delivery-label\" id=\"${selectId}-label\">Select Delivery</label>\n          <div class=\"subscription-delivery-dropdown\">\n            <button\n              type=\"button\"\n              class=\"subscription-delivery-toggle\"\n              id=\"${selectId}\"\n              aria-haspopup=\"listbox\"\n              aria-expanded=\"false\"\n              aria-labelledby=\"${selectId}-label ${selectId}\"\n              aria-controls=\"${listId}\"\n              ${disabled ? \"disabled\" : \"\"}\n            ><span class=\"subscription-delivery-value\">${escapeHtml(selectedName)}</span></button>\n            <ul\n              class=\"subscription-delivery-list\"\n              role=\"listbox\"\n              id=\"${listId}\"\n              aria-labelledby=\"${selectId}-label\"\n              tabindex=\"-1\"\n              hidden\n            >${optionsHtml}</ul>\n          </div>\n        </div>\n      `;\n    } else {\n      const group = this._productData.selling_plan_groups?.[0];\n      const plan = group?.selling_plans?.[0];\n      const discount = plan?.price_adjustments?.[0]?.value;\n      const discountLabel = discount ? ` and Save ${discount}%` : \"\";\n\n      this.innerHTML = `\n        <label class=\"subscription-toggle\">\n          <input type=\"checkbox\" class=\"subscription-toggle-input\"${disabled ? \" disabled\" : \"\"}>\n          <span class=\"subscription-toggle-label\">Subscribe${discountLabel}</span>\n        </label>\n           ${renderSubscriptionInfo(this._variantId, this._subscriptionBenefits)}\n    \n         `;\n    }\n\n    this.bindControls();\n  }\n\n  bindControls() {\n    const input = this.querySelector(\".subscription-toggle-input\");\n    const toggle = this.querySelector(\".subscription-delivery-toggle\");\n    const list = this.querySelector(\".subscription-delivery-list\");\n    const infoToggle = this.querySelector(\".subscription-info-toggle\");\n    const infoClose = this.querySelector(\".subscription-info-close\");\n    if (input) input.addEventListener(\"change\", this._onToggleChange);\n    if (toggle) {\n      toggle.addEventListener(\"click\", this._onDeliveryToggleClick);\n      toggle.addEventListener(\"keydown\", this._onDeliveryToggleKeydown);\n    }\n    if (list) {\n      list.addEventListener(\"keydown\", this._onDeliveryListKeydown);\n      list.addEventListener(\"click\", this._onDeliveryOptionClick);\n    }\n    if (infoToggle) {\n      infoToggle.addEventListener(\"click\", this._onInfoToggleClick);\n      infoToggle.addEventListener(\"keydown\", this._onInfoToggleKeydown);\n    }\n    if (infoClose) {\n      infoClose.addEventListener(\"click\", this._onInfoCloseClick);\n    }\n    // infoScrim intentionally has no click handler \u2014 it only dims the drawer\n    // behind the open tooltip (see .subscription-info-scrim in\n    // subscription-selector.css); closing is via the \u00D7 button only.\n  }\n\n  get deliveryToggle() {\n    return this.querySelector(\".subscription-delivery-toggle\");\n  }\n\n  get deliveryList() {\n    return this.querySelector(\".subscription-delivery-list\");\n  }\n\n  get deliveryOptions() {\n    return Array.from(this.querySelectorAll(\".subscription-delivery-option\"));\n  }\n\n  openDeliveryList() {\n    const toggle = this.deliveryToggle;\n    const list = this.deliveryList;\n    if (!toggle || !list || this._disabled) return;\n\n    this.closeInfoTooltip();\n    this._deliveryOpen = true;\n    list.hidden = false;\n    toggle.setAttribute(\"aria-expanded\", \"true\");\n    list.focus();\n    this.setDeliveryActiveIndex(this._deliveryActiveIndex);\n    // Capture phase so this fires before a click on an unrelated element\n    // elsewhere in the drawer would otherwise be missed by delegation.\n    document.addEventListener(\"click\", this._onDocumentClick, true);\n  }\n\n  closeDeliveryList({ focusToggle = false } = {}) {\n    const toggle = this.deliveryToggle;\n    const list = this.deliveryList;\n    this._deliveryOpen = false;\n    if (list) {\n      list.hidden = true;\n      list.removeAttribute(\"aria-activedescendant\");\n    }\n    if (toggle) {\n      toggle.setAttribute(\"aria-expanded\", \"false\");\n      if (focusToggle) toggle.focus();\n    }\n    // The info tooltip shares this same document-click listener (only one of\n    // the two popovers is ever open at once \u2014 each closes the other) \u2014 only\n    // detach once nothing is left open needing it.\n    if (!this._infoOpen) {\n      document.removeEventListener(\"click\", this._onDocumentClick, true);\n    }\n  }\n\n  get infoToggle() {\n    return this.querySelector(\".subscription-info-toggle\");\n  }\n\n  get infoTooltip() {\n    return this.querySelector(\".subscription-info-tooltip\");\n  }\n\n  get infoTooltipBody() {\n    return this.querySelector(\".subscription-info-tooltip-body\");\n  }\n\n  get infoScrim() {\n    return this.querySelector(\".subscription-info-scrim\");\n  }\n\n  positionInfoTooltip() {\n    const toggle = this.infoToggle;\n    const tooltip = this.infoTooltip;\n    if (!toggle || !tooltip) return;\n\n    const containingBlock = findFixedContainingBlock(toggle);\n    const containingRect = containingBlock\n      ? containingBlock.getBoundingClientRect()\n      : { top: 0, right: window.innerWidth };\n    const toggleRect = toggle.getBoundingClientRect();\n    const viewportTop = toggleRect.bottom + 8; // viewport-relative, regardless of containingBlock\n    tooltip.style.top = `${viewportTop - containingRect.top}px`;\n    tooltip.style.right = `${containingRect.right - toggleRect.right - 10}px`;\n    // Caps the tooltip to whatever space is actually left below the icon \u2014\n    // a long perks list opened near the bottom of the screen would otherwise\n    // run off the viewport with no way to reach the rest of it (the CSS\n    // max-height is just a fallback for before this runs). 16px keeps it off\n    // the very edge of the screen. Set on .subscription-info-tooltip-body,\n    // not the outer tooltip \u2014 the body is what actually scrolls now (see\n    // subscription-selector.css); the outer box has no padding/chrome of its\n    // own beyond the body, so the same budget applies to it unchanged.\n    const body = this.infoTooltipBody;\n    if (body) {\n      const viewportMargin = 16;\n      body.style.maxHeight = `${Math.max(120, window.innerHeight - viewportTop - viewportMargin)}px`;\n    }\n  }\n\n  openInfoTooltip() {\n    const toggle = this.infoToggle;\n    const tooltip = this.infoTooltip;\n    if (!toggle || !tooltip) return;\n\n    this.closeDeliveryList();\n    this._infoOpen = true;\n    this.positionInfoTooltip();\n    tooltip.hidden = false;\n    const scrim = this.infoScrim;\n    if (scrim) scrim.hidden = false;\n    this.classList.add(\"subscription-selector--info-open\");\n    toggle.setAttribute(\"aria-expanded\", \"true\");\n    document.addEventListener(\"click\", this._onDocumentClick, true);\n    this._infoScrollContainer = this.closest(\".sidecart-inner\");\n    if (this._infoScrollContainer) {\n      this._infoScrollContainer.addEventListener(\"scroll\", this._onInfoScroll, { passive: true });\n    }\n  }\n\n  closeInfoTooltip({ focusToggle = false } = {}) {\n    const toggle = this.infoToggle;\n    const tooltip = this.infoTooltip;\n    this._infoOpen = false;\n    if (tooltip) tooltip.hidden = true;\n    const scrim = this.infoScrim;\n    if (scrim) scrim.hidden = true;\n    this.classList.remove(\"subscription-selector--info-open\");\n    if (this._infoScrollContainer) {\n      this._infoScrollContainer.removeEventListener(\"scroll\", this._onInfoScroll);\n      this._infoScrollContainer = null;\n    }\n    if (toggle) {\n      toggle.setAttribute(\"aria-expanded\", \"false\");\n      if (focusToggle) toggle.focus();\n    }\n    if (!this._deliveryOpen) {\n      document.removeEventListener(\"click\", this._onDocumentClick, true);\n    }\n  }\n\n  handleInfoToggleClick(event) {\n    event.stopPropagation();\n    if (this._infoOpen) {\n      this.closeInfoTooltip();\n    } else {\n      this.openInfoTooltip();\n    }\n  }\n\n  handleInfoToggleKeydown(event) {\n    if (event.key === \"Escape\" && this._infoOpen) {\n      event.preventDefault();\n      this.closeInfoTooltip({ focusToggle: true });\n    }\n  }\n\n  handleInfoCloseClick(event) {\n    event.stopPropagation();\n    this.closeInfoTooltip({ focusToggle: true });\n  }\n\n  setDeliveryActiveIndex(index) {\n    const options = this.deliveryOptions;\n    if (!options.length) return;\n    this._deliveryActiveIndex = Math.min(Math.max(index, 0), options.length - 1);\n    const list = this.deliveryList;\n    const activeOption = options[this._deliveryActiveIndex];\n    options.forEach((option) => option.classList.remove(\"is-active\"));\n    if (activeOption) {\n      activeOption.classList.add(\"is-active\");\n      if (list) list.setAttribute(\"aria-activedescendant\", activeOption.id);\n      activeOption.scrollIntoView({ block: \"nearest\" });\n    }\n  }\n\n  selectDeliveryOption(option) {\n    if (!option) return;\n    const sellingPlanId = option.dataset.value;\n    this.closeDeliveryList({ focusToggle: true });\n    if (String(sellingPlanId) === String(this._sellingPlanId)) return;\n    this.submitChange(sellingPlanId);\n  }\n\n  handleDeliveryToggleClick() {\n    if (this._deliveryOpen) {\n      this.closeDeliveryList();\n    } else {\n      this.openDeliveryList();\n    }\n  }\n\n  handleDeliveryToggleKeydown(event) {\n    if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \" \"].includes(event.key)) {\n      event.preventDefault();\n      this.openDeliveryList();\n    }\n  }\n\n  handleDeliveryListKeydown(event) {\n    const options = this.deliveryOptions;\n    if (!options.length) return;\n\n    switch (event.key) {\n      case \"ArrowDown\":\n        event.preventDefault();\n        this.setDeliveryActiveIndex(this._deliveryActiveIndex + 1);\n        break;\n      case \"ArrowUp\":\n        event.preventDefault();\n        this.setDeliveryActiveIndex(this._deliveryActiveIndex - 1);\n        break;\n      case \"Home\":\n        event.preventDefault();\n        this.setDeliveryActiveIndex(0);\n        break;\n      case \"End\":\n        event.preventDefault();\n        this.setDeliveryActiveIndex(options.length - 1);\n        break;\n      case \"Enter\":\n      case \" \":\n        event.preventDefault();\n        this.selectDeliveryOption(options[this._deliveryActiveIndex]);\n        break;\n      case \"Escape\":\n        event.preventDefault();\n        this.closeDeliveryList({ focusToggle: true });\n        break;\n      case \"Tab\":\n        this.closeDeliveryList();\n        break;\n    }\n  }\n\n  handleDeliveryOptionClick(event) {\n    const option = event.target.closest(\".subscription-delivery-option\");\n    if (option) this.selectDeliveryOption(option);\n  }\n\n  handleDocumentClick(event) {\n    if (!this._deliveryOpen && !this._infoOpen) return;\n    if (this.contains(event.target)) return;\n    if (this._deliveryOpen) this.closeDeliveryList();\n    if (this._infoOpen) this.closeInfoTooltip();\n  }\n\n  handleToggleChange(event) {\n    const checked = event.target.checked;\n    if (checked) {\n      const variant = this._productData?.variants?.find((v) => String(v.id) === String(this._variantId));\n      const allocation = variant?.selling_plan_allocations?.[0];\n      if (!allocation) {\n        event.target.checked = false;\n        return;\n      }\n      this.submitChange(allocation.selling_plan_id);\n    } else {\n      this.submitChange(null);\n    }\n  }\n\n  async submitChange(sellingPlanId) {\n    if (this._disabled) return;\n\n    this.setDisabled(true);\n    setGlobalActive(true);\n\n    const run = async () => {\n      const cartResponse = await fetch(\"/cart.js\");\n      const cart = await cartResponse.json();\n      const item = findItemWithFallback(cart, this._itemKey, this._sellingPlanId);\n      if (!item) {\n        throw new Error(`subscription-selector: could not resolve cart item for key \"${this._itemKey}\"`);\n      }\n\n      const changeResponse = await fetch(\"/cart/change.js\", {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({\n          id: item.key,\n          quantity: item.quantity,\n          selling_plan: sellingPlanId || null,\n        }),\n      });\n      const updatedCart = await changeResponse.json();\n      if (updatedCart.status && updatedCart.status !== 200) {\n        throw new Error(updatedCart.description || updatedCart.message || \"subscription-selector: cart/change.js failed\");\n      }\n      return updatedCart;\n    };\n\n    try {\n      const updatedCart =\n        window.__cartQueue && typeof window.__cartQueue.withCartLock === \"function\"\n          ? await window.__cartQueue.withCartLock(run)\n          : await run();\n\n      window.wetheme?.updateCartDrawer?.(updatedCart);\n      window.wetheme?.toggleRightDrawer?.(\"cart\", \"maintain\", { cart: updatedCart });\n\n      // Dispatch through Cart.js's own dispatchCartUpdate \u2014 same as the\n      // quantity stepper (setQuantity in theme.legacy.js) does \u2014 rather than\n      // constructing the CustomEvent by hand. dispatchCartUpdate calls\n      // _markCartUpdateDispatched() first, which stamps cart-queue.js's\n      // dedup timer; without that stamp, cart-queue's own automatic\n      // interceptor dispatch isn't deduped and fires a SECOND, undeduped\n      // wetheme-cart-update shortly after this one for the same mutation,\n      // racing it. That race \u2014 not a missing event or stale cache \u2014 was\n      // why a threshold reward could re-evaluate unreliably specifically\n      // after this control, while the quantity stepper (which already goes\n      // through dispatchCartUpdate) never had the problem. Falls back to a\n      // manual dispatch (still setData-ing first) if window.cart isn't\n      // ready for any reason.\n      if (window.cart?.dispatchCartUpdate) {\n        window.cart.setData(updatedCart);\n        window.cart.dispatchCartUpdate(updatedCart, \"subscription-selector\");\n      } else {\n        window.cart?.setData?.(updatedCart);\n        document.documentElement.dispatchEvent(\n          new CustomEvent(\"wetheme-cart-update\", {\n            detail: { cart: updatedCart, source: \"subscription-selector\" },\n            bubbles: true,\n          })\n        );\n      }\n       document.dispatchEvent(new CustomEvent(\"shopify:cart-updated\", { detail: { cart: updatedCart } }));\n    } catch (err) {\n      console.error(\"subscription-selector:\", err);\n      this.render();\n    } finally {\n      setGlobalActive(false);\n       this.setDisabled(false);\n    }\n  }\n}\n\nif (!customElements.get(\"subscription-selector\")) {\n  customElements.define(\"subscription-selector\", SubscriptionSelector);\n}"],
  "mappings": "AACA,MAAM,aAAe,IAAI,IAEzB,IAAI,YAAc,EAElB,SAAS,gBAAgB,OAAQ,CAC/B,MAAM,UAAY,YAAc,EAChC,YAAc,KAAK,IAAI,EAAG,aAAe,OAAS,EAAI,GAAG,EACzD,MAAM,SAAW,YAAc,EAC3B,WAAa,WACf,SAAS,cAAc,IAAI,YAAY,gCAAiC,CAAE,OAAQ,CAAE,OAAQ,QAAS,CAAE,CAAC,CAAC,CAE7G,CAEA,SAAS,eAAe,OAAQ,CAC9B,GAAI,aAAa,IAAI,MAAM,EAAG,OAAO,aAAa,IAAI,MAAM,EAC5D,MAAM,QAAU,MAAM,aAAa,MAAM,KAAK,EAC3C,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,oDAAoD,MAAM,KAAK,EAEjF,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,MAAO,KAAQ,CACd,mBAAa,OAAO,MAAM,EACpB,GACR,CAAC,EACH,oBAAa,IAAI,OAAQ,OAAO,EACzB,OACT,CAGI,OAAO,OAAW,MACpB,OAAO,mCAAqC,cAG9C,MAAM,YAAc,IAAI,IAExB,SAAS,sBAAsB,OAAQ,CACrC,GAAI,YAAY,IAAI,MAAM,EAAG,OAAO,YAAY,IAAI,MAAM,EAC1D,MAAM,QAAU,MAAM,aAAa,MAAM,2BAA2B,EACjE,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,uEAAuE,MAAM,EAAE,EAEjG,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,MAAO,KAAQ,CACd,kBAAY,OAAO,MAAM,EACnB,GACR,CAAC,EACH,mBAAY,IAAI,OAAQ,OAAO,EACxB,OACT,CAKA,SAAS,0BAA0B,KAAM,CACvC,MAAI,CAAC,MAAQ,CAAC,MAAM,QAAQ,KAAK,MAAM,GAAK,CAAC,KAAK,OAAO,OAAe,KACjE,KAAK,OAAO,IAAK,OAAU,CAAE,KAAM,UAAW,EAAM,EAAE,CAC/D,CAOA,MAAM,gBAAkB,CACtB,CAAE,KAAM,UAAW,QAAS,0BAA2B,EACvD,CAAE,KAAM,WAAY,QAAS,eAAgB,EAC7C,CAAE,KAAM,WAAY,QAAS,4BAA6B,EAC1D,CAAE,KAAM,OAAQ,QAAS,uBAAwB,CACnD,EAEA,SAAS,aAAa,KAAM,CAC1B,MAAM,MAAQ,gBAAgB,KAAM,MAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,EACpE,OAAO,MAAQ,MAAM,KAAO,OAC9B,CAGA,SAAS,uBAAuB,SAAU,SAAU,CAClD,GAAI,CAAC,UAAY,CAAC,SAAS,OAAQ,MAAO,GAE1C,MAAM,UAAY,qBAAqB,QAAQ,GACzC,QAAU,GAAG,SAAS,SACtB,MAAQ,SACX,IAAI,CAAC,CAAE,KAAM,SAAU,IAAM,CAC5B,MAAM,QAAU,UAAY,KAAO,WAAW,IAAI,EAClD,MAAO,mEAAmE,aAAa,IAAI,CAAC,oEAAoE,OAAO,cACzK,CAAC,EACA,KAAK,EAAE,EACV,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMgB,SAAS;AAAA;AAAA;AAAA;AAAA,mDAIiB,SAAS,sBAAsB,OAAO;AAAA;AAAA;AAAA,6DAG5B,OAAO;AAAA;AAAA;AAAA,gBAGpD,KAAK;AAAA;AAAA;AAAA;AAAA,GAKrB,CAGA,SAAS,qBAAqB,KAAM,IAAK,sBAAuB,CAC9D,GAAI,CAAC,MAAQ,CAAC,MAAM,QAAQ,KAAK,KAAK,GAAK,CAAC,IAAK,OAAO,KAExD,MAAM,MAAQ,KAAK,MAAM,KAAM,MAAS,KAAK,MAAQ,GAAG,EACxD,GAAI,MAAO,OAAO,MAElB,MAAM,MAAQ,OAAO,GAAG,EAAE,MAAM,GAAG,EACnC,GAAI,MAAM,SAAW,EAAG,CACtB,MAAM,UAAY,SAAS,MAAM,CAAC,EAAG,EAAE,EACvC,GAAI,CAAC,OAAO,MAAM,SAAS,EAAG,CAC5B,MAAM,QAAU,KAAK,MAAM,OAAQ,MAAS,KAAK,aAAe,SAAS,EACzE,GAAI,QAAQ,SAAW,EAAG,OAAO,QAAQ,CAAC,EAC1C,GAAI,QAAQ,OAAS,EAAG,OAAO,uBAAuB,QAAS,MAAM,CAAC,EAAG,qBAAqB,CAChG,CACF,CAEA,MAAM,UAAY,SAAS,IAAK,EAAE,EAClC,GAAI,CAAC,OAAO,MAAM,SAAS,EAAG,CAC5B,MAAM,YAAc,KAAK,MAAM,KAAM,MAAS,KAAK,aAAe,SAAS,EAC3E,GAAI,YAAa,OAAO,WAC1B,CAEA,OAAO,IACT,CAEA,SAAS,uBAAuB,QAAS,SAAU,sBAAuB,CACxE,GAAI,SAAU,CACZ,MAAM,cAAgB,QAAQ,KAAM,MAAS,KAAK,IAAI,SAAS,QAAQ,CAAC,EACxE,GAAI,cAAe,OAAO,aAC5B,CACA,GAAI,wBAA0B,OAAW,CACvC,MAAM,UAAY,QAAQ,KAAM,MAC9B,sBACI,OAAO,KAAK,yBAAyB,eAAe,IAAM,OAAO,qBAAqB,EACtF,CAAC,KAAK,uBACZ,EACA,GAAI,UAAW,OAAO,SACxB,CACA,MAAM,QAAU,QAAQ,KAAM,MAAS,CAAC,KAAK,uBAAuB,EACpE,GAAI,QAAS,OAAO,QACpB,MAAM,aAAe,QAAQ,KAAM,MAAS,CAAC,CAAC,KAAK,uBAAuB,EAC1E,OAAI,cACG,QAAQ,CAAC,CAClB,CAEA,SAAS,yBAAyB,GAAI,CACpC,IAAI,KAAO,GAAG,cACd,KAAO,MAAQ,OAAS,SAAS,MAAM,CACrC,MAAM,MAAQ,iBAAiB,IAAI,EACnC,GACE,MAAM,YAAc,QACpB,MAAM,cAAgB,QACtB,MAAM,SAAW,QACjB,MAAM,aAAe,YAErB,OAAO,KAET,KAAO,KAAK,aACd,CACA,OAAO,IACT,CAEA,SAAS,WAAW,MAAO,CACzB,OAAO,OAAO,KAAK,EAAE,QAAQ,WAAa,OAAU,CAClD,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,OACP,GAAE,IAAI,CAAE,CACV,CAEA,MAAM,6BAA6B,WAAY,CAC7C,aAAc,CACZ,MAAM,EACN,KAAK,aAAe,KACpB,KAAK,sBAAwB,KAC7B,KAAK,UAAY,GACjB,KAAK,cAAgB,GACrB,KAAK,qBAAuB,GAC5B,KAAK,qBAAuB,CAAC,EAC7B,KAAK,UAAY,GACjB,KAAK,gBAAkB,KAAK,mBAAmB,KAAK,IAAI,EACxD,KAAK,uBAAyB,KAAK,0BAA0B,KAAK,IAAI,EACtE,KAAK,yBAA2B,KAAK,4BAA4B,KAAK,IAAI,EAC1E,KAAK,uBAAyB,KAAK,0BAA0B,KAAK,IAAI,EACtE,KAAK,uBAAyB,KAAK,0BAA0B,KAAK,IAAI,EACtE,KAAK,mBAAqB,KAAK,sBAAsB,KAAK,IAAI,EAC9D,KAAK,qBAAuB,KAAK,wBAAwB,KAAK,IAAI,EAClE,KAAK,kBAAoB,KAAK,qBAAqB,KAAK,IAAI,EAC5D,KAAK,iBAAmB,KAAK,oBAAoB,KAAK,IAAI,EAO1D,KAAK,cAAgB,IAAM,KAAK,iBAAiB,EACjD,KAAK,qBAAuB,IAC9B,CAEA,mBAAoB,CAClB,KAAK,SAAW,KAAK,QAAQ,QAC7B,KAAK,WAAa,KAAK,QAAQ,cAC/B,KAAK,YAAc,KAAK,QAAQ,WAChC,KAAK,eAAiB,KAAK,QAAQ,mBAAqB,KACvD,KAAK,UAAY,GAEb,KAAK,cAEV,eAAe,KAAK,WAAW,EAC5B,KAAM,MAAS,CACd,KAAK,aAAe,KACpB,KAAK,OAAO,CACd,CAAC,EACA,MAAO,KAAQ,CACd,QAAQ,MAAM,qDAAsD,GAAG,CACzE,CAAC,EAKH,sBAAsB,KAAK,WAAW,EACnC,KAAM,MAAS,CACd,KAAK,sBAAwB,0BAA0B,IAAI,EACvD,KAAK,cAAc,KAAK,OAAO,CACrC,CAAC,EACA,MAAO,KAAQ,CACd,QAAQ,MAAM,4DAA6D,GAAG,CAChF,CAAC,EACL,CAEA,sBAAuB,CACrB,SAAS,oBAAoB,QAAS,KAAK,iBAAkB,EAAI,EAC7D,KAAK,uBACP,KAAK,qBAAqB,oBAAoB,SAAU,KAAK,aAAa,EAC1E,KAAK,qBAAuB,KAEhC,CAEA,YAAY,SAAU,CACpB,KAAK,UAAY,SAEb,UACF,KAAK,kBAAkB,EAEzB,KAAK,UAAU,OAAO,cAAe,QAAQ,CAC/C,CAEA,SAAS,cAAe,CACtB,MAAM,OAAS,KAAK,cAAc,qBAAuB,CAAC,EAC1D,UAAW,SAAS,OAAQ,CAC1B,MAAM,MAAQ,MAAM,eAAiB,CAAC,GAAG,KAAM,GAAM,OAAO,EAAE,EAAE,IAAM,OAAO,aAAa,CAAC,EAC3F,GAAI,KAAM,OAAO,IACnB,CACA,OAAO,IACT,CAEA,QAAS,CACP,GAAI,CAAC,KAAK,aAAc,CACtB,KAAK,UAAY,GACjB,KAAK,OAAS,GACd,MACF,CAGA,MAAM,YADU,KAAK,aAAa,UAAU,KAAM,GAAM,OAAO,EAAE,EAAE,IAAM,OAAO,KAAK,UAAU,CAAC,GACnE,0BAA4B,CAAC,EAE1D,GAAI,CAAC,YAAY,OAAQ,CACvB,KAAK,UAAY,GACjB,KAAK,OAAS,GACd,MACF,CAEA,KAAK,OAAS,GAEd,MAAM,aAAe,CAAC,CAAC,KAAK,eACtB,SAAW,KAAK,UAEtB,GAAI,aAAc,CAChB,KAAK,qBAAuB,YAC5B,KAAK,qBAAuB,KAAK,IAC/B,EACA,YAAY,UAAW,GAAM,OAAO,EAAE,eAAe,IAAM,OAAO,KAAK,cAAc,CAAC,CACxF,EAEA,MAAM,mBAAqB,YAAY,KAAK,oBAAoB,GAAK,YAAY,CAAC,EAC5E,aAAe,mBAAqB,KAAK,SAAS,mBAAmB,eAAe,EAAI,KACxF,aAAe,aAAe,aAAa,KAAK,YAAY,EAAI,GAEhE,SAAW,cAAc,oBAAoB,CAAC,GAAG,MACjD,cAAgB,SAAW,aAAa,QAAQ,IAAM,GAEtD,SAAW,yBAAyB,KAAK,UAAU,GACnD,OAAS,GAAG,QAAQ,QAEpB,YAAc,YACjB,IAAK,YAAe,CACnB,MAAM,KAAO,KAAK,SAAS,WAAW,eAAe,EAC/C,KAAO,KAAO,KAAK,KAAK,YAAY,EAAI,GACxC,WAAa,OAAO,WAAW,eAAe,IAAM,OAAO,KAAK,cAAc,EACpF,MAAO;AAAA;AAAA;AAAA,oBAGG,MAAM,QAAQ,WAAW,eAAe;AAAA,4BAChC,WAAW,eAAe;AAAA,+BACvB,UAAU;AAAA,eAC1B,WAAW,IAAI,CAAC,OACvB,CAAC,EACA,KAAK,EAAE,EAEV,KAAK,UAAY;AAAA;AAAA,4EAEqD,SAAW,YAAc,EAAE;AAAA,6DAC1C,aAAa;AAAA;AAAA,YAE9D,uBAAuB,KAAK,WAAY,KAAK,qBAAqB,CAAC;AAAA;AAAA;AAAA,2DAGpB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,oBAK/C,QAAQ;AAAA;AAAA;AAAA,iCAGK,QAAQ,UAAU,QAAQ;AAAA,+BAC5B,MAAM;AAAA,gBACrB,SAAW,WAAa,EAAE;AAAA,yDACe,WAAW,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA,oBAI7D,MAAM;AAAA,iCACO,QAAQ;AAAA;AAAA;AAAA,eAG1B,WAAW;AAAA;AAAA;AAAA,OAItB,KAAO,CAGL,MAAM,SAFQ,KAAK,aAAa,sBAAsB,CAAC,GACnC,gBAAgB,CAAC,GACd,oBAAoB,CAAC,GAAG,MACzC,cAAgB,SAAW,aAAa,QAAQ,IAAM,GAE5D,KAAK,UAAY;AAAA;AAAA,oEAE6C,SAAW,YAAc,EAAE;AAAA,6DAClC,aAAa;AAAA;AAAA,aAE7D,uBAAuB,KAAK,WAAY,KAAK,qBAAqB,CAAC;AAAA;AAAA,UAG5E,CAEA,KAAK,aAAa,CACpB,CAEA,cAAe,CACb,MAAM,MAAQ,KAAK,cAAc,4BAA4B,EACvD,OAAS,KAAK,cAAc,+BAA+B,EAC3D,KAAO,KAAK,cAAc,6BAA6B,EACvD,WAAa,KAAK,cAAc,2BAA2B,EAC3D,UAAY,KAAK,cAAc,0BAA0B,EAC3D,OAAO,MAAM,iBAAiB,SAAU,KAAK,eAAe,EAC5D,SACF,OAAO,iBAAiB,QAAS,KAAK,sBAAsB,EAC5D,OAAO,iBAAiB,UAAW,KAAK,wBAAwB,GAE9D,OACF,KAAK,iBAAiB,UAAW,KAAK,sBAAsB,EAC5D,KAAK,iBAAiB,QAAS,KAAK,sBAAsB,GAExD,aACF,WAAW,iBAAiB,QAAS,KAAK,kBAAkB,EAC5D,WAAW,iBAAiB,UAAW,KAAK,oBAAoB,GAE9D,WACF,UAAU,iBAAiB,QAAS,KAAK,iBAAiB,CAK9D,CAEA,IAAI,gBAAiB,CACnB,OAAO,KAAK,cAAc,+BAA+B,CAC3D,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,cAAc,6BAA6B,CACzD,CAEA,IAAI,iBAAkB,CACpB,OAAO,MAAM,KAAK,KAAK,iBAAiB,+BAA+B,CAAC,CAC1E,CAEA,kBAAmB,CACjB,MAAM,OAAS,KAAK,eACd,KAAO,KAAK,aACd,CAAC,QAAU,CAAC,MAAQ,KAAK,YAE7B,KAAK,iBAAiB,EACtB,KAAK,cAAgB,GACrB,KAAK,OAAS,GACd,OAAO,aAAa,gBAAiB,MAAM,EAC3C,KAAK,MAAM,EACX,KAAK,uBAAuB,KAAK,oBAAoB,EAGrD,SAAS,iBAAiB,QAAS,KAAK,iBAAkB,EAAI,EAChE,CAEA,kBAAkB,CAAE,YAAc,EAAM,EAAI,CAAC,EAAG,CAC9C,MAAM,OAAS,KAAK,eACd,KAAO,KAAK,aAClB,KAAK,cAAgB,GACjB,OACF,KAAK,OAAS,GACd,KAAK,gBAAgB,uBAAuB,GAE1C,SACF,OAAO,aAAa,gBAAiB,OAAO,EACxC,aAAa,OAAO,MAAM,GAK3B,KAAK,WACR,SAAS,oBAAoB,QAAS,KAAK,iBAAkB,EAAI,CAErE,CAEA,IAAI,YAAa,CACf,OAAO,KAAK,cAAc,2BAA2B,CACvD,CAEA,IAAI,aAAc,CAChB,OAAO,KAAK,cAAc,4BAA4B,CACxD,CAEA,IAAI,iBAAkB,CACpB,OAAO,KAAK,cAAc,iCAAiC,CAC7D,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,cAAc,0BAA0B,CACtD,CAEA,qBAAsB,CACpB,MAAM,OAAS,KAAK,WACd,QAAU,KAAK,YACrB,GAAI,CAAC,QAAU,CAAC,QAAS,OAEzB,MAAM,gBAAkB,yBAAyB,MAAM,EACjD,eAAiB,gBACnB,gBAAgB,sBAAsB,EACtC,CAAE,IAAK,EAAG,MAAO,OAAO,UAAW,EACjC,WAAa,OAAO,sBAAsB,EAC1C,YAAc,WAAW,OAAS,EACxC,QAAQ,MAAM,IAAM,GAAG,YAAc,eAAe,GAAG,KACvD,QAAQ,MAAM,MAAQ,GAAG,eAAe,MAAQ,WAAW,MAAQ,EAAE,KASrE,MAAM,KAAO,KAAK,gBACd,OAEF,KAAK,MAAM,UAAY,GAAG,KAAK,IAAI,IAAK,OAAO,YAAc,YAAc,EAAc,CAAC,KAE9F,CAEA,iBAAkB,CAChB,MAAM,OAAS,KAAK,WACd,QAAU,KAAK,YACrB,GAAI,CAAC,QAAU,CAAC,QAAS,OAEzB,KAAK,kBAAkB,EACvB,KAAK,UAAY,GACjB,KAAK,oBAAoB,EACzB,QAAQ,OAAS,GACjB,MAAM,MAAQ,KAAK,UACf,QAAO,MAAM,OAAS,IAC1B,KAAK,UAAU,IAAI,kCAAkC,EACrD,OAAO,aAAa,gBAAiB,MAAM,EAC3C,SAAS,iBAAiB,QAAS,KAAK,iBAAkB,EAAI,EAC9D,KAAK,qBAAuB,KAAK,QAAQ,iBAAiB,EACtD,KAAK,sBACP,KAAK,qBAAqB,iBAAiB,SAAU,KAAK,cAAe,CAAE,QAAS,EAAK,CAAC,CAE9F,CAEA,iBAAiB,CAAE,YAAc,EAAM,EAAI,CAAC,EAAG,CAC7C,MAAM,OAAS,KAAK,WACd,QAAU,KAAK,YACrB,KAAK,UAAY,GACb,UAAS,QAAQ,OAAS,IAC9B,MAAM,MAAQ,KAAK,UACf,QAAO,MAAM,OAAS,IAC1B,KAAK,UAAU,OAAO,kCAAkC,EACpD,KAAK,uBACP,KAAK,qBAAqB,oBAAoB,SAAU,KAAK,aAAa,EAC1E,KAAK,qBAAuB,MAE1B,SACF,OAAO,aAAa,gBAAiB,OAAO,EACxC,aAAa,OAAO,MAAM,GAE3B,KAAK,eACR,SAAS,oBAAoB,QAAS,KAAK,iBAAkB,EAAI,CAErE,CAEA,sBAAsB,MAAO,CAC3B,MAAM,gBAAgB,EAClB,KAAK,UACP,KAAK,iBAAiB,EAEtB,KAAK,gBAAgB,CAEzB,CAEA,wBAAwB,MAAO,CACzB,MAAM,MAAQ,UAAY,KAAK,YACjC,MAAM,eAAe,EACrB,KAAK,iBAAiB,CAAE,YAAa,EAAK,CAAC,EAE/C,CAEA,qBAAqB,MAAO,CAC1B,MAAM,gBAAgB,EACtB,KAAK,iBAAiB,CAAE,YAAa,EAAK,CAAC,CAC7C,CAEA,uBAAuB,MAAO,CAC5B,MAAM,QAAU,KAAK,gBACrB,GAAI,CAAC,QAAQ,OAAQ,OACrB,KAAK,qBAAuB,KAAK,IAAI,KAAK,IAAI,MAAO,CAAC,EAAG,QAAQ,OAAS,CAAC,EAC3E,MAAM,KAAO,KAAK,aACZ,aAAe,QAAQ,KAAK,oBAAoB,EACtD,QAAQ,QAAS,QAAW,OAAO,UAAU,OAAO,WAAW,CAAC,EAC5D,eACF,aAAa,UAAU,IAAI,WAAW,EAClC,MAAM,KAAK,aAAa,wBAAyB,aAAa,EAAE,EACpE,aAAa,eAAe,CAAE,MAAO,SAAU,CAAC,EAEpD,CAEA,qBAAqB,OAAQ,CAC3B,GAAI,CAAC,OAAQ,OACb,MAAM,cAAgB,OAAO,QAAQ,MACrC,KAAK,kBAAkB,CAAE,YAAa,EAAK,CAAC,EACxC,OAAO,aAAa,IAAM,OAAO,KAAK,cAAc,GACxD,KAAK,aAAa,aAAa,CACjC,CAEA,2BAA4B,CACtB,KAAK,cACP,KAAK,kBAAkB,EAEvB,KAAK,iBAAiB,CAE1B,CAEA,4BAA4B,MAAO,CAC7B,CAAC,YAAa,UAAW,QAAS,GAAG,EAAE,SAAS,MAAM,GAAG,IAC3D,MAAM,eAAe,EACrB,KAAK,iBAAiB,EAE1B,CAEA,0BAA0B,MAAO,CAC/B,MAAM,QAAU,KAAK,gBACrB,GAAK,QAAQ,OAEb,OAAQ,MAAM,IAAK,CACjB,IAAK,YACH,MAAM,eAAe,EACrB,KAAK,uBAAuB,KAAK,qBAAuB,CAAC,EACzD,MACF,IAAK,UACH,MAAM,eAAe,EACrB,KAAK,uBAAuB,KAAK,qBAAuB,CAAC,EACzD,MACF,IAAK,OACH,MAAM,eAAe,EACrB,KAAK,uBAAuB,CAAC,EAC7B,MACF,IAAK,MACH,MAAM,eAAe,EACrB,KAAK,uBAAuB,QAAQ,OAAS,CAAC,EAC9C,MACF,IAAK,QACL,IAAK,IACH,MAAM,eAAe,EACrB,KAAK,qBAAqB,QAAQ,KAAK,oBAAoB,CAAC,EAC5D,MACF,IAAK,SACH,MAAM,eAAe,EACrB,KAAK,kBAAkB,CAAE,YAAa,EAAK,CAAC,EAC5C,MACF,IAAK,MACH,KAAK,kBAAkB,EACvB,KACJ,CACF,CAEA,0BAA0B,MAAO,CAC/B,MAAM,OAAS,MAAM,OAAO,QAAQ,+BAA+B,EAC/D,QAAQ,KAAK,qBAAqB,MAAM,CAC9C,CAEA,oBAAoB,MAAO,CACrB,CAAC,KAAK,eAAiB,CAAC,KAAK,WAC7B,KAAK,SAAS,MAAM,MAAM,IAC1B,KAAK,eAAe,KAAK,kBAAkB,EAC3C,KAAK,WAAW,KAAK,iBAAiB,EAC5C,CAEA,mBAAmB,MAAO,CAExB,GADgB,MAAM,OAAO,QAChB,CAEX,MAAM,WADU,KAAK,cAAc,UAAU,KAAM,GAAM,OAAO,EAAE,EAAE,IAAM,OAAO,KAAK,UAAU,CAAC,GACrE,2BAA2B,CAAC,EACxD,GAAI,CAAC,WAAY,CACf,MAAM,OAAO,QAAU,GACvB,MACF,CACA,KAAK,aAAa,WAAW,eAAe,CAC9C,MACE,KAAK,aAAa,IAAI,CAE1B,CAEA,MAAM,aAAa,cAAe,CAChC,GAAI,KAAK,UAAW,OAEpB,KAAK,YAAY,EAAI,EACrB,gBAAgB,EAAI,EAEpB,MAAM,IAAM,SAAY,CAEtB,MAAM,KAAO,MADQ,MAAM,MAAM,UAAU,GACX,KAAK,EAC/B,KAAO,qBAAqB,KAAM,KAAK,SAAU,KAAK,cAAc,EAC1E,GAAI,CAAC,KACH,MAAM,IAAI,MAAM,+DAA+D,KAAK,QAAQ,GAAG,EAYjG,MAAM,YAAc,MATG,MAAM,MAAM,kBAAmB,CACpD,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,UAAU,CACnB,GAAI,KAAK,IACT,SAAU,KAAK,SACf,aAAc,eAAiB,IACjC,CAAC,CACH,CAAC,GACwC,KAAK,EAC9C,GAAI,YAAY,QAAU,YAAY,SAAW,IAC/C,MAAM,IAAI,MAAM,YAAY,aAAe,YAAY,SAAW,8CAA8C,EAElH,OAAO,WACT,EAEA,GAAI,CACF,MAAM,YACJ,OAAO,aAAe,OAAO,OAAO,YAAY,cAAiB,WAC7D,MAAM,OAAO,YAAY,aAAa,GAAG,EACzC,MAAM,IAAI,EAEhB,OAAO,SAAS,mBAAmB,WAAW,EAC9C,OAAO,SAAS,oBAAoB,OAAQ,WAAY,CAAE,KAAM,WAAY,CAAC,EAezE,OAAO,MAAM,oBACf,OAAO,KAAK,QAAQ,WAAW,EAC/B,OAAO,KAAK,mBAAmB,YAAa,uBAAuB,IAEnE,OAAO,MAAM,UAAU,WAAW,EAClC,SAAS,gBAAgB,cACvB,IAAI,YAAY,sBAAuB,CACrC,OAAQ,CAAE,KAAM,YAAa,OAAQ,uBAAwB,EAC7D,QAAS,EACX,CAAC,CACH,GAED,SAAS,cAAc,IAAI,YAAY,uBAAwB,CAAE,OAAQ,CAAE,KAAM,WAAY,CAAE,CAAC,CAAC,CACpG,OAAS,IAAK,CACZ,QAAQ,MAAM,yBAA0B,GAAG,EAC3C,KAAK,OAAO,CACd,QAAE,CACA,gBAAgB,EAAK,EACpB,KAAK,YAAY,EAAK,CACzB,CACF,CACF,CAEK,eAAe,IAAI,uBAAuB,GAC7C,eAAe,OAAO,wBAAyB,oBAAoB",
  "names": []
}
