{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal/index.mjs","../../node_modules/svelte/store/index.mjs","../../src/store.ts","../../src/library/helpers/Logger.ts","../../src/init.ts","../../node_modules/sizzle/dist/sizzle.js","../../src/library/helpers/Caller.ts","../../src/library/resources/Countries.ts","../../src/library/external/Aventri.ts","../../src/components/ErrorMessage.svelte","../../src/components-ui/Loading.svelte","../../src/components-ui/VisitorRecommendations.svelte","../../src/library/external/Tracking.ts","../../src/components-scripts/HideAventriFields.svelte","../../src/components-scripts/SaveURLParams.svelte","../../node_modules/youtube-iframe/index.js","../../src/components-scripts/MediaTracking.svelte","../../src/library/external/AtlasQueries.ts","../../src/library/external/Atlas.ts","../../src/library/helpers/Html.ts","../../src/library/Attendee.ts","../../src/components-scripts/VisitorRegistration.svelte","../../src/main.ts"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\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.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\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}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction is_empty(obj) {\n return Object.keys(obj).length === 0;\n}\nfunction validate_store(store, name) {\n if (store != null && typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\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 get_store_value(store) {\n let value;\n subscribe(store, _ => value = _)();\n return value;\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\n ? assign($$scope.ctx.slice(), definition[1](fn(ctx)))\n : $$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 === undefined) {\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(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_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 update_slot_spread(slot, slot_definition, ctx, $$scope, dirty, get_slot_changes_fn, get_slot_spread_changes_fn, get_slot_context_fn) {\n const slot_changes = get_slot_spread_changes_fn(dirty) | get_slot_changes(slot_definition, $$scope, dirty, get_slot_changes_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 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 compute_slots(slots) {\n const result = {};\n for (const key in slots) {\n result[key] = true;\n }\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\nfunction null_to_empty(value) {\n return value == null ? '' : value;\n}\nfunction set_store_value(store, ret, value = ret) {\n store.set(value);\n return ret;\n}\nconst has_prop = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);\nfunction action_destroyer(action_result) {\n return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = is_client ? cb => requestAnimationFrame(cb) : noop;\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nfunction run_tasks(now) {\n tasks.forEach(task => {\n if (!task.c(now)) {\n tasks.delete(task);\n task.f();\n }\n });\n if (tasks.size !== 0)\n raf(run_tasks);\n}\n/**\n * For testing purposes only!\n */\nfunction clear_loops() {\n tasks.clear();\n}\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\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}\n\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\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 element_is(name, is) {\n return document.createElement(name, { is });\n}\nfunction object_without_properties(obj, exclude) {\n const target = {};\n for (const k in obj) {\n if (has_prop(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', 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 // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction self(fn) {\n return function (event) {\n // @ts-ignore\n if (event.target === this)\n 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}\nfunction set_attributes(node, attributes) {\n // @ts-ignore\n const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);\n for (const key in attributes) {\n if (attributes[key] == null) {\n node.removeAttribute(key);\n }\n else if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key === '__value') {\n node.value = node[key] = attributes[key];\n }\n else if (descriptors[key] && descriptors[key].set) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_svg_attributes(node, attributes) {\n for (const key in attributes) {\n attr(node, key, attributes[key]);\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group, __value, checked) {\n const value = new Set();\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.add(group[i].__value);\n }\n if (!checked) {\n value.delete(__value);\n }\n return Array.from(value);\n}\nfunction to_number(value) {\n return value === '' ? null : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction claim_element(nodes, name, attributes, svg) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeName === name) {\n let j = 0;\n const remove = [];\n while (j < node.attributes.length) {\n const attribute = node.attributes[j++];\n if (!attributes[attribute.name]) {\n remove.push(attribute.name);\n }\n }\n for (let k = 0; k < remove.length; k++) {\n node.removeAttribute(remove[k]);\n }\n return nodes.splice(i, 1)[0];\n }\n }\n return svg ? svg_element(name) : element(name);\n}\nfunction claim_text(nodes, data) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 3) {\n node.data = '' + data;\n return nodes.splice(i, 1)[0];\n }\n }\n return text(data);\n}\nfunction claim_space(nodes) {\n return claim_text(nodes, ' ');\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.wholeText !== data)\n text.data = data;\n}\nfunction set_input_value(input, value) {\n input.value = value == null ? '' : value;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value, important) {\n node.style.setProperty(key, value, important ? 'important' : '');\n}\nfunction select_option(select, value) {\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}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n// unfortunately this can't be a constant as that wouldn't be tree-shakeable\n// so we cache the result instead\nlet crossorigin;\nfunction is_crossorigin() {\n if (crossorigin === undefined) {\n crossorigin = false;\n try {\n if (typeof window !== 'undefined' && window.parent) {\n void window.parent.document;\n }\n }\n catch (error) {\n crossorigin = true;\n }\n }\n return crossorigin;\n}\nfunction add_resize_listener(node, fn) {\n const computed_style = getComputedStyle(node);\n if (computed_style.position === 'static') {\n node.style.position = 'relative';\n }\n const iframe = element('iframe');\n iframe.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; ' +\n 'overflow: hidden; border: 0; opacity: 0; pointer-events: none; z-index: -1;');\n iframe.setAttribute('aria-hidden', 'true');\n iframe.tabIndex = -1;\n const crossorigin = is_crossorigin();\n let unsubscribe;\n if (crossorigin) {\n iframe.src = \"data:text/html,\";\n unsubscribe = listen(window, 'message', (event) => {\n if (event.source === iframe.contentWindow)\n fn();\n });\n }\n else {\n iframe.src = 'about:blank';\n iframe.onload = () => {\n unsubscribe = listen(iframe.contentWindow, 'resize', fn);\n };\n }\n append(node, iframe);\n return () => {\n if (crossorigin) {\n unsubscribe();\n }\n else if (unsubscribe && iframe.contentWindow) {\n unsubscribe();\n }\n detach(iframe);\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, false, false, detail);\n return e;\n}\nfunction query_selector_all(selector, parent = document.body) {\n return Array.from(parent.querySelectorAll(selector));\n}\nclass HtmlTag {\n constructor(anchor = null) {\n this.a = anchor;\n this.e = this.n = null;\n }\n m(html, target, anchor = null) {\n if (!this.e) {\n this.e = element(target.nodeName);\n this.t = target;\n this.h(html);\n }\n this.i(anchor);\n }\n h(html) {\n this.e.innerHTML = html;\n this.n = Array.from(this.e.childNodes);\n }\n i(anchor) {\n for (let i = 0; i < this.n.length; i += 1) {\n insert(this.t, this.n[i], anchor);\n }\n }\n p(html) {\n this.d();\n this.h(html);\n this.i(this.a);\n }\n d() {\n this.n.forEach(detach);\n }\n}\nfunction attribute_to_object(attributes) {\n const result = {};\n for (const attribute of attributes) {\n result[attribute.name] = attribute.value;\n }\n return result;\n}\nfunction get_custom_elements_slots(element) {\n const result = {};\n element.childNodes.forEach((node) => {\n result[node.slot || 'default'] = true;\n });\n return result;\n}\n\nconst active_docs = new Set();\nlet active = 0;\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\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 = node.ownerDocument;\n active_docs.add(doc);\n const stylesheet = doc.__svelte_stylesheet || (doc.__svelte_stylesheet = doc.head.appendChild(element('style')).sheet);\n const current_rules = doc.__svelte_rules || (doc.__svelte_rules = {});\n if (!current_rules[name]) {\n current_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\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n );\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 active_docs.forEach(doc => {\n const stylesheet = doc.__svelte_stylesheet;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n doc.__svelte_rules = {};\n });\n active_docs.clear();\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\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 beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.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) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\nfunction hasContext(key) {\n return get_current_component().$$.context.has(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach(fn => fn(event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = 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}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nlet flushing = false;\nconst seen_callbacks = new Set();\nfunction flush() {\n if (flushing)\n return;\n flushing = true;\n do {\n // first, call beforeUpdate functions\n // and update components\n for (let i = 0; i < dirty_components.length; i += 1) {\n const component = dirty_components[i];\n set_current_component(component);\n update(component.$$);\n }\n set_current_component(null);\n dirty_components.length = 0;\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n // ...so guard against infinite loops\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 flushing = false;\n seen_callbacks.clear();\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}\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 // parent group\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, detach, 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 (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nconst null_transition = { duration: 0 };\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config || null_transition;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\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 init(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 = noop, css } = config || null_transition;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program || pending_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(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 (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(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 // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = value;\n let child_ctx = info.ctx;\n if (key !== undefined) {\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((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n if (info.blocks[i] === block) {\n info.blocks[i] = null;\n }\n });\n check_outros();\n }\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(promise)) {\n const current_component = get_current_component();\n promise.then(value => {\n set_current_component(current_component);\n update(info.then, 1, info.value, value);\n set_current_component(null);\n }, error => {\n set_current_component(current_component);\n update(info.catch, 2, info.error, error);\n set_current_component(null);\n if (!info.hasCatch) {\n throw error;\n }\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = promise;\n }\n}\n\nconst globals = (typeof window !== 'undefined'\n ? window\n : typeof globalThis !== 'undefined'\n ? globalThis\n : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\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 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 }\n else if (dynamic) {\n 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 insert(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 // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\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 insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction validate_each_keys(ctx, list, get_context, get_key) {\n const keys = new Set();\n for (let i = 0; i < list.length; i++) {\n const key = get_key(get_context(ctx, list, i));\n if (keys.has(key)) {\n throw new Error('Cannot have duplicate keys in a keyed each');\n }\n keys.add(key);\n }\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\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 update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\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 update))\n update[key] = undefined;\n }\n return update;\n}\nfunction get_spread_object(spread_props) {\n return typeof spread_props === 'object' && spread_props !== null ? spread_props : {};\n}\n\n// source: https://html.spec.whatwg.org/multipage/indices.html\nconst boolean_attributes = new Set([\n 'allowfullscreen',\n 'allowpaymentrequest',\n 'async',\n 'autofocus',\n 'autoplay',\n 'checked',\n 'controls',\n 'default',\n 'defer',\n 'disabled',\n 'formnovalidate',\n 'hidden',\n 'ismap',\n 'loop',\n 'multiple',\n 'muted',\n 'nomodule',\n 'novalidate',\n 'open',\n 'playsinline',\n 'readonly',\n 'required',\n 'reversed',\n 'selected'\n]);\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args, classes_to_add) {\n const attributes = Object.assign({}, ...args);\n if (classes_to_add) {\n if (attributes.class == null) {\n attributes.class = classes_to_add;\n }\n else {\n attributes.class += ' ' + classes_to_add;\n }\n }\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === true)\n str += ' ' + name;\n else if (boolean_attributes.has(name.toLowerCase())) {\n if (value)\n str += ' ' + name;\n }\n else if (value != null) {\n str += ` ${name}=\"${String(value).replace(/\"/g, '"').replace(/'/g, ''')}\"`;\n }\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots, context) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(parent_component ? parent_component.$$.context : context || []),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, { $$slots = {}, context = new Map() } = {}) => {\n on_destroy = [];\n const result = { title: '', head: '', css: new Set() };\n const html = $$render(result, props, {}, $$slots, context);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.title + result.head\n };\n },\n $$render\n };\n}\nfunction add_attribute(name, value, boolean) {\n if (value == null || (boolean && !value))\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(escape(value)) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : '';\n}\n\nfunction bind(component, name, callback) {\n const index = component.$$.props[name];\n if (index !== undefined) {\n component.$$.bound[index] = callback;\n callback(component.$$.ctx[index]);\n }\n}\nfunction create_component(block) {\n block && block.c();\n}\nfunction claim_component(block, parent_nodes) {\n block && block.l(parent_nodes);\n}\nfunction mount_component(component, target, anchor, customElement) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment && fragment.m(target, anchor);\n if (!customElement) {\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\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 run_all($$.on_destroy);\n $$.fragment && $$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\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_equal, props, dirty = [-1]) {\n const parent_component = current_component;\n set_current_component(component);\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n on_disconnect: [],\n before_update: [],\n after_update: [],\n context: new Map(parent_component ? parent_component.$$.context : options.context || []),\n // everything else\n callbacks: blank_object(),\n dirty,\n skip_bound: false\n };\n let ready = false;\n $$.ctx = instance\n ? instance(component, options.props || {}, (i, ret, ...rest) => {\n const value = rest.length ? rest[0] : ret;\n if ($$.ctx && not_equal($$.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 : [];\n $$.update();\n ready = true;\n run_all($$.before_update);\n // `false` as a special case of no DOM component\n $$.fragment = create_fragment ? create_fragment($$.ctx) : false;\n if (options.target) {\n if (options.hydrate) {\n const nodes = children(options.target);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment && $$.fragment.l(nodes);\n nodes.forEach(detach);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\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}\nlet SvelteElement;\nif (typeof HTMLElement === 'function') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n const { on_mount } = this.$$;\n this.$$.on_disconnect = on_mount.map(run).filter(is_function);\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n disconnectedCallback() {\n run_all(this.$$.on_disconnect);\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\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}\n/**\n * Base class for Svelte components. Used when dev=false.\n */\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\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\nfunction dispatch_dev(type, detail) {\n document.dispatchEvent(custom_event(type, Object.assign({ version: '3.37.0' }, detail)));\n}\nfunction append_dev(target, node) {\n dispatch_dev('SvelteDOMInsert', { target, node });\n append(target, node);\n}\nfunction insert_dev(target, node, anchor) {\n dispatch_dev('SvelteDOMInsert', { target, node, anchor });\n insert(target, node, anchor);\n}\nfunction detach_dev(node) {\n dispatch_dev('SvelteDOMRemove', { node });\n detach(node);\n}\nfunction detach_between_dev(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n detach_dev(before.nextSibling);\n }\n}\nfunction detach_before_dev(after) {\n while (after.previousSibling) {\n detach_dev(after.previousSibling);\n }\n}\nfunction detach_after_dev(before) {\n while (before.nextSibling) {\n detach_dev(before.nextSibling);\n }\n}\nfunction listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {\n const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];\n if (has_prevent_default)\n modifiers.push('preventDefault');\n if (has_stop_propagation)\n modifiers.push('stopPropagation');\n dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });\n const dispose = listen(node, event, handler, options);\n return () => {\n dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });\n dispose();\n };\n}\nfunction attr_dev(node, attribute, value) {\n attr(node, attribute, value);\n if (value == null)\n dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });\n else\n dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });\n}\nfunction prop_dev(node, property, value) {\n node[property] = value;\n dispatch_dev('SvelteDOMSetProperty', { node, property, value });\n}\nfunction dataset_dev(node, property, value) {\n node.dataset[property] = value;\n dispatch_dev('SvelteDOMSetDataset', { node, property, value });\n}\nfunction set_data_dev(text, data) {\n data = '' + data;\n if (text.wholeText === data)\n return;\n dispatch_dev('SvelteDOMSetData', { node: text, data });\n text.data = data;\n}\nfunction validate_each_argument(arg) {\n if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {\n let msg = '{#each} only iterates over array-like objects.';\n if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {\n msg += ' You can use a spread to convert this iterable into an array.';\n }\n throw new Error(msg);\n }\n}\nfunction validate_slots(name, slot, keys) {\n for (const slot_key of Object.keys(slot)) {\n if (!~keys.indexOf(slot_key)) {\n console.warn(`<${name}> received an unexpected slot \"${slot_key}\".`);\n }\n }\n}\n/**\n * Base class for Svelte components with some minor dev-enhancements. Used when dev=true.\n */\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(\"'target' is a required option\");\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn('Component was already destroyed'); // eslint-disable-line no-console\n };\n }\n $capture_state() { }\n $inject_state() { }\n}\n/**\n * Base class to create strongly typed Svelte components.\n * This only exists for typing purposes and should be used in `.d.ts` files.\n *\n * ### Example:\n *\n * You have component library on npm called `component-library`, from which\n * you export a component called `MyComponent`. For Svelte+TypeScript users,\n * you want to provide typings. Therefore you create a `index.d.ts`:\n * ```ts\n * import { SvelteComponentTyped } from \"svelte\";\n * export class MyComponent extends SvelteComponentTyped<{foo: string}> {}\n * ```\n * Typing this makes it possible for IDEs like VS Code with the Svelte extension\n * to provide intellisense and to use the component like this in a Svelte file\n * with TypeScript:\n * ```svelte\n * \n * \n * ```\n *\n * #### Why not make this part of `SvelteComponent(Dev)`?\n * Because\n * ```ts\n * class ASubclassOfSvelteComponent extends SvelteComponent<{foo: string}> {}\n * const component: typeof SvelteComponent = ASubclassOfSvelteComponent;\n * ```\n * will throw a type error, so we need to seperate the more strictly typed class.\n */\nclass SvelteComponentTyped extends SvelteComponentDev {\n constructor(options) {\n super(options);\n }\n}\nfunction loop_guard(timeout) {\n const start = Date.now();\n return () => {\n if (Date.now() - start > timeout) {\n throw new Error('Infinite loop detected');\n }\n };\n}\n\nexport { HtmlTag, SvelteComponent, SvelteComponentDev, SvelteComponentTyped, SvelteElement, action_destroyer, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, append_dev, assign, attr, attr_dev, attribute_to_object, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_component, claim_element, claim_space, claim_text, clear_loops, component_subscribe, compute_rest_props, compute_slots, createEventDispatcher, create_animation, create_bidirectional_transition, create_component, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, dataset_dev, debug, destroy_block, destroy_component, destroy_each, detach, detach_after_dev, detach_before_dev, detach_between_dev, detach_dev, dirty_components, dispatch_dev, each, element, element_is, empty, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_current_component, get_custom_elements_slots, get_slot_changes, get_slot_context, get_spread_object, get_spread_update, get_store_value, globals, group_outros, handle_promise, hasContext, has_prop, identity, init, insert, insert_dev, intros, invalid_attribute_name_character, is_client, is_crossorigin, is_empty, is_function, is_promise, listen, listen_dev, loop, loop_guard, missing_component, mount_component, noop, not_equal, now, null_to_empty, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, prop_dev, query_selector_all, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, self, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_data_dev, set_input_type, set_input_value, set_now, set_raf, set_store_value, set_style, set_svg_attributes, space, spread, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, update_slot, update_slot_spread, validate_component, validate_each_argument, validate_each_keys, validate_slots, validate_store, xlink_attr };\n","import { noop, safe_not_equal, subscribe, run_all, is_function } from '../internal/index.mjs';\nexport { get_store_value as get } from '../internal/index.mjs';\n\nconst subscriber_queue = [];\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = [];\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) { // store is ready\n const run_queue = !subscriber_queue.length;\n for (let i = 0; i < subscribers.length; i += 1) {\n const s = subscribers[i];\n s[1]();\n subscriber_queue.push(s, 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 subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.push(subscriber);\n if (subscribers.length === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n const index = subscribers.indexOf(subscriber);\n if (index !== -1) {\n subscribers.splice(index, 1);\n }\n if (subscribers.length === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n return readable(initial_value, (set) => {\n let inited = 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 }\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 (inited) {\n sync();\n }\n }, () => {\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n}\n\nexport { derived, readable, writable };\n","import { writable } from \"svelte/store\";\r\nexport const appConfigStore = writable(null);\r\nexport const attendeeStore = writable(null);\r\nexport const loadingAttendeeStore = writable(\"loading\");\r\nexport const loadingStore = writable({ state: false, message: \"loading\" });\r\nexport const logStore = writable({ messages: [], status: \"OK\", visitor: {} });\r\nexport const youtubePlayersStore = writable({});\r\n","/** @var defaultLogColors the default colors for a log block */\r\nconst defaultLogColors = { bg: \"#1c1c1c\", color: \"#f1f1f1\" };\r\n/**\r\n * return a css for a basic log block\r\n * @param colors custom colors object for logging\r\n * @returns css for log block\r\n */\r\nexport const logTitleCss = ({ bg, color } = defaultLogColors) => {\r\n return `\r\n background-color: ${bg}; \r\n padding: 8px 5px;\r\n margin: 0px; \r\n color: ${color}; \r\n font-family: monospace;\r\n font-weight: 400;\r\n `;\r\n};\r\n/**\r\n * Get a log color css and type text\r\n * @param _type the type of the thing to be logged (script, component)\r\n * @param _error if the it failed to load\r\n */\r\nexport const getLogOptions = (_type = \"\", _error = false, _color = null) => {\r\n let logCss;\r\n let typeText;\r\n let errorLogColor = logTitleCss({ bg: _color ? _color.bg : \"#1d1d1d\", color: \"red\" });\r\n switch (_type) {\r\n case \"script\":\r\n logCss = !_error\r\n ? _color\r\n ? logTitleCss({ bg: _color.bg, color: _color.text })\r\n : logTitleCss({ bg: \"purple\", color: \"#f1f1f1\" })\r\n : errorLogColor;\r\n typeText = \"SCRIPT\";\r\n break;\r\n case \"component\":\r\n logCss = !_error\r\n ? _color\r\n ? logTitleCss({ bg: _color.bg, color: _color.text })\r\n : logTitleCss({ bg: \"midnightblue\", color: \"#f1f1f1\" })\r\n : errorLogColor;\r\n typeText = \"COMPONENT\";\r\n break;\r\n case \"ui\":\r\n logCss = !_error\r\n ? _color\r\n ? logTitleCss({ bg: _color.bg, color: _color.text })\r\n : logTitleCss({ bg: \"slateblue\", color: \"#f1f1f1\" })\r\n : errorLogColor;\r\n typeText = \"UI\";\r\n break;\r\n default:\r\n logCss = !_error ? (_color ? logTitleCss({ bg: _color.bg, color: _color.text }) : logTitleCss()) : errorLogColor;\r\n typeText = \"LIB\";\r\n break;\r\n }\r\n return { logCss, typeText };\r\n};\r\n/**\r\n * Log color coded loaded message\r\n * @param _name the name of the thing to be logged\r\n * @param _type the type of the thing to be logged (script, component)\r\n * @param _error if the it failed to load\r\n */\r\nexport const logLoaded = (_name = \"\", _type = \"\", _error = false, _color = null) => {\r\n let typeOptions = getLogOptions(_type, _error, _color);\r\n let custom = `${typeOptions.typeText ? ` - ${typeOptions.typeText}` : ``}${_name ? ` | ${_name}` : ``}`;\r\n return [`%c|-- RAC${custom} - ${!_error ? \"LOADED\" : \"FAILED LOADING\"}`, typeOptions.logCss];\r\n};\r\n/**\r\n * Log color coded loaded message\r\n * @param _name the name of the thing to be logged\r\n * @param _type the type of the thing to be logged (script, component)\r\n * @param _error if the it failed to load\r\n */\r\nexport const logMessage = (_message = \"\", _name = \"\", _type = \"\", _error = false, _color = null) => {\r\n let typeOptions = getLogOptions(_type, _error, _color);\r\n let custom = `${typeOptions.typeText ? ` - ${typeOptions.typeText}` : ``}${_name ? ` | ${_name}` : ``}`;\r\n return [`%c|-- RAC${custom}\\r\\n${_message}`, typeOptions.logCss];\r\n};\r\n","import { appConfigStore } from \"./store\";\r\nimport { logLoaded } from \"./library/helpers/Logger\";\r\n/** Digest the event custom configuration file and update it to the store */\r\nif (!!window.CONNECT_ME) {\r\n /** TODO: get CONNECT_ME configuration checking result */\r\n let isValidConfiguration = true; // checkConfiguration(window.CONNECT_ME);\r\n /** check for valid config */\r\n if (isValidConfiguration) {\r\n /** make full path config */\r\n window.CONNECT_ME.full_config_path = `${window.CONNECT_ME.server_url}/config/${window.CONNECT_ME.path_name}/${window.CONNECT_ME.path_edition}`;\r\n /** update config store */\r\n appConfigStore.update(() => window.CONNECT_ME);\r\n console.log(...logLoaded());\r\n }\r\n else {\r\n console.error(\"WRONG window.CONNECT_ME configuration was found\");\r\n console.log(...logLoaded(null, null, true));\r\n }\r\n}\r\nelse {\r\n console.error(\"NO window.CONNECT_ME configuration was found\");\r\n console.log(...logLoaded(null, null, true));\r\n}\r\n","/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\n// EXPOSE\nvar _sizzle = window.Sizzle;\n\nSizzle.noConflict = function() {\n\tif ( window.Sizzle === Sizzle ) {\n\t\twindow.Sizzle = _sizzle;\n\t}\n\n\treturn Sizzle;\n};\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( function() {\n\t\treturn Sizzle;\n\t} );\n\n// Sizzle requires that there be a global window in Common-JS like environments\n} else if ( typeof module !== \"undefined\" && module.exports ) {\n\tmodule.exports = Sizzle;\n} else {\n\twindow.Sizzle = Sizzle;\n}\n\n// EXPOSE\n\n} )( window );\n","import { appConfigStore } from \"../../store\";\r\n/** get digested configuration */\r\nlet APP_CONFIG;\r\nlet unsubscribeAppConfig = appConfigStore.subscribe((config) => (APP_CONFIG = config));\r\n/**\r\n * Call app hosted proxy\r\n * @param uri The proxy URI to call\r\n * @returns JSON\r\n * @throws Error with error data or all jsonResult\r\n */\r\nexport const callProxy = async (uri) => {\r\n let proxyUrl = `${APP_CONFIG.server_url}/proxy/${uri}`;\r\n let result = await fetch(proxyUrl);\r\n let jsonResult = await result.json();\r\n if (result.ok)\r\n return jsonResult;\r\n else {\r\n if (jsonResult.error.data)\r\n throw new Error(jsonResult.error.data);\r\n else if (jsonResult.error.attendeeid)\r\n throw new Error(jsonResult.error.attendeeid);\r\n else {\r\n console.error({ response: jsonResult });\r\n throw new Error(jsonResult);\r\n }\r\n }\r\n};\r\n/**\r\n * Call Aventri API via APP PHP Proxy\r\n * @param aventriUriParams The aventri uri encoded params\r\n * @param aventriResourceUri The aventri URL resource\r\n */\r\nexport const callAventri = async (aventriUriParams, aventriResourceUri) => {\r\n /** mount the url to call */\r\n let aventriProxyUri = `Aventri.php?p=${aventriUriParams}&u=${aventriResourceUri}`;\r\n return await callProxy(aventriProxyUri);\r\n};\r\n/**\r\n * Call Aventri API via APP PHP Proxy\r\n * @param aventriUriParams The aventri uri encoded params\r\n * @param aventriResourceUri The aventri URL resource\r\n */\r\nexport const callTrackingProxy = async (trackingQuestionId, trackingJSONObject) => {\r\n /** mount the url to call */\r\n let trackingProxyUri = `Track.php?q=${trackingQuestionId}&t=${trackingJSONObject}`;\r\n return await callProxy(trackingProxyUri);\r\n};\r\n/**\r\n * Call Atlas API via APP PHP Proxy\r\n * @param query The atlas query to be called\r\n * @param staging If is using atlas staging API\r\n * @param encodeUri If is to encode the query text using encodeURIComponent\r\n * @returns Atlas API response\r\n */\r\nexport const callAtlasProxy = async (query, staging, encodeUri = true) => {\r\n /** check atlas staging */\r\n staging = typeof staging === \"boolean\" ? staging : false;\r\n /** clean query spaces */\r\n query = query.replace(/(\\r\\n|\\n|\\r|\\s)/gm, \"\");\r\n /** check if is to encode query text */\r\n let queryUri = encodeUri ? encodeURIComponent(query) : query;\r\n /** mount the proxy URI */\r\n let atlasProxyUri = `Atlas.php?q=${queryUri}&s=${String(staging)}`;\r\n return await callProxy(atlasProxyUri);\r\n};\r\n/** unsubscribe from appConfig store */\r\nunsubscribeAppConfig();\r\n","export const CountryList = {\r\n \"Afeganistão\": \"AFG\",\r\n \"Africa Do Sul\": \"ZAF\",\r\n \"Albania\": \"ALB\",\r\n \"Alemanha\": \"DEU\",\r\n \"American Samoa\": \"ASM\",\r\n \"Andorra\": \"AND\",\r\n \"Angola\": \"AGO\",\r\n \"Anguilla\": \"AIA\",\r\n \"Antigua\": \"ATG\",\r\n \"Antilhas Holandesas\": \"ANT\",\r\n \"Arabia Saudita\": \"SAU\",\r\n \"Argelia\": \"DZA\",\r\n \"Argentina\": \"ARG\",\r\n \"Armenia\": \"ARM\",\r\n \"Aruba\": \"ABW\",\r\n \"Ascension Island\": \"SHN\",\r\n \"Australia\": \"AUS\",\r\n \"Austria\": \"AUT\",\r\n \"Azerbaijao\": \"AZE\",\r\n \"Bahamas\": \"BHS\",\r\n \"Bahrain\": \"BHR\",\r\n \"Balearic Islands\": \"ESP\",\r\n \"Bangladesh\": \"BGD\",\r\n \"Barbados\": \"BRB\",\r\n \"Belgica\": \"BEL\",\r\n \"Belize\": \"BLZ\",\r\n \"Benin\": \"BEN\",\r\n \"Bermudas\": \"BMU\",\r\n \"Bielorussia\": \"BRL\",\r\n \"Bolivia\": \"BOL\",\r\n \"Bosnia\": \"BIH\",\r\n \"Botswana\": \"BWA\",\r\n \"Brasil\": \"BRA\",\r\n \"British Indian Ocean Territory\": \"IOT\",\r\n \"British Virgin Islands\": \"VGB\",\r\n \"Brunei\": \"BRN\",\r\n \"Bulgaria\": \"BGR\",\r\n \"Burkina Faso\": \"BFA\",\r\n \"Burundi\": \"BDI\",\r\n \"Butao\": \"BTN\",\r\n \"Cabo Verde\": \"CPV\",\r\n \"Caicos\": \"TCA\",\r\n \"Camaroes\": \"CMR\",\r\n \"Camboja\": \"KHM\",\r\n \"Canada\": \"CAN\",\r\n \"Canary Islands\": \"ESP\",\r\n \"Caribe\": \"BES\",\r\n \"Casaquistao\": \"KAZ\",\r\n \"Central African Rep.\": \"CAF\",\r\n \"Chad Republic\": \"TCD\",\r\n \"Chile\": \"CHL\",\r\n \"China\": \"CHN\",\r\n \"Chipre\": \"CYP\",\r\n \"Cidade Do Vaticano\": \"VAT\",\r\n \"Colombia\": \"COL\",\r\n \"Comoros\": \"COM\",\r\n \"Congo\": \"COD\",\r\n \"Cook Ilhas\": \"COK\",\r\n \"Coreia Do Norte\": \"PRK\",\r\n \"Coreia Do Sul\": \"KOR\",\r\n \"Costa Do Marfim\": \"CIV\",\r\n \"Costa Rica\": \"CRI\",\r\n \"Croacia\": \"HRV\",\r\n \"Cuba\": \"CUB\",\r\n \"Curacao\": \"CUW\",\r\n \"Diego Garcia\": \"IOT\",\r\n \"Dinamarca\": \"DNK\",\r\n \"Djibouti\": \"DJI\",\r\n \"Dominica\": \"DMA\",\r\n \"East Timor\": \"TLS\",\r\n \"Egito\": \"EGY\",\r\n \"El Salvador\": \"SLV\",\r\n \"Emirados Arabes Unidos\": \"ARE\",\r\n \"Equador\": \"ECU\",\r\n \"Eritrea\": \"ERI\",\r\n \"Escocia\": \"GBR\",\r\n \"Eslovaquia Rep.\": \"SVK\",\r\n \"Eslovenia\": \"SVN\",\r\n \"Espanha\": \"ESP\",\r\n \"Estados Unidos\": \"USA\",\r\n \"Estonia\": \"EST\",\r\n \"Etiopia\": \"ETH\",\r\n \"Fiji\": \"FJI\",\r\n \"Filipinas\": \"PHL\",\r\n \"Finlandia\": \"FIN\",\r\n \"Franca\": \"FRA\",\r\n \"Gabao\": \"GAB\",\r\n \"Gambia\": \"GMB\",\r\n \"Gana\": \"GHA\",\r\n \"Georgia\": \"GEO\",\r\n \"Gibraltar\": \"GIB\",\r\n \"Granada\": \"GRD\",\r\n \"Grecia\": \"GRC\",\r\n \"Groenlandia\": \"GRL\",\r\n \"Guadalupe\": \"FRA\",\r\n \"Guam\": \"GUM\",\r\n \"Guatemala\": \"GTM\",\r\n \"Guiana\": \"GUY\",\r\n \"Guiana Francesa\": \"GUF\",\r\n \"Guinea, Peoples Rep.\": \"GIN\",\r\n \"Guine-Bissau\": \"GNB\",\r\n \"Haiti\": \"HTI\",\r\n \"Heard And Mcdonald Islands\": \"HMD\",\r\n \"Holanda\": \"NLD\",\r\n \"Honduras\": \"HND\",\r\n \"Hong Kong\": \"HKG\",\r\n \"Hungria\": \"HUN\",\r\n \"Iemen\": \"YEM\",\r\n \"Ilhas Cayman\": \"CYM\",\r\n \"Ilhas Malvinas\": \"FLK\",\r\n \"Ilhas Virgens\": \"VIR\",\r\n \"India\": \"IND\",\r\n \"Indonesia\": \"IDN\",\r\n \"Inglaterra\": \"GBR\",\r\n \"Ira\": \"IRN\",\r\n \"Iraque\": \"IRQ\",\r\n \"Irlanda\": \"IRL\",\r\n \"Irlanda Do Norte\": \"GBR\",\r\n \"Islandia\": \"ISL\",\r\n \"Israel\": \"ISR\",\r\n \"Italia\": \"ITA\",\r\n \"Jamaica\": \"JAM\",\r\n \"Japao\": \"JPN\",\r\n \"Jordania\": \"JOR\",\r\n \"Kirghizia\": \"KGZ\",\r\n \"Kiribati\": \"KIR\",\r\n \"Kuwait\": \"KWT\",\r\n \"Laos\": \"LAO\",\r\n \"Lesoto\": \"LSO\",\r\n \"Letonia\": \"LVA\",\r\n \"Libano\": \"LBN\",\r\n \"Liberia\": \"LBR\",\r\n \"Libia\": \"LBY\",\r\n \"Liechtenstein\": \"LIE\",\r\n \"Lituania\": \"LTU\",\r\n \"Luxemburgo\": \"LUX\",\r\n \"Macau\": \"MAC\",\r\n \"Macedonia\": \"MKD\",\r\n \"Madagascar\": \"MDG\",\r\n \"Malasia\": \"MYS\",\r\n \"Malawi\": \"MWI\",\r\n \"Maldivas (Ilhas)\": \"MDV\",\r\n \"Mali\": \"MLI\",\r\n \"Malta\": \"MLT\",\r\n \"Marrocos\": \"MAR\",\r\n \"Marshall Islands\": \"MHL\",\r\n \"Martinica\": \"MTQ\",\r\n \"Mauritania\": \"MRT\",\r\n \"Mauritius\": \"MUS\",\r\n \"Mayotte Island\": \"MYT\",\r\n \"Melilla\": \"ESP\",\r\n \"Mexico\": \"MEX\",\r\n \"Micronesia\": \"FSM\",\r\n \"Mocambique\": \"MOZ\",\r\n \"Moldavia\": \"MDA\",\r\n \"Monaco\": \"MCO\",\r\n \"Mongolia\": \"MNG\",\r\n \"Montenegro\": \"MNE\",\r\n \"Montserrat\": \"MSR\",\r\n \"Mustique\": \"VCT\",\r\n \"Namibia\": \"NAM\",\r\n \"Nauru\": \"NRU\",\r\n \"Nepal\": \"NPL\",\r\n \"Nicaragua\": \"NIC\",\r\n \"Niger Republic\": \"NER\",\r\n \"Nigeria\": \"NGA\",\r\n \"Niue Island\": \"NIU\",\r\n \"Norfolk Island\": \"NFK\",\r\n \"Northern Mariana Islands\": \"MNP\",\r\n \"Noruega\": \"NOR\",\r\n \"Nova Caledonia\": \"NCL\",\r\n \"Nova Zelandia\": \"NZL\",\r\n \"Oman\": \"Oman\",\r\n \"Palau Republic\": \"PLW\",\r\n \"Palm Island\": \"VCT\",\r\n \"Panama\": \"PAN\",\r\n \"Papua\": \"PNG\",\r\n \"Paquistao\": \"PAK\",\r\n \"Paraguai\": \"PRY\",\r\n \"Peru\": \"PER\",\r\n \"Pitcairn\": \"PCN\",\r\n \"Polonia\": \"POL\",\r\n \"Porto Rico\": \"PRI\",\r\n \"Portugal\": \"PRT\",\r\n \"Qatar\": \"QAT\",\r\n \"Quenia\": \"KEN\",\r\n \"Quirquistao\": \"KGZ\",\r\n \"Reino Unido\": \"GBR\",\r\n \"Rep. Dominicana\": \"DOM\",\r\n \"Rep. Tcheca\": \"CZE\",\r\n \"Reunion Island\": \"REU\",\r\n \"Romenia\": \"ROU\",\r\n \"Rota\": \"MNP\",\r\n \"Russia\": \"RUS\",\r\n \"San Marino\": \"SMR\",\r\n \"Sao Tome\": \"STP\",\r\n \"Senegal\": \"SEN\",\r\n \"Serbia\": \"SRB\",\r\n \"Serra Leoa\": \"SLE\",\r\n \"Seychelles\": \"SYC\",\r\n \"Seychelles Island\": \"SYC\",\r\n \"Singapura\": \"SGP\",\r\n \"Siria\": \"SYR\",\r\n \"Somalia\": \"SOM\",\r\n \"Sri Lanka\": \"LKA\",\r\n \"Suazilandia\": \"SWZ\",\r\n \"Sudao\": \"SDN\",\r\n \"Suecia\": \"SWE\",\r\n \"Suica\": \"CHE\",\r\n \"Suriname\": \"SUR\",\r\n \"Svalbard And Jan Mayen Islands\": \"SJM\",\r\n \"Tadjiquistao\": \"TJK\",\r\n \"Tailandia\": \"THA\",\r\n \"Taiti\": \"PYF\",\r\n \"Taiwan\": \"TWN\",\r\n \"Tanzania\": \"TZA\",\r\n \"Tinian\": \"MNP\",\r\n \"Togo\": \"TGO\",\r\n \"Tonga\": \"TON\",\r\n \"Trinidad Tobago\": \"TTO\",\r\n \"Tunisia\": \"TUN\",\r\n \"Turquemenistao\": \"TKM\",\r\n \"Turquia\": \"TUR\",\r\n \"Tuvalu\": \"TUV\",\r\n \"Ucrania\": \"UKR\",\r\n \"Uganda\": \"UGA\",\r\n \"Uniao De Mayamar\": \"MMR\",\r\n \"Uruguai\": \"URY\",\r\n \"Uzbequistao\": \"UZB\",\r\n \"Vanuatu\": \"VUT\",\r\n \"Venezuela\": \"VEN\",\r\n \"Vietna\": \"VNM\",\r\n \"Wales\": \"GBR\",\r\n \"Zaire\": \"COD\",\r\n \"Zambia\": \"ZMB\",\r\n \"Zimbabue\": \"ZWE\"\r\n};\r\n","import sizzle from \"sizzle\";\r\nimport { callAventri } from \"../helpers/Caller\";\r\nimport { loadingStore, appConfigStore, logStore } from \"../../store\";\r\nimport { logMessage } from \"../helpers/Logger\";\r\nimport { CountryList } from \"../resources/Countries\";\r\n/** get digested configuration */\r\nlet APP_CONFIG;\r\nlet unsubscribeAppConfig = appConfigStore.subscribe((config) => (APP_CONFIG = config));\r\n/**\r\n * find a attendee response and return its response\r\n * @param attendeeResponses the attendee responses from api\r\n * @param type the key to be searched\r\n * @param filter the value to be compared\r\n * @param defaultReturn the default return if it finds nothing\r\n */\r\nexport const findAttendeeResponse = (attendeeResponses, type, filter, defaultReturn = \"\") => {\r\n if (Array.isArray(attendeeResponses)) {\r\n let findResult = attendeeResponses.find((response) => response[type] == filter);\r\n if (findResult)\r\n return findResult.response;\r\n else {\r\n // console.warn(`Error finding response with ${type} = \"${filter}\"`);\r\n return defaultReturn;\r\n }\r\n }\r\n else {\r\n return \"\";\r\n }\r\n};\r\n/**\r\n * Call Aventri's API to retrieve a attendee id\r\n * @param attendeeId The Aventri attendee id\r\n * @returns Response from aventri API\r\n */\r\nexport const getAventriAttendee = async (attendeeId) => {\r\n /** return the proxy response */\r\n return await callAventri(encodeURIComponent(`?attendeeid=${attendeeId}&eventid=${APP_CONFIG.aventri_event_id}&responseArray=1`), \"ereg/getAttendee.json\");\r\n};\r\n/**\r\n * Call Aventri's API to save a question choice in to the attendee responses\r\n * @param attendeeId The Aventri attendee id\r\n * @param questionId The Aventri question id\r\n * @param questionChoiceId The Aventri questions choice id\r\n * @returns Aventri api response for updated question\r\n */\r\nexport const saveAnswerChoiceToAventri = async (attendeeId, questionId, questionChoiceId) => {\r\n /** return the proxy response */\r\n return await callAventri(encodeURIComponent(`&attendeeid=${attendeeId}&responses[0][questionid]=${questionId}&responses[0][response]=${questionChoiceId}`), \"ereg/updateAttendeeInfoResponses.json\");\r\n};\r\n/**\r\n * Get the datails for a aventri question\r\n * @param aventriQuestionId the aventri question id\r\n * @returns a aventri question details\r\n */\r\nexport const getAventriQuestionsDetails = async (aventriQuestionId) => {\r\n return await callAventri(encodeURIComponent(`?eventid=${APP_CONFIG.aventri_event_id}&questionid=${aventriQuestionId}`), \"ereg/getQuestion.json\");\r\n};\r\n/**\r\n * Get the normalized aventri attendee responses for visitor registration\r\n * @param ATTENDEE The aventri attendee\r\n * @returns the attendee information for Atlas REG\r\n */\r\nexport const getAventriAttendeeRegInformation = (ATTENDEE) => {\r\n let ATTENDEE_RESPONSES = ATTENDEE.responses;\r\n let attendee = {\r\n firstName: \"\",\r\n lastName: \"\",\r\n email: \"\",\r\n country: \"\",\r\n jobTitle: \"\",\r\n DDI: \"\",\r\n DDD: \"\",\r\n mobile: \"\",\r\n addressLine1: \"xxx\",\r\n city: \"\",\r\n state: \"\",\r\n postcode: \"\",\r\n DDIFix: \"\",\r\n fullMobile: \"\",\r\n countryCode: \"\",\r\n visitorType: \"visitor\",\r\n };\r\n /** profile */\r\n let firstName = findAttendeeResponse(ATTENDEE_RESPONSES, \"fieldname\", \"fname\", \"Annonymous\");\r\n let lastName = findAttendeeResponse(ATTENDEE_RESPONSES, \"fieldname\", \"lname\", \"Annonymous\");\r\n let email = findAttendeeResponse(ATTENDEE_RESPONSES, \"fieldname\", \"email\", \"\");\r\n let country = findAttendeeResponse(ATTENDEE_RESPONSES, \"fieldname\", \"country\", \"Brasil\");\r\n /** professional */\r\n let jobTitle = findAttendeeResponse(ATTENDEE_RESPONSES, \"fieldname\", \"title\", \"\");\r\n let jobTitleAlternative;\r\n /** phone */\r\n let DDI = findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"Country Code\") ||\r\n findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"DDI\", \"(+ xx) Unknown\");\r\n let DDD = findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"Area Code\") ||\r\n findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"DDD\") ||\r\n findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"DDD_Brazil\", \"xx\");\r\n let mobile = findAttendeeResponse(ATTENDEE_RESPONSES, \"fieldname\", \"mphone\") ||\r\n findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"Celular_Brazil\", \"xxxx-xxxx\");\r\n /** location */\r\n let city = findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"City\") || findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"Cidade\", \"xxx\");\r\n let state = findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"State\") || findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"Estado\", \"xxx\");\r\n let postcode = findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"Zip Code\") || findAttendeeResponse(ATTENDEE_RESPONSES, \"name\", \"CEP\", \"xxxxxxxx\");\r\n if (typeof firstName === \"string\")\r\n attendee.firstName = firstName;\r\n if (typeof lastName === \"string\")\r\n attendee.lastName = lastName;\r\n if (typeof email === \"string\")\r\n attendee.email = email;\r\n if (typeof country === \"string\")\r\n attendee.country = country;\r\n if (typeof city === \"string\")\r\n attendee.city = city;\r\n if (typeof state === \"string\")\r\n attendee.state = state;\r\n if (typeof postcode === \"string\")\r\n attendee.postcode = postcode;\r\n if (typeof jobTitle === \"string\") {\r\n let options = [\"outro\", \"outros\", \"other\", \"others\", \"otro\", \"otros\"];\r\n let hasOtherJobTitle = options.includes(jobTitle.toLowerCase());\r\n if (hasOtherJobTitle) {\r\n jobTitleAlternative = findAttendeeResponse(ATTENDEE_RESPONSES, \"questionid\", APP_CONFIG.aventri_integration.custom_optional.job_title, \"x\");\r\n if (typeof jobTitleAlternative === \"string\") {\r\n attendee.jobTitle = hasOtherJobTitle ? jobTitleAlternative : jobTitle;\r\n }\r\n }\r\n else {\r\n attendee.jobTitle = jobTitle;\r\n }\r\n }\r\n if (typeof DDI === \"string\" && typeof DDD === \"string\" && typeof mobile === \"string\") {\r\n /** do string transforms */\r\n attendee.DDD = DDD;\r\n attendee.DDI = DDI;\r\n attendee.mobile = mobile;\r\n attendee.DDIFix = DDI && typeof DDI === \"string\" ? \"+\" + DDI.split(\")\")[0].split(\"(\")[1].split(\" \")[1] : \"\";\r\n attendee.fullMobile = `${attendee.DDIFix} ${DDD} ${mobile}`;\r\n }\r\n if (!attendee.fullMobile && typeof mobile === \"string\") {\r\n attendee.mobile = mobile;\r\n attendee.fullMobile = `${mobile}`;\r\n }\r\n /** get country code */\r\n if (typeof attendee.country === \"string\")\r\n attendee.countryCode = CountryList[attendee.country] || \"BRA\";\r\n else\r\n attendee.countryCode = \"BRA\"; // NEED TO HAVE A DEFALT VALUE\r\n /** check visitor type */\r\n if (APP_CONFIG.aventri_integration.registration.types.length > 0) {\r\n /** attendee category */\r\n let currentCategory = ATTENDEE.category ? ATTENDEE.category.categoryid : null;\r\n let currentSubCategory = ATTENDEE.subcategory ? ATTENDEE.subcategory.categoryid : null;\r\n if (currentCategory || currentSubCategory) {\r\n /** has visitor types */\r\n let categoryToUse = currentCategory || currentSubCategory;\r\n let foundCategory = APP_CONFIG.aventri_integration.registration.types.find((item) => String(item.category) === String(categoryToUse));\r\n if (foundCategory) {\r\n attendee.visitorType = foundCategory.type;\r\n }\r\n }\r\n }\r\n /** log important stuff */\r\n console.log({ normalized: attendee, ATTENDEE_RESPONSES });\r\n /** return attendee information */\r\n return attendee;\r\n};\r\n/**\r\n * Get mm questions from the current page and get questions details from aventri api\r\n * @returns Promise with list of Aventri questions details and the selected options of mm questions on the screen\r\n */\r\nexport const getRegularQuestionsDetails = () => {\r\n let { reg_ids } = APP_CONFIG.aventri_integration.matchmaking;\r\n return new Promise(async (resolve, reject) => {\r\n let questionsToFetch = [];\r\n reg_ids.forEach(async (questionId) => {\r\n let questionSelection = sizzle(`input[id*=${questionId}]:checked`);\r\n if (questionSelection.length > 0) {\r\n questionsToFetch.push(questionId);\r\n }\r\n });\r\n if (reg_ids.length === questionsToFetch.length) {\r\n /** fetch questions */\r\n let questionResults = await questionsToFetch.map(async (questionId) => {\r\n /** get selection for MM question */\r\n let questionSelection = sizzle(`input[id*=${questionId}]:checked`);\r\n let selectedOptions = [];\r\n if (questionSelection.length > 0) {\r\n selectedOptions = questionSelection.map((item) => {\r\n let itemIndex = item.name.replaceAll(\"][\", \"_\").replaceAll(\"]\", \"\").replaceAll(\"[\", \"\").split(\"_\")[2];\r\n if (item.type === \"radio\") {\r\n itemIndex = Number(item.id.split(\"_\")[2]) - 2;\r\n }\r\n return itemIndex;\r\n });\r\n }\r\n let questionDetail = await getAventriQuestionsDetails(questionId);\r\n while (questionDetail === null)\r\n questionDetail = await getAventriQuestionsDetails(questionId);\r\n return { questionDetail, selectedOptions };\r\n });\r\n /** resolve all questions details */\r\n let getResponses = await Promise.all(questionResults);\r\n if (Array.isArray(getResponses) && getResponses.length === reg_ids.length)\r\n resolve(getResponses);\r\n }\r\n else {\r\n /** missing question selection, form will fail */\r\n reject(\"Didn't select MM question, form will fail\");\r\n }\r\n });\r\n};\r\n/**\r\n * get the MBO question details from input on DOM\r\n * @returns Promise with the questions detail, the child questions detail and the selectedChildren\r\n */\r\nexport const getMBOQuestionsDetails = () => {\r\n let { mbo_ids, mbo_regular_ids } = APP_CONFIG.aventri_integration.matchmaking;\r\n return new Promise(async (resolve, reject) => {\r\n let questionsToFetch = [];\r\n mbo_ids.forEach(async (mboCombo, index) => {\r\n let [mboParent, mboChild] = mboCombo;\r\n let isParentSelected = sizzle(`input[id*=${mboParent}][class*=radio]`);\r\n isParentSelected = isParentSelected.length > 0 ? isParentSelected[0].checked : false;\r\n if (isParentSelected) {\r\n let childrenSelection = sizzle(`input[id*=${mboChild}]:checked`);\r\n if (childrenSelection.length > 0) {\r\n questionsToFetch.push([mboParent, mboChild]);\r\n }\r\n else {\r\n reject(\"Didn't select children, form will fail\");\r\n }\r\n }\r\n });\r\n // console.log({ questionsToFetch });\r\n let questionResults = await questionsToFetch.map(async (question) => {\r\n /** get selection for mboChild = question[1] */\r\n let childrenSelection = sizzle(`input[id*=${question[1]}]:checked`);\r\n let selectedChildren = [];\r\n if (childrenSelection.length > 0) {\r\n selectedChildren = childrenSelection.map((item) => item.name.replaceAll(\"][\", \"_\").replaceAll(\"]\", \"\").replaceAll(\"[\", \"\").split(\"_\")[2]);\r\n }\r\n let parentQuestionDetail = await getAventriQuestionsDetails(question[0]);\r\n let childQuestionDetail = await getAventriQuestionsDetails(question[1]);\r\n while (parentQuestionDetail === null)\r\n parentQuestionDetail = await getAventriQuestionsDetails(question[0]);\r\n while (childQuestionDetail === null)\r\n childQuestionDetail = await getAventriQuestionsDetails(question[1]);\r\n return { parentQuestionDetail, childQuestionDetail, selectedChildren };\r\n });\r\n let getResponses = await Promise.all(questionResults);\r\n // console.log({ getResponses });\r\n if (Array.isArray(getResponses) && getResponses.length > 0)\r\n resolve(getResponses);\r\n if (questionsToFetch.length === 0)\r\n resolve(\"NO_MM\");\r\n });\r\n};\r\n/**\r\n * Helper to get the rejectContact object\r\n * @param logConfig The caller log configuration\r\n * @param ATTENDEE_RESPONSES The aventri attendee responses array\r\n */\r\nexport const getAventriRejectContact = (logConfig, ATTENDEE_RESPONSES) => {\r\n let optOutType = APP_CONFIG.aventri_integration.contact_optout.type;\r\n let rejectContactObject = {\r\n event: { mail: true, phone: false, email: false, sms: false, message: false },\r\n reed: { mail: true, phone: false, email: false, sms: false, message: false },\r\n thirdParty: false,\r\n };\r\n /** log type */\r\n logCurrentMessage(`Getting optout questions type: ${optOutType}`, logConfig);\r\n /** switch on optOut type */\r\n switch (optOutType) {\r\n case \"DEFAULT\":\r\n /** DEFAULT: get optout questions from page */\r\n let { contact, reed_options, event_options, thirdparty_contact } = APP_CONFIG.aventri_integration.contact_optout;\r\n /** get optout questions from page */\r\n let reedContactSelection = sizzle(`input[id*=${contact}]:checked`);\r\n let thirdPartyContactSelection = sizzle(`input[id*=${thirdparty_contact}]:checked`);\r\n /** check reed contact selection */\r\n if (reedContactSelection.length > 0) {\r\n /** get opt-out selections for reed contact */\r\n let reedOptionsSelection = sizzle(`input[id*=${reed_options}]:checked`);\r\n if (reedOptionsSelection.length > 0) {\r\n for (let i = 0; i < reedOptionsSelection.length; i++) {\r\n switch (reedOptionsSelection[i].id.split(\"_\")[2]) {\r\n case \"1\":\r\n rejectContactObject.reed.email = true;\r\n break;\r\n case \"2\":\r\n rejectContactObject.reed.phone = true;\r\n break;\r\n case \"3\":\r\n rejectContactObject.reed.sms = true;\r\n break;\r\n case \"4\":\r\n rejectContactObject.reed.message = true;\r\n break;\r\n }\r\n }\r\n }\r\n /** get opt-out selections for event contact */\r\n let eventOptionsSelection = sizzle(`input[id*=${event_options}]:checked`);\r\n if (eventOptionsSelection.length > 0) {\r\n for (let i = 0; i < eventOptionsSelection.length; i++) {\r\n switch (eventOptionsSelection[i].id.split(\"_\")[2]) {\r\n case \"1\":\r\n rejectContactObject.event.email = true;\r\n break;\r\n case \"2\":\r\n rejectContactObject.event.phone = true;\r\n break;\r\n case \"3\":\r\n rejectContactObject.event.sms = true;\r\n break;\r\n case \"4\":\r\n rejectContactObject.event.message = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n /** check third party contact selection */\r\n if (thirdPartyContactSelection.length > 0)\r\n rejectContactObject.thirdParty = true;\r\n break;\r\n case \"EXTERNAL\":\r\n /** get optout questions from attendee response EXTERNAL */\r\n let { external } = APP_CONFIG.aventri_integration.contact_optout;\r\n let externalResponse = findAttendeeResponse(ATTENDEE_RESPONSES, \"questionid\", external, JSON.stringify(rejectContactObject));\r\n if (externalResponse && typeof externalResponse === \"string\") {\r\n try {\r\n let rejectContactObjectExternal = JSON.parse(externalResponse);\r\n rejectContactObject = rejectContactObjectExternal;\r\n }\r\n catch (err) { }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return rejectContactObject;\r\n};\r\n/**\r\n * log the current message with the caller log configuration\r\n * @param message The Message to be logged on console and updated on loading and log store\r\n * @param logConfig The caller log configuration\r\n */\r\nconst logCurrentMessage = (message, logConfig) => {\r\n let cleanHelperText = `\\r\\ndocument.getElementsByTagName(\"form\")[0].submit()`;\r\n /** update loading message */\r\n loadingStore.update((current) => (Object.assign(Object.assign({}, current), { message: typeof message === \"string\" ? message.replace(\"\\r\\n\", \"
\").replace(cleanHelperText, \"\") : message })));\r\n /** update log.messages store */\r\n logStore.update((currentState) => (Object.assign(Object.assign({}, currentState), { messages: [...currentState.messages, typeof message === \"string\" ? message.replace(cleanHelperText, \"\") : message] })));\r\n /** log message on console */\r\n console.log(...logMessage(message, logConfig.name, logConfig.type, false, logConfig.color));\r\n};\r\n/** unsubscribe from appConfig store */\r\nunsubscribeAppConfig();\r\n","\r\n\r\n

ERROR:

\r\n

{message}

\r\n\r\n\r\n","\r\n\r\n
\r\n \"loading\r\n

{@html loading.message}

\r\n
\r\n\r\n\r\n","\r\n\r\n

Visitor Recommendations

\r\n\r\n{#if LOADING_ATTENDEE === \"loading\"}\r\n

Loading Attendee...

\r\n{/if}\r\n\r\n{#if LOADING_ATTENDEE === \"loaded\" && ATTENDEE}\r\n

{ATTENDEE.attendeeid}

\r\n{/if}\r\n\r\n\r\n","import { loadingStore, appConfigStore, logStore, youtubePlayersStore } from \"../../store\";\r\nimport { logMessage } from \"../helpers/Logger\";\r\nimport { callTrackingProxy } from \"../helpers/Caller\";\r\n/** get digested configuration */\r\nlet APP_CONFIG;\r\nlet unsubscribeAppConfig = appConfigStore.subscribe((config) => (APP_CONFIG = config));\r\n/**\r\n * Handle the saving and sending information of the event action\r\n * @param eventType the event name on GA or just the event type saved\r\n * @param eventCategory the event category on GA\r\n * @param eventAction the event action\r\n * @param contentLabel the content label\r\n * @param contentId the content id from the source\r\n */\r\nexport const handleAttendeeEventActionTracking = (eventType, eventCategory, eventAction, contentLabel, contentId) => {\r\n let trackingObject = {\r\n event: eventType,\r\n eventCategory,\r\n eventAction,\r\n contentLabel,\r\n contentId: String(contentId),\r\n aventriEventId: String(APP_CONFIG.aventri_event_id),\r\n aventriAttendeeId: String(window.ATTENDEE_ID),\r\n };\r\n let trackingJSONObject = JSON.stringify(trackingObject);\r\n callTrackingProxy(String(APP_CONFIG.aventri_integration.integration.tracking), trackingJSONObject);\r\n};\r\n/**\r\n * handle click on the button to close modal for youtube videos\r\n * @param e event listener\r\n */\r\nexport const handleCloseYoutubeModal = (e) => {\r\n /** subscribe to yo players store */\r\n let YT_PLAYERS;\r\n let unsubscribeYoutubePlayersStore = youtubePlayersStore.subscribe((yts) => (YT_PLAYERS = yts));\r\n if (YT_PLAYERS[e.target.dataset.stopContent].getPlayerState() === 1) {\r\n YT_PLAYERS[e.target.dataset.stopContent].pauseVideo();\r\n }\r\n /** unsubscribe yt store */\r\n unsubscribeYoutubePlayersStore();\r\n};\r\n/**\r\n * Handle the change state of the youtube frame videos\r\n * @param state youtube iframe api e.data\r\n * @param contentLabel the video label\r\n * @param contentId the video id\r\n */\r\nexport const handleYoutubeStateChange = (state, contentLabel, contentId) => {\r\n /** subscribe to yo players store */\r\n let YT_PLAYERS;\r\n let unsubscribeYoutubePlayersStore = youtubePlayersStore.subscribe((yts) => (YT_PLAYERS = yts));\r\n let playedPercentage = Math.round((YT_PLAYERS[contentId].getCurrentTime() / YT_PLAYERS[contentId].getDuration()) * 100) + \"%\";\r\n // console.log(YT_PLAYERS[contentId].getDuration());\r\n let eventType = \"ytEvent\";\r\n let eventCategory = \"YouTube Modal Embeded\";\r\n let eventAction = \"\";\r\n switch (state) {\r\n case -1:\r\n eventAction = \"UNSTARTED: \" + playedPercentage;\r\n break;\r\n case 0:\r\n eventAction = \"ENDED: \" + playedPercentage;\r\n break;\r\n case 1:\r\n eventAction = \"PLAYING: \" + playedPercentage;\r\n break;\r\n case 2:\r\n eventAction = \"PAUSED: \" + playedPercentage;\r\n break;\r\n case 3:\r\n eventAction = \"BUFFERING: \" + playedPercentage;\r\n break;\r\n case 5:\r\n eventAction = \"VIDEO_CUED: \" + playedPercentage;\r\n break;\r\n }\r\n // if (state === -1 || state === 0 || state === 1 || state === 2)\r\n handleAttendeeEventActionTracking(eventType, eventCategory, eventAction, contentLabel, contentId);\r\n /** unsubscribe yt store */\r\n unsubscribeYoutubePlayersStore();\r\n};\r\n/**\r\n * Create a wrapper on the sound cloud iframe element with the SC api for listening on custom events / data already on GA model\r\n * @param w the sound cloud iframe element\r\n */\r\nexport const handleSoundcloudWidget = (w) => {\r\n try {\r\n // initWidget is called when a SoundCloud iframe is found on the page\r\n let currentSound, act, pos, q1, q2, q3, q4, q5, q6, go, lab, id;\r\n let eventType = \"scEvent\";\r\n let cat = \"SoundCloud Embeded\";\r\n let startedPlay = false;\r\n let widget = window.SC.Widget(w);\r\n // console.log({ events: window.SC.Widget.Events });\r\n // Events.READY is dispatched when the widget has been loaded\r\n widget.bind(window.SC.Widget.Events.READY, () => {\r\n // Get the title of the currently playing sound\r\n widget.getCurrentSound((cs) => {\r\n currentSound = cs;\r\n lab = cs[\"title\"];\r\n id = cs[\"id\"];\r\n });\r\n // Events.PLAY is dispatched\r\n widget.bind(window.SC.Widget.Events.PLAY, (playState) => {\r\n if (!startedPlay && playState.loadedProgress > 0) {\r\n startedPlay = true;\r\n act = \"PLAY\";\r\n handleAttendeeEventActionTracking(eventType, cat, act, lab, id);\r\n setTimeout(() => (startedPlay = false), 1000);\r\n }\r\n });\r\n // Events.PAUSE is dispatched\r\n // The only exception is when the sound ends, and the auto-pause is not reported\r\n widget.bind(window.SC.Widget.Events.PAUSE, (obj) => {\r\n pos = Math.round(obj[\"relativePosition\"] * 100);\r\n if (pos !== 100) {\r\n act = \"PAUSE: \" + Math.round(obj[\"relativePosition\"] * 100) + \"%\";\r\n handleAttendeeEventActionTracking(eventType, cat, act, lab, id);\r\n }\r\n });\r\n // Events.PLAY_PROGRESS / 25, 50, 75, 80, 90, 95\r\n widget.bind(window.SC.Widget.Events.PLAY_PROGRESS, (obj) => {\r\n go = false;\r\n pos = Math.round(obj[\"relativePosition\"] * 100);\r\n if (pos === 25 && !q1) {\r\n act = \"PROGRESS: 25%\";\r\n q1 = true;\r\n go = true;\r\n }\r\n if (pos === 50 && !q2) {\r\n act = \"PROGRESS: 50%\";\r\n q2 = true;\r\n go = true;\r\n }\r\n if (pos === 75 && !q3) {\r\n act = \"PROGRESS: 75%\";\r\n q3 = true;\r\n go = true;\r\n }\r\n if (pos === 80 && !q4) {\r\n act = \"PROGRESS: 80%\";\r\n q4 = true;\r\n go = true;\r\n }\r\n if (pos === 90 && !q5) {\r\n act = \"PROGRESS: 90%\";\r\n q5 = true;\r\n go = true;\r\n }\r\n if (pos === 95 && !q6) {\r\n act = \"PROGRESS: 95%\";\r\n q6 = true;\r\n go = true;\r\n }\r\n if (go)\r\n handleAttendeeEventActionTracking(eventType, cat, act, lab, id);\r\n });\r\n // When the sound finishes, send an event at 100%\r\n widget.bind(window.SC.Widget.Events.FINISH, function () {\r\n act = \"ENDED: 100%\";\r\n q1 = q2 = q3 = q4 = q5 = q6 = false;\r\n handleAttendeeEventActionTracking(eventType, cat, act, lab, id);\r\n });\r\n });\r\n // For each SoundCloud iFrame, initiate the API integration\r\n }\r\n catch (e) {\r\n console.log(\"Error with SoundCloud API: \" + e.message);\r\n }\r\n};\r\n/**\r\n * log the current message with the caller log configuration\r\n * @param message The Message to be logged on console and updated on loading and log store\r\n * @param logConfig The caller log configuration\r\n */\r\nconst logCurrentMessage = (message, logConfig) => {\r\n let cleanHelperText = `\\r\\ndocument.getElementsByTagName(\"form\")[0].submit()`;\r\n /** update loading message */\r\n loadingStore.update((current) => (Object.assign(Object.assign({}, current), { message: typeof message === \"string\" ? message.replace(\"\\r\\n\", \"
\").replace(cleanHelperText, \"\") : message })));\r\n /** update log.messages store */\r\n logStore.update((currentState) => (Object.assign(Object.assign({}, currentState), { messages: [...currentState.messages, typeof message === \"string\" ? message.replace(cleanHelperText, \"\") : message] })));\r\n /** log message on console */\r\n console.log(...logMessage(message, logConfig.name, logConfig.type, false, logConfig.color));\r\n};\r\n/** unsubscribe from appConfig store */\r\nunsubscribeAppConfig();\r\n","\r\n","\r\n","(function(window) {\n\tvar YouTubeIframeLoader = {\n\t\tsrc: 'https://www.youtube.com/iframe_api',\n\t\tloading: false,\n\t\tloaded: false,\n\t\tlisteners: [],\n\n\t\tload: function(callback) {\n\t\t\tvar _this = this;\n\t\t\tthis.listeners.push(callback);\n\n\t\t\tif(this.loaded) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t_this.done();\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.loading = true;\n\n\t\t\twindow.onYouTubeIframeAPIReady = function() {\n\t\t\t\t_this.loaded = true;\n\t\t\t\t_this.done();\n\t\t\t};\n\n\t\t\tvar script = document.createElement('script');\n\t\t\tscript.type = 'text/javascript';\n\t\t\tscript.src = this.src;\n\t\t\tdocument.body.appendChild(script);\n\t\t},\n\n\t\tdone: function() {\n\t\t\tdelete window.onYouTubeIframeAPIReady;\n\n\t\t\twhile(this.listeners.length) {\n\t\t\t\tthis.listeners.pop()(window.YT);\n\t\t\t}\n\t\t}\n\t};\n\n\tif(typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = YouTubeIframeLoader;\n\t} else {\n\t\twindow.YouTubeIframeLoader = YouTubeIframeLoader;\n\t}\n}(window));\n","\r\n","/**\r\n * Make a visitor registration query\r\n * @param eventEditionId Atlas event edition id\r\n * @param locale the language of the response\r\n * @param badgeNumber the aventri attendee id\r\n * @param badgeLocation the aventri registration record link\r\n * @param visitorType the atlas visitor type\r\n * @param accessToken the atlas accessToken tracking\r\n * @param firstName attendee first name\r\n * @param lastName attendee last name\r\n * @param email attendee email\r\n * @param jobTitle attendee job title\r\n * @param mobilePhone attendee mobile phone\r\n * @param addressLine1 attendee address line 1\r\n * @param countryAlpha3 attendee country in Alpha 3 ISO\r\n * @param city attendee city\r\n * @param state attendee state\r\n * @param postcode attendee postcode\r\n * @param profileResponses attendee profile responses\r\n * @param rejectContact the reject Contact object\r\n * @returns a visitor registration query\r\n */\r\nexport const VisitorRegistrationQuery = (eventEditionId, locale, badgeNumber, badgeLocation, visitorType, accessToken, firstName, lastName, email, jobTitle, mobilePhone, addressLine1, countryAlpha3, city, state, postcode, profileResponses, rejectContact) => {\r\n var _a, _b, _c, _d, _e, _f, _g, _h;\r\n /** mount query */\r\n return `\r\nmutation {\r\n createVisitorRegistration(\r\n eventEditionId: \"${eventEditionId}\",\r\n locale: \"${locale}\",\r\n badgeNumber: \"${badgeNumber}\",\r\n badgeLocation: \"${badgeLocation}\",\r\n visitorProfile: {\r\n visitorType: \"${visitorType}\",\r\n accessToken: \"${accessToken}\",\r\n person: {\r\n firstName: \"${firstName.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n lastName: \"${lastName.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n email: \"${email.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n jobTitle: \"${jobTitle.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n mobilePhone: \"${mobilePhone.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n address: {\r\n addressLine1: \"${addressLine1}\",\r\n countryIsoCode: \"${countryAlpha3}\",\r\n city: \"${city.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n state: \"${state.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n postcode: \"${postcode.replace(/(\\r\\n|\\n|\\r)/gm, \"\")}\",\r\n },\r\n },\r\n privacyResponses: [\r\n {\r\n level: \"event\",\r\n channelSettings: {\r\n mail: \"${((_a = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.event) === null || _a === void 0 ? void 0 : _a.mail) ? \"out\" : \"in\"}\",\r\n phone: \"${((_b = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.event) === null || _b === void 0 ? void 0 : _b.phone) ? \"out\" : \"in\"}\",\r\n email: \"${((_c = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.event) === null || _c === void 0 ? void 0 : _c.email) ? \"out\" : \"in\"}\",\r\n sms: \"${((_d = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.event) === null || _d === void 0 ? void 0 : _d.sms) ? \"out\" : \"in\"}\",\r\n thirdParty: \"${(rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.thirdParty) ? \"out\" : \"in\"}\"\r\n }\r\n },\r\n {\r\n level: \"bu\",\r\n channelSettings: {\r\n mail: \"${((_e = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.reed) === null || _e === void 0 ? void 0 : _e.mail) ? \"out\" : \"in\"}\",\r\n phone: \"${((_f = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.reed) === null || _f === void 0 ? void 0 : _f.phone) ? \"out\" : \"in\"}\",\r\n email: \"${((_g = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.reed) === null || _g === void 0 ? void 0 : _g.email) ? \"out\" : \"in\"}\",\r\n sms: \"${((_h = rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.reed) === null || _h === void 0 ? void 0 : _h.sms) ? \"out\" : \"in\"}\",\r\n thirdParty: \"${(rejectContact === null || rejectContact === void 0 ? void 0 : rejectContact.thirdParty) ? \"out\" : \"in\"}\"\r\n }\r\n },\r\n ],\r\n profileResponses: ${profileResponses}\r\n }\r\n )\r\n}\r\n`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, \"\");\r\n};\r\n/**\r\n *\r\n * @param eventEditionId the atlas event edition is\r\n * @param locale the language of the response\r\n * @param profileResponses attendee profile responses\r\n * @param maxResult the number of recommendations to be returned\r\n * @param accessToken the atlas accessToken tracking\r\n * @returns visitor recommendations query\r\n */\r\nexport const VisitorRecommendationsQuery = (eventEditionId, locale, profileResponses, maxResult, accessToken) => {\r\n return `\r\nquery{\r\n exhibitorRecommendationsMultilingual(\r\n eventEditionId: \"${eventEditionId}\",\r\n locale: \"${locale}\",\r\n interfaceLocale: \"${locale}\",\r\n ${profileResponses ? `profileResponses: ${profileResponses},` : ``}\r\n maxResult: ${maxResult},\r\n accessToken: \"${accessToken}\"\r\n ) { \r\n id,\r\n description,\r\n isInnovator,\r\n link,\r\n isNewToShow,\r\n recommendationType,\r\n stands { name },\r\n categories {\r\n multilingual { locale, name }\r\n },\r\n multilingual {\r\n locale,\r\n title,\r\n description,\r\n logo,\r\n link,\r\n address {\r\n city,\r\n country,\r\n countryCode,\r\n state\r\n }\r\n }\r\n }\r\n}\r\n`.replace(/(\\r\\n|\\n|\\r|\\s)/gm, \"\");\r\n};\r\n","import sizzle from \"sizzle\";\r\nimport { loadingStore, appConfigStore, logStore, attendeeStore } from \"../../store\";\r\nimport { callAtlasProxy } from \"../helpers/Caller\";\r\nimport { logMessage } from \"../helpers/Logger\";\r\nimport { VisitorRegistrationQuery, VisitorRecommendationsQuery } from \"./AtlasQueries\";\r\nimport { getAventriAttendeeRegInformation, getMBOQuestionsDetails, getRegularQuestionsDetails, getAventriRejectContact } from \"./Aventri\";\r\n/** subscribe to digested configuration */\r\nlet APP_CONFIG;\r\nlet unsubscribeAppConfig = appConfigStore.subscribe((config) => (APP_CONFIG = config));\r\n/**\r\n * Grab a multilingual property based on a language\r\n * @param key the key to grab from multilingual item\r\n * @param lang the prefered lang to use (if there is no value it will use the last result with value)\r\n * @param atlasMultilingual The multilingual object to be searched\r\n */\r\nexport const getAtlasMultilingualProperty = (key, lang, atlasMultilingual) => {\r\n let currentItem = \"\";\r\n let lastItemWithValue = \"\";\r\n atlasMultilingual.forEach((multilingualItem) => {\r\n let itemKeyValue = multilingualItem[key];\r\n if (itemKeyValue && multilingualItem.locale === lang && !currentItem)\r\n currentItem = itemKeyValue;\r\n if (itemKeyValue && !currentItem)\r\n lastItemWithValue = itemKeyValue;\r\n });\r\n return currentItem || lastItemWithValue;\r\n};\r\nexport const getRegularProfileResponses = (logConfig, actionMessage) => {\r\n /** return a promise to hold the script */\r\n return new Promise(async (resolve, reject) => {\r\n let profileResponses;\r\n /** try to get mm responses */\r\n try {\r\n let mmQuestions = await getRegularQuestionsDetails();\r\n /** log making user registration */\r\n console.log({ mmQuestions });\r\n profileResponses = \"[ { answerIds: [ \";\r\n mmQuestions.forEach((mmQuestionSelected) => {\r\n mmQuestionSelected.selectedOptions.forEach((selectedOption) => {\r\n let selectedIndex = Number(selectedOption) - 1;\r\n let optionPPSId = mmQuestionSelected.questionDetail.choices[selectedIndex].reportname.split(\"_\")[0];\r\n profileResponses += `\"${optionPPSId}\", `;\r\n });\r\n });\r\n profileResponses = profileResponses.slice(0, -2);\r\n profileResponses += \" ] } ]\";\r\n /** resolve with profile questions ids string */\r\n resolve(profileResponses);\r\n }\r\n catch (err) {\r\n /** reject promise because user didn't selected options for a mm question so aventri form will fail */\r\n logCurrentMessage(err, Object.assign(Object.assign({}, logConfig), { color: { bg: \"red\", text: \"white\" } }));\r\n reject(\"FAIL, question missing selection, form will fail.\");\r\n }\r\n });\r\n};\r\n/**\r\n * Return a string with profileResponses for MBO matchmaking questions on screen\r\n * @param logConfig The caller log config\r\n * @returns profileResponses string for MBO selection\r\n */\r\nexport const getMBOProfileResponses = (logConfig, actionMessage) => {\r\n /** return a promise to hold the script */\r\n return new Promise(async (resolve, reject) => {\r\n let profileResponses;\r\n /** get MBO profile responses */\r\n try {\r\n let mmQuestions = await getMBOQuestionsDetails();\r\n /** log making user registration */\r\n if (mmQuestions === \"NO_MM\") {\r\n logCurrentMessage(`No MBO Matchmaking questions selected...`, logConfig);\r\n resolve(null);\r\n }\r\n else\r\n logCurrentMessage(`MBO Matchmaking questions selected...`, logConfig);\r\n /** get ProfileQuestion based on MM question selected on the current page */\r\n if (Array.isArray(mmQuestions)) {\r\n /** log selecting mm questions */\r\n console.log({ mmQuestions });\r\n profileResponses = \"[\";\r\n mmQuestions.forEach((question) => {\r\n question.selectedChildren.forEach((choiceIndex) => {\r\n let childPPSQuestionId = question.childQuestionDetail.choices[Number(choiceIndex)].reportname.split(\"_\")[0];\r\n let parentPPSQuestionId = question.parentQuestionDetail.choices[0].reportname.split(\"_\")[0];\r\n profileResponses += `{answerIds:[\"${parentPPSQuestionId}\",\"${childPPSQuestionId}\"]},`;\r\n });\r\n });\r\n profileResponses = profileResponses.slice(0, -1);\r\n profileResponses += \"]\";\r\n resolve(profileResponses);\r\n }\r\n }\r\n catch (err) {\r\n /** reject promise because user didn't selected the children for a question mbo so aventri form will fail */\r\n logCurrentMessage(err, Object.assign(Object.assign({}, logConfig), { color: { bg: \"red\", text: \"white\" } }));\r\n reject(\"FAIL, children not selected, form will fail.\");\r\n }\r\n });\r\n};\r\nexport const doFakeVisitorRegistration = () => {\r\n return new Promise((resolve) => setTimeout(() => resolve(\"9a371ae4-25a5-4e20-b00a-e3e7ea62d721\"), 3000));\r\n};\r\n/**\r\n * @_REGISTRATION_CONNECT_ME\r\n * Handle CONNECT_ME version of visitor registration\r\n * @param logConfig The caller log configuration\r\n * @returns A Atlas visitor ID\r\n */\r\nexport const doConnectMeVisitorRegistration = async (logConfig, profileResponses) => {\r\n /** return a promise to hold the script */\r\n return new Promise(async (resolve) => {\r\n var _a, _b;\r\n /** subscribe to attendee */\r\n let ATTENDEE;\r\n let unsubscribeAttendeeStore = attendeeStore.subscribe((a) => (ATTENDEE = a));\r\n /** log starting registration */\r\n logCurrentMessage(\"Creating CONNECT_ME Visitor Registration\", logConfig);\r\n /** visitor registration holder */\r\n let visitorRegistrationId = \"\";\r\n /** registration variables */\r\n let attendeeInfo = getAventriAttendeeRegInformation(ATTENDEE);\r\n let rejectContact = getAventriRejectContact(logConfig, ATTENDEE.responses);\r\n let accessToken = localStorage.getItem(\"accessToken\") || \"\";\r\n /** make profile query */\r\n let query = VisitorRegistrationQuery(APP_CONFIG.atlas_event_id, APP_CONFIG.locale, ATTENDEE.attendeeid, \"\", \"visitor\", accessToken, attendeeInfo.firstName, attendeeInfo.lastName, attendeeInfo.email, attendeeInfo.jobTitle, attendeeInfo.fullMobile, attendeeInfo.addressLine1, attendeeInfo.countryCode, attendeeInfo.city, attendeeInfo.state, attendeeInfo.postcode, profileResponses, rejectContact);\r\n /** add query and contact optout to log */\r\n logStore.update((current) => (Object.assign(Object.assign({}, current), { visitor: Object.assign(Object.assign({}, current.visitor), { registration_query: encodeURIComponent(query), contact_optout: rejectContact }) })));\r\n /** check dev_mode */\r\n if (APP_CONFIG.dev_mode) {\r\n visitorRegistrationId = await doFakeVisitorRegistration();\r\n /** log registration on dev mode */\r\n logCurrentMessage(\"REGISTRATION COMPLETED ON DEV_MODE\\r\\nVISITOR NOT REGISTRED ON ATLAS\", logConfig);\r\n /** resolve with fixed id */\r\n resolve(visitorRegistrationId);\r\n }\r\n else {\r\n /** log creating visitor registration */\r\n logCurrentMessage(\"Creating visitor registration...\", logConfig);\r\n /** call atlas with the query */\r\n let registrationResponse = await callAtlasProxy(query, APP_CONFIG.atlas_staging, false);\r\n /** check for visitor reg id */\r\n visitorRegistrationId = ((_b = (_a = registrationResponse === null || registrationResponse === void 0 ? void 0 : registrationResponse.data) === null || _a === void 0 ? void 0 : _a.createVisitorRegistration) === null || _b === void 0 ? void 0 : _b.registrationId) || \"\";\r\n /** log response */\r\n console.log({ registrationResponse });\r\n /** log created visitor registration */\r\n logCurrentMessage(\"Visitor Created\", logConfig);\r\n /** resolve promise with atlas reg id */\r\n resolve(visitorRegistrationId);\r\n /** clean */\r\n unsubscribeAttendeeStore();\r\n }\r\n });\r\n};\r\n/**\r\n * @_REGISTRATION_US_VERSION\r\n * Handle US_VERSION version of visitor registration\r\n * @param logConfig The caller log configuration\r\n * @returns A Atlas visitor ID\r\n */\r\nexport const doUSVisitorRegistration = async (logConfig, profileResponses) => {\r\n /** return a promise to hold the script */\r\n return new Promise(async (resolve) => {\r\n var _a, _b;\r\n /** subscribe to attendee */\r\n let ATTENDEE;\r\n let unsubscribeAttendeeStore = attendeeStore.subscribe((a) => (ATTENDEE = a));\r\n /** log starting registration */\r\n logCurrentMessage(\"Creating US_VERSION Visitor Registration\", logConfig);\r\n /** visitor registration holder */\r\n let visitorRegistrationId = \"\";\r\n /** registration variables */\r\n let attendeeInfo = getAventriAttendeeRegInformation(ATTENDEE);\r\n let rejectContact = getAventriRejectContact(logConfig, ATTENDEE.responses);\r\n let accessToken = localStorage.getItem(\"accessToken\") || \"\";\r\n /** make profile query */\r\n let query = VisitorRegistrationQuery(APP_CONFIG.atlas_event_id, APP_CONFIG.locale, ATTENDEE.attendeeid, \"\", attendeeInfo.visitorType, accessToken, attendeeInfo.firstName, attendeeInfo.lastName, attendeeInfo.email, attendeeInfo.jobTitle, attendeeInfo.fullMobile, attendeeInfo.addressLine1, attendeeInfo.countryCode, attendeeInfo.city, attendeeInfo.state, attendeeInfo.postcode, profileResponses, rejectContact);\r\n /** add query and contact optout to log */\r\n logStore.update((current) => (Object.assign(Object.assign({}, current), { visitor: Object.assign(Object.assign({}, current.visitor), { registration_query: encodeURIComponent(query), contact_optout: rejectContact }) })));\r\n /** check dev_mode */\r\n if (APP_CONFIG.dev_mode) {\r\n visitorRegistrationId = await doFakeVisitorRegistration();\r\n /** log registration on dev mode */\r\n logCurrentMessage(\"REGISTRATION COMPLETED ON DEV_MODE\\r\\nVISITOR NOT REGISTRED ON ATLAS\", logConfig);\r\n /** resolve with fixed id */\r\n resolve(visitorRegistrationId);\r\n }\r\n else {\r\n /** log creating visitor registration */\r\n logCurrentMessage(\"Creating visitor registration...\", logConfig);\r\n /** call atlas with the query */\r\n let registrationResponse = await callAtlasProxy(query, APP_CONFIG.atlas_staging, false);\r\n /** check for visitor reg id */\r\n visitorRegistrationId = ((_b = (_a = registrationResponse === null || registrationResponse === void 0 ? void 0 : registrationResponse.data) === null || _a === void 0 ? void 0 : _a.createVisitorRegistration) === null || _b === void 0 ? void 0 : _b.registrationId) || \"\";\r\n /** log response */\r\n // console.log({ registrationResponse });\r\n /** log created visitor registration */\r\n logCurrentMessage(\"Visitor Created\", logConfig);\r\n /** resolve promise with atlas reg id */\r\n resolve(visitorRegistrationId);\r\n /** clean */\r\n unsubscribeAttendeeStore();\r\n }\r\n });\r\n};\r\n/**\r\n * @_RECOMMENDATION_REGULAR\r\n * Handle REGULAR version of visitor recommendation\r\n * @param logConfig The caller log configuration\r\n * @returns A Atlas visitor recommendations list\r\n */\r\nexport const getRegularVisitorRecommendations = async (logConfig, profileResponses, total = \"6\") => {\r\n /** return a promise to hold the script */\r\n return new Promise(async (resolve, reject) => {\r\n var _a;\r\n /** init log */\r\n logCurrentMessage(\"Getting REGULAR Matchmaking recommendations\", logConfig);\r\n /** GET REGULAR VISITOR RECOMMENDATIONS */\r\n let { optout } = APP_CONFIG.aventri_integration.matchmaking;\r\n /** get matchmaking opt out */\r\n let has_mm_optout = optout > 0;\r\n /** get optout response */\r\n let opted_out_mm = has_mm_optout ? !sizzle(`input[id*=${optout}]`)[0].checked : false;\r\n /** get current access token */\r\n let accessToken = localStorage.getItem(\"accessToken\") || \"\";\r\n /** check opt out mm for query creation */\r\n if (opted_out_mm) {\r\n logCurrentMessage(\"Visitor opted out of Matchmaking\\r\\nGetting most popular recommendations...\", logConfig);\r\n }\r\n /** mount recommendations query */\r\n let query = VisitorRecommendationsQuery(APP_CONFIG.atlas_event_id, APP_CONFIG.locale, opted_out_mm ? null : profileResponses, \"6\", accessToken);\r\n /** add query to log */\r\n logStore.update((current) => (Object.assign(Object.assign({}, current), { visitor: Object.assign(Object.assign({}, current.visitor), { regular_recommendations_query: encodeURIComponent(query) }) })));\r\n /** call atlas with the query */\r\n let recommendationResponse = await callAtlasProxy(query, APP_CONFIG.atlas_staging, false);\r\n /** log response */\r\n // console.log({ recommendationResponse });\r\n /** check visitor recommendations */\r\n let recommendations = ((_a = recommendationResponse === null || recommendationResponse === void 0 ? void 0 : recommendationResponse.data) === null || _a === void 0 ? void 0 : _a.exhibitorRecommendationsMultilingual) || [];\r\n /** resolve promise with atlas recommendations */\r\n resolve(recommendations);\r\n });\r\n};\r\n/**\r\n * @_RECOMMENDATION_MBO\r\n * Handle MBO version of visitor recommendation\r\n * @param logConfig The caller log configuration\r\n * @returns A Atlas visitor recommendations list\r\n */\r\nexport const getMBOVisitorRecommendations = async (logConfig, profileResponses, total = \"6\") => {\r\n /** return a promise to hold the script */\r\n return new Promise(async (resolve, reject) => {\r\n var _a;\r\n /** init log */\r\n logCurrentMessage(\"Getting MBO Matchmaking recommendations\", logConfig);\r\n /** GET MBO VISITOR RECOMMENDATIONS */\r\n let { optout } = APP_CONFIG.aventri_integration.matchmaking;\r\n /** get matchmaking opt out */\r\n let has_mm_optout = optout > 0;\r\n /** get optout response */\r\n let opted_out_mm = has_mm_optout ? !sizzle(`input[id*=${optout}]`)[0].checked : false;\r\n /** get current access token */\r\n let accessToken = localStorage.getItem(\"accessToken\") || \"\";\r\n /** check opt out mm for list mounting */\r\n if (opted_out_mm) {\r\n /** log opted out MM */\r\n logCurrentMessage(\"Visitor opted out of Matchmaking\\r\\nGetting MOST_POPULAR recommendations...\", logConfig);\r\n }\r\n /** mount recommendations query */\r\n let query = VisitorRecommendationsQuery(APP_CONFIG.atlas_event_id, APP_CONFIG.locale, opted_out_mm ? null : profileResponses, \"6\", accessToken);\r\n /** add query to log */\r\n logStore.update((current) => (Object.assign(Object.assign({}, current), { visitor: Object.assign(Object.assign({}, current.visitor), { mbo_recommendations_query: encodeURIComponent(query) }) })));\r\n /** call atlas with the query */\r\n let recommendationResponse = await callAtlasProxy(query, APP_CONFIG.atlas_staging, false);\r\n /** log response */\r\n // console.log({ recommendationResponse });\r\n /** check visitor recommendations */\r\n let recommendations = ((_a = recommendationResponse === null || recommendationResponse === void 0 ? void 0 : recommendationResponse.data) === null || _a === void 0 ? void 0 : _a.exhibitorRecommendationsMultilingual) || [];\r\n /** resolve promise with atlas recommendations */\r\n resolve(recommendations);\r\n });\r\n};\r\n/**\r\n * @_RECOMMENDATION_MOST_POPULAR\r\n * Handle MOST_POPULAR version of visitor recommendation\r\n * @param logConfig The caller log configuration\r\n * @returns A Atlas visitor recommendations list\r\n */\r\nexport const getMostPopularVisitorRecommendations = async (logConfig, total = \"6\", shouldLog = true) => {\r\n /** GET MOST_POPULAR VISITOR RECOMMENDATIONS */\r\n /** return a promise to hold the script */\r\n return new Promise(async (resolve, reject) => {\r\n var _a;\r\n /** init log */\r\n if (shouldLog)\r\n logCurrentMessage(\"Getting MOST_POPULAR Matchmaking recommendations\", logConfig);\r\n /** get current access token */\r\n let accessToken = localStorage.getItem(\"accessToken\") || \"\";\r\n /** make recommendations query */\r\n let query = VisitorRecommendationsQuery(APP_CONFIG.atlas_event_id, APP_CONFIG.locale, null, total, accessToken);\r\n /** add query to log */\r\n logStore.update((current) => (Object.assign(Object.assign({}, current), { visitor: Object.assign(Object.assign({}, current.visitor), { most_popular_recommendations_query: encodeURIComponent(query) }) })));\r\n /** call atlas with the query */\r\n let recommendationResponse = await callAtlasProxy(query, APP_CONFIG.atlas_staging, false);\r\n /** log response */\r\n // console.log({ recommendationResponse });\r\n /** check visitor recommendations */\r\n let recommendations = ((_a = recommendationResponse === null || recommendationResponse === void 0 ? void 0 : recommendationResponse.data) === null || _a === void 0 ? void 0 : _a.exhibitorRecommendationsMultilingual) || [];\r\n /** resolve promise with atlas recommendations */\r\n resolve(recommendations);\r\n });\r\n};\r\n/**\r\n * log the current message with the caller log configuration\r\n * @param message The Message to be logged on console and updated on loading and log store\r\n * @param logConfig The caller log configuration\r\n */\r\nconst logCurrentMessage = (message, logConfig) => {\r\n let cleanHelperText = `\\r\\ndocument.getElementsByTagName(\"form\")[0].submit()`;\r\n /** update loading message */\r\n loadingStore.update((current) => (Object.assign(Object.assign({}, current), { message: typeof message === \"string\" ? message.replace(\"\\r\\n\", \"
\").replace(cleanHelperText, \"\") : message })));\r\n /** update log.messages store */\r\n logStore.update((currentState) => (Object.assign(Object.assign({}, currentState), { messages: [...currentState.messages, typeof message === \"string\" ? message.replace(cleanHelperText, \"\") : message] })));\r\n /** log message on console */\r\n console.log(...logMessage(message, logConfig.name, logConfig.type, false, logConfig.color));\r\n};\r\n/** unsubscribe from appConfig store */\r\nunsubscribeAppConfig();\r\n","import { appConfigStore } from \"../../store\";\r\nimport { getAtlasMultilingualProperty } from \"../external/Atlas\";\r\n/** get digested configuration */\r\nlet APP_CONFIG;\r\nlet unsubscribeAppConfig = appConfigStore.subscribe((config) => (APP_CONFIG = config));\r\nexport const makeHtmlRecommendations = (visitorRecommendations) => {\r\n /** limiters */\r\n let recommendationTitleLimit = 51;\r\n let recommendationDescLimit = 140;\r\n let htmlBlock = \"\";\r\n /** iterate over recommendations */\r\n visitorRecommendations.forEach(recommendation => {\r\n let link = getAtlasMultilingualProperty(\"link\", APP_CONFIG.locale, recommendation.multilingual);\r\n let logo = getAtlasMultilingualProperty(\"logo\", APP_CONFIG.locale, recommendation.multilingual);\r\n let title = getAtlasMultilingualProperty(\"title\", APP_CONFIG.locale, recommendation.multilingual);\r\n let description = getAtlasMultilingualProperty(\"description\", APP_CONFIG.locale, recommendation.multilingual);\r\n /** limited text */\r\n let limitedTitle = title.slice(0, recommendationTitleLimit);\r\n let limitedTitleIndicator = limitedTitle.length === title.length ? \"\" : ` ... +${title.length - limitedTitle.length}`;\r\n let limitedDescription = description.slice(0, recommendationDescLimit);\r\n let limitedDescriptionIndicator = limitedDescription.length === description.length ? \"\" : ` ... +${description.length - limitedDescription.length}`;\r\n let recoType = getRecommendationType(recommendation.recommendationType);\r\n htmlBlock += ``;\r\n });\r\n return htmlBlock;\r\n};\r\nexport const getRecommendationType = (type) => {\r\n let recoType = \"\";\r\n switch (String(type)) {\r\n default:\r\n case \"1\":\r\n recoType = \"Most Popular\";\r\n break;\r\n case \"2\":\r\n recoType = \"Behavioural\";\r\n break;\r\n case \"3\":\r\n recoType = \"Active\";\r\n break;\r\n case \"4\":\r\n recoType = \"Similar\";\r\n break;\r\n }\r\n return recoType;\r\n};\r\n/** unsubscribe from appConfig store */\r\nunsubscribeAppConfig();\r\n","import sizzle from \"sizzle\";\r\nimport { loadingStore, appConfigStore, logStore } from \"../store\";\r\nimport { makeHtmlRecommendations } from \"../library/helpers/Html\";\r\nimport { logMessage } from \"./helpers/Logger\";\r\nimport { getMBOProfileResponses, doConnectMeVisitorRegistration, doUSVisitorRegistration, getRegularVisitorRecommendations, getMBOVisitorRecommendations, getMostPopularVisitorRecommendations, getAtlasMultilingualProperty, getRegularProfileResponses, } from \"./external/Atlas\";\r\n/** get digested configuration */\r\nlet APP_CONFIG;\r\nlet unsubscribeAppConfig = appConfigStore.subscribe((config) => (APP_CONFIG = config));\r\n/**\r\n * Handle a visitor registration\r\n * @param logConfig The caller log configuration\r\n */\r\nexport const handleVisitorRegistration = async (logConfig) => {\r\n /** subscribe to log object store */\r\n let LOG;\r\n let unsubscribeFromLogStore = logStore.subscribe((s) => (LOG = s));\r\n /** log start visitor integration and set loading state true */\r\n loadingStore.update((current) => (Object.assign(Object.assign({}, current), { state: true })));\r\n logCurrentMessage(\"Handling visitor registration\", logConfig);\r\n // CONNECT_ME, US_VERSION\r\n // REGULAR, MBO, MOST_POPULAR, NONE\r\n /** get reg and rec type */\r\n let recommendation_type = APP_CONFIG.aventri_integration.matchmaking.type;\r\n let registration_type = APP_CONFIG.aventri_integration.registration.type;\r\n let doProfileRegistration = true;\r\n /** prepare response variables */\r\n let visitorRegistrationId = \"\";\r\n let visitorRecommendations;\r\n let originalRecommendations;\r\n let profileResponses;\r\n /** get MBO profileResponses */\r\n try {\r\n await (async () => {\r\n /** switch visitor recommendations */\r\n switch (recommendation_type) {\r\n case \"REGULAR\":\r\n profileResponses = await getRegularProfileResponses(logConfig, \"Getting visitor recommendations\");\r\n visitorRecommendations = await getRegularVisitorRecommendations(logConfig, profileResponses);\r\n break;\r\n case \"MBO\":\r\n profileResponses = await getMBOProfileResponses(logConfig, \"Getting visitor recommendations\");\r\n visitorRecommendations = await getMBOVisitorRecommendations(logConfig, profileResponses);\r\n break;\r\n case \"MOST_POPULAR\":\r\n profileResponses = null;\r\n visitorRecommendations = await getMostPopularVisitorRecommendations(logConfig);\r\n break;\r\n case \"NONE\":\r\n profileResponses = null;\r\n visitorRecommendations = [];\r\n default:\r\n break;\r\n }\r\n })();\r\n /** Fill recommendations if it returned less than 6 */\r\n if (visitorRecommendations && visitorRecommendations.length < 6) {\r\n /** log filling recommendations */\r\n logCurrentMessage(`Returned ${visitorRecommendations.length} recommendations.\\r\\nGetting filler recommendations`, logConfig);\r\n /** get current recommendations ids list */\r\n let recommendationsIds = visitorRecommendations.map((item) => item.id);\r\n /** get 20 or less most popular recommendations */\r\n let visitorRecommendationsFiller = await getMostPopularVisitorRecommendations(logConfig, \"20\", false);\r\n let filledRecommendations = visitorRecommendations.map((item) => item);\r\n originalRecommendations = visitorRecommendations.map((item) => item);\r\n /** iterate on recommendations filler */\r\n for (let i = 0; i < visitorRecommendationsFiller.length; i++) {\r\n /** if filled to 6 break out of loop */\r\n if (filledRecommendations.length === 6) {\r\n visitorRecommendations = filledRecommendations;\r\n break;\r\n }\r\n /** check if recommendations is not on list and push to filledRecommendations */\r\n if (!recommendationsIds.includes(visitorRecommendationsFiller[i].id))\r\n filledRecommendations.push(visitorRecommendationsFiller[i]);\r\n }\r\n }\r\n else {\r\n originalRecommendations = null;\r\n }\r\n }\r\n catch (err) {\r\n /** force form submit if no mm questions were selected */\r\n doProfileRegistration = false;\r\n console.log({ err });\r\n endVisitorRegistration(err, logConfig, true);\r\n }\r\n /** make visitor registration */\r\n if (doProfileRegistration) {\r\n try {\r\n /** switch visitor registration */\r\n switch (registration_type) {\r\n case \"CONNECT_ME\":\r\n visitorRegistrationId = await doConnectMeVisitorRegistration(logConfig, profileResponses);\r\n break;\r\n case \"US_VERSION\":\r\n visitorRegistrationId = await doUSVisitorRegistration(logConfig, profileResponses);\r\n break;\r\n }\r\n /** make recommendations html */\r\n let htmlRecommendations = makeHtmlRecommendations(visitorRecommendations);\r\n /** log variables */\r\n logStore.update((current) => (Object.assign(Object.assign({}, current), { status: \"OK\", visitor: Object.assign(Object.assign({}, current.visitor), { recommendations: visitorRecommendations, recommendations_html: encodeURIComponent(htmlRecommendations), recommendations_original: originalRecommendations, recommendation_type,\r\n registration_type, registration_id: visitorRegistrationId }) })));\r\n /** get hidden inputs */\r\n let inputPrefix = \"input[id*=\";\r\n let recommendationHTMLInput = sizzle(`textarea[id*=${APP_CONFIG.aventri_integration.recommendations.html}]`);\r\n let recommendationJSONInput = sizzle(`textarea[id*=${APP_CONFIG.aventri_integration.recommendations.json}]`);\r\n let trackingInput = sizzle(`textarea[id*=${APP_CONFIG.aventri_integration.integration.tracking}]`);\r\n let logInput = sizzle(`textarea[id*=${APP_CONFIG.aventri_integration.integration.logs}]`);\r\n let atlasRegIdInput = sizzle(`${inputPrefix}${APP_CONFIG.aventri_integration.registration.atlas_regid}]`);\r\n let integrationStatusInput = sizzle(`${inputPrefix}${APP_CONFIG.aventri_integration.integration.integration_status}]`);\r\n /** fill inputs */\r\n if (recommendationHTMLInput.length > 0)\r\n recommendationHTMLInput[0].value = htmlRecommendations;\r\n if (recommendationJSONInput.length > 0)\r\n recommendationJSONInput[0].value = JSON.stringify(visitorRecommendations);\r\n if (APP_CONFIG.aventri_integration.integration.tracking > 0 && trackingInput.length > 0)\r\n trackingInput[0].value = JSON.stringify([]);\r\n if (logInput.length > 0)\r\n logInput[0].value = JSON.stringify(LOG);\r\n if (atlasRegIdInput.length > 0)\r\n atlasRegIdInput[0].value = visitorRegistrationId;\r\n if (integrationStatusInput.length > 0)\r\n integrationStatusInput[0].value = \"OK\";\r\n /** for each recom field */\r\n visitorRecommendations.forEach((recommendation, index) => {\r\n // current field\r\n let currentRecomField = APP_CONFIG.aventri_integration.recommendations.fields[index];\r\n // number field\r\n let fieldA = sizzle(`${inputPrefix}${currentRecomField.a}]`);\r\n let fieldB = sizzle(`${inputPrefix}${currentRecomField.b}]`);\r\n let fieldC = sizzle(`${inputPrefix}${currentRecomField.c}]`);\r\n let fieldD = sizzle(`${inputPrefix}${currentRecomField.d}]`);\r\n let fieldE = sizzle(`${inputPrefix}${currentRecomField.e}]`);\r\n let fieldF = sizzle(`${inputPrefix}${currentRecomField.f}]`);\r\n /** get recommendation information */\r\n let rec_id = recommendation.id;\r\n let rec_stand = recommendation.stands[0] ? recommendation.stands[0].name : \"\";\r\n let rec_title = getAtlasMultilingualProperty(\"title\", APP_CONFIG.locale, recommendation.multilingual);\r\n let rec_desctription = getAtlasMultilingualProperty(\"description\", APP_CONFIG.locale, recommendation.multilingual);\r\n let rec_link = getAtlasMultilingualProperty(\"link\", APP_CONFIG.locale, recommendation.multilingual);\r\n let rec_logo = getAtlasMultilingualProperty(\"logo\", APP_CONFIG.locale, recommendation.multilingual);\r\n if (fieldA.length > 0)\r\n fieldA[0].value = rec_title;\r\n if (fieldB.length > 0)\r\n fieldB[0].value = rec_stand;\r\n if (fieldC.length > 0)\r\n fieldC[0].value = rec_desctription;\r\n if (fieldD.length > 0)\r\n fieldD[0].value = rec_link;\r\n if (fieldE.length > 0)\r\n fieldE[0].value = rec_logo;\r\n if (fieldF.length > 0)\r\n fieldF[0].value = rec_id;\r\n //\r\n });\r\n /** change loading state */\r\n // loadingStore.update((current) => ({ ...current, state: false }));\r\n /** end visitor registration and submit form */\r\n endVisitorRegistration(\"Done, submiting form.\", logConfig);\r\n }\r\n catch (err) {\r\n /** force form submit if no mm questions were selected */\r\n console.log({ err });\r\n endVisitorRegistration(err, logConfig, true);\r\n }\r\n }\r\n /** unsubscribe from log store */\r\n unsubscribeFromLogStore();\r\n};\r\n/**\r\n * End the visitor registration and submit the aventri form with a delay\r\n * @param message The last loading message\r\n * @param logConfig The caller log configuration\r\n */\r\nconst endVisitorRegistration = (message, logConfig, force = false) => {\r\n /** subscribe to log object store */\r\n let LOG;\r\n let unsubscribeFromLogStore = logStore.subscribe((s) => (LOG = s));\r\n /** check block */\r\n if (!APP_CONFIG.manual_form_submit || force) {\r\n /** Update visitor message */\r\n logCurrentMessage(message, logConfig);\r\n /**\r\n * working on the assumption we only have the aventri form on page.\r\n * because that is the way aventri reg page works, it only has one form per page\r\n */\r\n document.getElementsByTagName(\"form\")[0].submit();\r\n }\r\n else {\r\n logCurrentMessage(`FORM BLOCKED BY CONFIGURATION\\r\\ndocument.getElementsByTagName(\"form\")[0].submit()`, logConfig);\r\n }\r\n console.log({ LOG });\r\n /** unsubscribe from log store */\r\n unsubscribeFromLogStore();\r\n};\r\n/**\r\n * log the current message with the caller log configuration\r\n * @param message The Message to be logged on console and updated on loading and log store\r\n * @param logConfig The caller log configuration\r\n */\r\nconst logCurrentMessage = (message, logConfig) => {\r\n let cleanHelperText = `\\r\\ndocument.getElementsByTagName(\"form\")[0].submit()`;\r\n /** update loading message */\r\n loadingStore.update((current) => (Object.assign(Object.assign({}, current), { message: typeof message === \"string\" ? message.replace(\"\\r\\n\", \"
\").replace(cleanHelperText, \"\") : message })));\r\n /** update log.messages store */\r\n logStore.update((currentState) => (Object.assign(Object.assign({}, currentState), { messages: [...currentState.messages, typeof message === \"string\" ? message.replace(cleanHelperText, \"\") : message] })));\r\n /** log message on console */\r\n console.log(...logMessage(message, logConfig.name, logConfig.type, false, logConfig.color));\r\n};\r\n/** unsubscribe from appConfig store */\r\nunsubscribeAppConfig();\r\n","\r\n","/** start */\r\nimport \"./init\";\r\nimport { appConfigStore, attendeeStore, loadingAttendeeStore } from \"./store\";\r\nimport { getAventriAttendee } from \"./library/external/Aventri\";\r\n/** import ui components */\r\nimport ErrorMessage from \"./components/ErrorMessage.svelte\";\r\nimport Loading from \"./components-ui/Loading.svelte\";\r\nimport VisitorRecommendations from \"./components-ui/VisitorRecommendations.svelte\";\r\n/** import script components */\r\nimport HideAventriFields from \"./components-scripts/HideAventriFields.svelte\";\r\nimport SaveURLParams from \"./components-scripts/SaveURLParams.svelte\";\r\nimport MediaTracking from \"./components-scripts/MediaTracking.svelte\";\r\nimport VisitorRegistration from \"./components-scripts/VisitorRegistration.svelte\";\r\n/** define components */\r\nlet visitorRecommendations = null;\r\nlet hideAventriFields = null;\r\nlet saveUrlParams = null;\r\nlet mediaTracking = null;\r\nlet visitorRegistration = null;\r\nlet loading = null;\r\n/** TARGET ELEMENTS */\r\nlet vrec_el = document.getElementById(\"ui-visitor-recommendations\");\r\nlet haf_el = document.getElementById(\"script-hide-aventri-fields\");\r\nlet sup_el = document.getElementById(\"script-save-url-params\");\r\nlet mtrack_el = document.getElementById(\"script-media-tracking\");\r\nlet vreg_el = document.getElementById(\"script-visitor-registration\");\r\n/** get digested configuration */\r\nlet APP_CONFIG;\r\nlet unsubscribeAppConfig = appConfigStore.subscribe((config) => (APP_CONFIG = config));\r\n/** check for config data */\r\nif (APP_CONFIG) {\r\n /** check attendee after configuration is loaded */\r\n if (window.ATTENDEE_ID) {\r\n /** get submit button */\r\n let submitButton = document.querySelector(\"input[name='reg_button'][type='submit']\");\r\n /** block submit button until we have the response from aventri */\r\n if (submitButton)\r\n submitButton.disabled = true;\r\n /** get attendee from aventri then update attendeeStore */\r\n getAventriAttendee(window.ATTENDEE_ID)\r\n .then((attendeeResponse) => {\r\n /** update attendee store */\r\n attendeeStore.update(() => attendeeResponse);\r\n /** update not loading attendee */\r\n loadingAttendeeStore.update(() => \"loaded\");\r\n /** unblock submit button */\r\n if (submitButton)\r\n submitButton.disabled = false;\r\n /** RENDER UI & SCRIPT COMPONENTS - dependents on ATTENDEE */\r\n visitorRegistration = vreg_el ? new VisitorRegistration({ target: vreg_el }) : null;\r\n })\r\n .catch((err) => {\r\n /** log error message */\r\n console.error(err.message);\r\n /** unblock submit button */\r\n if (submitButton)\r\n submitButton.disabled = false;\r\n /** update not loading attendee */\r\n loadingAttendeeStore.update(() => \"loaded\");\r\n /** render erroMessage on UI components */\r\n visitorRecommendations = vrec_el ? new ErrorMessage({ target: vrec_el, props: { message: err.message } }) : null;\r\n });\r\n }\r\n /** RENDER UI COMPONENTS */\r\n visitorRecommendations = vrec_el ? new VisitorRecommendations({ target: vrec_el }) : null;\r\n loading = new Loading({ target: document.body });\r\n /** RENDER SCRIPTS COMPONENTS */\r\n hideAventriFields = haf_el ? new HideAventriFields({ target: haf_el }) : null;\r\n mediaTracking = mtrack_el ? new MediaTracking({ target: mtrack_el }) : null;\r\n saveUrlParams = sup_el ? new SaveURLParams({ target: sup_el }) : null;\r\n}\r\nelse {\r\n /** render error on UI components */\r\n let errorMessage = \"APP_CONFIG DIDN'T LOAD!\";\r\n visitorRegistration = vrec_el ? new ErrorMessage({ target: vrec_el, props: { message: errorMessage } }) : null;\r\n}\r\n/** unsubscribe from appConfig store */\r\nunsubscribeAppConfig();\r\n/** EXPORTS */\r\nexport { visitorRecommendations, saveUrlParams, visitorRegistration, loading, hideAventriFields, mediaTracking };\r\n"],"names":["noop","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","null_to_empty","value","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","element","name","document","createElement","text","data","createTextNode","space","attr","attribute","removeAttribute","getAttribute","setAttribute","set_data","wholeText","current_component","set_current_component","component","onDestroy","Error","get_current_component","$$","on_destroy","push","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","add_render_callback","flushing","seen_callbacks","Set","flush","i","length","update","pop","callback","has","add","clear","fragment","before_update","dirty","p","ctx","after_update","outroing","make_dirty","then","fill","init","options","instance","create_fragment","not_equal","props","parent_component","bound","on_mount","on_disconnect","context","Map","callbacks","skip_bound","ready","ret","rest","hydrate","nodes","Array","from","childNodes","children","l","c","intro","block","delete","local","customElement","m","new_on_destroy","map","filter","mount_component","SvelteComponent","[object Object]","detaching","d","destroy_component","this","$destroy","type","index","indexOf","splice","$$props","obj","$$set","keys","subscriber_queue","writable","start","stop","subscribers","set","new_value","run_queue","s","subscribe","invalidate","subscriber","appConfigStore","attendeeStore","loadingAttendeeStore","loadingStore","state","message","logStore","messages","status","visitor","youtubePlayersStore","defaultLogColors","bg","color","logTitleCss","getLogOptions","_type","_error","_color","logCss","typeText","errorLogColor","logLoaded","_name","typeOptions","logMessage","_message","window","CONNECT_ME","full_config_path","server_url","path_name","path_edition","console","log","error","support","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","matches","contains","expando","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","hasOwn","hasOwnProperty","arr","pushNative","slice","list","elem","len","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","toString","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","toLowerCase","dir","next","apply","call","nodeType","e","els","j","Sizzle","selector","results","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","replace","toSelector","join","querySelectorAll","qsaError","cache","key","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","split","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","doc","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","find","getAttributeNode","elems","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","val","undefined","specified","sel","msg","uniqueSort","duplicates","detectDuplicates","sortStable","sort","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","first"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","last","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","_matchIndexes","eq","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","concat","prototype","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","Math","random","matcherFromGroupMatchers","token","compiled","defaultValue","_sizzle","noConflict","module","exports","APP_CONFIG","unsubscribeAppConfig","config","callProxy","async","uri","proxyUrl","fetch","jsonResult","json","ok","attendeeid","response","callAventri","aventriUriParams","aventriResourceUri","aventriProxyUri","callAtlasProxy","query","staging","encodeUri","atlasProxyUri","encodeURIComponent","CountryList","Afeganistão","Africa Do Sul","Albania","Alemanha","American Samoa","Andorra","Angola","Anguilla","Antigua","Antilhas Holandesas","Arabia Saudita","Argelia","Argentina","Armenia","Aruba","Ascension Island","Australia","Austria","Azerbaijao","Bahamas","Bahrain","Balearic Islands","Bangladesh","Barbados","Belgica","Belize","Benin","Bermudas","Bielorussia","Bolivia","Bosnia","Botswana","Brasil","British Indian Ocean Territory","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Butao","Cabo Verde","Caicos","Camaroes","Camboja","Canada","Canary Islands","Caribe","Casaquistao","Central African Rep.","Chad Republic","Chile","China","Chipre","Cidade Do Vaticano","Colombia","Comoros","Congo","Cook Ilhas","Coreia Do Norte","Coreia Do Sul","Costa Do Marfim","Costa Rica","Croacia","Cuba","Curacao","Diego Garcia","Dinamarca","Djibouti","Dominica","East Timor","Egito","El Salvador","Emirados Arabes Unidos","Equador","Eritrea","Escocia","Eslovaquia Rep.","Eslovenia","Espanha","Estados Unidos","Estonia","Etiopia","Fiji","Filipinas","Finlandia","Franca","Gabao","Gambia","Gana","Georgia","Gibraltar","Granada","Grecia","Groenlandia","Guadalupe","Guam","Guatemala","Guiana","Guiana Francesa","Guinea, Peoples Rep.","Guine-Bissau","Haiti","Heard And Mcdonald Islands","Holanda","Honduras","Hong Kong","Hungria","Iemen","Ilhas Cayman","Ilhas Malvinas","Ilhas Virgens","India","Indonesia","Inglaterra","Ira","Iraque","Irlanda","Irlanda Do Norte","Islandia","Israel","Italia","Jamaica","Japao","Jordania","Kirghizia","Kiribati","Kuwait","Laos","Lesoto","Letonia","Libano","Liberia","Libia","Liechtenstein","Lituania","Luxemburgo","Macau","Macedonia","Madagascar","Malasia","Malawi","Maldivas (Ilhas)","Mali","Malta","Marrocos","Marshall Islands","Martinica","Mauritania","Mauritius","Mayotte Island","Melilla","Mexico","Micronesia","Mocambique","Moldavia","Monaco","Mongolia","Montenegro","Montserrat","Mustique","Namibia","Nauru","Nepal","Nicaragua","Niger Republic","Nigeria","Niue Island","Norfolk Island","Northern Mariana Islands","Noruega","Nova Caledonia","Nova Zelandia","Oman","Palau Republic","Palm Island","Panama","Papua","Paquistao","Paraguai","Peru","Pitcairn","Polonia","Porto Rico","Portugal","Qatar","Quenia","Quirquistao","Reino Unido","Rep. Dominicana","Rep. Tcheca","Reunion Island","Romenia","Rota","Russia","San Marino","Sao Tome","Senegal","Serbia","Serra Leoa","Seychelles","Seychelles Island","Singapura","Siria","Somalia","Sri Lanka","Suazilandia","Sudao","Suecia","Suica","Suriname","Svalbard And Jan Mayen Islands","Tadjiquistao","Tailandia","Taiti","Taiwan","Tanzania","Tinian","Togo","Tonga","Trinidad Tobago","Tunisia","Turquemenistao","Turquia","Tuvalu","Ucrania","Uganda","Uniao De Mayamar","Uruguai","Uzbequistao","Vanuatu","Venezuela","Vietna","Wales","Zaire","Zambia","Zimbabue","findAttendeeResponse","attendeeResponses","defaultReturn","isArray","findResult","getAventriQuestionsDetails","aventriQuestionId","aventri_event_id","getAventriAttendeeRegInformation","ATTENDEE","jobTitleAlternative","ATTENDEE_RESPONSES","responses","attendee","firstName","lastName","email","country","jobTitle","DDI","DDD","mobile","addressLine1","city","postcode","DDIFix","fullMobile","countryCode","visitorType","hasOtherJobTitle","includes","aventri_integration","custom_optional","job_title","registration","types","currentCategory","category","categoryid","currentSubCategory","subcategory","categoryToUse","foundCategory","item","normalized","getAventriRejectContact","logConfig","optOutType","contact_optout","rejectContactObject","event","mail","phone","sms","reed","thirdParty","logCurrentMessage","contact","reed_options","event_options","thirdparty_contact","reedContactSelection","sizzle","thirdPartyContactSelection","reedOptionsSelection","eventOptionsSelection","external","externalResponse","JSON","stringify","parse","err","cleanHelperText","current","assign","currentState","loading","loadingGif","loadingGifSize","loading_gif_size","unsubscribeFromLoadingStore","style","overflow","LOADING_ATTENDEE","unsubscribeAppConfigStore","unsubscribeAttendeeStore","unsubscribeLoadingAttendeeStore","recommendations","logName","logType","tStart","performance","now","logColor","fieldsToHide","html","integration","logs","tracking","atlas_regid","integration_status","fields","recomField","f","field","elementToHide","parentElement","cssText","tEnd","round","handleAttendeeEventActionTracking","eventType","eventCategory","eventAction","contentLabel","contentId","trackingObject","aventriEventId","aventriAttendeeId","ATTENDEE_ID","trackingJSONObject","trackingQuestionId","trackingProxyUri","callTrackingProxy","handleCloseYoutubeModal","YT_PLAYERS","unsubscribeYoutubePlayersStore","yts","dataset","stopContent","getPlayerState","pauseVideo","handleYoutubeStateChange","playedPercentage","getCurrentTime","getDuration","handleSoundcloudWidget","w","currentSound","act","pos","q1","q2","q3","q4","q5","q6","go","lab","cat","startedPlay","widget","SC","Widget","bind","Events","READY","getCurrentSound","cs","PLAY","playState","loadedProgress","setTimeout","PAUSE","PLAY_PROGRESS","FINISH","YouTubeIframeLoader","src","loaded","listeners","load","_this","onYouTubeIframeAPIReady","script","body","YT","unsubscribeFromLogStore","startMessage","lastState","ytIndex","player","url","Player","events","onStateChange","h","title","removeEventListener","VisitorRegistrationQuery","eventEditionId","locale","badgeNumber","badgeLocation","accessToken","mobilePhone","countryAlpha3","profileResponses","rejectContact","_a","_b","_c","_d","_e","_f","_g","_h","VisitorRecommendationsQuery","maxResult","getAtlasMultilingualProperty","atlasMultilingual","currentItem","lastItemWithValue","multilingualItem","itemKeyValue","getRegularProfileResponses","actionMessage","reject","mmQuestions","reg_ids","matchmaking","questionsToFetch","questionId","questionResults","questionSelection","selectedOptions","itemIndex","replaceAll","Number","questionDetail","getResponses","all","getRegularQuestionsDetails","mmQuestionSelected","selectedOption","optionPPSId","choices","reportname","getMBOProfileResponses","mbo_ids","mbo_regular_ids","mboCombo","mboParent","mboChild","isParentSelected","question","childrenSelection","selectedChildren","parentQuestionDetail","childQuestionDetail","getMBOQuestionsDetails","choiceIndex","childPPSQuestionId","parentPPSQuestionId","doFakeVisitorRegistration","getMostPopularVisitorRecommendations","total","shouldLog","localStorage","getItem","atlas_event_id","most_popular_recommendations_query","recommendationResponse","atlas_staging","exhibitorRecommendationsMultilingual","getRecommendationType","recoType","handleVisitorRegistration","LOG","visitorRecommendations","originalRecommendations","recommendation_type","registration_type","doProfileRegistration","visitorRegistrationId","optout","opted_out_mm","regular_recommendations_query","getRegularVisitorRecommendations","mbo_recommendations_query","getMBOVisitorRecommendations","recommendationsIds","visitorRecommendationsFiller","filledRecommendations","endVisitorRegistration","attendeeInfo","registration_query","dev_mode","registrationResponse","createVisitorRegistration","registrationId","doConnectMeVisitorRegistration","doUSVisitorRegistration","htmlRecommendations","htmlBlock","recommendation","link","multilingual","logo","description","limitedTitle","limitedTitleIndicator","limitedDescription","limitedDescriptionIndicator","recommendationType","categories","categoryName","makeHtmlRecommendations","recommendations_html","recommendations_original","registration_id","inputPrefix","recommendationHTMLInput","recommendationJSONInput","trackingInput","logInput","atlasRegIdInput","integrationStatusInput","currentRecomField","fieldA","fieldB","fieldC","fieldD","fieldE","fieldF","rec_id","rec_stand","stands","rec_title","rec_desctription","rec_link","rec_logo","force","manual_form_submit","__awaiter","thisArg","_arguments","P","generator","submitButton","querySelector","currentPageNumberInput","currentPageNumber","pages","startingAction","preventDefault","notOnLastPageMessage","noActionMessage","vrec_el","haf_el","sup_el","mtrack_el","vreg_el","attendeeId","getAventriAttendee","attendeeResponse","visitorRegistration","VisitorRegistration","catch","ErrorMessage","VisitorRecommendations","Loading","hideAventriFields","HideAventriFields","mediaTracking","MediaTracking","saveUrlParams","SaveURLParams","errorMessage"],"mappings":"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"}