{
"version": 3,
"sources": ["../../build/_snowpack/env.js", "../../build/_snowpack/pkg/common/index-c07ea359.js", "../../build/dist/util.js", "../../build/_snowpack/pkg/common/index-110b9d63.js", "../../build/_snowpack/pkg/svelte-routing.js", "../../build/dist/routing/Redirect.svelte.js", "../../build/dist/ApiClient.js", "../../build/dist/components/Hero.svelte.js", "../../build/_snowpack/pkg/svelte-simple-modal.js", "../../build/dist/components/PlayCredentials.svelte.js", "../../build/dist/stores.js", "../../build/dist/components/MediaQuery.svelte.js", "../../build/dist/components/NavBar.svelte.js", "../../build/dist/components/ProductCTA.svelte.js", "../../build/dist/components/Products.svelte.js", "../../build/dist/components/About.svelte.js", "../../build/dist/components/Infomercial.svelte.js", "../../build/dist/components/FAQ.svelte.js", "../../build/dist/components/Banner.svelte.js", "../../build/dist/components/OffsetButtons.svelte.js", "../../build/dist/components/BuyNow.svelte.js", "../../build/dist/components/ContactUs.svelte.js", "../../build/dist/components/Footer.svelte.js", "../../build/_snowpack/pkg/common/_commonjsHelpers-eb5a497e.js", "../../build/_snowpack/pkg/svelte-carousel.js", "../../build/dist/components/Testimonial.svelte.js", "../../build/dist/components/TestimonialCarousel.svelte.js", "../../build/dist/screens/Front.svelte.js", "../../build/_snowpack/pkg/common/lazy-json-f4438c0b.js", "../../build/_snowpack/pkg/common/v4-c5ee5148.js", "../../build/_snowpack/pkg/common/resolveDefaultsModeConfig-3d61721d.js", "../../build/_snowpack/pkg/common/object-mapping-ce2960b7.js", "../../build/_snowpack/pkg/@aws-sdk/client-s3.js", "../../build/_snowpack/pkg/@aws-sdk/client-cognito-identity.js", "../../build/_snowpack/pkg/@aws-sdk/credential-provider-cognito-identity.js", "../../build/dist/UploadClient.js", "../../build/dist/components/LoadingAnimation.svelte.js", "../../build/dist/components/ThemePreview.svelte.js", "../../build/dist/components/ImagePreview.svelte.js", "../../build/dist/components/VideoPreview.svelte.js", "../../build/dist/screens/Product.svelte.js", "../../build/dist/components/CartItem.svelte.js", "../../build/dist/components/CartCheckout.svelte.js", "../../build/dist/screens/Cart.svelte.js", "../../build/dist/screens/TermsAndConditions.svelte.js", "../../build/dist/screens/ReturnPolicy.svelte.js", "../../build/dist/screens/PrivacyPolicy.svelte.js", "../../build/dist/components/AffiliateForm.svelte.js", "../../build/dist/components/Loader.svelte.js", "../../build/dist/screens/AffiliateScreen.svelte.js", "../../build/dist/screens/AffiliateAgreement.svelte.js", "../../build/dist/routing/Routes.svelte.js", "../../build/dist/App.svelte.js", "../../build/dist/index.js"],
"sourcesContent": ["export const SNOWPACK_PUBLIC_API_URL = \"https://mypetar.com/api\";\nexport const SNOWPACK_PUBLIC_SHOPIFY_TOKEN = \"3e8d8dfa38ff1e3821731c6f43c0e9ac\";\nexport const SNOWPACK_PUBLIC_SHOPIFY_ADDRESS = \"https://mypetar.myshopify.com\";\nexport const RUN_ENV = \"production\";\nexport const MODE = \"production\";\nexport const NODE_ENV = \"production\";\nexport const SSR = false;", "function noop() {\n}\nconst identity = (x) => x;\nfunction assign(tar, src) {\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return !!value && (typeof value === \"object\" || typeof value === \"function\") && typeof value.then === \"function\";\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === \"function\";\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || (a && typeof a === \"object\" || typeof a === \"function\");\n}\nlet src_url_equal_anchor;\nfunction src_url_equal(element_src, url) {\n if (!src_url_equal_anchor) {\n src_url_equal_anchor = document.createElement(\"a\");\n }\n src_url_equal_anchor.href = url;\n return element_src === src_url_equal_anchor.href;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction subscribe(store, ...callbacks) {\n if (store == null) {\n return noop;\n }\n const unsub = store.subscribe(...callbacks);\n return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\nfunction component_subscribe(component, store, callback) {\n component.$$.on_destroy.push(subscribe(store, callback));\n}\nfunction create_slot(definition, ctx, $$scope, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, $$scope, fn) {\n return definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;\n}\nfunction get_slot_changes(definition, $$scope, dirty, fn) {\n if (definition[2] && fn) {\n const lets = definition[2](fn(dirty));\n if ($$scope.dirty === void 0) {\n return lets;\n }\n if (typeof lets === \"object\") {\n const merged = [];\n const len = Math.max($$scope.dirty.length, lets.length);\n for (let i = 0; i < len; i += 1) {\n merged[i] = $$scope.dirty[i] | lets[i];\n }\n return merged;\n }\n return $$scope.dirty | lets;\n }\n return $$scope.dirty;\n}\nfunction update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {\n if (slot_changes) {\n const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);\n slot.p(slot_context, slot_changes);\n }\n}\nfunction get_all_dirty_from_scope($$scope) {\n if ($$scope.ctx.length > 32) {\n const dirty = [];\n const length = $$scope.ctx.length / 32;\n for (let i = 0; i < length; i++) {\n dirty[i] = -1;\n }\n return dirty;\n }\n return -1;\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== \"$\")\n result[k] = props[k];\n return result;\n}\nfunction compute_rest_props(props, keys) {\n const rest = {};\n keys = new Set(keys);\n for (const k in props)\n if (!keys.has(k) && k[0] !== \"$\")\n rest[k] = props[k];\n return rest;\n}\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\nconst is_client = typeof window !== \"undefined\";\nlet now = is_client ? () => window.performance.now() : () => Date.now();\nlet raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;\nconst tasks = new Set();\nfunction run_tasks(now2) {\n tasks.forEach((task) => {\n if (!task.c(now2)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\nfunction loop(callback) {\n let task;\n if (tasks.size === 0)\n raf(run_tasks);\n return {\n promise: new Promise((fulfill) => {\n tasks.add(task = {c: callback, f: fulfill});\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\nconst globals = typeof window !== \"undefined\" ? window : typeof globalThis !== \"undefined\" ? globalThis : global;\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction append_styles(target, style_sheet_id, styles) {\n const append_styles_to = get_root_for_style(target);\n if (!append_styles_to.getElementById(style_sheet_id)) {\n const style = element(\"style\");\n style.id = style_sheet_id;\n style.textContent = styles;\n append_stylesheet(append_styles_to, style);\n }\n}\nfunction get_root_for_style(node) {\n if (!node)\n return document;\n const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;\n if (root && root.host) {\n return root;\n }\n return node.ownerDocument;\n}\nfunction append_empty_stylesheet(node) {\n const style_element = element(\"style\");\n append_stylesheet(get_root_for_style(node), style_element);\n return style_element.sheet;\n}\nfunction append_stylesheet(node, style) {\n append(node.head || node, style);\n return style.sheet;\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(\" \");\n}\nfunction empty() {\n return text(\"\");\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function(event) {\n event.preventDefault();\n return fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else if (node.getAttribute(attribute) !== value)\n node.setAttribute(attribute, value);\n}\nconst always_set_through_set_attribute = [\"width\", \"height\"];\nfunction set_attributes(node, attributes) {\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n } else if (key === \"style\") {\n node.style.cssText = attributes[key];\n } else if (key === \"__value\") {\n node.value = node[key] = attributes[key];\n } else if (descriptors[key] && descriptors[key].set && always_set_through_set_attribute.indexOf(key) === -1) {\n node[key] = attributes[key];\n } else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction init_binding_group(group) {\n let _inputs;\n return {\n p(...inputs) {\n _inputs = inputs;\n _inputs.forEach((input) => group.push(input));\n },\n r() {\n _inputs.forEach((input) => group.splice(group.indexOf(input), 1));\n }\n };\n}\nfunction children(element2) {\n return Array.from(element2.childNodes);\n}\nfunction set_data(text2, data) {\n data = \"\" + data;\n if (text2.data === data)\n return;\n text2.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? \"\" : value;\n}\nfunction set_style(node, key, value, important) {\n if (value == null) {\n node.style.removeProperty(key);\n } else {\n node.style.setProperty(key, value, important ? \"important\" : \"\");\n }\n}\nfunction select_option(select, value, mounting) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n if (!mounting || value !== void 0) {\n select.selectedIndex = -1;\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(\":checked\");\n return selected_option && selected_option.__value;\n}\nfunction toggle_class(element2, name, toggle) {\n element2.classList[toggle ? \"add\" : \"remove\"](name);\n}\nfunction custom_event(type, detail, {bubbles = false, cancelable = false} = {}) {\n const e = document.createEvent(\"CustomEvent\");\n e.initCustomEvent(type, bubbles, cancelable, detail);\n return e;\n}\nfunction construct_svelte_component(component, props) {\n return new component(props);\n}\nconst managed_styles = new Map();\nlet active = 0;\nfunction hash(str) {\n let hash2 = 5381;\n let i = str.length;\n while (i--)\n hash2 = (hash2 << 5) - hash2 ^ str.charCodeAt(i);\n return hash2 >>> 0;\n}\nfunction create_style_information(doc, node) {\n const info = {stylesheet: append_empty_stylesheet(node), rules: {}};\n managed_styles.set(doc, info);\n return info;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = \"{\\n\";\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n const doc = get_root_for_style(node);\n const {stylesheet, rules} = managed_styles.get(doc) || create_style_information(doc, node);\n if (!rules[name]) {\n rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || \"\";\n node.style.animation = `${animation ? `${animation}, ` : \"\"}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n const previous = (node.style.animation || \"\").split(\", \");\n const next = previous.filter(name ? (anim) => anim.indexOf(name) < 0 : (anim) => anim.indexOf(\"__svelte\") === -1);\n const deleted = previous.length - next.length;\n if (deleted) {\n node.style.animation = next.join(\", \");\n active -= deleted;\n if (!active)\n clear_rules();\n }\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n managed_styles.forEach((info) => {\n const {ownerNode} = info.stylesheet;\n if (ownerNode)\n detach(ownerNode);\n });\n managed_styles.clear();\n });\n}\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error(\"Function called outside component initialization\");\n return current_component;\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = get_current_component();\n return (type, detail, {cancelable = false} = {}) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n const event = custom_event(type, detail, {cancelable});\n callbacks.slice().forEach((fn) => {\n fn.call(component, event);\n });\n return !event.defaultPrevented;\n }\n return true;\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n return context;\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach((fn) => fn.call(this, event));\n }\n}\nconst dirty_components = [];\nconst binding_callbacks = [];\nlet render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = /* @__PURE__ */ Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nconst seen_callbacks = new Set();\nlet flushidx = 0;\nfunction flush() {\n if (flushidx !== 0) {\n return;\n }\n const saved_component = current_component;\n do {\n try {\n while (flushidx < dirty_components.length) {\n const component = dirty_components[flushidx];\n flushidx++;\n set_current_component(component);\n update(component.$$);\n }\n } catch (e) {\n dirty_components.length = 0;\n flushidx = 0;\n throw e;\n }\n set_current_component(null);\n dirty_components.length = 0;\n flushidx = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n seen_callbacks.add(callback);\n callback();\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n seen_callbacks.clear();\n set_current_component(saved_component);\n}\nfunction update($$) {\n if ($$.fragment !== null) {\n $$.update();\n run_all($$.before_update);\n const dirty = $$.dirty;\n $$.dirty = [-1];\n $$.fragment && $$.fragment.p($$.ctx, dirty);\n $$.after_update.forEach(add_render_callback);\n }\n}\nfunction flush_render_callbacks(fns) {\n const filtered = [];\n const targets = [];\n render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));\n targets.forEach((c) => c());\n render_callbacks = filtered;\n}\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? \"intro\" : \"outro\"}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach2, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach2)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n } else if (callback) {\n callback();\n }\n}\nconst null_transition = {duration: 0};\nfunction create_bidirectional_transition(node, fn, params, intro) {\n const options = {direction: \"both\"};\n let config = fn(node, params, options);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init2(program, duration) {\n const d = program.b - t;\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const {delay = 0, duration = 300, easing = identity, tick: tick2 = noop, css} = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n } else {\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick2(0, 1);\n running_program = init2(program, duration);\n add_render_callback(() => dispatch(node, b, \"start\"));\n loop((now2) => {\n if (pending_program && now2 > pending_program.start) {\n running_program = init2(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, \"start\");\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now2 >= running_program.end) {\n tick2(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, \"end\");\n if (!pending_program) {\n if (running_program.b) {\n clear_animation();\n } else {\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n } else if (now2 >= running_program.start) {\n const p = now2 - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick2(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n config = config(options);\n go(b);\n });\n } else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\nfunction handle_promise(promise2, info) {\n const token = info.token = {};\n function update2(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== void 0) {\n child_ctx = child_ctx.slice();\n child_ctx[key] = value;\n }\n const block = type && (info.current = type)(child_ctx);\n let needs_flush = false;\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block2, i) => {\n if (i !== index && block2) {\n group_outros();\n transition_out(block2, 1, 1, () => {\n if (info.blocks[i] === block2) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\n });\n } else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n needs_flush = true;\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n if (needs_flush) {\n flush();\n }\n }\n if (is_promise(promise2)) {\n const current_component2 = get_current_component();\n promise2.then((value) => {\n set_current_component(current_component2);\n update2(info.then, 1, info.value, value);\n set_current_component(null);\n }, (error) => {\n set_current_component(current_component2);\n update2(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n if (info.current !== info.pending) {\n update2(info.pending, 0);\n return true;\n }\n } else {\n if (info.current !== info.then) {\n update2(info.then, 1, info.value, promise2);\n return true;\n }\n info.resolved = promise2;\n }\n}\nfunction update_await_block_branch(info, ctx, dirty) {\n const child_ctx = ctx.slice();\n const {resolved} = info;\n if (info.current === info.then) {\n child_ctx[info.value] = resolved;\n }\n if (info.current === info.catch) {\n child_ctx[info.error] = resolved;\n }\n info.block.p(child_ctx, dirty);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n const updates = [];\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n } else if (dynamic) {\n updates.push(() => block.p(child_ctx, dirty));\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert2(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n next = new_block.first;\n o--;\n n--;\n } else if (!new_lookup.has(old_key)) {\n destroy(old_block, lookup);\n o--;\n } else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert2(new_block);\n } else if (did_move.has(old_key)) {\n o--;\n } else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert2(new_block);\n } else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert2(new_blocks[n - 1]);\n run_all(updates);\n return new_blocks;\n}\nfunction get_spread_update(levels, updates) {\n const update2 = {};\n const to_null_out = {};\n const accounted_for = {$$scope: 1};\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update2[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n } else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update2))\n update2[key] = void 0;\n }\n return update2;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === \"object\" && spread_props !== null ? spread_props : {};\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction mount_component(component, target, anchor, customElement) {\n const {fragment, after_update} = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n add_render_callback(() => {\n const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);\n if (component.$$.on_destroy) {\n component.$$.on_destroy.push(...new_on_destroy);\n } else {\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n }\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n const $$ = component.$$;\n if ($$.fragment !== null) {\n flush_render_callbacks($$.after_update);\n run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n $$.on_destroy = $$.fragment = null;\n $$.ctx = [];\n }\n}\nfunction make_dirty(component, i) {\n if (component.$$.dirty[0] === -1) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty.fill(0);\n }\n component.$$.dirty[i / 31 | 0] |= 1 << i % 31;\n}\nfunction init(component, options, instance, create_fragment, not_equal2, props, append_styles2, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: [],\n props,\n update: noop,\n not_equal: not_equal2,\n bound: blank_object(),\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),\n callbacks: blank_object(),\n dirty,\n skip_bound: false,\n root: options.target || parent_component.$$.root\n };\n append_styles2 && append_styles2($$.root);\n let ready = false;\n $$.ctx = instance ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal2($$.ctx[i], $$.ctx[i] = value)) {\n if (!$$.skip_bound && $$.bound[i])\n $$.bound[i](value);\n if (ready)\n make_dirty(component, i);\n }\n return ret;\n }) : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n const nodes = children(options.target);\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n } else {\n $$.fragment && $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor, options.customElement);\n flush();\n }\n set_current_component(parent_component);\n}\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n if (!is_function(callback)) {\n return noop;\n }\n const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set($$props) {\n if (this.$$set && !is_empty($$props)) {\n this.$$.skip_bound = true;\n this.$$set($$props);\n this.$$.skip_bound = false;\n }\n }\n}\n\nexport { globals as $, update_slot_base as A, get_all_dirty_from_scope as B, get_slot_changes as C, create_slot as D, action_destroyer as E, is_function as F, run_all as G, tick as H, binding_callbacks as I, assign as J, set_attributes as K, get_spread_update as L, compute_rest_props as M, getContext as N, component_subscribe as O, exclude_internal_props as P, empty as Q, handle_promise as R, SvelteComponent as S, update_await_block_branch as T, construct_svelte_component as U, get_spread_object as V, setContext as W, subscribe as X, identity as Y, add_render_callback as Z, create_bidirectional_transition as _, onDestroy as a, prevent_default as a0, set_input_value as a1, src_url_equal as a2, set_data as a3, text as a4, destroy_each as a5, init_binding_group as a6, select_option as a7, select_value as a8, append_styles as b, createEventDispatcher as c, attr as d, element as e, insert as f, detach as g, bubble as h, init as i, create_component as j, space as k, listen as l, mount_component as m, noop as n, onMount as o, append as p, transition_in as q, transition_out as r, safe_not_equal as s, toggle_class as t, destroy_component as u, group_outros as v, update_keyed_each as w, check_outros as x, outro_and_destroy_block as y, set_style as z };\n", "import * as __SNOWPACK_ENV__ from '../_snowpack/env.js';\n\nexport function getShopifyStoreAddress() {\n let url = __SNOWPACK_ENV__.SNOWPACK_PUBLIC_SHOPIFY_ADDRESS\n\n if (!url) {\n console.log(\"ERROR: SNOWPACK_PUBLIC_SHOPIFY_ADDRESS env var not correctly configured.\")\n url = \"http://localhost:3000\"\n }\n\n return url;\n}\n\nexport function getStorefrontToken() {\n let token = __SNOWPACK_ENV__.SNOWPACK_PUBLIC_SHOPIFY_TOKEN\n\n if (!token) {\n console.log(\"ERROR: SNOWPACK_PUBLIC_SHOPIFY_TOKEN env var not correctly configured.\")\n token = \"token\"\n }\n\n return token;\n}\n\nexport function getSavedCheckoutId() {\n return window.localStorage.getItem(\"checkoutId\");\n}\n\nexport function setSavedCheckoutId(checkoutId) {\n window.localStorage.setItem(\"checkoutId\", checkoutId);\n}\n\nexport function isDevelopment() {\n return __SNOWPACK_ENV__.MODE === 'development';\n}\n\nexport function isMobile() {\n let check = false;\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);\n return check;\n};\n", "import { n as noop, s as safe_not_equal, X as subscribe, G as run_all, F as is_function } from './index-c07ea359.js';\n\nconst subscriber_queue = [];\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) {\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe2(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0 && stop) {\n stop();\n stop = null;\n }\n };\n }\n return {set, update, subscribe: subscribe2};\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single ? [stores] : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let started = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n } else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => subscribe(store, (value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (started) {\n sync();\n }\n }, () => {\n pending |= 1 << i;\n }));\n started = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n started = false;\n };\n });\n}\n\nexport { derived as d, writable as w };\n", "import { S as SvelteComponent, i as init, s as safe_not_equal, D as create_slot, J as assign, e as element, K as set_attributes, f as insert, l as listen, A as update_slot_base, B as get_all_dirty_from_scope, C as get_slot_changes, L as get_spread_update, q as transition_in, r as transition_out, g as detach, M as compute_rest_props, N as getContext, O as component_subscribe, c as createEventDispatcher, P as exclude_internal_props, Q as empty, v as group_outros, x as check_outros, a as onDestroy, R as handle_promise, T as update_await_block_branch, n as noop, U as construct_svelte_component, j as create_component, m as mount_component, V as get_spread_object, u as destroy_component, W as setContext, o as onMount } from './common/index-c07ea359.js';\nimport { w as writable, d as derived } from './common/index-110b9d63.js';\n\nconst LOCATION = {};\nconst ROUTER = {};\nconst HISTORY = {};\n\n/**\n * Adapted from https://github.com/reach/router/blob/b60e6dd781d5d3a4bdaaf4de665649c0f6a7e78d/src/lib/utils.js\n * https://github.com/reach/router/blob/master/LICENSE\n */\n\nconst PARAM = /^:(.+)/;\nconst SEGMENT_POINTS = 4;\nconst STATIC_POINTS = 3;\nconst DYNAMIC_POINTS = 2;\nconst SPLAT_PENALTY = 1;\nconst ROOT_POINTS = 1;\n\n/**\n * Split up the URI into segments delimited by `/`\n * Strip starting/ending `/`\n * @param {string} uri\n * @return {string[]}\n */\nconst segmentize = (uri) => uri.replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n/**\n * Strip `str` of potential start and end `/`\n * @param {string} string\n * @return {string}\n */\nconst stripSlashes = (string) => string.replace(/(^\\/+|\\/+$)/g, \"\");\n/**\n * Score a route depending on how its individual segments look\n * @param {object} route\n * @param {number} index\n * @return {object}\n */\nconst rankRoute = (route, index) => {\n const score = route.default\n ? 0\n : segmentize(route.path).reduce((score, segment) => {\n score += SEGMENT_POINTS;\n\n if (segment === \"\") {\n score += ROOT_POINTS;\n } else if (PARAM.test(segment)) {\n score += DYNAMIC_POINTS;\n } else if (segment[0] === \"*\") {\n score -= SEGMENT_POINTS + SPLAT_PENALTY;\n } else {\n score += STATIC_POINTS;\n }\n\n return score;\n }, 0);\n\n return { route, score, index };\n};\n/**\n * Give a score to all routes and sort them on that\n * If two routes have the exact same score, we go by index instead\n * @param {object[]} routes\n * @return {object[]}\n */\nconst rankRoutes = (routes) =>\n routes\n .map(rankRoute)\n .sort((a, b) =>\n a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index\n );\n/**\n * Ranks and picks the best route to match. Each segment gets the highest\n * amount of points, then the type of segment gets an additional amount of\n * points where\n *\n * static > dynamic > splat > root\n *\n * This way we don't have to worry about the order of our routes, let the\n * computers do it.\n *\n * A route looks like this\n *\n * { path, default, value }\n *\n * And a returned match looks like:\n *\n * { route, params, uri }\n *\n * @param {object[]} routes\n * @param {string} uri\n * @return {?object}\n */\nconst pick = (routes, uri) => {\n let match;\n let default_;\n\n const [uriPathname] = uri.split(\"?\");\n const uriSegments = segmentize(uriPathname);\n const isRootUri = uriSegments[0] === \"\";\n const ranked = rankRoutes(routes);\n\n for (let i = 0, l = ranked.length; i < l; i++) {\n const route = ranked[i].route;\n let missed = false;\n\n if (route.default) {\n default_ = {\n route,\n params: {},\n uri,\n };\n continue;\n }\n\n const routeSegments = segmentize(route.path);\n const params = {};\n const max = Math.max(uriSegments.length, routeSegments.length);\n let index = 0;\n\n for (; index < max; index++) {\n const routeSegment = routeSegments[index];\n const uriSegment = uriSegments[index];\n\n if (routeSegment && routeSegment[0] === \"*\") {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/* or /files/*splatname\n const splatName =\n routeSegment === \"*\" ? \"*\" : routeSegment.slice(1);\n\n params[splatName] = uriSegments\n .slice(index)\n .map(decodeURIComponent)\n .join(\"/\");\n break;\n }\n\n if (typeof uriSegment === \"undefined\") {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n const dynamicMatch = PARAM.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n const value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route,\n params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\"),\n };\n break;\n }\n }\n\n return match || default_ || null;\n};\n/**\n * Add the query to the pathname if a query is given\n * @param {string} pathname\n * @param {string} [query]\n * @return {string}\n */\nconst addQuery = (pathname, query) => pathname + (query ? `?${query}` : \"\");\n/**\n * Resolve URIs as though every path is a directory, no files. Relative URIs\n * in the browser can feel awkward because not only can you be \"in a directory\",\n * you can be \"at a file\", too. For example:\n *\n * browserSpecResolve('foo', '/bar/') => /bar/foo\n * browserSpecResolve('foo', '/bar') => /foo\n *\n * But on the command line of a file system, it's not as complicated. You can't\n * `cd` from a file, only directories. This way, links have to know less about\n * their current path. To go deeper you can do this:\n *\n * \n * // instead of\n * \n *\n * Just like `cd`, if you want to go deeper from the command line, you do this:\n *\n * cd deeper\n * # not\n * cd $(pwd)/deeper\n *\n * By treating every path as a directory, linking to relative paths should\n * require less contextual information and (fingers crossed) be more intuitive.\n * @param {string} to\n * @param {string} base\n * @return {string}\n */\nconst resolve = (to, base) => {\n // /foo/bar, /baz/qux => /foo/bar\n if (to.startsWith(\"/\")) return to;\n\n const [toPathname, toQuery] = to.split(\"?\");\n const [basePathname] = base.split(\"?\");\n const toSegments = segmentize(toPathname);\n const baseSegments = segmentize(basePathname);\n\n // ?a=b, /users?b=c => /users?a=b\n if (toSegments[0] === \"\") return addQuery(basePathname, toQuery);\n\n // profile, /users/789 => /users/789/profile\n\n if (!toSegments[0].startsWith(\".\")) {\n const pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n }\n\n // ./ , /users/123 => /users/123\n // ../ , /users/123 => /users\n // ../.. , /users/123 => /\n // ../../one, /a/b/c/d => /a/b/one\n // .././one , /a/b/c/d => /a/b/c/one\n const allSegments = baseSegments.concat(toSegments);\n const segments = [];\n\n allSegments.forEach((segment) => {\n if (segment === \"..\") segments.pop();\n else if (segment !== \".\") segments.push(segment);\n });\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n};\n/**\n * Combines the `basepath` and the `path` into one path.\n * @param {string} basepath\n * @param {string} path\n */\nconst combinePaths = (basepath, path) =>\n `${stripSlashes(\n path === \"/\"\n ? basepath\n : `${stripSlashes(basepath)}/${stripSlashes(path)}`\n )}/`;\n/**\n * Decides whether a given `event` should result in a navigation or not.\n * @param {object} event\n */\nconst shouldNavigate = (event) =>\n !event.defaultPrevented &&\n event.button === 0 &&\n !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n\nconst canUseDOM = () =>\n typeof window !== \"undefined\" &&\n \"document\" in window &&\n \"location\" in window;\n\n/* node_modules/svelte-routing/src/Link.svelte generated by Svelte v3.59.2 */\nconst get_default_slot_changes = dirty => ({ active: dirty & /*ariaCurrent*/ 4 });\nconst get_default_slot_context = ctx => ({ active: !!/*ariaCurrent*/ ctx[2] });\n\nfunction create_fragment(ctx) {\n\tlet a;\n\tlet current;\n\tlet mounted;\n\tlet dispose;\n\tconst default_slot_template = /*#slots*/ ctx[16].default;\n\tconst default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[15], get_default_slot_context);\n\n\tlet a_levels = [\n\t\t{ href: /*href*/ ctx[0] },\n\t\t{ \"aria-current\": /*ariaCurrent*/ ctx[2] },\n\t\t/*props*/ ctx[1],\n\t\t/*$$restProps*/ ctx[6]\n\t];\n\n\tlet a_data = {};\n\n\tfor (let i = 0; i < a_levels.length; i += 1) {\n\t\ta_data = assign(a_data, a_levels[i]);\n\t}\n\n\treturn {\n\t\tc() {\n\t\t\ta = element(\"a\");\n\t\t\tif (default_slot) default_slot.c();\n\t\t\tset_attributes(a, a_data);\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, a, anchor);\n\n\t\t\tif (default_slot) {\n\t\t\t\tdefault_slot.m(a, null);\n\t\t\t}\n\n\t\t\tcurrent = true;\n\n\t\t\tif (!mounted) {\n\t\t\t\tdispose = listen(a, \"click\", /*onClick*/ ctx[5]);\n\t\t\t\tmounted = true;\n\t\t\t}\n\t\t},\n\t\tp(ctx, [dirty]) {\n\t\t\tif (default_slot) {\n\t\t\t\tif (default_slot.p && (!current || dirty & /*$$scope, ariaCurrent*/ 32772)) {\n\t\t\t\t\tupdate_slot_base(\n\t\t\t\t\t\tdefault_slot,\n\t\t\t\t\t\tdefault_slot_template,\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\t/*$$scope*/ ctx[15],\n\t\t\t\t\t\t!current\n\t\t\t\t\t\t? get_all_dirty_from_scope(/*$$scope*/ ctx[15])\n\t\t\t\t\t\t: get_slot_changes(default_slot_template, /*$$scope*/ ctx[15], dirty, get_default_slot_changes),\n\t\t\t\t\t\tget_default_slot_context\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tset_attributes(a, a_data = get_spread_update(a_levels, [\n\t\t\t\t(!current || dirty & /*href*/ 1) && { href: /*href*/ ctx[0] },\n\t\t\t\t(!current || dirty & /*ariaCurrent*/ 4) && { \"aria-current\": /*ariaCurrent*/ ctx[2] },\n\t\t\t\tdirty & /*props*/ 2 && /*props*/ ctx[1],\n\t\t\t\tdirty & /*$$restProps*/ 64 && /*$$restProps*/ ctx[6]\n\t\t\t]));\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\ttransition_in(default_slot, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\ttransition_out(default_slot, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(a);\n\t\t\tif (default_slot) default_slot.d(detaching);\n\t\t\tmounted = false;\n\t\t\tdispose();\n\t\t}\n\t};\n}\n\nfunction instance($$self, $$props, $$invalidate) {\n\tlet ariaCurrent;\n\tconst omit_props_names = [\"to\",\"replace\",\"state\",\"getProps\"];\n\tlet $$restProps = compute_rest_props($$props, omit_props_names);\n\tlet $location;\n\tlet $base;\n\tlet { $$slots: slots = {}, $$scope } = $$props;\n\tlet { to = \"#\" } = $$props;\n\tlet { replace = false } = $$props;\n\tlet { state = {} } = $$props;\n\tlet { getProps = () => ({}) } = $$props;\n\tconst location = getContext(LOCATION);\n\tcomponent_subscribe($$self, location, value => $$invalidate(13, $location = value));\n\tconst { base } = getContext(ROUTER);\n\tcomponent_subscribe($$self, base, value => $$invalidate(14, $base = value));\n\tconst { navigate } = getContext(HISTORY);\n\tconst dispatch = createEventDispatcher();\n\tlet href, isPartiallyCurrent, isCurrent, props;\n\n\tconst onClick = event => {\n\t\tdispatch(\"click\", event);\n\n\t\tif (shouldNavigate(event)) {\n\t\t\tevent.preventDefault();\n\n\t\t\t// Don't push another entry to the history stack when the user\n\t\t\t// clicks on a Link to the page they are currently on.\n\t\t\tconst shouldReplace = $location.pathname === href || replace;\n\n\t\t\tnavigate(href, { state, replace: shouldReplace });\n\t\t}\n\t};\n\n\t$$self.$$set = $$new_props => {\n\t\t$$props = assign(assign({}, $$props), exclude_internal_props($$new_props));\n\t\t$$invalidate(6, $$restProps = compute_rest_props($$props, omit_props_names));\n\t\tif ('to' in $$new_props) $$invalidate(7, to = $$new_props.to);\n\t\tif ('replace' in $$new_props) $$invalidate(8, replace = $$new_props.replace);\n\t\tif ('state' in $$new_props) $$invalidate(9, state = $$new_props.state);\n\t\tif ('getProps' in $$new_props) $$invalidate(10, getProps = $$new_props.getProps);\n\t\tif ('$$scope' in $$new_props) $$invalidate(15, $$scope = $$new_props.$$scope);\n\t};\n\n\t$$self.$$.update = () => {\n\t\tif ($$self.$$.dirty & /*to, $base*/ 16512) {\n\t\t\t $$invalidate(0, href = to === \"/\" ? $base.uri : resolve(to, $base.uri));\n\t\t}\n\n\t\tif ($$self.$$.dirty & /*$location, href*/ 8193) {\n\t\t\t $$invalidate(11, isPartiallyCurrent = $location.pathname.startsWith(href));\n\t\t}\n\n\t\tif ($$self.$$.dirty & /*href, $location*/ 8193) {\n\t\t\t $$invalidate(12, isCurrent = href === $location.pathname);\n\t\t}\n\n\t\tif ($$self.$$.dirty & /*isCurrent*/ 4096) {\n\t\t\t $$invalidate(2, ariaCurrent = isCurrent ? \"page\" : undefined);\n\t\t}\n\n\t\t $$invalidate(1, props = getProps({\n\t\t\tlocation: $location,\n\t\t\thref,\n\t\t\tisPartiallyCurrent,\n\t\t\tisCurrent,\n\t\t\texistingProps: $$restProps\n\t\t}));\n\t};\n\n\treturn [\n\t\thref,\n\t\tprops,\n\t\tariaCurrent,\n\t\tlocation,\n\t\tbase,\n\t\tonClick,\n\t\t$$restProps,\n\t\tto,\n\t\treplace,\n\t\tstate,\n\t\tgetProps,\n\t\tisPartiallyCurrent,\n\t\tisCurrent,\n\t\t$location,\n\t\t$base,\n\t\t$$scope,\n\t\tslots\n\t];\n}\n\nclass Link extends SvelteComponent {\n\tconstructor(options) {\n\t\tsuper();\n\n\t\tinit(this, options, instance, create_fragment, safe_not_equal, {\n\t\t\tto: 7,\n\t\t\treplace: 8,\n\t\t\tstate: 9,\n\t\t\tgetProps: 10\n\t\t});\n\t}\n}\n\n/* node_modules/svelte-routing/src/Route.svelte generated by Svelte v3.59.2 */\nconst get_default_slot_changes$1 = dirty => ({ params: dirty & /*routeParams*/ 4 });\nconst get_default_slot_context$1 = ctx => ({ params: /*routeParams*/ ctx[2] });\n\n// (42:0) {#if $activeRoute && $activeRoute.route === route}\nfunction create_if_block(ctx) {\n\tlet current_block_type_index;\n\tlet if_block;\n\tlet if_block_anchor;\n\tlet current;\n\tconst if_block_creators = [create_if_block_1, create_else_block];\n\tconst if_blocks = [];\n\n\tfunction select_block_type(ctx, dirty) {\n\t\tif (/*component*/ ctx[0]) return 0;\n\t\treturn 1;\n\t}\n\n\tcurrent_block_type_index = select_block_type(ctx);\n\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\n\treturn {\n\t\tc() {\n\t\t\tif_block.c();\n\t\t\tif_block_anchor = empty();\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tif_blocks[current_block_type_index].m(target, anchor);\n\t\t\tinsert(target, if_block_anchor, anchor);\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tlet previous_block_index = current_block_type_index;\n\t\t\tcurrent_block_type_index = select_block_type(ctx);\n\n\t\t\tif (current_block_type_index === previous_block_index) {\n\t\t\t\tif_blocks[current_block_type_index].p(ctx, dirty);\n\t\t\t} else {\n\t\t\t\tgroup_outros();\n\n\t\t\t\ttransition_out(if_blocks[previous_block_index], 1, 1, () => {\n\t\t\t\t\tif_blocks[previous_block_index] = null;\n\t\t\t\t});\n\n\t\t\t\tcheck_outros();\n\t\t\t\tif_block = if_blocks[current_block_type_index];\n\n\t\t\t\tif (!if_block) {\n\t\t\t\t\tif_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);\n\t\t\t\t\tif_block.c();\n\t\t\t\t} else {\n\t\t\t\t\tif_block.p(ctx, dirty);\n\t\t\t\t}\n\n\t\t\t\ttransition_in(if_block, 1);\n\t\t\t\tif_block.m(if_block_anchor.parentNode, if_block_anchor);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\ttransition_in(if_block);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\ttransition_out(if_block);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif_blocks[current_block_type_index].d(detaching);\n\t\t\tif (detaching) detach(if_block_anchor);\n\t\t}\n\t};\n}\n\n// (51:4) {:else}\nfunction create_else_block(ctx) {\n\tlet current;\n\tconst default_slot_template = /*#slots*/ ctx[8].default;\n\tconst default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[7], get_default_slot_context$1);\n\n\treturn {\n\t\tc() {\n\t\t\tif (default_slot) default_slot.c();\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tif (default_slot) {\n\t\t\t\tdefault_slot.m(target, anchor);\n\t\t\t}\n\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(ctx, dirty) {\n\t\t\tif (default_slot) {\n\t\t\t\tif (default_slot.p && (!current || dirty & /*$$scope, routeParams*/ 132)) {\n\t\t\t\t\tupdate_slot_base(\n\t\t\t\t\t\tdefault_slot,\n\t\t\t\t\t\tdefault_slot_template,\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\t/*$$scope*/ ctx[7],\n\t\t\t\t\t\t!current\n\t\t\t\t\t\t? get_all_dirty_from_scope(/*$$scope*/ ctx[7])\n\t\t\t\t\t\t: get_slot_changes(default_slot_template, /*$$scope*/ ctx[7], dirty, get_default_slot_changes$1),\n\t\t\t\t\t\tget_default_slot_context$1\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\ttransition_in(default_slot, local);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\ttransition_out(default_slot, local);\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (default_slot) default_slot.d(detaching);\n\t\t}\n\t};\n}\n\n// (43:4) {#if component}\nfunction create_if_block_1(ctx) {\n\tlet await_block_anchor;\n\tlet promise;\n\tlet current;\n\n\tlet info = {\n\t\tctx,\n\t\tcurrent: null,\n\t\ttoken: null,\n\t\thasCatch: false,\n\t\tpending: create_pending_block,\n\t\tthen: create_then_block,\n\t\tcatch: create_catch_block,\n\t\tvalue: 12,\n\t\tblocks: [,,,]\n\t};\n\n\thandle_promise(promise = /*component*/ ctx[0], info);\n\n\treturn {\n\t\tc() {\n\t\t\tawait_block_anchor = empty();\n\t\t\tinfo.block.c();\n\t\t},\n\t\tm(target, anchor) {\n\t\t\tinsert(target, await_block_anchor, anchor);\n\t\t\tinfo.block.m(target, info.anchor = anchor);\n\t\t\tinfo.mount = () => await_block_anchor.parentNode;\n\t\t\tinfo.anchor = await_block_anchor;\n\t\t\tcurrent = true;\n\t\t},\n\t\tp(new_ctx, dirty) {\n\t\t\tctx = new_ctx;\n\t\t\tinfo.ctx = ctx;\n\n\t\t\tif (dirty & /*component*/ 1 && promise !== (promise = /*component*/ ctx[0]) && handle_promise(promise, info)) ; else {\n\t\t\t\tupdate_await_block_branch(info, ctx, dirty);\n\t\t\t}\n\t\t},\n\t\ti(local) {\n\t\t\tif (current) return;\n\t\t\ttransition_in(info.block);\n\t\t\tcurrent = true;\n\t\t},\n\t\to(local) {\n\t\t\tfor (let i = 0; i < 3; i += 1) {\n\t\t\t\tconst block = info.blocks[i];\n\t\t\t\ttransition_out(block);\n\t\t\t}\n\n\t\t\tcurrent = false;\n\t\t},\n\t\td(detaching) {\n\t\t\tif (detaching) detach(await_block_anchor);\n\t\t\tinfo.block.d(detaching);\n\t\t\tinfo.token = null;\n\t\t\tinfo = null;\n\t\t}\n\t};\n}\n\n// (1:0)