{
  "version": 3,
  "sources": ["/cdn/shop/t/688/assets/mspa-bag-selection.js?ms_mspa_family=20260629-supportwall-audit7"],
  "sourcesContent": ["/*!\n * Milj\u00F8stein Purchase App - Hagesingel/Elvestein family port.\n * Family config supplies data; MSPurchaseMotor owns visible UI, state, CTA and cart intent.\n */\n(function () {\n  const INIT_FLAG = \"mspaBagInit\";\n  const FAMILY_VERSION = \"2026-10-17-fine-hagesingel-12m2-4cm-v2\";\n  const MAX_BAGS = 100;\n  // Exact published 800 kg fine-hagesingel variants; other bag products retain their reference.\n  const FINE_HAGESINGEL_4CM_IDENTITIES = Object.freeze({\n    \"2594600517\": \"31432288731234|20009-0816\",\n    \"2332258245\": \"31432323268706|20009-fff0812\",\n    \"2332258309\": \"31432324284514|20009-ff0812\",\n    \"8649863823588\": \"46345258008804|20009-2336\",\n    \"8654995161316\": \"46364773941476|20009-08161\",\n    \"6709765898419\": \"39867882373299|2986161-C\",\n    \"3957744074850\": \"31692346032226|2983112-C\",\n    \"6627254010035\": \"39609096110259|2981111-C\",\n    \"2228396130402\": \"31692339740770|2981112-C\"\n  });\n\n  function intValue(value) {\n    const number = parseInt(String(value || \"\").replace(/[^\\d]/g, \"\"), 10);\n    return Number.isFinite(number) ? number : 0;\n  }\n\n  function numberValue(value) {\n    if (value === null || value === undefined || value === \"\") return 0;\n    const number = Number(String(value).replace(\",\", \".\").trim());\n    return Number.isFinite(number) ? number : 0;\n  }\n\n  function formatNumber(value, decimals = 0) {\n    return Number(value || 0).toLocaleString(\"nb-NO\", {\n      minimumFractionDigits: decimals,\n      maximumFractionDigits: decimals\n    });\n  }\n\n  function formatMoney(centsOrKroner, isCents = true) {\n    const value = Number(centsOrKroner || 0) / (isCents ? 100 : 1);\n    if (!Number.isFinite(value) || value <= 0) return \"\";\n    const decimals = Math.abs(value - Math.round(value)) < 0.005 ? 0 : 2;\n    return `${value.toLocaleString(\"nb-NO\", {\n      minimumFractionDigits: decimals,\n      maximumFractionDigits: decimals\n    })} kr`;\n  }\n\n  function formatArea(value) {\n    const number = Number(value || 0);\n    const decimals = number > 0 && Math.abs(number - Math.round(number)) > 0.005 ? 1 : 0;\n    return formatNumber(number, decimals);\n  }\n\n  function cleanText(value, fallback = \"\") {\n    const text = String(value === undefined || value === null ? \"\" : value).trim();\n    return text || fallback;\n  }\n\n  function boolValue(value, fallback = false) {\n    if (value === undefined || value === null || value === \"\") return fallback;\n    const text = String(value).trim().toLowerCase();\n    if ([\"true\", \"1\", \"yes\", \"ja\", \"on\"].includes(text)) return true;\n    if ([\"false\", \"0\", \"no\", \"nei\", \"off\"].includes(text)) return false;\n    return fallback;\n  }\n\n  function hostFor(root) {\n    return root && root.closest ? root.closest(\"[data-ms-calculator-host]\") : null;\n  }\n\n  function motorRootFor(host) {\n    return host ? host.querySelector(\"[data-mspa-motor-root]\") : null;\n  }\n\n  function eventElement(event) {\n    const target = event && event.target;\n    if (!target) return null;\n    if (target.nodeType === 1) return target;\n    return target.parentElement || null;\n  }\n\n  function hardMotorMissing(root, message) {\n    const host = hostFor(root) || root;\n    if (host && host.setAttribute) {\n      host.setAttribute(\"data-mspa-motor-missing\", \"true\");\n      host.setAttribute(\"data-mspa-motor-status\", \"error\");\n      host.setAttribute(\"data-mspa-motor-reason\", \"mspa-motor-missing\");\n    }\n    console.error(message || \"MSPA-motoren er ikke lastet. Hagesingel/Elvestein stopper uten gammel flow.\");\n  }\n\n  function motorApi(root) {\n    if (window.MSPurchaseMotor && typeof window.MSPurchaseMotor.mount === \"function\" && typeof window.MSPurchaseMotor.update === \"function\") {\n      return window.MSPurchaseMotor;\n    }\n    hardMotorMissing(root);\n    return null;\n  }\n\n  function defineFamily(api) {\n    if (!api || typeof api.define !== \"function\" || api.__mspaBagSelectionDefined === FAMILY_VERSION) return;\n    api.define(\"bag-selection\", {\n      contract: \"family-config-v1\",\n      version: FAMILY_VERSION,\n      familyTypes: [\"hagesingel\", \"elvestein\"],\n      owns: [\"formula\", \"validation\", \"items\", \"shippingItems\", \"calculatorSummary\", \"calculatorSnapshot\", \"_ms_* metadata\"],\n      motorOwns: [\"visible UI\", \"state\", \"summary\", \"CTA\", \"cart-intent trigger\"],\n      steps: [\"area-or-bags\", \"cart-intent\"],\n      fields: [\"bagArea(optional)\", \"bagQuantity\", \"priceMode\"]\n    });\n    api.__mspaBagSelectionDefined = FAMILY_VERSION;\n  }\n\n\n  // Manual stock selection owns only a draft; this adapter never edits calculator state.\n  function makeStockPurchaseOwner(spec) {\n    const fail = (code) => { const error = new Error(code); error.code = code; throw error; };\n    const text = (value) => String(value === undefined || value === null ? \"\" : value).trim();\n    function products() {\n      if (typeof spec.api.readShopifyVariantMap !== \"function\") return fail(\"MSPA_STOCK_VARIANT_MAP_UNAVAILABLE\");\n      const map = spec.api.readShopifyVariantMap(spec.host);\n      if (!map || text(map.productId) !== text(spec.main.productId) || !Array.isArray(map.variants)) return fail(\"MSPA_STOCK_PRODUCT_IDENTITY_CONFLICT\");\n      const selectedQuantity = spec.quantity();\n      if (!Number.isSafeInteger(selectedQuantity) || selectedQuantity < 0) return fail(\"MSPA_STOCK_QUANTITY_INVALID\");\n      const rows = map.variants.map((raw) => ({\n        ...spec.main, variantId: text(raw.variant_id), sku: text(raw.sku), variantTitle: text(raw.title),\n        priceCents: raw.price_cents, compareCents: raw.compare_at_price_cents, grams: raw.grams,\n        available: raw.available, requiresShipping: raw.requires_shipping,\n        unitsPerPallet: raw.units_per_pallet, m2PerPallet: raw.m2_per_pallet,\n        unit: spec.unit, role: \"main\", quantity: text(raw.variant_id) === text(spec.main.variantId) ? selectedQuantity : 0\n      }));\n      if (spec.extra) rows.push(...spec.extra());\n      const seen = new Set();\n      for (const row of rows) {\n        row.variantId = text(row.variantId); row.sku = text(row.sku);\n        if (!/^[1-9][0-9]{0,31}$/.test(row.variantId) || !row.sku || !text(row.title) || !text(row.unit)\n            || seen.has(row.variantId) || !Number.isSafeInteger(row.quantity) || row.quantity < 0) return fail(\"MSPA_STOCK_PRODUCT_IDENTITY_CONFLICT\");\n        seen.add(row.variantId);\n        row.canAdd = row.available === true && row.requiresShipping !== false\n          && Number.isFinite(row.grams) && row.grams > 0\n          && Number.isSafeInteger(row.priceCents) && row.priceCents > 0\n          && (!spec.eligible || spec.eligible(row) === true);\n      }\n      return rows;\n    }\n    function stockProducts() {\n      return products().map((row) => ({ variantId: row.variantId, sku: row.sku, title: row.title,\n        variantTitle: row.variantTitle || \"\", unit: row.unit, image: row.image || \"\", productId: text(row.productId),\n        handle: row.handle || \"\", quantity: row.quantity, canAdd: row.canAdd }));\n    }\n    function stockIntent(selection) {\n      if (!Array.isArray(selection) || !selection.length) return fail(\"MSPA_STOCK_SELECTION_INVALID\");\n      const catalog = new Map(products().map((row) => [row.variantId, row]));\n      const seen = new Set();\n      const chosen = selection.map((entry) => {\n        const row = catalog.get(text(entry.variantId));\n        if (!row || row.sku !== entry.sku || !row.canAdd || seen.has(row.variantId)\n            || !Number.isSafeInteger(entry.quantity) || entry.quantity <= 0) return fail(\"MSPA_STOCK_SELECTION_INVALID\");\n        seen.add(row.variantId); return { row, quantity: entry.quantity };\n      });\n      const singles = chosen.map(({ row, quantity }) => spec.line(row, quantity));\n      if (singles.some((intent) => !intent || typeof intent.then === \"function\" || !Array.isArray(intent.items) || intent.items.length !== 1)) return fail(\"MSPA_STOCK_INTENT_INVALID\");\n      const items = [], shippingItems = [], presentation = [], calculations = [];\n      singles.forEach((intent, index) => {\n        const { row, quantity } = chosen[index]; const item = intent.items[0];\n        if (text(item.id) !== row.variantId || item.quantity !== quantity) return fail(\"MSPA_STOCK_INTENT_IDENTITY_CONFLICT\");\n        if (item.properties && Object.keys(item.properties).length) item.properties = { ...item.properties, _ms_selection_mode: \"manual\" };\n        items.push(item); presentation.push({ item, title: row.title, image: row.image || \"\" });\n        for (const shipping of intent.shippingItems || []) {\n          if (text(shipping.variant_id || shipping.variantId || shipping.id) !== row.variantId || shipping.quantity !== quantity) return fail(\"MSPA_STOCK_SHIPPING_IDENTITY_CONFLICT\");\n          shippingItems.push({ ...shipping, id: row.variantId, variant_id: row.variantId, sku: row.sku, grams: row.grams,\n            price: row.priceCents, final_price: row.priceCents, product_id: text(row.productId),\n            vendor: row.vendor, product_vendor: row.vendor, properties: item.properties || {} });\n        }\n        calculations.push({ variantId: row.variantId, sku: row.sku, quantity, unit: row.unit,\n          calculation: intent.calculatorSnapshot || intent.calculatorSummary || null });\n      });\n      const descriptions = chosen.map(({ row, quantity }) => `${quantity} ${row.unit}`);\n      return { root: spec.host, family: spec.family, vendor: spec.main.vendor, items, shippingItems,\n        presentation: { lines: presentation }, requiresPostcode: true, openCart: true,\n        calculatorSummary: { version: 1, source: spec.source, family: spec.family, mode: \"manual\", selectionMode: \"manual\",\n          summaryText: descriptions.join(\" \u00B7 \"), products: chosen.map(({ row, quantity }) => ({ title: row.title, quantity: `${quantity} ${row.unit}`, role: row.role || \"main\" })),\n          items: chosen.map(({ row, quantity }) => ({ key: row.key || row.variantId, variantId: row.variantId, title: row.title, quantity })), warnings: [] },\n        calculatorSnapshot: { contract: \"mspa-calculator-snapshot-v1\", source: spec.source, version: spec.version, selectionMode: \"manual\", items: calculations },\n        preview: { title: spec.main.title, subtitle: \"Manuelt valgte mengder\", lines: chosen.map(({ row, quantity }) => ({ title: row.title, quantity: `${quantity} ${row.unit}`, image: row.image || \"\", locked: false })), estimatedTotal: \"\", status: \"Legger valgte varer i kurven...\" },\n        syncHints: { cart: true, freight: true, variants: true, pallets: singles.some((intent) => intent.syncHints?.pallets === true) } };\n    }\n    return Object.freeze({ stockProducts, stockIntent });\n  }\n\n\n  function makeBagStockOwner(api, host, config, currentQuantity, properties) {\n    return makeStockPurchaseOwner({ api, host, family: config.type, version: FAMILY_VERSION, source: \"mspa-bag-selection\", main: config,\n      unit: \"sekk\", quantity: currentQuantity,\n      eligible: (row) => row.variantId === String(config.variantId) && Number.isFinite(config.coverage) && config.coverage > 0 && row.grams === config.grams,\n      line: (row, quantity) => {\n        const item = { id: row.variantId, quantity, properties: properties() };\n        return { items: [item], shippingItems: config.shippingOwnsPallets ? [{ id: row.variantId, quantity, properties: item.properties, requires_shipping: true }] : [],\n          calculatorSnapshot: { contract: \"mspa-calculator-snapshot-v1\", source: \"mspa-bag-selection\", version: FAMILY_VERSION,\n            selectionMode: \"manual\", product: { id: row.productId, variantId: row.variantId, sku: row.sku, grams: row.grams, priceCents: row.priceCents },\n            calculation: { requestedArea: 0, bags: quantity, coverageM2PerBag: config.coverage, calculatedArea: quantity * config.coverage, displayArea: quantity * config.coverage, totalPriceCents: row.priceCents * quantity } },\n          syncHints: { pallets: config.shippingOwnsPallets } };\n      } });\n  }\n\n  function init(root) {\n    if (!root || root.dataset[INIT_FLAG] === \"1\") return;\n    root.dataset[INIT_FLAG] = \"1\";\n\n    const api = motorApi(root);\n    const host = hostFor(root);\n    const initialMotorRoot = motorRootFor(host);\n    if (!api || !host || !initialMotorRoot) {\n      hardMotorMissing(root, \"MSPA-motorroot mangler for Hagesingel/Elvestein.\");\n      return;\n    }\n\n    defineFamily(api);\n\n    const data = root.dataset || {};\n    const type = cleanText(data.mspaBagType, \"hagesingel\");\n    const title = cleanText(data.mspaProductTitle, \"Produkt\");\n    const vendor = cleanText(data.mspaProductVendor);\n    const vendorKey = vendor.toLowerCase();\n    const variantId = intValue(data.mspaProductVariantId);\n    const productId = cleanText(data.mspaProductId);\n    const sku = cleanText(data.mspaProductSku);\n    const grams = Number(data.mspaProductGrams || 0);\n    const priceCents = Number(data.mspaProductPriceCents || 0);\n    const compareCents = Number(data.mspaProductCompareAtCents || 0);\n    const image = cleanText(data.mspaProductImage);\n    const available = String(data.mspaProductAvailable || \"true\") === \"true\";\n    const coverage = numberValue(data.mspaBagCoverage);\n    const fineHagesingel4cm = type === \"hagesingel\" && grams === 800000 && coverage === 12\n      && FINE_HAGESINGEL_4CM_IDENTITIES[productId] === `${cleanText(data.mspaProductVariantId)}|${sku}`;\n    const coverageReference = fineHagesingel4cm ? \" ved 4 cm lagtykkelse\" : \"\";\n    const context = cleanText(data.mspaContext, host.getAttribute(\"data-calculator-context\") || \"product\");\n    const isQuickShop = context === \"quick-shop\";\n    const areaInputEnabled = boolValue(data.mspaAreaInputEnabled, false);\n    const shippingPalletOwner = cleanText(data.mspaShippingPalletOwner);\n    const shippingOwnsPallets = vendorKey === \"benders\" && shippingPalletOwner === \"shipping_2\";\n    const emptyCta = areaInputEnabled ? cleanText(data.mspaEmptyCta, \"Skriv m\u00B2 eller velg sekker\") : \"Velg antall sekker\";\n    const progressEmpty = areaInputEnabled ? cleanText(data.mspaProgressEmpty, \"Skriv inn areal eller velg antall sekker.\") : \"Velg antall sekker.\";\n    const labels = {\n      title: cleanText(data.mspaBagTitle, type === \"elvestein\" ? \"Beregn elvestein\" : \"Beregn hagesingel\"),\n      primary: cleanText(data.mspaPrimaryCta, \"Legg i kurven\"),\n      busy: cleanText(data.mspaBusyCta, \"Legger i kurven...\"),\n      soldOut: cleanText(data.mspaSoldOutLabel, \"Utsolgt\"),\n      empty: emptyCta,\n      area: cleanText(data.mspaAreaLabel, \"\u00D8nsket areal\"),\n      areaPlaceholder: cleanText(data.mspaAreaPlaceholder, \"Skriv antall m\u00B2.\"),\n      quantity: cleanText(data.mspaQuantityLabel, \"Antall sekker\"),\n      priceBag: cleanText(data.mspaPriceLabelBag, \"Pris per sekk\"),\n      priceM2: fineHagesingel4cm ? \"Ca. pris per m\u00B2 ved 4 cm lagtykkelse\" : \"Ca. pris per m\u00B2\",\n      toggleArea: cleanText(data.mspaPriceToggleArea, \"Vis ca. m\u00B2-pris\"),\n      toggleBag: cleanText(data.mspaPriceToggleBag, \"Vis sekkpris\"),\n      progressEmpty,\n      progressReady: cleanText(data.mspaProgressReady, \"Utvalget er klart for kurven.\")\n    };\n\n    const state = {\n      bags: 0,\n      requestedArea: 0,\n      priceMode: \"bag\",\n      isAdding: false,\n      errorMessage: \"\"\n    };\n\n    function area() {\n      return state.bags * coverage;\n    }\n\n    function displayArea() {\n      return state.requestedArea > 0 ? state.requestedArea : area();\n    }\n\n    function ready() {\n      return available && variantId > 0 && coverage > 0 && state.bags > 0;\n    }\n\n    function unitName() {\n      return state.bags === 1 ? \"sekk\" : \"sekker\";\n    }\n\n    function coverageHint() {\n      if (coverage <= 0) return \"Dekning mangler\";\n      return `1 sekk dekker ca. ${formatArea(coverage)} m\u00B2${coverageReference}.`\n        + (fineHagesingel4cm ? \"\" : \" Dekningen avhenger av lagtykkelsen.\");\n    }\n\n    function readyQuantityText() {\n      return `${state.bags} ${unitName()} dekker ca. ${formatArea(displayArea())} m\u00B2${coverageReference}.`;\n    }\n\n    function readyStatusText() {\n      return `Utvalget er klart. ${readyQuantityText()}`;\n    }\n\n    function stepSummary() {\n      if (!available) return \"Dette produktet er utsolgt akkurat n\u00E5.\";\n      if (coverage <= 0) return \"Produktdata mangler: dekning m\u00B2 per sekk er ikke satt.\";\n      if (state.errorMessage) return state.errorMessage;\n      if (!ready()) return labels.progressEmpty;\n      return readyStatusText();\n    }\n\n    function calculatorSummary() {\n      const lines = [\n        { label: \"Beregningstype\", value: state.requestedArea > 0 ? \"\u00D8nsket areal\" : \"Antall sekker\" },\n        { label: \"Antall sekker\", value: `${state.bags} ${unitName()}` },\n        { label: \"Dekker ca.\", value: `${formatArea(area())} m\u00B2${coverageReference}` },\n        { label: \"Dekning per sekk\", value: `ca. ${formatArea(coverage)} m\u00B2${coverageReference}` }\n      ];\n      if (state.requestedArea > 0) {\n        lines.splice(1, 0, { label: \"\u00D8nsket areal\", value: `${formatArea(state.requestedArea)} m\u00B2` });\n      }\n      if (grams > 0) {\n        lines.push({ label: \"Vekt per sekk\", value: `ca. ${formatNumber(grams / 1000, 0)} kg` });\n      }\n      return {\n        version: 1,\n        source: \"mspa_bag_selection\",\n        family: type,\n        title: `${type === \"elvestein\" ? \"Elvestein\" : \"Hagesingel\"} kalkulator`,\n        productTitle: title,\n        summaryText: `${state.bags} ${unitName()} \u00B7 ca. ${formatArea(area())} m\u00B2${coverageReference}`,\n        lines,\n        products: [{\n          title,\n          quantity: `${state.bags} ${unitName()}`,\n          sku,\n          role: \"main\"\n        }],\n        warnings: []\n      };\n    }\n\n    function calculatorSnapshot() {\n      return {\n        contract: \"mspa-calculator-snapshot-v1\",\n        version: FAMILY_VERSION,\n        family: type,\n        product: {\n          id: productId,\n          variantId,\n          title,\n          vendor,\n          sku,\n          grams,\n          priceCents\n        },\n        calculation: {\n          requestedArea: state.requestedArea,\n          bags: state.bags,\n          coverageM2PerBag: coverage,\n          calculatedArea: area(),\n          displayArea: displayArea(),\n          totalPriceCents: priceCents * state.bags\n        }\n      };\n    }\n\n    function cartProperties() {\n      // Product identity remains in this family's readonly intent metadata.\n      // Non-Benders bags need no private labels on the Shopify goods line.\n      if (vendorKey !== \"benders\") return {};\n      const properties = {\n        _ms_calculator_family: type,\n        _ms_source: \"mspa-bag-selection\",\n        _ms_product_vendor: vendor,\n        _ms_product_title: title,\n        _ms_preview_title: title\n      };\n      if (shippingOwnsPallets) {\n        properties._ms_pallet_owner = \"shipping_2\";\n        properties._ms_pallet_role = \"quantity\";\n      }\n      return properties;\n    }\n\n    function cartItems() {\n      return [{\n        id: variantId,\n        quantity: state.bags,\n        properties: cartProperties()\n      }];\n    }\n\n    function shippingItems() {\n      if (!shippingOwnsPallets) return [];\n      return [{\n        id: variantId,\n        variant_id: variantId,\n        quantity: state.bags,\n        title,\n        product_title: title,\n        sku,\n        vendor,\n        product_vendor: vendor,\n        grams,\n        price: priceCents,\n        final_price: priceCents,\n        product_id: productId,\n        requires_shipping: true,\n        properties: cartProperties()\n      }];\n    }\n\n    function cartIntentPayload() {\n      const bagUnit = unitName();\n      const items = cartItems();\n      return {\n        family: type,\n        vendor,\n        items,\n        presentation: { lines: [{ item: items[0], title, image }] },\n        shippingItems: shippingItems(),\n        calculatorSummary: calculatorSummary(),\n        calculatorSnapshot: calculatorSnapshot(),\n        preview: {\n          title,\n          subtitle: `${state.bags} ${bagUnit} \u00B7 ca. ${formatArea(area())} m\u00B2${coverageReference}`,\n          lines: [{\n            title,\n            quantity: `${state.bags} ${bagUnit}`,\n            price: priceCents > 0 ? `Sum ${formatMoney(priceCents * state.bags)}` : \"\",\n            image,\n            note: sku ? `Varenr. ${sku}` : \"\",\n            locked: false\n          }],\n          estimatedTotal: priceCents > 0 ? formatMoney(priceCents * state.bags) : \"\",\n          status: \"Legger sekkene i handlekurven...\"\n        },\n        requiresPostcode: true,\n        syncHints: {\n          pallets: shippingOwnsPallets,\n          freight: true,\n          variants: true\n        }\n      };\n    }\n\n    const stockOwner = makeBagStockOwner(api, host, { type, title, vendor, variantId, productId, handle: cleanText(data.mspaProductHandle), image, grams, coverage, shippingOwnsPallets }, () => state.bags, cartProperties);\n\n    function mountMotor() {\n      const components = [\n        {\n          type: \"priceHint\",\n          name: \"bagPrice\",\n          label: labels.priceBag,\n          value: priceCents > 0 ? formatMoney(priceCents) : \"-\",\n          priceCents,\n          compareCents,\n          toggleLabel: labels.toggleArea\n        },\n        {\n          type: \"field\",\n          id: `mspa-${type}-area-${variantId || productId || \"product\"}`,\n          name: \"bagArea\",\n          label: labels.area,\n          hint: \"Skriv \u00F8nsket areal. Ved valg av antall sekker viser feltet beregnet dekning.\",\n          inputType: \"number\",\n          inputmode: \"decimal\",\n          placeholder: labels.areaPlaceholder,\n          suffix: \"m\u00B2\",\n          min: \"0.1\",\n          step: \"0.1\",\n          autocomplete: \"off\",\n          visible: areaInputEnabled\n        },\n        {\n          type: \"quantityPreset\",\n          id: \"bagQuantity\",\n          name: \"bagQuantity\",\n          label: labels.quantity,\n          hint: coverageHint(),\n          values: [1, 2, 3, 4, 5],\n          min: 1,\n          max: MAX_BAGS,\n          pageSize: 5,\n          compactPageSize: 3,\n          compactBreakpoint: 310,\n          currentLabel: \"{value} sekker valgt\",\n          value: \"\"\n        },\n        {\n          type: \"validation\",\n          name: \"bagValidation\",\n          text: \"\"\n        }\n      ];\n\n      api.mount(host, {\n        stockProducts: stockOwner.stockProducts,\n        stockIntent: stockOwner.stockIntent,\n        family: \"bag-selection\",\n        slot: \"[data-mspa-motor-root]\",\n        steps: [{\n          id: \"bag-selection\",\n          label: labels.title,\n          state: \"active\",\n          components\n        }]\n      });\n\n      host.setAttribute(\"data-mspa-family-port\", \"hagesingel-elvestein-v1\");\n      host.setAttribute(\"data-mspa-family-port-version\", FAMILY_VERSION);\n      host.removeAttribute(\"data-mspa-legacy-strip\");\n      host.removeAttribute(\"data-mspa-legacy-strip-reason\");\n      root.setAttribute(\"data-mspa-source-role\", \"family-config\");\n      return motorRootFor(host);\n    }\n\n    const ui = mountMotor();\n    const els = {\n      area: ui ? ui.querySelector('[data-mspa-control=\"bagArea\"]') : null,\n      areaField: ui ? ui.querySelector('[data-mspa-field=\"bagArea\"]') : null,\n      quantity: ui ? ui.querySelector('[data-mspa-quantity=\"bagQuantity\"]') : null,\n      quantityPreset: ui ? ui.querySelector('[data-mspa-quantity-preset=\"bagQuantity\"]') : null,\n      quantityHint: ui ? ui.querySelector('[data-mspa-quantity-hint=\"bagQuantity\"]') : null,\n      quantityCurrent: ui ? ui.querySelector('[data-mspa-quantity-current=\"bagQuantity\"]') : null,\n      priceLabel: ui ? ui.querySelector('[data-mspa-price-label=\"bagPrice\"]') : null,\n      priceValue: ui ? ui.querySelector('[data-mspa-price-value=\"bagPrice\"]') : null,\n      priceToggle: ui ? ui.querySelector('[data-mspa-price-toggle=\"bagPrice\"]') : null\n    };\n\n    if (!ui || !els.quantity || (areaInputEnabled && !els.area)) {\n      hardMotorMissing(root, \"MSPA-motoren rendret ikke p\u00E5krevde bag-selection-felt.\");\n      return;\n    }\n\n    function setBags(value, options = {}) {\n      state.errorMessage = \"\";\n      state.bags = Math.max(0, Math.min(MAX_BAGS, intValue(value)));\n      if (!options.keepArea) {\n        state.requestedArea = 0;\n        if (els.area) els.area.value = state.bags > 0 && coverage > 0 ? String(Math.round(area() * 100) / 100) : \"\";\n      }\n      render();\n    }\n\n    function setArea(value) {\n      state.errorMessage = \"\";\n      const nextArea = Math.max(0, numberValue(value));\n      state.requestedArea = nextArea;\n      state.bags = nextArea > 0 && coverage > 0 ? Math.ceil(nextArea / coverage) : 0;\n      render({ preserveAreaInput: true });\n    }\n\n    function step(delta) {\n      if (delta < 0 && state.bags <= 0) return;\n      setBags(state.bags + delta);\n    }\n\n    function setControlStates(isReady) {\n      if (els.quantity) els.quantity.value = state.bags > 0 ? String(state.bags) : \"\";\n      const unitPrice = priceCents / 100;\n      const unitCompare = compareCents / 100;\n      const pricePerM2 = coverage > 0 ? unitPrice / coverage : 0;\n      const comparePerM2 = coverage > 0 ? unitCompare / coverage : 0;\n      const activePriceCents = state.priceMode === \"m2\" ? Math.round(pricePerM2 * 100) : priceCents;\n      const activeCompareCents = state.priceMode === \"m2\" ? Math.round(comparePerM2 * 100) : compareCents;\n      const priceLabel = state.priceMode === \"m2\" ? labels.priceM2 : labels.priceBag;\n      const priceValue = state.priceMode === \"m2\" ? formatMoney(pricePerM2, false) : formatMoney(priceCents);\n      if (api.updatePriceCard) {\n        api.updatePriceCard(ui, {\n          name: \"bagPrice\",\n          label: priceLabel,\n          valueText: priceValue,\n          priceCents: activePriceCents,\n          compareCents: activeCompareCents\n        });\n      } else {\n        if (els.priceLabel) els.priceLabel.textContent = priceLabel;\n        if (els.priceValue) els.priceValue.textContent = priceValue;\n      }\n      if (els.priceToggle) {\n        els.priceToggle.hidden = !available || coverage <= 0 || priceCents <= 0;\n        els.priceToggle.textContent = state.priceMode === \"m2\" ? labels.toggleBag : labels.toggleArea;\n      }\n      if (els.quantityHint) {\n        els.quantityHint.textContent = coverageHint();\n      }\n      if (els.quantityPreset) {\n        els.quantityPreset.setAttribute(\"data-mspa-control-state\", !available || coverage <= 0 || state.isAdding ? \"disabled\" : \"\");\n      }\n      if (els.quantityPreset && window.MSPurchaseMotor && typeof window.MSPurchaseMotor.syncQuantityPreset === \"function\") {\n        window.MSPurchaseMotor.syncQuantityPreset(els.quantityPreset, state.bags, {\n          ensureVisible: state.bags > 0,\n          disabled: !available || coverage <= 0 || state.isAdding\n        });\n      }\n      ui.querySelectorAll(\"[data-mspa-quantity]\").forEach((control) => {\n        if (\"disabled\" in control) control.disabled = !available || coverage <= 0 || state.isAdding;\n      });\n      if (els.areaField) {\n        els.areaField.setAttribute(\"data-mspa-field-state\", coverage <= 0 ? \"error\" : (state.bags > 0 ? \"complete\" : \"empty\"));\n      }\n      if (els.quantityPreset && available && coverage > 0 && !state.isAdding) {\n        els.quantityPreset.removeAttribute(\"data-mspa-control-state\");\n      }\n    }\n\n    function motorState(isReady) {\n      const missingCoverage = coverage <= 0;\n      const hasRuntimeError = Boolean(state.errorMessage);\n      const label = !available\n        ? labels.soldOut\n        : state.isAdding\n          ? labels.busy\n          : isReady\n            ? labels.primary\n            : labels.empty;\n      return {\n        family: type,\n        label,\n        ready: isReady && !state.isAdding && !hasRuntimeError,\n        busy: state.isAdding,\n        disabled: !available,\n        error: missingCoverage || hasRuntimeError,\n        status: !available ? \"disabled\" : missingCoverage || hasRuntimeError ? \"error\" : state.isAdding ? \"busy\" : isReady ? \"ready\" : \"not-ready\",\n        step: isReady ? labels.primary : labels.empty,\n        stepIndex: isReady ? \"2\" : \"1\",\n        stepTotal: \"2\",\n        summary: stepSummary(),\n        readyStatus: isReady ? readyStatusText() : \"\",\n        validation: missingCoverage ? \"Dekning m\u00B2 per sekk mangler p\u00E5 produktet.\" : hasRuntimeError ? \"Kurvhandlingen feilet.\" : \"\",\n        reason: !available ? \"sold-out\" : missingCoverage ? \"missing-coverage\" : hasRuntimeError ? \"cart-error\" : isReady ? \"ready\" : \"area-or-bags\",\n        source: null,\n        focusTarget: isReady ? (els.quantity || ui) : (areaInputEnabled ? (els.area || els.quantity || ui) : (els.quantity || ui)),\n        add: addToCart,\n        intent: isReady ? cartIntentPayload() : null\n      };\n    }\n\n    function render() {\n      const isReady = ready();\n      root.classList.toggle(\"is-ready\", isReady);\n      root.classList.toggle(\"is-loading\", state.isAdding);\n      host.classList.toggle(\"is-mspa-family-ready\", isReady);\n      host.classList.toggle(\"is-mspa-family-loading\", state.isAdding);\n      setControlStates(isReady);\n      api.update(host, motorState(isReady));\n    }\n\n    function isVendorGuardError(error) {\n      const message = String(error && error.message || \"\");\n      return Boolean(error && (\n        error.msVendorGuardBlocked ||\n        error.msQuickShopVendorConflict ||\n        error.msVendorGuardReason === \"pre_add\" ||\n        /bestill.+leverand\u00F8r|mixed[_ -]?vendor|vendor[_ -]?conflict/i.test(message)\n      ));\n    }\n\n    async function addToCart(options = {}) {\n      if (state.isAdding || !ready()) {\n        const focusTarget = areaInputEnabled ? els.area : els.quantity;\n        if (focusTarget && typeof focusTarget.focus === \"function\") focusTarget.focus({ preventScroll: true });\n        return null;\n      }\n      state.isAdding = true;\n      render();\n      try {\n        const result = await api.add(host, cartIntentPayload());\n        const fromQuickShop = options && options.context === \"quick-shop\";\n        if (!fromQuickShop) {\n          document.dispatchEvent(new CustomEvent(\"cartModal:done\", {\n            detail: { calculator: type, vendor, items: [{ title, quantity: state.bags }] }\n          }));\n          document.dispatchEvent(new CustomEvent(\"ms:cart:open-request\", { detail: { source: \"mspa-bag-selection\" } }));\n        }\n        state.requestedArea = 0;\n        if (els.area) els.area.value = \"\";\n        setBags(0);\n        return result;\n      } catch (error) {\n        if (isVendorGuardError(error)) {\n          state.errorMessage = \"\";\n          throw error;\n        }\n        console.error(\"MSPA bag add-to-cart feilet:\", error);\n        if (api?.isPurchaseLayerError?.(error) || window.MSPurchaseMotor?.isPurchaseLayerError?.(error)) {\n          state.errorMessage = \"\";\n        } else {\n          state.errorMessage = \"Noe stoppet kurvhandlingen. Pr\u00F8v igjen, eller ta kontakt hvis det gjentar seg.\";\n        }\n        throw error;\n      } finally {\n        state.isAdding = false;\n        render();\n      }\n    }\n\n    if (els.area) els.area.addEventListener(\"input\", (event) => setArea(event.target.value));\n    els.quantity.addEventListener(\"input\", (event) => setBags(event.target.value));\n    els.quantity.addEventListener(\"change\", (event) => setBags(event.target.value));\n    ui.addEventListener(\"click\", (event) => {\n      const target = eventElement(event);\n      if (!target) return;\n      const priceToggle = target.closest(\"[data-mspa-price-toggle]\");\n      if (priceToggle) {\n        event.preventDefault();\n        state.priceMode = state.priceMode === \"m2\" ? \"bag\" : \"m2\";\n        render();\n        return;\n      }\n    });\n\n    render();\n  }\n\n  function initAll(root = document) {\n    root.querySelectorAll(\"[data-mspa-bag-calc]\").forEach(init);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", () => initAll(), { once: true });\n  } else {\n    initAll();\n  }\n\n  document.addEventListener(\"shopify:section:load\", (event) => initAll(event.target));\n  document.addEventListener(\"ms:quick-shop:loaded\", () => initAll());\n})();\n"],
  "mappings": "AAAA;AAAA;AAAA;AAAA,IAIC,UAAY,CACX,MAAM,UAAY,cACZ,eAAiB,yCAGjB,+BAAiC,OAAO,OAAO,CACnD,aAAc,4BACd,aAAc,+BACd,aAAc,8BACd,gBAAiB,4BACjB,gBAAiB,6BACjB,gBAAiB,2BACjB,gBAAiB,2BACjB,gBAAiB,2BACjB,gBAAiB,0BACnB,CAAC,EAED,SAAS,SAAS,MAAO,CACvB,MAAM,OAAS,SAAS,OAAO,OAAS,EAAE,EAAE,QAAQ,SAAU,EAAE,EAAG,EAAE,EACrE,OAAO,OAAO,SAAS,MAAM,EAAI,OAAS,CAC5C,CAEA,SAAS,YAAY,MAAO,CAC1B,GAAI,OAAU,MAA+B,QAAU,GAAI,MAAO,GAClE,MAAM,OAAS,OAAO,OAAO,KAAK,EAAE,QAAQ,IAAK,GAAG,EAAE,KAAK,CAAC,EAC5D,OAAO,OAAO,SAAS,MAAM,EAAI,OAAS,CAC5C,CAEA,SAAS,aAAa,MAAO,SAAW,EAAG,CACzC,OAAO,OAAO,OAAS,CAAC,EAAE,eAAe,QAAS,CAChD,sBAAuB,SACvB,sBAAuB,QACzB,CAAC,CACH,CAEA,SAAS,YAAY,cAAe,QAAU,GAAM,CAClD,MAAM,MAAQ,OAAO,eAAiB,CAAC,GAAK,QAAU,IAAM,GAC5D,GAAI,CAAC,OAAO,SAAS,KAAK,GAAK,OAAS,EAAG,MAAO,GAClD,MAAM,SAAW,KAAK,IAAI,MAAQ,KAAK,MAAM,KAAK,CAAC,EAAI,KAAQ,EAAI,EACnE,MAAO,GAAG,MAAM,eAAe,QAAS,CACtC,sBAAuB,SACvB,sBAAuB,QACzB,CAAC,CAAC,KACJ,CAEA,SAAS,WAAW,MAAO,CACzB,MAAM,OAAS,OAAO,OAAS,CAAC,EAC1B,SAAW,OAAS,GAAK,KAAK,IAAI,OAAS,KAAK,MAAM,MAAM,CAAC,EAAI,KAAQ,EAAI,EACnF,OAAO,aAAa,OAAQ,QAAQ,CACtC,CAEA,SAAS,UAAU,MAAO,SAAW,GAAI,CAEvC,OADa,OAA8B,OAAiB,EAAU,EAAE,KAAK,GAC9D,QACjB,CAEA,SAAS,UAAU,MAAO,SAAW,GAAO,CAC1C,GAA2B,OAAU,MAAQ,QAAU,GAAI,OAAO,SAClE,MAAM,KAAO,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAC9C,MAAI,CAAC,OAAQ,IAAK,MAAO,KAAM,IAAI,EAAE,SAAS,IAAI,EAAU,GACxD,CAAC,QAAS,IAAK,KAAM,MAAO,KAAK,EAAE,SAAS,IAAI,EAAU,GACvD,QACT,CAEA,SAAS,QAAQ,KAAM,CACrB,OAAO,MAAQ,KAAK,QAAU,KAAK,QAAQ,2BAA2B,EAAI,IAC5E,CAEA,SAAS,aAAa,KAAM,CAC1B,OAAO,KAAO,KAAK,cAAc,wBAAwB,EAAI,IAC/D,CAEA,SAAS,aAAa,MAAO,CAC3B,MAAM,OAAS,OAAS,MAAM,OAC9B,OAAK,OACD,OAAO,WAAa,EAAU,OAC3B,OAAO,eAAiB,KAFX,IAGtB,CAEA,SAAS,iBAAiB,KAAM,QAAS,CACvC,MAAM,KAAO,QAAQ,IAAI,GAAK,KAC1B,MAAQ,KAAK,eACf,KAAK,aAAa,0BAA2B,MAAM,EACnD,KAAK,aAAa,yBAA0B,OAAO,EACnD,KAAK,aAAa,yBAA0B,oBAAoB,GAElE,QAAQ,MAAM,SAAW,6EAA6E,CACxG,CAEA,SAAS,SAAS,KAAM,CACtB,OAAI,OAAO,iBAAmB,OAAO,OAAO,gBAAgB,OAAU,YAAc,OAAO,OAAO,gBAAgB,QAAW,WACpH,OAAO,iBAEhB,iBAAiB,IAAI,EACd,KACT,CAEA,SAAS,aAAa,IAAK,CACrB,CAAC,KAAO,OAAO,IAAI,QAAW,YAAc,IAAI,4BAA8B,iBAClF,IAAI,OAAO,gBAAiB,CAC1B,SAAU,mBACV,QAAS,eACT,YAAa,CAAC,aAAc,WAAW,EACvC,KAAM,CAAC,UAAW,aAAc,QAAS,gBAAiB,oBAAqB,qBAAsB,gBAAgB,EACrH,UAAW,CAAC,aAAc,QAAS,UAAW,MAAO,qBAAqB,EAC1E,MAAO,CAAC,eAAgB,aAAa,EACrC,OAAQ,CAAC,oBAAqB,cAAe,WAAW,CAC1D,CAAC,EACD,IAAI,0BAA4B,eAClC,CAIA,SAAS,uBAAuB,KAAM,CACpC,MAAM,KAAQ,MAAS,CAAE,MAAM,MAAQ,IAAI,MAAM,IAAI,EAAG,YAAM,KAAO,KAAY,KAAO,EAClF,KAAQ,OAAU,OAA8B,OAAiB,EAAU,EAAE,KAAK,EACxF,SAAS,UAAW,CAClB,GAAI,OAAO,KAAK,IAAI,uBAA0B,WAAY,OAAO,KAAK,oCAAoC,EAC1G,MAAM,IAAM,KAAK,IAAI,sBAAsB,KAAK,IAAI,EACpD,GAAI,CAAC,KAAO,KAAK,IAAI,SAAS,IAAM,KAAK,KAAK,KAAK,SAAS,GAAK,CAAC,MAAM,QAAQ,IAAI,QAAQ,EAAG,OAAO,KAAK,sCAAsC,EACjJ,MAAM,iBAAmB,KAAK,SAAS,EACvC,GAAI,CAAC,OAAO,cAAc,gBAAgB,GAAK,iBAAmB,EAAG,OAAO,KAAK,6BAA6B,EAC9G,MAAM,KAAO,IAAI,SAAS,IAAK,MAAS,CACtC,GAAG,KAAK,KAAM,UAAW,KAAK,IAAI,UAAU,EAAG,IAAK,KAAK,IAAI,GAAG,EAAG,aAAc,KAAK,IAAI,KAAK,EAC/F,WAAY,IAAI,YAAa,aAAc,IAAI,uBAAwB,MAAO,IAAI,MAClF,UAAW,IAAI,UAAW,iBAAkB,IAAI,kBAChD,eAAgB,IAAI,iBAAkB,YAAa,IAAI,cACvD,KAAM,KAAK,KAAM,KAAM,OAAQ,SAAU,KAAK,IAAI,UAAU,IAAM,KAAK,KAAK,KAAK,SAAS,EAAI,iBAAmB,CACnH,EAAE,EACE,KAAK,OAAO,KAAK,KAAK,GAAG,KAAK,MAAM,CAAC,EACzC,MAAM,KAAO,IAAI,IACjB,UAAW,OAAO,KAAM,CAEtB,GADA,IAAI,UAAY,KAAK,IAAI,SAAS,EAAG,IAAI,IAAM,KAAK,IAAI,GAAG,EACvD,CAAC,qBAAqB,KAAK,IAAI,SAAS,GAAK,CAAC,IAAI,KAAO,CAAC,KAAK,IAAI,KAAK,GAAK,CAAC,KAAK,IAAI,IAAI,GACxF,KAAK,IAAI,IAAI,SAAS,GAAK,CAAC,OAAO,cAAc,IAAI,QAAQ,GAAK,IAAI,SAAW,EAAG,OAAO,KAAK,sCAAsC,EAC7I,KAAK,IAAI,IAAI,SAAS,EACtB,IAAI,OAAS,IAAI,YAAc,IAAQ,IAAI,mBAAqB,IAC3D,OAAO,SAAS,IAAI,KAAK,GAAK,IAAI,MAAQ,GAC1C,OAAO,cAAc,IAAI,UAAU,GAAK,IAAI,WAAa,IACxD,CAAC,KAAK,UAAY,KAAK,SAAS,GAAG,IAAM,GACjD,CACA,OAAO,IACT,CACA,SAAS,eAAgB,CACvB,OAAO,SAAS,EAAE,IAAK,MAAS,CAAE,UAAW,IAAI,UAAW,IAAK,IAAI,IAAK,MAAO,IAAI,MACnF,aAAc,IAAI,cAAgB,GAAI,KAAM,IAAI,KAAM,MAAO,IAAI,OAAS,GAAI,UAAW,KAAK,IAAI,SAAS,EAC3G,OAAQ,IAAI,QAAU,GAAI,SAAU,IAAI,SAAU,OAAQ,IAAI,MAAO,EAAE,CAC3E,CACA,SAAS,YAAY,UAAW,CAC9B,GAAI,CAAC,MAAM,QAAQ,SAAS,GAAK,CAAC,UAAU,OAAQ,OAAO,KAAK,8BAA8B,EAC9F,MAAM,QAAU,IAAI,IAAI,SAAS,EAAE,IAAK,KAAQ,CAAC,IAAI,UAAW,GAAG,CAAC,CAAC,EAC/D,KAAO,IAAI,IACX,OAAS,UAAU,IAAK,OAAU,CACtC,MAAM,IAAM,QAAQ,IAAI,KAAK,MAAM,SAAS,CAAC,EAC7C,MAAI,CAAC,KAAO,IAAI,MAAQ,MAAM,KAAO,CAAC,IAAI,QAAU,KAAK,IAAI,IAAI,SAAS,GACnE,CAAC,OAAO,cAAc,MAAM,QAAQ,GAAK,MAAM,UAAY,EAAU,KAAK,8BAA8B,GAC/G,KAAK,IAAI,IAAI,SAAS,EAAU,CAAE,IAAK,SAAU,MAAM,QAAS,EAClE,CAAC,EACK,QAAU,OAAO,IAAI,CAAC,CAAE,IAAK,QAAS,IAAM,KAAK,KAAK,IAAK,QAAQ,CAAC,EAC1E,GAAI,QAAQ,KAAM,QAAW,CAAC,QAAU,OAAO,OAAO,MAAS,YAAc,CAAC,MAAM,QAAQ,OAAO,KAAK,GAAK,OAAO,MAAM,SAAW,CAAC,EAAG,OAAO,KAAK,2BAA2B,EAChL,MAAM,MAAQ,CAAC,EAAG,cAAgB,CAAC,EAAG,aAAe,CAAC,EAAG,aAAe,CAAC,EACzE,QAAQ,QAAQ,CAAC,OAAQ,QAAU,CACjC,KAAM,CAAE,IAAK,QAAS,EAAI,OAAO,KAAK,EAAS,KAAO,OAAO,MAAM,CAAC,EACpE,GAAI,KAAK,KAAK,EAAE,IAAM,IAAI,WAAa,KAAK,WAAa,SAAU,OAAO,KAAK,qCAAqC,EAChH,KAAK,YAAc,OAAO,KAAK,KAAK,UAAU,EAAE,SAAQ,KAAK,WAAa,CAAE,GAAG,KAAK,WAAY,mBAAoB,QAAS,GACjI,MAAM,KAAK,IAAI,EAAG,aAAa,KAAK,CAAE,KAAM,MAAO,IAAI,MAAO,MAAO,IAAI,OAAS,EAAG,CAAC,EACtF,UAAW,YAAY,OAAO,eAAiB,CAAC,EAAG,CACjD,GAAI,KAAK,SAAS,YAAc,SAAS,WAAa,SAAS,EAAE,IAAM,IAAI,WAAa,SAAS,WAAa,SAAU,OAAO,KAAK,uCAAuC,EAC3K,cAAc,KAAK,CAAE,GAAG,SAAU,GAAI,IAAI,UAAW,WAAY,IAAI,UAAW,IAAK,IAAI,IAAK,MAAO,IAAI,MACvG,MAAO,IAAI,WAAY,YAAa,IAAI,WAAY,WAAY,KAAK,IAAI,SAAS,EAClF,OAAQ,IAAI,OAAQ,eAAgB,IAAI,OAAQ,WAAY,KAAK,YAAc,CAAC,CAAE,CAAC,CACvF,CACA,aAAa,KAAK,CAAE,UAAW,IAAI,UAAW,IAAK,IAAI,IAAK,SAAU,KAAM,IAAI,KAC9E,YAAa,OAAO,oBAAsB,OAAO,mBAAqB,IAAK,CAAC,CAChF,CAAC,EACD,MAAM,aAAe,OAAO,IAAI,CAAC,CAAE,IAAK,QAAS,IAAM,GAAG,QAAQ,IAAI,IAAI,IAAI,EAAE,EAChF,MAAO,CAAE,KAAM,KAAK,KAAM,OAAQ,KAAK,OAAQ,OAAQ,KAAK,KAAK,OAAQ,MAAO,cAC9E,aAAc,CAAE,MAAO,YAAa,EAAG,iBAAkB,GAAM,SAAU,GACzE,kBAAmB,CAAE,QAAS,EAAG,OAAQ,KAAK,OAAQ,OAAQ,KAAK,OAAQ,KAAM,SAAU,cAAe,SACxG,YAAa,aAAa,KAAK,QAAK,EAAG,SAAU,OAAO,IAAI,CAAC,CAAE,IAAK,QAAS,KAAO,CAAE,MAAO,IAAI,MAAO,SAAU,GAAG,QAAQ,IAAI,IAAI,IAAI,GAAI,KAAM,IAAI,MAAQ,MAAO,EAAE,EACxK,MAAO,OAAO,IAAI,CAAC,CAAE,IAAK,QAAS,KAAO,CAAE,IAAK,IAAI,KAAO,IAAI,UAAW,UAAW,IAAI,UAAW,MAAO,IAAI,MAAO,QAAS,EAAE,EAAG,SAAU,CAAC,CAAE,EACpJ,mBAAoB,CAAE,SAAU,8BAA+B,OAAQ,KAAK,OAAQ,QAAS,KAAK,QAAS,cAAe,SAAU,MAAO,YAAa,EACxJ,QAAS,CAAE,MAAO,KAAK,KAAK,MAAO,SAAU,yBAA0B,MAAO,OAAO,IAAI,CAAC,CAAE,IAAK,QAAS,KAAO,CAAE,MAAO,IAAI,MAAO,SAAU,GAAG,QAAQ,IAAI,IAAI,IAAI,GAAI,MAAO,IAAI,OAAS,GAAI,OAAQ,EAAM,EAAE,EAAG,eAAgB,GAAI,OAAQ,iCAAkC,EACnR,UAAW,CAAE,KAAM,GAAM,QAAS,GAAM,SAAU,GAAM,QAAS,QAAQ,KAAM,QAAW,OAAO,WAAW,UAAY,EAAI,CAAE,CAAE,CACpI,CACA,OAAO,OAAO,OAAO,CAAE,cAAe,WAAY,CAAC,CACrD,CAGA,SAAS,kBAAkB,IAAK,KAAM,OAAQ,gBAAiB,WAAY,CACzE,OAAO,uBAAuB,CAAE,IAAK,KAAM,OAAQ,OAAO,KAAM,QAAS,eAAgB,OAAQ,qBAAsB,KAAM,OAC3H,KAAM,OAAQ,SAAU,gBACxB,SAAW,KAAQ,IAAI,YAAc,OAAO,OAAO,SAAS,GAAK,OAAO,SAAS,OAAO,QAAQ,GAAK,OAAO,SAAW,GAAK,IAAI,QAAU,OAAO,MACjJ,KAAM,CAAC,IAAK,WAAa,CACvB,MAAM,KAAO,CAAE,GAAI,IAAI,UAAW,SAAU,WAAY,WAAW,CAAE,EACrE,MAAO,CAAE,MAAO,CAAC,IAAI,EAAG,cAAe,OAAO,oBAAsB,CAAC,CAAE,GAAI,IAAI,UAAW,SAAU,WAAY,KAAK,WAAY,kBAAmB,EAAK,CAAC,EAAI,CAAC,EAC7J,mBAAoB,CAAE,SAAU,8BAA+B,OAAQ,qBAAsB,QAAS,eACpG,cAAe,SAAU,QAAS,CAAE,GAAI,IAAI,UAAW,UAAW,IAAI,UAAW,IAAK,IAAI,IAAK,MAAO,IAAI,MAAO,WAAY,IAAI,UAAW,EAC5I,YAAa,CAAE,cAAe,EAAG,KAAM,SAAU,iBAAkB,OAAO,SAAU,eAAgB,SAAW,OAAO,SAAU,YAAa,SAAW,OAAO,SAAU,gBAAiB,IAAI,WAAa,QAAS,CAAE,EACxN,UAAW,CAAE,QAAS,OAAO,mBAAoB,CAAE,CACvD,CAAE,CAAC,CACP,CAEA,SAAS,KAAK,KAAM,CAClB,GAAI,CAAC,MAAQ,KAAK,QAAQ,SAAS,IAAM,IAAK,OAC9C,KAAK,QAAQ,SAAS,EAAI,IAE1B,MAAM,IAAM,SAAS,IAAI,EACnB,KAAO,QAAQ,IAAI,EACnB,iBAAmB,aAAa,IAAI,EAC1C,GAAI,CAAC,KAAO,CAAC,MAAQ,CAAC,iBAAkB,CACtC,iBAAiB,KAAM,kDAAkD,EACzE,MACF,CAEA,aAAa,GAAG,EAEhB,MAAM,KAAO,KAAK,SAAW,CAAC,EACxB,KAAO,UAAU,KAAK,YAAa,YAAY,EAC/C,MAAQ,UAAU,KAAK,iBAAkB,SAAS,EAClD,OAAS,UAAU,KAAK,iBAAiB,EACzC,UAAY,OAAO,YAAY,EAC/B,UAAY,SAAS,KAAK,oBAAoB,EAC9C,UAAY,UAAU,KAAK,aAAa,EACxC,IAAM,UAAU,KAAK,cAAc,EACnC,MAAQ,OAAO,KAAK,kBAAoB,CAAC,EACzC,WAAa,OAAO,KAAK,uBAAyB,CAAC,EACnD,aAAe,OAAO,KAAK,2BAA6B,CAAC,EACzD,MAAQ,UAAU,KAAK,gBAAgB,EACvC,UAAY,OAAO,KAAK,sBAAwB,MAAM,IAAM,OAC5D,SAAW,YAAY,KAAK,eAAe,EAC3C,kBAAoB,OAAS,cAAgB,QAAU,KAAU,WAAa,IAC/E,+BAA+B,SAAS,IAAM,GAAG,UAAU,KAAK,oBAAoB,CAAC,IAAI,GAAG,GAC3F,kBAAoB,kBAAoB,wBAA0B,GAElE,YADU,UAAU,KAAK,YAAa,KAAK,aAAa,yBAAyB,GAAK,SAAS,IACrE,aAC1B,iBAAmB,UAAU,KAAK,qBAAsB,EAAK,EAC7D,oBAAsB,UAAU,KAAK,uBAAuB,EAC5D,oBAAsB,YAAc,WAAa,sBAAwB,aACzE,SAAW,iBAAmB,UAAU,KAAK,aAAc,+BAA4B,EAAI,qBAC3F,cAAgB,iBAAmB,UAAU,KAAK,kBAAmB,2CAA2C,EAAI,sBACpH,OAAS,CACb,MAAO,UAAU,KAAK,aAAc,OAAS,YAAc,mBAAqB,mBAAmB,EACnG,QAAS,UAAU,KAAK,eAAgB,eAAe,EACvD,KAAM,UAAU,KAAK,YAAa,oBAAoB,EACtD,QAAS,UAAU,KAAK,iBAAkB,SAAS,EACnD,MAAO,SACP,KAAM,UAAU,KAAK,cAAe,iBAAc,EAClD,gBAAiB,UAAU,KAAK,oBAAqB,qBAAkB,EACvE,SAAU,UAAU,KAAK,kBAAmB,eAAe,EAC3D,SAAU,UAAU,KAAK,kBAAmB,eAAe,EAC3D,QAAS,kBAAoB,0CAAyC,qBACtE,WAAY,UAAU,KAAK,oBAAqB,oBAAiB,EACjE,UAAW,UAAU,KAAK,mBAAoB,cAAc,EAC5D,cACA,cAAe,UAAU,KAAK,kBAAmB,+BAA+B,CAClF,EAEM,MAAQ,CACZ,KAAM,EACN,cAAe,EACf,UAAW,MACX,SAAU,GACV,aAAc,EAChB,EAEA,SAAS,MAAO,CACd,OAAO,MAAM,KAAO,QACtB,CAEA,SAAS,aAAc,CACrB,OAAO,MAAM,cAAgB,EAAI,MAAM,cAAgB,KAAK,CAC9D,CAEA,SAAS,OAAQ,CACf,OAAO,WAAa,UAAY,GAAK,SAAW,GAAK,MAAM,KAAO,CACpE,CAEA,SAAS,UAAW,CAClB,OAAO,MAAM,OAAS,EAAI,OAAS,QACrC,CAEA,SAAS,cAAe,CACtB,OAAI,UAAY,EAAU,kBACnB,qBAAqB,WAAW,QAAQ,CAAC,SAAM,iBAAiB,KAClE,kBAAoB,GAAK,uCAChC,CAEA,SAAS,mBAAoB,CAC3B,MAAO,GAAG,MAAM,IAAI,IAAI,SAAS,CAAC,eAAe,WAAW,YAAY,CAAC,CAAC,SAAM,iBAAiB,GACnG,CAEA,SAAS,iBAAkB,CACzB,MAAO,sBAAsB,kBAAkB,CAAC,EAClD,CAEA,SAAS,aAAc,CACrB,OAAK,UACD,UAAY,EAAU,4DACtB,MAAM,aAAqB,MAAM,aAChC,MAAM,EACJ,gBAAgB,EADF,OAAO,cAHL,2CAKzB,CAEA,SAAS,mBAAoB,CAC3B,MAAM,MAAQ,CACZ,CAAE,MAAO,iBAAkB,MAAO,MAAM,cAAgB,EAAI,kBAAiB,eAAgB,EAC7F,CAAE,MAAO,gBAAiB,MAAO,GAAG,MAAM,IAAI,IAAI,SAAS,CAAC,EAAG,EAC/D,CAAE,MAAO,aAAc,MAAO,GAAG,WAAW,KAAK,CAAC,CAAC,SAAM,iBAAiB,EAAG,EAC7E,CAAE,MAAO,mBAAoB,MAAO,OAAO,WAAW,QAAQ,CAAC,SAAM,iBAAiB,EAAG,CAC3F,EACA,OAAI,MAAM,cAAgB,GACxB,MAAM,OAAO,EAAG,EAAG,CAAE,MAAO,kBAAgB,MAAO,GAAG,WAAW,MAAM,aAAa,CAAC,QAAM,CAAC,EAE1F,MAAQ,GACV,MAAM,KAAK,CAAE,MAAO,gBAAiB,MAAO,OAAO,aAAa,MAAQ,IAAM,CAAC,CAAC,KAAM,CAAC,EAElF,CACL,QAAS,EACT,OAAQ,qBACR,OAAQ,KACR,MAAO,GAAG,OAAS,YAAc,YAAc,YAAY,cAC3D,aAAc,MACd,YAAa,GAAG,MAAM,IAAI,IAAI,SAAS,CAAC,aAAU,WAAW,KAAK,CAAC,CAAC,SAAM,iBAAiB,GAC3F,MACA,SAAU,CAAC,CACT,MACA,SAAU,GAAG,MAAM,IAAI,IAAI,SAAS,CAAC,GACrC,IACA,KAAM,MACR,CAAC,EACD,SAAU,CAAC,CACb,CACF,CAEA,SAAS,oBAAqB,CAC5B,MAAO,CACL,SAAU,8BACV,QAAS,eACT,OAAQ,KACR,QAAS,CACP,GAAI,UACJ,UACA,MACA,OACA,IACA,MACA,UACF,EACA,YAAa,CACX,cAAe,MAAM,cACrB,KAAM,MAAM,KACZ,iBAAkB,SAClB,eAAgB,KAAK,EACrB,YAAa,YAAY,EACzB,gBAAiB,WAAa,MAAM,IACtC,CACF,CACF,CAEA,SAAS,gBAAiB,CAGxB,GAAI,YAAc,UAAW,MAAO,CAAC,EACrC,MAAM,WAAa,CACjB,sBAAuB,KACvB,WAAY,qBACZ,mBAAoB,OACpB,kBAAmB,MACnB,kBAAmB,KACrB,EACA,OAAI,sBACF,WAAW,iBAAmB,aAC9B,WAAW,gBAAkB,YAExB,UACT,CAEA,SAAS,WAAY,CACnB,MAAO,CAAC,CACN,GAAI,UACJ,SAAU,MAAM,KAChB,WAAY,eAAe,CAC7B,CAAC,CACH,CAEA,SAAS,eAAgB,CACvB,OAAK,oBACE,CAAC,CACN,GAAI,UACJ,WAAY,UACZ,SAAU,MAAM,KAChB,MACA,cAAe,MACf,IACA,OACA,eAAgB,OAChB,MACA,MAAO,WACP,YAAa,WACb,WAAY,UACZ,kBAAmB,GACnB,WAAY,eAAe,CAC7B,CAAC,EAhBgC,CAAC,CAiBpC,CAEA,SAAS,mBAAoB,CAC3B,MAAM,QAAU,SAAS,EACnB,MAAQ,UAAU,EACxB,MAAO,CACL,OAAQ,KACR,OACA,MACA,aAAc,CAAE,MAAO,CAAC,CAAE,KAAM,MAAM,CAAC,EAAG,MAAO,KAAM,CAAC,CAAE,EAC1D,cAAe,cAAc,EAC7B,kBAAmB,kBAAkB,EACrC,mBAAoB,mBAAmB,EACvC,QAAS,CACP,MACA,SAAU,GAAG,MAAM,IAAI,IAAI,OAAO,aAAU,WAAW,KAAK,CAAC,CAAC,SAAM,iBAAiB,GACrF,MAAO,CAAC,CACN,MACA,SAAU,GAAG,MAAM,IAAI,IAAI,OAAO,GAClC,MAAO,WAAa,EAAI,OAAO,YAAY,WAAa,MAAM,IAAI,CAAC,GAAK,GACxE,MACA,KAAM,IAAM,WAAW,GAAG,GAAK,GAC/B,OAAQ,EACV,CAAC,EACD,eAAgB,WAAa,EAAI,YAAY,WAAa,MAAM,IAAI,EAAI,GACxE,OAAQ,kCACV,EACA,iBAAkB,GAClB,UAAW,CACT,QAAS,oBACT,QAAS,GACT,SAAU,EACZ,CACF,CACF,CAEA,MAAM,WAAa,kBAAkB,IAAK,KAAM,CAAE,KAAM,MAAO,OAAQ,UAAW,UAAW,OAAQ,UAAU,KAAK,iBAAiB,EAAG,MAAO,MAAO,SAAU,mBAAoB,EAAG,IAAM,MAAM,KAAM,cAAc,EAEvN,SAAS,YAAa,CACpB,MAAM,WAAa,CACjB,CACE,KAAM,YACN,KAAM,WACN,MAAO,OAAO,SACd,MAAO,WAAa,EAAI,YAAY,UAAU,EAAI,IAClD,WACA,aACA,YAAa,OAAO,UACtB,EACA,CACE,KAAM,QACN,GAAI,QAAQ,IAAI,SAAS,WAAa,WAAa,SAAS,GAC5D,KAAM,UACN,MAAO,OAAO,KACd,KAAM,kFACN,UAAW,SACX,UAAW,UACX,YAAa,OAAO,gBACpB,OAAQ,QACR,IAAK,MACL,KAAM,MACN,aAAc,MACd,QAAS,gBACX,EACA,CACE,KAAM,iBACN,GAAI,cACJ,KAAM,cACN,MAAO,OAAO,SACd,KAAM,aAAa,EACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,EACtB,IAAK,EACL,IAAK,IACL,SAAU,EACV,gBAAiB,EACjB,kBAAmB,IACnB,aAAc,uBACd,MAAO,EACT,EACA,CACE,KAAM,aACN,KAAM,gBACN,KAAM,EACR,CACF,EAEA,WAAI,MAAM,KAAM,CACd,cAAe,WAAW,cAC1B,YAAa,WAAW,YACxB,OAAQ,gBACR,KAAM,yBACN,MAAO,CAAC,CACN,GAAI,gBACJ,MAAO,OAAO,MACd,MAAO,SACP,UACF,CAAC,CACH,CAAC,EAED,KAAK,aAAa,wBAAyB,yBAAyB,EACpE,KAAK,aAAa,gCAAiC,cAAc,EACjE,KAAK,gBAAgB,wBAAwB,EAC7C,KAAK,gBAAgB,+BAA+B,EACpD,KAAK,aAAa,wBAAyB,eAAe,EACnD,aAAa,IAAI,CAC1B,CAEA,MAAM,GAAK,WAAW,EAChB,IAAM,CACV,KAAM,GAAK,GAAG,cAAc,+BAA+B,EAAI,KAC/D,UAAW,GAAK,GAAG,cAAc,6BAA6B,EAAI,KAClE,SAAU,GAAK,GAAG,cAAc,oCAAoC,EAAI,KACxE,eAAgB,GAAK,GAAG,cAAc,2CAA2C,EAAI,KACrF,aAAc,GAAK,GAAG,cAAc,yCAAyC,EAAI,KACjF,gBAAiB,GAAK,GAAG,cAAc,4CAA4C,EAAI,KACvF,WAAY,GAAK,GAAG,cAAc,oCAAoC,EAAI,KAC1E,WAAY,GAAK,GAAG,cAAc,oCAAoC,EAAI,KAC1E,YAAa,GAAK,GAAG,cAAc,qCAAqC,EAAI,IAC9E,EAEA,GAAI,CAAC,IAAM,CAAC,IAAI,UAAa,kBAAoB,CAAC,IAAI,KAAO,CAC3D,iBAAiB,KAAM,2DAAwD,EAC/E,MACF,CAEA,SAAS,QAAQ,MAAO,QAAU,CAAC,EAAG,CACpC,MAAM,aAAe,GACrB,MAAM,KAAO,KAAK,IAAI,EAAG,KAAK,IAAI,IAAU,SAAS,KAAK,CAAC,CAAC,EACvD,QAAQ,WACX,MAAM,cAAgB,EAClB,IAAI,OAAM,IAAI,KAAK,MAAQ,MAAM,KAAO,GAAK,SAAW,EAAI,OAAO,KAAK,MAAM,KAAK,EAAI,GAAG,EAAI,GAAG,EAAI,KAE3G,OAAO,CACT,CAEA,SAAS,QAAQ,MAAO,CACtB,MAAM,aAAe,GACrB,MAAM,SAAW,KAAK,IAAI,EAAG,YAAY,KAAK,CAAC,EAC/C,MAAM,cAAgB,SACtB,MAAM,KAAO,SAAW,GAAK,SAAW,EAAI,KAAK,KAAK,SAAW,QAAQ,EAAI,EAC7E,OAAO,CAAE,kBAAmB,EAAK,CAAC,CACpC,CAEA,SAAS,KAAK,MAAO,CACf,MAAQ,GAAK,MAAM,MAAQ,GAC/B,QAAQ,MAAM,KAAO,KAAK,CAC5B,CAEA,SAAS,iBAAiB,QAAS,CAC7B,IAAI,WAAU,IAAI,SAAS,MAAQ,MAAM,KAAO,EAAI,OAAO,MAAM,IAAI,EAAI,IAC7E,MAAM,UAAY,WAAa,IACzB,YAAc,aAAe,IAC7B,WAAa,SAAW,EAAI,UAAY,SAAW,EACnD,aAAe,SAAW,EAAI,YAAc,SAAW,EACvD,iBAAmB,MAAM,YAAc,KAAO,KAAK,MAAM,WAAa,GAAG,EAAI,WAC7E,mBAAqB,MAAM,YAAc,KAAO,KAAK,MAAM,aAAe,GAAG,EAAI,aACjF,WAAa,MAAM,YAAc,KAAO,OAAO,QAAU,OAAO,SAChE,WAAa,MAAM,YAAc,KAAO,YAAY,WAAY,EAAK,EAAI,YAAY,UAAU,EACjG,IAAI,gBACN,IAAI,gBAAgB,GAAI,CACtB,KAAM,WACN,MAAO,WACP,UAAW,WACX,WAAY,iBACZ,aAAc,kBAChB,CAAC,GAEG,IAAI,aAAY,IAAI,WAAW,YAAc,YAC7C,IAAI,aAAY,IAAI,WAAW,YAAc,aAE/C,IAAI,cACN,IAAI,YAAY,OAAS,CAAC,WAAa,UAAY,GAAK,YAAc,EACtE,IAAI,YAAY,YAAc,MAAM,YAAc,KAAO,OAAO,UAAY,OAAO,YAEjF,IAAI,eACN,IAAI,aAAa,YAAc,aAAa,GAE1C,IAAI,gBACN,IAAI,eAAe,aAAa,0BAA2B,CAAC,WAAa,UAAY,GAAK,MAAM,SAAW,WAAa,EAAE,EAExH,IAAI,gBAAkB,OAAO,iBAAmB,OAAO,OAAO,gBAAgB,oBAAuB,YACvG,OAAO,gBAAgB,mBAAmB,IAAI,eAAgB,MAAM,KAAM,CACxE,cAAe,MAAM,KAAO,EAC5B,SAAU,CAAC,WAAa,UAAY,GAAK,MAAM,QACjD,CAAC,EAEH,GAAG,iBAAiB,sBAAsB,EAAE,QAAS,SAAY,CAC3D,aAAc,UAAS,QAAQ,SAAW,CAAC,WAAa,UAAY,GAAK,MAAM,SACrF,CAAC,EACG,IAAI,WACN,IAAI,UAAU,aAAa,wBAAyB,UAAY,EAAI,QAAW,MAAM,KAAO,EAAI,WAAa,OAAQ,EAEnH,IAAI,gBAAkB,WAAa,SAAW,GAAK,CAAC,MAAM,UAC5D,IAAI,eAAe,gBAAgB,yBAAyB,CAEhE,CAEA,SAAS,WAAW,QAAS,CAC3B,MAAM,gBAAkB,UAAY,EAC9B,gBAAkB,EAAQ,MAAM,aAChC,MAAS,UAEX,MAAM,SACJ,OAAO,KACP,QACE,OAAO,QACP,OAAO,MALX,OAAO,QAMX,MAAO,CACL,OAAQ,KACR,MACA,MAAO,SAAW,CAAC,MAAM,UAAY,CAAC,gBACtC,KAAM,MAAM,SACZ,SAAU,CAAC,UACX,MAAO,iBAAmB,gBAC1B,OAAS,UAAyB,iBAAmB,gBAAkB,QAAU,MAAM,SAAW,OAAS,QAAU,QAAU,YAA1G,WACrB,KAAM,QAAU,OAAO,QAAU,OAAO,MACxC,UAAW,QAAU,IAAM,IAC3B,UAAW,IACX,QAAS,YAAY,EACrB,YAAa,QAAU,gBAAgB,EAAI,GAC3C,WAAY,gBAAkB,kDAA8C,gBAAkB,yBAA2B,GACzH,OAAS,UAAyB,gBAAkB,mBAAqB,gBAAkB,aAAe,QAAU,QAAU,eAAzG,WACrB,OAAQ,KACR,YAAa,QAAW,IAAI,UAAY,GAAO,iBAAoB,IAAI,MAAQ,IAAI,UAAY,GAAO,IAAI,UAAY,GACtH,IAAK,UACL,OAAQ,QAAU,kBAAkB,EAAI,IAC1C,CACF,CAEA,SAAS,QAAS,CAChB,MAAM,QAAU,MAAM,EACtB,KAAK,UAAU,OAAO,WAAY,OAAO,EACzC,KAAK,UAAU,OAAO,aAAc,MAAM,QAAQ,EAClD,KAAK,UAAU,OAAO,uBAAwB,OAAO,EACrD,KAAK,UAAU,OAAO,yBAA0B,MAAM,QAAQ,EAC9D,iBAAiB,OAAO,EACxB,IAAI,OAAO,KAAM,WAAW,OAAO,CAAC,CACtC,CAEA,SAAS,mBAAmB,MAAO,CACjC,MAAM,QAAU,OAAO,OAAS,MAAM,SAAW,EAAE,EACnD,MAAO,GAAQ,QACb,MAAM,sBACN,MAAM,2BACN,MAAM,sBAAwB,WAC9B,8DAA8D,KAAK,OAAO,GAE9E,CAEA,eAAe,UAAU,QAAU,CAAC,EAAG,CACrC,GAAI,MAAM,UAAY,CAAC,MAAM,EAAG,CAC9B,MAAM,YAAc,iBAAmB,IAAI,KAAO,IAAI,SACtD,OAAI,aAAe,OAAO,YAAY,OAAU,YAAY,YAAY,MAAM,CAAE,cAAe,EAAK,CAAC,EAC9F,IACT,CACA,MAAM,SAAW,GACjB,OAAO,EACP,GAAI,CACF,MAAM,OAAS,MAAM,IAAI,IAAI,KAAM,kBAAkB,CAAC,EAEtD,OADsB,SAAW,QAAQ,UAAY,eAEnD,SAAS,cAAc,IAAI,YAAY,iBAAkB,CACvD,OAAQ,CAAE,WAAY,KAAM,OAAQ,MAAO,CAAC,CAAE,MAAO,SAAU,MAAM,IAAK,CAAC,CAAE,CAC/E,CAAC,CAAC,EACF,SAAS,cAAc,IAAI,YAAY,uBAAwB,CAAE,OAAQ,CAAE,OAAQ,oBAAqB,CAAE,CAAC,CAAC,GAE9G,MAAM,cAAgB,EAClB,IAAI,OAAM,IAAI,KAAK,MAAQ,IAC/B,QAAQ,CAAC,EACF,MACT,OAAS,MAAO,CACd,MAAI,mBAAmB,KAAK,GAC1B,MAAM,aAAe,GACf,QAER,QAAQ,MAAM,+BAAgC,KAAK,EAC/C,KAAK,uBAAuB,KAAK,GAAK,OAAO,iBAAiB,uBAAuB,KAAK,EAC5F,MAAM,aAAe,GAErB,MAAM,aAAe,oFAEjB,MACR,QAAE,CACA,MAAM,SAAW,GACjB,OAAO,CACT,CACF,CAEI,IAAI,MAAM,IAAI,KAAK,iBAAiB,QAAU,OAAU,QAAQ,MAAM,OAAO,KAAK,CAAC,EACvF,IAAI,SAAS,iBAAiB,QAAU,OAAU,QAAQ,MAAM,OAAO,KAAK,CAAC,EAC7E,IAAI,SAAS,iBAAiB,SAAW,OAAU,QAAQ,MAAM,OAAO,KAAK,CAAC,EAC9E,GAAG,iBAAiB,QAAU,OAAU,CACtC,MAAM,OAAS,aAAa,KAAK,EACjC,GAAI,CAAC,OAAQ,OAEb,GADoB,OAAO,QAAQ,0BAA0B,EAC5C,CACf,MAAM,eAAe,EACrB,MAAM,UAAY,MAAM,YAAc,KAAO,MAAQ,KACrD,OAAO,EACP,MACF,CACF,CAAC,EAED,OAAO,CACT,CAEA,SAAS,QAAQ,KAAO,SAAU,CAChC,KAAK,iBAAiB,sBAAsB,EAAE,QAAQ,IAAI,CAC5D,CAEI,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoB,IAAM,QAAQ,EAAG,CAAE,KAAM,EAAK,CAAC,EAE7E,QAAQ,EAGV,SAAS,iBAAiB,uBAAyB,OAAU,QAAQ,MAAM,MAAM,CAAC,EAClF,SAAS,iBAAiB,uBAAwB,IAAM,QAAQ,CAAC,CACnE,GAAG",
  "names": []
}
