{"version":3,"file":"app.js","sources":["../../Softube.Styleguide/node_modules/rollup-plugin-node-globals/src/global.js","../../Softube.Styleguide/node_modules/promise-polyfill/src/finally.js","../../Softube.Styleguide/node_modules/promise-polyfill/src/index.js","../../Softube.Styleguide/node_modules/promise-polyfill/src/polyfill.js","../../Softube.Styleguide/src/i18n.js","../../Softube.Styleguide/src/base/util.js","../../Softube.Styleguide/src/base/localStorage.js","../../Softube.Styleguide/src/store/modules/modals.js","../../Softube.Styleguide/src/store/modules/messages.js","../../Softube.Styleguide/src/store/modules/newsletter.js","../../Softube.Styleguide/src/store/modules/support.js","../../Softube.Styleguide/src/store/modules/products-list.js","../../Softube.Styleguide/src/store/modules/cookie-consent.js","../../Softube.Styleguide/src/store/modules/contents.js","../../Softube.Styleguide/src/store/modules/account.js","../../Softube.Styleguide/src/store/modules/licenses.js","../../Softube.Styleguide/src/base/analytics/track-product-redeem.js","../../Softube.Styleguide/src/store/modules/input-validation.js","../../Softube.Styleguide/src/base/ascii-folder.js","../../Softube.Styleguide/src/store/modules/checkout.js","../../Softube.Styleguide/src/store/modules/page-header.js","../../Softube.Styleguide/src/base/analytics/track-cart.js","../../Softube.Styleguide/src/store/modules/shopping-cart.js","../../Softube.Styleguide/src/store/index.js","../../Softube.Styleguide/node_modules/headroom.js/dist/headroom.js","../../Softube.Styleguide/node_modules/rollup-plugin-node-builtins/src/es6/events.js","../../Softube.Styleguide/src/base/breakpoints.js","../../Softube.Styleguide/src/base/tracker.js","../../Softube.Styleguide/src/base/scroll-controller.js","../../Softube.Styleguide/node_modules/process-es6/browser.js","../../Softube.Styleguide/node_modules/rollup-plugin-node-builtins/src/es6/setimmediate.js","../../Softube.Styleguide/node_modules/rollup-plugin-node-builtins/src/es6/timers.js","../../Softube.Styleguide/src/components/support/support-routes.js","../../Softube.Styleguide/src/base/bgset.js","../../Softube.Styleguide/src/base/analytics/tracking-util.js","../../Softube.Styleguide/src/base/analytics/track-product-click.js","../../Softube.Styleguide/src/base/analytics/track-product-impression.js","../../Softube.Styleguide/src/elements/forms/validating-form.js","../../Softube.Styleguide/src/base/slide-transition.js","../../Softube.Styleguide/src/components/my-pages/my-pages-routes.js","../../Softube.Styleguide/src/components/search/search-routes.js","../../Softube.Styleguide/src/components/routing/routing-routes.js","../../Softube.Styleguide/src/components/card-collection-hero/card-collection-hero.vue","../../Softube.Styleguide/src/base/analytics/track-checkout.js","../../Softube.Styleguide/src/components/quick-checkout/payment/payment.vue","../../Softube.Styleguide/src/components/quick-checkout/purchase/purchase-panel.js","../../Softube.Styleguide/src/base/error-handler.js","../../Softube.Styleguide/node_modules/vue-router/dist/vue-router.esm.js","../../Softube.Styleguide/src/app.js"],"sourcesContent":["export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","export default function(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n return constructor.resolve(callback()).then(function() {\n return constructor.reject(reason);\n });\n }\n );\n}\n","import promiseFinally from './finally';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","import Promise from './index';\nimport promiseFinally from './finally';\n\nvar globalNS = (function() {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n})();\n\nif (!globalNS.Promise) {\n globalNS.Promise = Promise;\n} else if (!globalNS.Promise.prototype['finally']) {\n globalNS.Promise.prototype['finally'] = promiseFinally;\n}\n","import Vue from 'vue';\r\nimport VueI18n from 'vue-i18n';\r\n\r\nVue.use(VueI18n);\r\n\r\nexport default new VueI18n({\r\n locale: document.documentElement.lang,\r\n fallbackLocale: 'en'\r\n});","\r\n/**\r\n * @module util.js\r\n *\r\n * this file contains utility functions that is used in multiple\r\n * places.\r\n */\r\n\r\n/**\r\n * takes a function and debounces it\r\n * @param {function} fn - the function to debounce\r\n * @param {Number} delay - the debounce rate.\r\n * @return {function} the debounced function.\r\n */\r\nexport function debounce(fn, delay) {\r\n var timer = null;\r\n return function () {\r\n var context = this, args = arguments;\r\n clearTimeout(timer);\r\n timer = setTimeout(function () {\r\n fn.apply(context, args);\r\n }, delay);\r\n };\r\n}\r\n\r\nexport function getParamByName(name, url) {\r\n if (!url) url = window.location.href;\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n}\r\n\r\nexport function pick(o, ...props) {\r\n return Object.assign({}, ...props.map(prop => ({[prop]: o[prop]})));\r\n}\r\n\r\nexport function omit(o, ...props) {\r\n return Object\r\n .assign({}, \r\n ...Object\r\n .entries(o)\r\n .filter(([key]) => !props.includes(key))\r\n .map(([key, value]) => ({[key]: value })));\r\n}\r\n\r\nexport function get(o, ...args) {\r\n if (!o) { return undefined; }\r\n let fieldName = args.shift();\r\n if (fieldName.includes('.')) { return get.apply(this, [o, ...fieldName.split('.'), ...args]); }\r\n if (!(fieldName in o)) { return undefined; }\r\n if (args.length) { return get.apply(this, [o[fieldName], ...args]); }\r\n return o[fieldName];\r\n}\r\n\r\nexport function testLocalStorage() {\r\n var test = 'test';\r\n try {\r\n localStorage.setItem(test, test);\r\n localStorage.removeItem(test);\r\n return true;\r\n } catch(e) {\r\n return false;\r\n }\r\n}","import {setCookie, getCookie} from 'tiny-cookie';\r\n\r\nexport const supportsLocalStorage = function() {\r\n var test = 'test';\r\n try {\r\n localStorage.setItem(test, test);\r\n localStorage.removeItem(test);\r\n return true;\r\n } catch(e) {\r\n return false;\r\n }\r\n}();\r\n\r\n/**\r\n * Deserialize and get the value found at the specified key\r\n * \r\n * @param {String} key the key to serialize object into\r\n * @param {Object} options options\r\n * @param {Object} options.fallbackToCookie whether we should also try storing in cookie\r\n * @param {Object} options.defaultValue a fallback to return if key isn't set\r\n */\r\nexport function getDeserializeObject(key, { fallbackToCookie, defaultValue }) {\r\n let json = (!supportsLocalStorage && fallbackToCookie) \r\n ? getCookie(key)\r\n : localStorage.getItem(key);\r\n\r\n if (!json) { return defaultValue || undefined; }\r\n try {\r\n return JSON.parse(json);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n return defaultValue || undefined;\r\n }\r\n}\r\n\r\nexport function setSerializedObject(key, obj, { fallbackToCookie }) {\r\n let json = JSON.stringify(obj);\r\n if (!supportsLocalStorage && fallbackToCookie) {\r\n setCookie(key, json, {expires:'1Y'});\r\n }\r\n\r\n localStorage.setItem(key, json);\r\n}","import Vue from 'vue';\r\n\r\nimport {\r\n setSerializedObject, \r\n getDeserializeObject\r\n} from '../../base/localStorage';\r\n\r\nlet idCounter = 0;\r\nconst MESSAGES_KEY = 'sui-seen-messages';\r\n\r\nexport const NAMESPACE = 'modals';\r\n\r\nexport const MUTATION_TYPES = {\r\n dismissModal: 'dismissModal',\r\n showModal: 'showModal',\r\n updateModalContent: 'updateModalContent'\r\n};\r\n\r\nexport const ACTION_TYPES = {\r\n showMessageModals: 'showMessageModals'\r\n}\r\n\r\nconst state = {\r\n show: false,\r\n closeable: false,\r\n light: false,\r\n id: '',\r\n type: '',\r\n dismissedPermanently: false,\r\n content: {}\r\n};\r\n\r\nconst mutations = {\r\n [MUTATION_TYPES.dismissModal](state) {\r\n if (state.dismissedPermanently && state.id) {\r\n let seenMessages = getDeserializeObject(MESSAGES_KEY, { defaultValue: [], fallbackToCookie: true });\r\n seenMessages.push(state.id);\r\n setSerializedObject(MESSAGES_KEY, seenMessages, { fallbackToCookie: true });\r\n }\r\n\r\n state.show = false;\r\n state.type = '';\r\n state.light = false;\r\n Vue.set(state, 'content', {});\r\n },\r\n\r\n [MUTATION_TYPES.showModal](state, modal) {\r\n if (state.show) { return; }\r\n state.show = true;\r\n state.id = modal.id;\r\n state.closeable = modal.closeable;\r\n state.light = modal.light;\r\n state.dismissedPermanently = modal.dismissedPermanently;\r\n state.type = modal.type;\r\n Vue.set(state, 'content', modal.content);\r\n },\r\n\r\n [MUTATION_TYPES.updateModalContent](state, content) {\r\n Vue.set(state, 'content', content);\r\n }\r\n};\r\n\r\nconst actions = {\r\n\r\n /**\r\n * Shows a modal to the user if he hasn't already dismissed the \r\n * message.\r\n * \r\n * @param {Object} state \r\n * @param {Object} payload \r\n * @param {Object} payload.modals \r\n * @param {Object} payload.adminMode\r\n */\r\n [ACTION_TYPES.showMessageModals]({commit}, { modals, adminMode }) {\r\n let seenMessages = getDeserializeObject(MESSAGES_KEY, { defaultValue: [], fallbackToCookie: true });\r\n for (const modal of modals) {\r\n if (adminMode || !modal.dismissedPermanently || (modal.dismissedPermanently && !seenMessages.includes(modal.id))) {\r\n commit(MUTATION_TYPES.showModal, modal);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default {\r\n state,\r\n actions,\r\n mutations,\r\n namespaced: true\r\n};","import Vue from 'vue';\r\nimport axios from 'axios';\r\nimport {get,testLocalStorage} from '../../base/util';\r\nimport {\r\n NAMESPACE as modalNamespace,\r\n ACTION_TYPES as modalActions\r\n} from './modals';\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof(apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { MESSAGES } = overrides; \r\n\r\nexport const NAMESPACE = 'messages';\r\n\r\nexport const MUTATION_TYPES = {\r\n prependMessage: 'prependMessage',\r\n addMessage: 'addMessage',\r\n addMessages: 'addMessages',\r\n attachMessageTimer: 'attachMessageTimer',\r\n updateMessage: 'updateMessage',\r\n resetMessageTimeout: 'resetMessageTimeout',\r\n dismissMessage: 'dismissMessage',\r\n setFetchingMessages: 'setFetchingMessages',\r\n};\r\n\r\nexport const ACTION_TYPES = {\r\n updateMessage: 'updateMessage',\r\n showMessage: 'showMessage',\r\n startMessageTimer: 'startMessageTimer',\r\n fetchContextMessages: 'fetchContextMessages'\r\n};\r\n\r\nlet msgCounter = 0;\r\n\r\nconst state = {\r\n fetchingMessages: false,\r\n messages: []\r\n};\r\n\r\nconst hasLocalStorage = testLocalStorage();\r\nconst MESSAGES_KEY = 'sui-seen-messages';\r\n\r\n/**\r\n * Gets all the message ids the current user has seen and \r\n * been dismissed. \r\n * @returns {Array} array of message ids.\r\n */\r\nfunction getSeenMessageIds() {\r\n let messages = [];\r\n let json = localStorage.getItem(MESSAGES_KEY);\r\n if (json) {\r\n try {\r\n messages = JSON.parse(json);\r\n if (!Array.isArray(messages)) {\r\n messages = [];\r\n }\r\n }\r\n catch(error) {}\r\n }\r\n return messages;\r\n}\r\n\r\nfunction flagMessageAsSeen(id) {\r\n if (!hasLocalStorage) { return; }\r\n let messages = getSeenMessageIds();\r\n if (!messages.includes(id)) {\r\n messages.push(id);\r\n localStorage.setItem(MESSAGES_KEY, JSON.stringify(messages));\r\n }\r\n}\r\n\r\nconst mutations = {\r\n [MUTATION_TYPES.setFetchingMessages](state, fetching) {\r\n state.fetchingMessages = fetching;\r\n },\r\n\r\n [MUTATION_TYPES.prependMessage](state, message) {\r\n delete message.prepend;\r\n state.messages.splice(0, 0, message);\r\n },\r\n\r\n [MUTATION_TYPES.addMessage](state, message) {\r\n state.messages.push(message);\r\n },\r\n\r\n [MUTATION_TYPES.addMessages](state, messages) {\r\n state.messages.push(...messages);\r\n },\r\n\r\n [MUTATION_TYPES.attachMessageTimer](state, { id, timer }) {\r\n var msg = state.messages.find(m => m.id === id);\r\n msg.$timer = timer;\r\n },\r\n\r\n [MUTATION_TYPES.updateMessage](state, { id, message }) {\r\n let index = state.messages.findIndex(msg => msg.id === id);\r\n if (index < 0) { return; }\r\n var msg = state.messages[index];\r\n Vue.set(state.messages, index, { ...msg, ...message });\r\n },\r\n\r\n [MUTATION_TYPES.resetMessageTimeout](state, { id }) {\r\n var msg = state.messages.find(msg => msg.id === id);\r\n clearTimeout(msg.$timer);\r\n },\r\n\r\n [MUTATION_TYPES.dismissMessage](state, { id }) {\r\n let index = state.messages.findIndex(msg => msg.id === id);\r\n if (index < 0) { return; }\r\n var msg = state.messages[index];\r\n clearTimeout(msg.$timer);\r\n state.messages.splice(index, 1);\r\n if (msg.dismissedPermanently) {\r\n flagMessageAsSeen(msg.id);\r\n }\r\n }\r\n};\r\n\r\nconst actions = {\r\n [ACTION_TYPES.updateMessage]({ dispatch, commit }, ctx) {\r\n commit(MUTATION_TYPES.updateMessage, ctx);\r\n if (ctx.message.timeToLive) {\r\n return dispatch(ACTION_TYPES.startMessageTimer, {id:ctx.id});\r\n }\r\n },\r\n\r\n /**\r\n * Fetches via the api, if there are any messages to show for the current user\r\n * \r\n * @param {Object} context the vuex context\r\n * @param {Object} payload the payload\r\n * @param {String} payload.pageId the id of the current page\r\n * @param {String} payload.adminMode setting this to true will make `dismissedPermanently` not be taken into account. \r\n */\r\n [ACTION_TYPES.fetchContextMessages]({ dispatch, commit }, { pageId, adminMode }) {\r\n commit(MUTATION_TYPES.setFetchingMessages, true);\r\n let url = MESSAGES || '/api/v1/messages';\r\n return axios\r\n .get(url, { params: { pageId }})\r\n .then(response => {\r\n let seenMessages = getSeenMessageIds();\r\n let messages = get(response, 'data.result.messages');\r\n let notSeenMessages = messages.filter((msg) => {\r\n if (!hasLocalStorage) { return true; }\r\n if (!msg.dismissedPermanently || adminMode) { return true; }\r\n return !seenMessages.includes(msg.id);\r\n });\r\n\r\n for (const msg of notSeenMessages) {\r\n dispatch(ACTION_TYPES.showMessage, msg);\r\n }\r\n\r\n // The modals are fetched in the \"messages\" call since they are in a way\r\n // messages, however, modal state is handled in its own store.\r\n let modals = get(response, 'data.result.modals') || [];\r\n if (modals && Array.isArray(modals) && modals.length) {\r\n dispatch(`${modalNamespace}/${modalActions.showMessageModals}`, { modals, adminMode }, { root: true });\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n commit(MUTATION_TYPES.setFetchingMessages, false);\r\n });\r\n },\r\n\r\n [ACTION_TYPES.showMessage]({ dispatch, commit }, message) {\r\n if (!message.id) {\r\n message.id = ++msgCounter;\r\n }\r\n\r\n // for messages in loading state, no sense in\r\n // making them timeout automatically disapear...\r\n if (message.loading) {\r\n message.timeToLive = 0;\r\n }\r\n\r\n // ... or no timeToLive supplied at all?\r\n else if (!message.hasOwnProperty('timeToLive')) {\r\n message.timeToLive = 5000;\r\n }\r\n\r\n let mutation = message.prepend \r\n ? MUTATION_TYPES.prependMessage \r\n : MUTATION_TYPES.addMessage;\r\n\r\n commit(mutation, {\r\n loading: false,\r\n type: 'success',\r\n removeable: true,\r\n ...message\r\n });\r\n\r\n let dismissedPromise;\r\n // if the message has a limited time to live\r\n // we start the timer. However, put it last on the stack\r\n // though, so we let it render first.\r\n if (message.timeToLive > 0) {\r\n dismissedPromise = dispatch(ACTION_TYPES.startMessageTimer, { id: message.id });\r\n }\r\n\r\n return message.id;\r\n },\r\n\r\n [ACTION_TYPES.startMessageTimer]({ state, commit }, { id }) {\r\n let msg = state.messages.find(m => m.id === id);\r\n if (!msg || msg.timeToLive <= 0) { return; }\r\n return new Promise((resolve, reject) => {\r\n let timer = setTimeout(() => {\r\n commit(MUTATION_TYPES.dismissMessage, {id});\r\n resolve(id);\r\n }, msg.timeToLive);\r\n commit(MUTATION_TYPES.attachMessageTimer, {id,timer});\r\n });\r\n }\r\n};\r\n\r\nexport default {\r\n state,\r\n mutations,\r\n actions,\r\n namespaced: true\r\n};","import axios from 'axios';\r\nimport {\r\n NAMESPACE as nsMessages,\r\n ACTION_TYPES as atMessages \r\n} from './messages'\r\n\r\nexport const NAMESPACE = 'newsletter';\r\nexport const MUTATIONS = {\r\n setLoading: 'setLoading'\r\n};\r\nexport const ACTION_TYPES = {\r\n subscribe: 'subscribe'\r\n};\r\n\r\n/**\r\n * page footer store.\r\n * NOTE: maybe this should instead be a \"newsletter\" store or similar.\r\n */\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof(apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { NEWSLETTER } = overrides;\r\n\r\nconst state = {\r\n loading: false\r\n};\r\n\r\nconst mutations = {\r\n [MUTATIONS.setLoading](state, loading) {\r\n state.loading = loading;\r\n }\r\n};\r\n\r\nconst actions = {\r\n\r\n [ACTION_TYPES.subscribe]({commit, dispatch}, email) {\r\n const url = NEWSLETTER || '/api/v1/newsletter-subscription'\r\n commit('setLoading', true);\r\n\r\n return axios\r\n .post(url, { email })\r\n .then(response => {\r\n let message = {\r\n icon: 'info',\r\n text: response.data.message,\r\n type: 'success'\r\n };\r\n\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, message, { root: true });\r\n })\r\n .catch(error => {\r\n if (!error.response && !error.response.data) { return; }\r\n let message = {\r\n icon: 'info',\r\n text: error.response.data.message,\r\n type: 'callout'\r\n };\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, message, { root: true });\r\n })\r\n .finally(() => {\r\n commit('setLoading', false);\r\n });\r\n }\r\n};\r\n\r\nexport default {\r\n namespaced: true,\r\n actions,\r\n mutations,\r\n state\r\n};\r\n","\r\nimport axios from 'axios';\r\nimport {debounce} from '../../base/util';\r\n\r\n/**\r\n * support\r\n * this vuex module handles the support logic.\r\n */\r\n\r\nconst namespaced = true;\r\n\r\nexport const NAMESPACE = 'support';\r\n\r\nexport const MUTATION_TYPES = {\r\n setPageId: 'setPageId',\r\n setFlat: 'setFlat',\r\n operationStarted: 'operationStarted',\r\n operationEnded: 'operationEnded',\r\n setMetaSettings: 'setMetaSettings',\r\n updateMetaSettings: 'updateMetaSettings',\r\n setActiveFilters: 'setActiveFilters',\r\n setTotalResults: 'setTotalResults',\r\n clearActiveFilters: 'clearActiveFilters',\r\n setSupportGroups: 'setSupportGroups',\r\n setFlatSupportItems: 'setFlatSupportItems',\r\n toggleItem: 'toggleItem',\r\n setQuery: 'setQuery',\r\n clearItemToOpen: 'clearItemToOpen'\r\n};\r\n\r\nexport const ACTION_TYPES = {\r\n init: 'init',\r\n fetchResult: 'fetchResult',\r\n setActiveFilters: 'setActiveFilters',\r\n setQuery: 'setQuery',\r\n clearActiveFilters: 'clearActiveFilters'\r\n};\r\n\r\nexport const GETTER_TYPES = {\r\n\r\n};\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof(apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { SUPPORT, SUPPORT_FLAT } = overrides;\r\n\r\nconst state = {\r\n pageId: null,\r\n operationsRunning: 0,\r\n totalResults: 0,\r\n supportItems: [],\r\n query: null,\r\n flat: false,\r\n metaSettings: {\r\n recentQueries: [],\r\n tagGroups: []\r\n },\r\n itemToOpen: {\r\n groupId: '',\r\n itemId: ''\r\n }\r\n};\r\n\r\nconst mutations = {\r\n [MUTATION_TYPES.setPageId](state, pageId) {\r\n state.pageId = pageId;\r\n },\r\n\r\n [MUTATION_TYPES.setFlat](state, flat) {\r\n if (flat && SUPPORT_FLAT) { state.supportEndpoint = SUPPORT_FLAT; }\r\n state.flat = flat;\r\n },\r\n\r\n [MUTATION_TYPES.operationStarted](state) {\r\n state.operationsRunning++;\r\n },\r\n\r\n [MUTATION_TYPES.operationEnded](state) {\r\n state.operationsRunning--;\r\n },\r\n\r\n [MUTATION_TYPES.setMetaSettings](state, { tagGroups, recentQueries }) {\r\n tagGroups.forEach(group => group.activeOptions = []);\r\n state.metaSettings.tagGroups = tagGroups;\r\n state.metaSettings.recentQueries = recentQueries;\r\n },\r\n\r\n [MUTATION_TYPES.updateMetaSettings](state, { tagGroups }) {\r\n state.metaSettings.tagGroups.forEach(tagGroup => {\r\n let serverTagGroup = tagGroups.filter((x) => x.id === tagGroup.id)[0];\r\n if (!serverTagGroup) return;\r\n serverTagGroup.options.forEach(serverOption => {\r\n let currentOption = tagGroup.options.filter(o => o.id == serverOption.id)[0];\r\n if (!currentOption) return;\r\n currentOption.numberOfHits = serverOption.numberOfHits;\r\n });\r\n });\r\n },\r\n\r\n [MUTATION_TYPES.setActiveFilters](state, { id, activeOptions }) {\r\n state.metaSettings.tagGroups\r\n .filter(group => group.id == id)\r\n .forEach(group => group.activeOptions = activeOptions);\r\n },\r\n\r\n [MUTATION_TYPES.setTotalResults](state, totalResults) {\r\n state.totalResults = totalResults;\r\n },\r\n\r\n [MUTATION_TYPES.clearActiveFilters](state) {\r\n state.metaSettings.tagGroups.forEach(group => group.activeOptions = []);\r\n },\r\n\r\n [MUTATION_TYPES.setSupportGroups](state, supportItems) {\r\n // just add a open flag to all items.\r\n [].concat.apply([], supportItems.map(group => group.items))\r\n .forEach(item => item.open = false);\r\n state.supportItems = supportItems;\r\n },\r\n\r\n [MUTATION_TYPES.setFlatSupportItems](state, supportItems) {\r\n supportItems.forEach(item => item.open = false);\r\n state.supportItems = supportItems;\r\n },\r\n\r\n [MUTATION_TYPES.toggleItem](state, { groupId, itemId }) {\r\n // we're currently loading results\r\n // so, it's not possible to activate the item before it's done.\r\n if (state.operationsRunning) {\r\n state.itemToOpen.groupId = groupId;\r\n state.itemToOpen.itemId = itemId;\r\n return;\r\n }\r\n\r\n if (state.flat) {\r\n for (let i = 0; i < state.supportItems.length; i++) {\r\n let item = state.supportItems[i];\r\n if (item.id === itemId) {\r\n item.open = !item.open;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let i = 0; i < state.supportItems.length; i++) {\r\n let group = state.supportItems[i];\r\n if (group.id !== groupId) { continue; }\r\n for (let j = 0; j < group.items.length; j++) {\r\n let item = state.supportItems[i].items[j];\r\n if (item.id === itemId) {\r\n item.open = !item.open;\r\n return;\r\n }\r\n }\r\n }\r\n },\r\n\r\n [MUTATION_TYPES.setQuery](state, query) {\r\n state.query = query;\r\n },\r\n\r\n [MUTATION_TYPES.clearItemToOpen](state) {\r\n state.itemToOpen.groupId = '';\r\n state.itemToOpen.itemId = '';\r\n }\r\n};\r\n\r\nconst getters = {\r\n\r\n activeFiltersCount(state) {\r\n return state.metaSettings.tagGroups\r\n .map(group => group.activeOptions.length)\r\n .reduce((prev, count) => prev + count, 0);\r\n },\r\n\r\n totalGroupCount(state) {\r\n if (state.flat) { return state.totalResults; }\r\n return state.supportItems\r\n .map(group => group.numberOfHits)\r\n .reduce((prev, count) => prev + count, 0);\r\n }\r\n\r\n};\r\n\r\nlet cancelSearch;\r\nlet fetchCancelToken;\r\n\r\n/**\r\n * actions\r\n */\r\n\r\nconst actions = {\r\n\r\n [ACTION_TYPES.init]({dispatch}) {\r\n return dispatch('fetchResult', true);\r\n },\r\n\r\n [ACTION_TYPES.fetchResult]({commit, state}, init) {\r\n commit('operationStarted');\r\n\r\n if (fetchCancelToken) {\r\n fetchCancelToken();\r\n fetchCancelToken = null;\r\n }\r\n\r\n let params = {\r\n pageId: state.pageId,\r\n search: state.query,\r\n flat: state.flat\r\n };\r\n\r\n state.metaSettings.tagGroups.forEach(group => {\r\n if (group.activeOptions.length) {\r\n params[group.id] = group.activeOptions.join(',')\r\n }\r\n });\r\n\r\n let url = (state.flat && SUPPORT_FLAT) || SUPPORT || '/api/v1/support';\r\n return axios\r\n .get(url, {\r\n cancelToken: new axios.CancelToken(c => fetchCancelToken = c),\r\n params\r\n })\r\n .catch(error => {\r\n if (!axios.isCancel(error)) {\r\n console.error(error);\r\n }\r\n })\r\n .then(response => {\r\n if (!response) { return; }\r\n\r\n // if we're in a flat mode,\r\n // we can just assign the items and skip out of the meta stuff.\r\n if (state.flat) {\r\n commit(MUTATION_TYPES.setTotalResults, response.data.totalResults);\r\n commit(MUTATION_TYPES.setFlatSupportItems, response.data.result);\r\n return;\r\n }\r\n\r\n commit(MUTATION_TYPES.setSupportGroups, response.data.result);\r\n\r\n // if we're doing an init call, we can setup all meta information...\r\n if (init) {\r\n commit(MUTATION_TYPES.setMetaSettings, {\r\n tagGroups: response.data.tagGroups,\r\n recentQueries: response.data.popularSearches\r\n });\r\n }\r\n // ... else we just want to update the counts of the filters.\r\n else {\r\n commit(MUTATION_TYPES.updateMetaSettings, { tagGroups: response.data.tagGroups });\r\n }\r\n })\r\n\r\n .finally(() => {\r\n commit(MUTATION_TYPES.operationEnded);\r\n if (state.itemToOpen.groupId && state.itemToOpen.itemId) {\r\n commit(MUTATION_TYPES.toggleItem, state.itemToOpen);\r\n commit(MUTATION_TYPES.clearItemToOpen);\r\n }\r\n fetchCancelToken = null;\r\n });\r\n },\r\n\r\n [ACTION_TYPES.setActiveFilters]({dispatch, commit}, { id, activeOptions }) {\r\n commit('setActiveFilters', { id, activeOptions });\r\n dispatch('fetchResult');\r\n },\r\n\r\n [ACTION_TYPES.setQuery]({dispatch, commit}, query) {\r\n commit('setQuery', query);\r\n debouncedFetchSupportItems(dispatch);\r\n },\r\n\r\n [ACTION_TYPES.clearActiveFilters]({dispatch, commit}) {\r\n commit('clearActiveFilters');\r\n dispatch('fetchResult');\r\n }\r\n};\r\n\r\n// we just debounce a fetch support items, to use\r\n// for instance when query is changing.\r\nconst debouncedFetchSupportItems = debounce((dispatch) => {\r\n dispatch('fetchResult');\r\n}, 200);\r\n\r\nexport default {\r\n state,\r\n actions,\r\n getters,\r\n mutations,\r\n namespaced\r\n};\r\n","import axios from 'axios';\r\n\r\n/**\r\n * products-list\r\n * this vuex module contain state, mutations and actions for\r\n * mainly the products list component.\r\n */\r\n\r\nconst namespaced = true;\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof(apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { PRODUCTS_META, PRODUCTS } = overrides;\r\n\r\nconst state = {\r\n metaEndpoint : PRODUCTS_META || '/api/v1/products-meta',\r\n productsEndpoint : PRODUCTS || '/api/v1/products',\r\n operationsRunning : 0,\r\n sorting : false,\r\n fetching : false,\r\n products : [],\r\n onlyOwned : false,\r\n onlySoldOnWebsite : true,\r\n pageNumber : 1,\r\n pageSize : 20,\r\n query : null,\r\n totalResults : 0,\r\n metaSettings : {\r\n tagGroups: [],\r\n sortingOptions: []\r\n },\r\n categoryId: null,\r\n calculatePrice: true\r\n};\r\n\r\nconst mutations = {\r\n setQuery(state, query) {\r\n state.query = query;\r\n },\r\n\r\n operationStarted(state) {\r\n state.operationsRunning++;\r\n },\r\n\r\n operationEnded(state) {\r\n state.operationsRunning--;\r\n },\r\n\r\n sortingStarted(state) {\r\n state.sorting = true;\r\n },\r\n\r\n sortingEnded(state) {\r\n state.sorting = false;\r\n },\r\n\r\n fetchingStarted(state) {\r\n state.fetching = true;\r\n },\r\n\r\n fetchingEnded(state) {\r\n state.fetching = false;\r\n },\r\n\r\n setMetaSettings(state, metaSettings) {\r\n metaSettings.tagGroups.forEach(group => group.activeOptions = []);\r\n\r\n let defaultSort = metaSettings.sortingOptions.filter(option => !!option.default)[0];\r\n if (!defaultSort) defaultSort = metaSettings.sortingOptions[0];\r\n\r\n defaultSort.active = true;\r\n state.metaSettings.tagGroups = metaSettings.tagGroups;\r\n state.metaSettings.sortingOptions = metaSettings.sortingOptions;\r\n },\r\n\r\n setActiveSortingOption(state, activeSortingOption) {\r\n state.metaSettings.sortingOptions\r\n .forEach(opt => opt.active = (opt === activeSortingOption));\r\n },\r\n\r\n setActiveSortingOptionById(state, activeSortingOptionId) {\r\n state.metaSettings.sortingOptions\r\n .forEach(opt => opt.active = (opt.id === activeSortingOptionId));\r\n },\r\n\r\n setActiveFilters(state, { id, activeOptions }) {\r\n state.metaSettings.tagGroups\r\n .filter(group => group.id == id)\r\n .forEach(group => group.activeOptions = activeOptions);\r\n },\r\n\r\n clearActiveFilters(state) {\r\n state.metaSettings.tagGroups.forEach(group => group.activeOptions = []);\r\n },\r\n\r\n setPageSize(state, pageSize) {\r\n state.pageSize = pageSize;\r\n },\r\n\r\n setPageNumber(state, pageNumber) {\r\n state.pageNumber = pageNumber;\r\n },\r\n\r\n setOnlySoldOnWebsite(state, only) {\r\n state.onlySoldOnWebsite = only;\r\n },\r\n\r\n setTotalResults(state, totalResults) {\r\n state.totalResults = totalResults;\r\n },\r\n\r\n setProducts(state, products) {\r\n state.products = products;\r\n },\r\n\r\n addProducts(state, products) {\r\n state.products.push(...products);\r\n },\r\n\r\n setCategoryId(state, categoryId) {\r\n state.categoryId = categoryId;\r\n }\r\n};\r\n\r\nconst getters = {\r\n /**\r\n * returns whether there is more results to load,\r\n * it will return false if no results have loaded yet.\r\n */\r\n hasMoreResults(state) {\r\n if (!state.totalResults) { return false; }\r\n let totalPages = Math.ceil(state.totalResults / state.pageSize);\r\n return state.pageNumber < totalPages;\r\n },\r\n\r\n activeSortingOption(state) {\r\n return state.metaSettings.sortingOptions.filter(opt => opt.active)[0];\r\n },\r\n\r\n activeFiltersCount(state) {\r\n return state.metaSettings.tagGroups\r\n .map(group => group.activeOptions.length)\r\n .reduce((prev, count) => prev + count, 0);\r\n }\r\n};\r\n\r\nlet filterCancelToken, productsCancelToken;\r\n\r\nconst actions = {\r\n /**\r\n * this function fetches the initial values\r\n */\r\n init({ dispatch, commit }, options) {\r\n let { categoryId, sortingOptionId } = options;\r\n commit('setCategoryId', categoryId);\r\n dispatch('fetchMeta').then(() => {\r\n if (sortingOptionId) {\r\n commit('setActiveSortingOptionById', sortingOptionId);\r\n }\r\n dispatch('fetchProducts');\r\n });\r\n },\r\n\r\n /**\r\n * fetches the Meta for the products.\r\n */\r\n fetchMeta({commit, state}) {\r\n commit('operationStarted');\r\n\r\n if (filterCancelToken) {\r\n filterCancelToken();\r\n filterCancelToken = null;\r\n }\r\n\r\n return axios.get(state.metaEndpoint, {\r\n cancelToken: new axios.CancelToken(c => filterCancelToken = c)\r\n })\r\n .catch(error => {\r\n if (!axios.isCancel(error)) {\r\n console.error(error);\r\n }\r\n })\r\n .then(response => {\r\n if (!response) { return; }\r\n commit('setMetaSettings', response.data);\r\n })\r\n .finally(() => {\r\n commit('operationEnded');\r\n filterCancelToken = null;\r\n });\r\n },\r\n\r\n /**\r\n * fetches the products.\r\n */\r\n fetchProducts({commit, state, getters}, options) {\r\n let { emptyProducts } = options || {};\r\n let tagGroups = state.metaSettings.tagGroups || [];\r\n let sortingOptions = state.metaSettings.sortingOptions || [];\r\n\r\n commit('operationStarted');\r\n\r\n if (productsCancelToken) {\r\n productsCancelToken();\r\n productsCancelToken = null;\r\n }\r\n\r\n let params = {\r\n text: state.query,\r\n pageNumber: state.pageNumber,\r\n pageSize: state.pageSize\r\n };\r\n\r\n let activeSort = sortingOptions.filter(opt => opt.active)[0];\r\n if (activeSort) {\r\n params.sort = activeSort.id;\r\n }\r\n\r\n tagGroups.forEach(group => {\r\n if (group.activeOptions.length) {\r\n params[group.id] = group.activeOptions.join(',')\r\n }\r\n });\r\n\r\n if (state.categoryId) {\r\n params.categoryId = state.categoryId;\r\n }\r\n\r\n if (state.onlySoldOnWebsite) {\r\n params.onlySoldOnWebsite = state.onlySoldOnWebsite;\r\n }\r\n\r\n if (state.calculatePrice)\r\n params.calculatePrice = state.calculatePrice\r\n\r\n return axios.get(state.productsEndpoint, {\r\n cancelToken: new axios.CancelToken(c => productsCancelToken = c),\r\n params\r\n })\r\n .then(response => {\r\n if (!response) { return; }\r\n let productsMutation = emptyProducts ? 'setProducts' : 'addProducts';\r\n commit(productsMutation, response.data.result);\r\n commit('setTotalResults', response.data.totalResults || 0);\r\n })\r\n .catch(error => {\r\n if (!axios.isCancel(error)) {\r\n console.error(error);\r\n }\r\n })\r\n .finally(() => {\r\n commit('fetchingEnded');\r\n commit('operationEnded');\r\n productsCancelToken = null;\r\n });\r\n },\r\n\r\n setActiveFilters({dispatch, commit}, { id, activeOptions }){\r\n commit('setPageNumber', 1);\r\n commit('setActiveFilters', { id, activeOptions });\r\n return dispatch('fetchProducts', { emptyProducts: true });\r\n },\r\n\r\n clearActiveFilters({dispatch, commit}) {\r\n commit('setPageNumber', 1);\r\n commit('clearActiveFilters');\r\n return dispatch('fetchProducts', { emptyProducts: true });\r\n },\r\n\r\n setActiveSortingOption({dispatch, commit}, activeSortingOption) {\r\n commit('setActiveSortingOption', activeSortingOption);\r\n commit('setPageNumber', 1);\r\n commit('sortingStarted');\r\n return dispatch('fetchProducts', { emptyProducts: true }).then(() => {\r\n commit('sortingEnded');\r\n });\r\n },\r\n\r\n loadMore({dispatch, state, commit}) {\r\n if (state.fetching) return;\r\n\r\n commit('fetchingStarted');\r\n return dispatch('debouncedLoadMore');\r\n },\r\n\r\n debouncedLoadMore({dispatch, state, commit}) {\r\n commit('setPageNumber', state.pageNumber+1);\r\n return dispatch('fetchProducts');\r\n },\r\n\r\n setCategoryId({ commit }, categoryId) {\r\n commit('setcategoryId', categoryId);\r\n }\r\n};\r\n\r\nexport default {\r\n state,\r\n mutations,\r\n actions,\r\n getters,\r\n namespaced\r\n};\r\n","\r\nimport {setCookie, getCookie} from 'tiny-cookie';\r\n\r\n/**\r\n * @module cookie-consent\r\n *\r\n */\r\n\r\nconst key = 'sui-cookie-consent';\r\n\r\nconst state = {\r\n ...getCookie(key, JSON.parse) || { dismissed: false, acceptAll: false }\r\n};\r\n\r\nconst mutations = {\r\n acceptAll(state) {\r\n state.dismissed = true;\r\n state.acceptAll = true;\r\n setCookie(key, state, JSON.stringify, {expires: '1Y'});\r\n location.href = getLocationWithoutForceCookieModalQueryString(location.href);\r\n },\r\n\r\n onlyRequired(state) {\r\n state.dismissed = true;\r\n state.acceptAll = false;\r\n setCookie(key, state, JSON.stringify, {expires: '1Y'});\r\n location.href = getLocationWithoutForceCookieModalQueryString(location.href);\r\n }\r\n};\r\n\r\n/* This is needed to remove the query string used to trigger the cookie modal. \r\nThe query string, if used, needs to be removed not to trigger opening the modal again on page reload after modal button clicked */\r\nfunction getLocationWithoutForceCookieModalQueryString(href) {\r\n return href.replace('opencookiemodal=true', '').replace('&&', '&').replace('?&', '?').replace(/\\?\\s*$/, '');\r\n}\r\n\r\nexport default {\r\n state,\r\n mutations,\r\n namespaced: true\r\n};\r\n","import axios from 'axios';\r\n\r\n/**\r\n * contents\r\n * this vuex module will fetch contents from the website to use\r\n * in for instance a search.\r\n */\r\n\r\nconst namespaced = true;\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof(apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { CONTENTS } = overrides;\r\n\r\nconst state = {\r\n query: null,\r\n pageNumber: 1,\r\n pageSize: 20,\r\n loading: false,\r\n items: [],\r\n totalResults: 0\r\n};\r\n\r\nconst mutations = {\r\n setLoading(state, loading) {\r\n state.loading = loading;\r\n },\r\n\r\n setQuery(state, query) {\r\n state.query = query;\r\n },\r\n\r\n setItems(state, items) {\r\n state.items = items;\r\n },\r\n\r\n setTotalResults(state, count) {\r\n state.totalResults = count;\r\n }\r\n};\r\n\r\nlet cancelToken;\r\n\r\nconst actions = {\r\n\r\n fetchResult({commit, state}) {\r\n let endpoint = CONTENTS || '/api/v1/contents';\r\n commit('setLoading', true);\r\n\r\n if (cancelToken) {\r\n cancelToken();\r\n cancelToken = null;\r\n }\r\n\r\n let params = {\r\n query: state.query,\r\n pageNumber: state.pageNumber,\r\n pageSize: state.pageSize\r\n };\r\n\r\n axios.get(endpoint, {\r\n cancelToken: new axios.CancelToken(c => cancelToken = c),\r\n params\r\n })\r\n .catch(error => {\r\n if (!axios.isCancel(error)) {\r\n console.error(error);\r\n }\r\n })\r\n .then(response => {\r\n if (!response) { return; }\r\n commit('setItems', response.data.result);\r\n commit('setTotalResults', response.data.totalResults);\r\n })\r\n .finally(() => {\r\n commit('setLoading', false);\r\n cancelToken = null;\r\n });\r\n }\r\n\r\n};\r\n\r\nexport default {\r\n state,\r\n mutations,\r\n actions,\r\n namespaced\r\n};\r\n","import axios from 'axios';\r\nimport { pick, omit, get } from '../../base/util';\r\nimport i18n from '../../i18n';\r\n\r\nimport {\r\n NAMESPACE as nsMessages,\r\n ACTION_TYPES as atMessages\r\n} from './messages';\r\nimport Vue from 'vue';\r\n\r\nexport const NAMESPACE = 'account';\r\nexport const MUTATION_TYPES = {\r\n setAccountLoading: 'setAccountLoading',\r\n setCurrentAccount: 'setCurrentAccount',\r\n setEditFields: 'setEditFields',\r\n setLoginUsername: 'setLoginUsername',\r\n setLoginPassword: 'setLoginPassword',\r\n setSignedIn: 'setSignedIn'\r\n};\r\n\r\nexport const ACTION_TYPES = {\r\n init: 'init',\r\n createAccount: 'createAccount',\r\n login: 'login',\r\n fetchAccountMeta: 'fetchAccountMeta',\r\n fetchCurrentAccount: 'fetchCurrentAccount',\r\n saveAccount: 'saveAccount',\r\n changePassword: 'changePassword',\r\n provisionIlokAccount: 'provisionIlokAccount',\r\n linkIlokId: 'linkIlokId',\r\n disconnectIlokId: 'disconnectIlokId'\r\n};\r\n\r\nexport const GETTER_TYPES = {\r\n countryByCode: 'countryByCode'\r\n};\r\n\r\n/**\r\n * account\r\n * this store handles account properties.\r\n */\r\n\r\nconst namespaced = true;\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof (apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { ACCOUNT_META, ACCOUNT, ACCOUNT_PASSWORD, ACCOUNT_ILOK, ACCOUNT_LOGIN, ACCOUNT_LOGOUT, ACCOUNT_SAVE } = overrides;\r\n\r\nconst fieldDefaults = {\r\n canPurchase: false,\r\n firstName: null,\r\n lastName: null,\r\n address: null,\r\n city: null,\r\n state: null,\r\n postcode: null,\r\n email: null,\r\n countryCode: null,\r\n phoneMobile: null,\r\n vatCode: null,\r\n vatNumber: null,\r\n iLokId: null,\r\n iLokToken: null,\r\n companyName: null,\r\n subscribeNewsletter: false,\r\n differentDeliveryAddress: false,\r\n deliveryFirstName: null,\r\n deliveryLastName: null, \r\n deliveryAddress: null,\r\n deliveryCity: null,\r\n deliveryPostcode: null,\r\n deliveryCountryCode: null,\r\n deliveryState: null,\r\n};\r\n\r\nconst state = {\r\n signedIn: false,\r\n suggestedIlokId: null,\r\n initialLoading: false,\r\n provisioning: false,\r\n current: {\r\n loading: false\r\n },\r\n edit: {},\r\n login: {\r\n username: null,\r\n password: null\r\n },\r\n password: {\r\n loading: false,\r\n oldPassword: null,\r\n password: null,\r\n repeatPassword: null\r\n },\r\n meta: {\r\n loading: false,\r\n app: {},\r\n countries: [],\r\n states: [],\r\n iLokOauthUri: null,\r\n allowNewsletterSignupOnAccount: true,\r\n addressIsRequired: false\r\n }\r\n};\r\n\r\nObject.assign(state.current, fieldDefaults);\r\nObject.assign(state.edit, fieldDefaults);\r\n\r\n/**\r\n * Mutations\r\n */\r\n\r\nconst mutations = {\r\n setInitialLoading(state, loading) {\r\n state.initialLoading = loading;\r\n },\r\n\r\n [MUTATION_TYPES.setCurrentAccount](state, account) {\r\n state.current = {\r\n ...state.current,\r\n ...account\r\n };\r\n },\r\n\r\n [MUTATION_TYPES.setEditFields](state, account) {\r\n state.edit = {\r\n ...state.edit,\r\n ...account\r\n };\r\n },\r\n\r\n setCurrentIlokId(state, iLokId) {\r\n state.current.iLokId = iLokId;\r\n },\r\n\r\n setCurrentIlokToken(state, iLokToken) {\r\n state.current.iLokToken = iLokToken;\r\n },\r\n\r\n setAccountMeta(state, { app, countries, iLokOauthUri, states, allowNewsletterSignupOnAccount, addressIsRequired }) {\r\n state.meta.app = { ...state.meta.app, ...app };\r\n state.meta.countries = countries;\r\n state.meta.iLokOauthUri = iLokOauthUri;\r\n state.meta.states = states;\r\n state.meta.allowNewsletterSignupOnAccount = allowNewsletterSignupOnAccount;\r\n state.meta.addressIsRequired = addressIsRequired;\r\n },\r\n\r\n setMetaLoading(state, loading) {\r\n state.meta.loading = loading;\r\n },\r\n\r\n [MUTATION_TYPES.setAccountLoading](state, loading) {\r\n state.current.loading = loading;\r\n },\r\n\r\n setProvisioning(state, provisioning) {\r\n state.provisioning = provisioning;\r\n },\r\n\r\n setSuggestedIlokId(state, iLokId) {\r\n state.suggestedIlokId = iLokId;\r\n },\r\n\r\n setCurrentField(state, field) {\r\n state.current[field[0]] = field[1];\r\n },\r\n\r\n setEditField(state, field) {\r\n state.edit[field[0]] = field[1];\r\n },\r\n\r\n setPasswordField(state, field) {\r\n state.password[field[0]] = field[1];\r\n },\r\n\r\n clearPassword(state) {\r\n state.password.oldPassword = null;\r\n state.password.password = null;\r\n state.password.repeatPassword = null;\r\n },\r\n\r\n setPasswordLoading(state, loading) {\r\n state.password.loading = loading;\r\n },\r\n\r\n [MUTATION_TYPES.setLoginUsername](state, username) {\r\n state.login.username = username;\r\n },\r\n\r\n [MUTATION_TYPES.setLoginPassword](state, password) {\r\n state.login.password = password;\r\n },\r\n\r\n [MUTATION_TYPES.setSignedIn](state, signedIn) {\r\n state.signedIn = signedIn;\r\n },\r\n\r\n copyToEdit(state) {\r\n let current = state.current;\r\n let json = JSON.stringify(current);\r\n let copy = JSON.parse(json);\r\n\r\n state.edit = Object.assign({}, state.edit, copy);\r\n },\r\n};\r\n\r\n/**\r\n * Getters\r\n */\r\n\r\nconst getters = {\r\n [GETTER_TYPES.countryByCode]: (state) => (countryCode) => {\r\n return state.meta.countries.find(c => c.id === countryCode);\r\n },\r\n [GETTER_TYPES.stateByCode]: (state) => (stateCode) => {\r\n return state.meta.states.find(c => c.id === stateCode);\r\n }\r\n}\r\n\r\n/**\r\n * Actions\r\n */\r\n\r\nconst actions = {\r\n\r\n /**\r\n * Combines both the required fetch calls.\r\n * @param {Object} param0 vuex-context\r\n * @return Promise\r\n */\r\n [ACTION_TYPES.init]({ dispatch, commit, state }) {\r\n commit('setInitialLoading', true);\r\n return Promise\r\n .all([\r\n dispatch('fetchAccountMeta'),\r\n dispatch('fetchCurrentAccount')\r\n ])\r\n .then(() => {\r\n return {\r\n account: state.current,\r\n meta: state.meta\r\n };\r\n })\r\n .finally(() => {\r\n commit('setInitialLoading', false);\r\n });\r\n },\r\n\r\n [ACTION_TYPES.fetchAccountMeta]({ commit }) {\r\n let endpoint = ACCOUNT_META || '/api/v1/accounts-meta';\r\n commit('setMetaLoading', true);\r\n return axios\r\n .get(endpoint)\r\n .then(response => {\r\n let locale = document.documentElement.lang;\r\n commit('setAccountMeta', omit(response.data, 'i18n'));\r\n i18n.mergeLocaleMessage(locale, get(response.data, 'i18n'))\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n commit('setMetaLoading', false);\r\n });\r\n },\r\n\r\n /**\r\n * Fetches the current account from the api.\r\n * @param {Object} param0 vuex-context \r\n * @return {Promise} a promise for fetching the current account\r\n */\r\n [ACTION_TYPES.fetchCurrentAccount]({ commit }) {\r\n let endpoint = ACCOUNT || '/api/v1/accounts/me';\r\n commit(MUTATION_TYPES.setAccountLoading, true);\r\n return axios\r\n .get(endpoint)\r\n .catch(error => {\r\n console.log(error);\r\n commit(MUTATION_TYPES.setSignedIn, false);\r\n })\r\n .then(response => {\r\n let anonymous = !!get(response, 'data.anonymous');\r\n if (anonymous) {\r\n commit(MUTATION_TYPES.setSignedIn, false);\r\n return;\r\n }\r\n\r\n commit(MUTATION_TYPES.setCurrentAccount, response.data);\r\n commit(MUTATION_TYPES.setSignedIn, true);\r\n })\r\n .finally(() => {\r\n commit(MUTATION_TYPES.setAccountLoading, false);\r\n });\r\n },\r\n\r\n /**\r\n * Saves the current user.\r\n * @param {Object} param0 vuex-context\r\n * @return {Promise} completion\r\n */\r\n saveAccount({ dispatch, commit, state }, options = {}) {\r\n let endpoint = ACCOUNT_SAVE || '/api/v1/accounts/me';\r\n let fromCheckout = !!options.fromCheckout;\r\n commit('setAccountLoading', true);\r\n return axios\r\n .put(endpoint, { ...pick(state.edit, 'email', 'firstName', 'lastName', 'address', 'city', 'state', 'postcode', 'countryCode', 'phoneMobile', 'vatCode', 'vatNumber', 'companyName', 'subscribeNewsletter'), fromCheckout })\r\n .then(response => {\r\n commit('setCurrentAccount', response.data);\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n icon: 'info',\r\n text: 'Your personal information was updated',\r\n type: 'success'\r\n }, { root: true });\r\n })\r\n .catch(error => {\r\n let message = error.response.data.message;\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n icon: 'info',\r\n text: message,\r\n type: 'callout'\r\n }, { root: true });\r\n })\r\n .finally(() => {\r\n commit('setAccountLoading', false);\r\n });\r\n },\r\n\r\n [ACTION_TYPES.changePassword]({ dispatch, commit, state }) {\r\n let endpoint = ACCOUNT_PASSWORD || '/api/v1/accounts/me/password';\r\n commit('setPasswordLoading', true);\r\n return axios\r\n .put(endpoint, pick(state.password, 'oldPassword', 'password', 'repeatPassword'))\r\n .then(response => {\r\n commit('clearPassword');\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n icon: 'info',\r\n text: 'Your password has been changed',\r\n type: 'success'\r\n }, { root: true });\r\n })\r\n .catch(error => {\r\n let message = error.response.data.message;\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n icon: 'info',\r\n text: message,\r\n type: 'callout'\r\n }, { root: true });\r\n })\r\n .finally(() => {\r\n commit('setPasswordLoading', false);\r\n });\r\n },\r\n\r\n [ACTION_TYPES.provisionIlokAccount]({ commit }) {\r\n commit('setProvisioning', true);\r\n let endpoint = ACCOUNT_ILOK || '/api/v1/accounts/me/ilok';\r\n return axios\r\n .post(endpoint)\r\n .then(response => {\r\n if (response.data.redirectUrl) {\r\n // redirect to another page\r\n window.location = response.data.redirectUrl;\r\n } else {\r\n commit('setProvisioning', false);\r\n setTimeout(() => {\r\n commit('setCurrentIlokId', response.data.iLokId);\r\n commit('setCurrentIlokToken', response.data.iLokToken);\r\n }, 500);\r\n window.scrollTo(0,0);\r\n }\r\n })\r\n .catch(error => {\r\n var data = error.response.data;\r\n\r\n // account existed, suggest that is used for linking.\r\n if (data.errorCode === 601) {\r\n commit('setSuggestedIlokId', data.suggestedIlokId);\r\n return;\r\n }\r\n\r\n commit('setProvisioningError', data.message);\r\n });\r\n },\r\n\r\n // This function is just a convenience action that redirects the\r\n // user to the iLok OAuth2 endpoint.\r\n [ACTION_TYPES.linkIlokId]({ state }, iLokId) {\r\n window.location = `${state.meta.iLokOauthUri}&login_id=${encodeURIComponent(iLokId)}`;\r\n },\r\n\r\n [ACTION_TYPES.disconnectIlokId]({ commit }) {\r\n let endpoint = ACCOUNT_ILOK || '/api/v1/accounts/me/ilok';\r\n return axios\r\n .delete(endpoint)\r\n .then(response => {\r\n commit('setCurrentIlokId', null);\r\n commit('setCurrentILokToken', null);\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n },\r\n\r\n login({ commit, dispatch }, { username, password }) {\r\n let endpoint = ACCOUNT_LOGIN || '/api/v1/accounts/login';\r\n commit(MUTATION_TYPES.setAccountLoading, true);\r\n return axios\r\n .post(endpoint, { username, password })\r\n .then(response => {\r\n commit(MUTATION_TYPES.setEditFields, fieldDefaults);\r\n commit(MUTATION_TYPES.setCurrentAccount, response.data);\r\n commit(MUTATION_TYPES.setSignedIn, true);\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n throw error;\r\n })\r\n .finally(() => {\r\n commit(MUTATION_TYPES.setAccountLoading, false);\r\n });\r\n },\r\n\r\n logout({ commit, dispatch }) {\r\n let endpoint = ACCOUNT_LOGOUT || '/api/v1/accounts/logout';\r\n commit(MUTATION_TYPES.setAccountLoading, true);\r\n return axios\r\n .post(endpoint)\r\n .then(() => {\r\n commit('setSignedIn', false);\r\n commit('setCurrentAccount', fieldDefaults);\r\n commit('copyToEdit');\r\n })\r\n .finally(() => {\r\n commit(MUTATION_TYPES.setAccountLoading, false);\r\n });\r\n }\r\n};\r\n\r\nexport default {\r\n state,\r\n mutations,\r\n getters,\r\n actions,\r\n namespaced\r\n};\r\n","import axios from 'axios';\r\nimport {get} from '../../base/util.js';\r\nimport trackProductRedeem from '../../base/analytics/track-product-redeem.js';\r\nimport {\r\n NAMESPACE as nsMessages,\r\n ACTION_TYPES as atMessages\r\n} from './messages';\r\n\r\n/**\r\n * licenses\r\n */\r\n\r\nconst namespaced = true;\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof(apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { LICENCE_CODE, LICENSES, LICENSE_CODE_DEPOSIT, LICENSE_DEMO_DEPOSIT} = overrides;\r\n\r\nconst state = {\r\n licenseCodeToBeRedeemed: null,\r\n redeeming: false,\r\n productToBeRedeemed: {\r\n loaded: false,\r\n addingToAccount: false,\r\n id: null,\r\n featuredHighlight: null,\r\n name: null,\r\n images: {}\r\n },\r\n redeemError: {\r\n gotError: false,\r\n errorCode: 0,\r\n message: null\r\n },\r\n licenses: [],\r\n licensesCount: 0,\r\n loadingLicenses: false,\r\n depositingDemo: false\r\n};\r\n\r\nconst mutations = {\r\n setLicenseCodeToBeRedeemed(state, licenseCode) {\r\n state.licenseCodeToBeRedeemed = licenseCode;\r\n },\r\n\r\n setRedeeming(state, redeeming) {\r\n state.redeeming = redeeming;\r\n },\r\n\r\n cancelRedeem(state) {\r\n state.redeeming = false;\r\n state.licenseCodeToBeRedeemed = null;\r\n },\r\n\r\n setProductToBeRedeemed(state, {id, featuredHighlight, name, images}) {\r\n state.productToBeRedeemed = {\r\n ...state.productToBeRedeemed,\r\n loaded: true,\r\n addingToAccount: false,\r\n id,\r\n featuredHighlight,\r\n name,\r\n images\r\n };\r\n },\r\n\r\n setRedeemError(state, {errorCode, message}) {\r\n state.redeemError.gotError = true;\r\n state.redeemError.errorCode = errorCode;\r\n state.redeemError.message = message;\r\n },\r\n\r\n clearRedeemError(state) {\r\n state.redeemError.gotError = false;\r\n state.redeemError.errorCode = 0;\r\n state.redeemError.message = null;\r\n },\r\n\r\n clearProductToBeRedeemed(state) {\r\n state.productToBeRedeemed = {\r\n ...state.productToBeRedeemed,\r\n loaded: false,\r\n addingToAccount: false,\r\n id: null,\r\n featuredHighlight: null,\r\n name: null,\r\n images: {}\r\n };\r\n },\r\n\r\n setLicenses(state, { totalResults, result }) {\r\n state.licensesCount = totalResults;\r\n state.licenses = result;\r\n },\r\n\r\n setLoadingLicenses(state, loading) {\r\n state.loadingLicenses = loading;\r\n },\r\n\r\n setDepositingDemo(state, depositing) {\r\n state.depositingDemo = depositing;\r\n },\r\n\r\n setAddingToAccount(state, adding) {\r\n state.productToBeRedeemed.addingToAccount = adding;\r\n }\r\n};\r\n\r\nconst actions = {\r\n\r\n verifyLicenseCode({state, commit}) {\r\n commit('clearRedeemError');\r\n commit('clearProductToBeRedeemed');\r\n commit('setRedeeming', true);\r\n\r\n let endpoint = LICENCE_CODE || `/api/v1/license-codes/${state.licenseCodeToBeRedeemed}`;\r\n return axios\r\n .get(endpoint)\r\n .then(response => { commit('setProductToBeRedeemed', response.data.product); })\r\n .catch(error => { commit('setRedeemError', error.response.data); });\r\n },\r\n\r\n redeemLicenseCode({dispatch, state, commit}) {\r\n let redeemEndpoint = LICENSE_CODE_DEPOSIT || `/api/v1/license-codes/${state.licenseCodeToBeRedeemed}/deposit`;\r\n commit('setAddingToAccount', true);\r\n return axios\r\n .post(redeemEndpoint)\r\n .then(response => {\r\n commit('setRedeeming', false);\r\n let product = get(response, 'data.product');\r\n if (product) { trackProductRedeem({ product }); }\r\n return response.data;\r\n })\r\n .catch(error => { commit('setRedeemError', error.response.data); })\r\n .finally(() => {\r\n commit('setAddingToAccount', false);\r\n });\r\n },\r\n\r\n fetchLicenses({state, commit}) {\r\n commit('setLoadingLicenses', true);\r\n let endpoint = LICENSES || '/api/v1/licenses';\r\n\r\n return axios\r\n .get(endpoint)\r\n .then(response => {\r\n commit('setLicenses', response.data);\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n commit('setLoadingLicenses', false);\r\n });\r\n },\r\n\r\n refreshLicenses({state, commit}) {\r\n commit('setLoadingLicenses', true);\r\n let endpoint = LICENSES || '/api/v1/licenses';\r\n\r\n return axios\r\n .get(endpoint + '?refresh=true')\r\n .then(response => {\r\n commit('setLicenses', response.data);\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n commit('setLoadingLicenses', false);\r\n });\r\n },\r\n\r\n tryDemo({dispatch,commit,state}, productId) {\r\n commit('setDepositingDemo', true);\r\n let id;\r\n\r\n // since we're depositing a license that will pop a message,\r\n // display a loading flash message, grab a handle of\r\n // the id of the new message.\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n loading: true,\r\n type: 'success',\r\n removeable: false\r\n }, {root:true})\r\n\r\n // when we have an id of our new message,\r\n // fire of the actual deposit\r\n .then(msgId => {\r\n id = msgId;\r\n let endpoint = LICENSE_DEMO_DEPOSIT || `/api/v1/licenses/${productId}/demo`\r\n return axios.post(endpoint);\r\n })\r\n\r\n // We've successfully deposited a license,\r\n // update our message\r\n .then(response => {\r\n let text = get(response, 'data.message');\r\n let myProductsUrl = get(response, 'data.data.myProductsUrl');\r\n\r\n let message = {\r\n loading: false,\r\n icon: 'open-box',\r\n text,\r\n timeToLive: 5000,\r\n removeable: true,\r\n cta: {\r\n text: 'My Products',\r\n href: myProductsUrl\r\n }\r\n };\r\n\r\n return dispatch(`${nsMessages}/${atMessages.updateMessage}`, { id, message }, { root: true });\r\n })\r\n\r\n .catch(error => {\r\n let text = get(error, 'response.data.message');\r\n let cta = get(error, 'response.data.data.cta');\r\n\r\n let message = {\r\n loading: false,\r\n icon: 'info',\r\n type: 'callout',\r\n text,\r\n cta,\r\n removeable: true,\r\n timeToLive: 3000\r\n }\r\n\r\n return dispatch(`${nsMessages}/${atMessages.updateMessage}`, { id, message }, { root: true });\r\n })\r\n\r\n // we've reached here, flip the flag!\r\n .finally(() => {\r\n commit('setDepositingDemo', false);\r\n });\r\n },\r\n\r\n addFree({ dispatch, commit, state }, productId) {\r\n commit('setDepositingFree', true);\r\n let id;\r\n\r\n // since we're depositing a license that will pop a message,\r\n // display a loading flash message, grab a handle of\r\n // the id of the new message.\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n loading: true,\r\n type: 'success',\r\n removeable: false\r\n }, { root: true })\r\n\r\n // when we have an id of our new message,\r\n // fire of the actual deposit\r\n .then(msgId => {\r\n id = msgId;\r\n let endpoint = LICENSE_DEMO_DEPOSIT || `/api/v1/licenses/${productId}/free`\r\n return axios.post(endpoint);\r\n })\r\n\r\n // We've successfully deposited a license,\r\n // update our message\r\n .then(response => {\r\n let text = get(response, 'data.message');\r\n let myProductsUrl = get(response, 'data.data.myProductsUrl');\r\n\r\n let message = {\r\n loading: false,\r\n icon: 'open-box',\r\n text,\r\n timeToLive: 5000,\r\n removeable: true,\r\n cta: {\r\n text: 'My Products',\r\n href: myProductsUrl\r\n }\r\n };\r\n\r\n return dispatch(`${nsMessages}/${atMessages.updateMessage}`, { id, message }, { root: true });\r\n })\r\n\r\n .catch(error => {\r\n let text = get(error, 'response.data.message');\r\n let cta = get(error, 'response.data.data.cta');\r\n\r\n let message = {\r\n loading: false,\r\n icon: 'info',\r\n type: 'callout',\r\n text,\r\n cta,\r\n removeable: true,\r\n timeToLive: 3000\r\n }\r\n\r\n dispatch(`${nsMessages}/${atMessages.updateMessage}`, { id, message }, { root: true });\r\n })\r\n\r\n // we've reached here, flip the flag!\r\n .finally(() => {\r\n commit('setDepositingFree', false);\r\n });\r\n }\r\n};\r\n\r\n\r\n\r\n\r\nexport default {\r\n state,\r\n mutations,\r\n actions,\r\n namespaced\r\n};\r\n","\r\n/**\r\n * Tracks an event in the datalayer when a product has been\r\n * redeemed. \r\n * \r\n * @param {Object} param0 data\r\n * @param {Object} param0.product the product to track.\r\n */\r\nexport default function trackProductRedeem({ product }) {\r\n if (typeof(dataLayer) === 'undefined') { return; }\r\n if (!product) { return; }\r\n\r\n dataLayer.push({\r\n 'event': 'productRedeem',\r\n 'eventCategory': 'Product Redeemed',\r\n 'eventAction': product.name\r\n });\r\n}","import axios from 'axios';\r\n\r\n/**\r\n * This mini module just contains a call to the api endpoint\r\n * that validates input.\r\n */\r\n\r\n// apply overrides if exists.\r\nlet overrides = typeof(apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { INPUT_VALIDATION } = overrides;\r\n\r\nconst actions = {\r\n validate({commit, state}, { type, params }) {\r\n let uri = INPUT_VALIDATION || `api/v1/input-validation/${type}`;\r\n return axios\r\n .get(uri, { params })\r\n .then(response => {\r\n return response.data.valid;\r\n })\r\n .catch(error => {\r\n return false;\r\n });\r\n }\r\n};\r\n\r\nexport default {\r\n namespaced: true,\r\n actions\r\n};\r\n","/**\r\n * ascii-folder.js\r\n * https://github.com/mplatt/fold-to-ascii-js\r\n *\r\n * This is a JavaScript port of the Apache Lucene ASCII Folding Filter.\r\n *\r\n * The Apache Lucene ASCII Folding Filter is licensed to the Apache Software\r\n * Foundation (ASF) under one or more contributor license agreements. See the\r\n * NOTICE file distributed with this work for additional information regarding\r\n * copyright ownership. The ASF licenses this file to You under the Apache\r\n * License, Version 2.0 (the \"License\"); you may not use this file except in\r\n * compliance with the License. You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n */\r\nclass ASCIIFolder {\r\n\r\n static foldReplacing(str = '', replacement = '') {\r\n return this._fold(str, () => replacement);\r\n }\r\n\r\n static foldMaintaining(str = '') {\r\n return this._fold(str, (char) => char);\r\n }\r\n\r\n static _fold(str, fallback) {\r\n if (str === null)\r\n return '';\r\n\r\n if (typeof str === 'number')\r\n return '' + str;\r\n\r\n if (typeof str !== 'string')\r\n throw new Error('Invalid input data type');\r\n\r\n return str.split('').map(character => {\r\n if (character.charCodeAt(0) < 128) {\r\n return character;\r\n } else {\r\n const replacement = this.mapping.get(character.charCodeAt(0));\r\n return (replacement === undefined) ? fallback(character) : replacement;\r\n }\r\n }).join('');\r\n }\r\n}\r\n\r\nASCIIFolder.mapping = new Map([\r\n [0xC0, 'A'],\r\n [0xC1, 'A'],\r\n [0xC2, 'A'],\r\n [0xC3, 'A'],\r\n [0xC4, 'A'],\r\n [0xC5, 'A'],\r\n [0x100, 'A'],\r\n [0x102, 'A'],\r\n [0x104, 'A'],\r\n [0x18F, 'A'],\r\n [0x1CD, 'A'],\r\n [0x1DE, 'A'],\r\n [0x1E0, 'A'],\r\n [0x1FA, 'A'],\r\n [0x200, 'A'],\r\n [0x202, 'A'],\r\n [0x226, 'A'],\r\n [0x23A, 'A'],\r\n [0x1D00, 'A'],\r\n [0x1E00, 'A'],\r\n [0x1EA0, 'A'],\r\n [0x1EA2, 'A'],\r\n [0x1EA4, 'A'],\r\n [0x1EA6, 'A'],\r\n [0x1EA8, 'A'],\r\n [0x1EAA, 'A'],\r\n [0x1EAC, 'A'],\r\n [0x1EAE, 'A'],\r\n [0x1EB0, 'A'],\r\n [0x1EB2, 'A'],\r\n [0x1EB4, 'A'],\r\n [0x1EB6, 'A'],\r\n [0x24B6, 'A'],\r\n [0xFF21, 'A'],\r\n [0xE0, 'a'],\r\n [0xE1, 'a'],\r\n [0xE2, 'a'],\r\n [0xE3, 'a'],\r\n [0xE4, 'a'],\r\n [0xE5, 'a'],\r\n [0x101, 'a'],\r\n [0x103, 'a'],\r\n [0x105, 'a'],\r\n [0x1CE, 'a'],\r\n [0x1DF, 'a'],\r\n [0x1E1, 'a'],\r\n [0x1FB, 'a'],\r\n [0x201, 'a'],\r\n [0x203, 'a'],\r\n [0x227, 'a'],\r\n [0x250, 'a'],\r\n [0x259, 'a'],\r\n [0x25A, 'a'],\r\n [0x1D8F, 'a'],\r\n [0x1D95, 'a'],\r\n [0x1E01, 'a'],\r\n [0x1E9A, 'a'],\r\n [0x1EA1, 'a'],\r\n [0x1EA3, 'a'],\r\n [0x1EA5, 'a'],\r\n [0x1EA7, 'a'],\r\n [0x1EA9, 'a'],\r\n [0x1EAB, 'a'],\r\n [0x1EAD, 'a'],\r\n [0x1EAF, 'a'],\r\n [0x1EB1, 'a'],\r\n [0x1EB3, 'a'],\r\n [0x1EB5, 'a'],\r\n [0x1EB7, 'a'],\r\n [0x2090, 'a'],\r\n [0x2094, 'a'],\r\n [0x24D0, 'a'],\r\n [0x2C65, 'a'],\r\n [0x2C6F, 'a'],\r\n [0xFF41, 'a'],\r\n [0xA732, 'AA'],\r\n [0xC6, 'AE'],\r\n [0x1E2, 'AE'],\r\n [0x1FC, 'AE'],\r\n [0x1D01, 'AE'],\r\n [0xA734, 'AO'],\r\n [0xA736, 'AU'],\r\n [0xA738, 'AV'],\r\n [0xA73A, 'AV'],\r\n [0xA73C, 'AY'],\r\n [0x249C, '(a)'],\r\n [0xA733, 'aa'],\r\n [0xE6, 'ae'],\r\n [0x1E3, 'ae'],\r\n [0x1FD, 'ae'],\r\n [0x1D02, 'ae'],\r\n [0xA735, 'ao'],\r\n [0xA737, 'au'],\r\n [0xA739, 'av'],\r\n [0xA73B, 'av'],\r\n [0xA73D, 'ay'],\r\n [0x181, 'B'],\r\n [0x182, 'B'],\r\n [0x243, 'B'],\r\n [0x299, 'B'],\r\n [0x1D03, 'B'],\r\n [0x1E02, 'B'],\r\n [0x1E04, 'B'],\r\n [0x1E06, 'B'],\r\n [0x24B7, 'B'],\r\n [0xFF22, 'B'],\r\n [0x180, 'b'],\r\n [0x183, 'b'],\r\n [0x253, 'b'],\r\n [0x1D6C, 'b'],\r\n [0x1D80, 'b'],\r\n [0x1E03, 'b'],\r\n [0x1E05, 'b'],\r\n [0x1E07, 'b'],\r\n [0x24D1, 'b'],\r\n [0xFF42, 'b'],\r\n [0x249D, '(b)'],\r\n [0xC7, 'C'],\r\n [0x106, 'C'],\r\n [0x108, 'C'],\r\n [0x10A, 'C'],\r\n [0x10C, 'C'],\r\n [0x187, 'C'],\r\n [0x23B, 'C'],\r\n [0x297, 'C'],\r\n [0x1D04, 'C'],\r\n [0x1E08, 'C'],\r\n [0x24B8, 'C'],\r\n [0xFF23, 'C'],\r\n [0xE7, 'c'],\r\n [0x107, 'c'],\r\n [0x109, 'c'],\r\n [0x10B, 'c'],\r\n [0x10D, 'c'],\r\n [0x188, 'c'],\r\n [0x23C, 'c'],\r\n [0x255, 'c'],\r\n [0x1E09, 'c'],\r\n [0x2184, 'c'],\r\n [0x24D2, 'c'],\r\n [0xA73E, 'c'],\r\n [0xA73F, 'c'],\r\n [0xFF43, 'c'],\r\n [0x249E, '(c)'],\r\n [0xD0, 'D'],\r\n [0x10E, 'D'],\r\n [0x110, 'D'],\r\n [0x189, 'D'],\r\n [0x18A, 'D'],\r\n [0x18B, 'D'],\r\n [0x1D05, 'D'],\r\n [0x1D06, 'D'],\r\n [0x1E0A, 'D'],\r\n [0x1E0C, 'D'],\r\n [0x1E0E, 'D'],\r\n [0x1E10, 'D'],\r\n [0x1E12, 'D'],\r\n [0x24B9, 'D'],\r\n [0xA779, 'D'],\r\n [0xFF24, 'D'],\r\n [0xF0, 'd'],\r\n [0x10F, 'd'],\r\n [0x111, 'd'],\r\n [0x18C, 'd'],\r\n [0x221, 'd'],\r\n [0x256, 'd'],\r\n [0x257, 'd'],\r\n [0x1D6D, 'd'],\r\n [0x1D81, 'd'],\r\n [0x1D91, 'd'],\r\n [0x1E0B, 'd'],\r\n [0x1E0D, 'd'],\r\n [0x1E0F, 'd'],\r\n [0x1E11, 'd'],\r\n [0x1E13, 'd'],\r\n [0x24D3, 'd'],\r\n [0xA77A, 'd'],\r\n [0xFF44, 'd'],\r\n [0x1C4, 'DZ'],\r\n [0x1F1, 'DZ'],\r\n [0x1C5, 'Dz'],\r\n [0x1F2, 'Dz'],\r\n [0x249F, '(d)'],\r\n [0x238, 'db'],\r\n [0x1C6, 'dz'],\r\n [0x1F3, 'dz'],\r\n [0x2A3, 'dz'],\r\n [0x2A5, 'dz'],\r\n [0xC8, 'E'],\r\n [0xC9, 'E'],\r\n [0xCA, 'E'],\r\n [0xCB, 'E'],\r\n [0x112, 'E'],\r\n [0x114, 'E'],\r\n [0x116, 'E'],\r\n [0x118, 'E'],\r\n [0x11A, 'E'],\r\n [0x18E, 'E'],\r\n [0x190, 'E'],\r\n [0x204, 'E'],\r\n [0x206, 'E'],\r\n [0x228, 'E'],\r\n [0x246, 'E'],\r\n [0x1D07, 'E'],\r\n [0x1E14, 'E'],\r\n [0x1E16, 'E'],\r\n [0x1E18, 'E'],\r\n [0x1E1A, 'E'],\r\n [0x1E1C, 'E'],\r\n [0x1EB8, 'E'],\r\n [0x1EBA, 'E'],\r\n [0x1EBC, 'E'],\r\n [0x1EBE, 'E'],\r\n [0x1EC0, 'E'],\r\n [0x1EC2, 'E'],\r\n [0x1EC4, 'E'],\r\n [0x1EC6, 'E'],\r\n [0x24BA, 'E'],\r\n [0x2C7B, 'E'],\r\n [0xFF25, 'E'],\r\n [0xE8, 'e'],\r\n [0xE9, 'e'],\r\n [0xEA, 'e'],\r\n [0xEB, 'e'],\r\n [0x113, 'e'],\r\n [0x115, 'e'],\r\n [0x117, 'e'],\r\n [0x119, 'e'],\r\n [0x11B, 'e'],\r\n [0x1DD, 'e'],\r\n [0x205, 'e'],\r\n [0x207, 'e'],\r\n [0x229, 'e'],\r\n [0x247, 'e'],\r\n [0x258, 'e'],\r\n [0x25B, 'e'],\r\n [0x25C, 'e'],\r\n [0x25D, 'e'],\r\n [0x25E, 'e'],\r\n [0x29A, 'e'],\r\n [0x1D08, 'e'],\r\n [0x1D92, 'e'],\r\n [0x1D93, 'e'],\r\n [0x1D94, 'e'],\r\n [0x1E15, 'e'],\r\n [0x1E17, 'e'],\r\n [0x1E19, 'e'],\r\n [0x1E1B, 'e'],\r\n [0x1E1D, 'e'],\r\n [0x1EB9, 'e'],\r\n [0x1EBB, 'e'],\r\n [0x1EBD, 'e'],\r\n [0x1EBF, 'e'],\r\n [0x1EC1, 'e'],\r\n [0x1EC3, 'e'],\r\n [0x1EC5, 'e'],\r\n [0x1EC7, 'e'],\r\n [0x2091, 'e'],\r\n [0x24D4, 'e'],\r\n [0x2C78, 'e'],\r\n [0xFF45, 'e'],\r\n [0x24A0, '(e)'],\r\n [0x191, 'F'],\r\n [0x1E1E, 'F'],\r\n [0x24BB, 'F'],\r\n [0xA730, 'F'],\r\n [0xA77B, 'F'],\r\n [0xA7FB, 'F'],\r\n [0xFF26, 'F'],\r\n [0x192, 'f'],\r\n [0x1D6E, 'f'],\r\n [0x1D82, 'f'],\r\n [0x1E1F, 'f'],\r\n [0x1E9B, 'f'],\r\n [0x24D5, 'f'],\r\n [0xA77C, 'f'],\r\n [0xFF46, 'f'],\r\n [0x24A1, '(f)'],\r\n [0xFB00, 'ff'],\r\n [0xFB03, 'ffi'],\r\n [0xFB04, 'ffl'],\r\n [0xFB01, 'fi'],\r\n [0xFB02, 'fl'],\r\n [0x11C, 'G'],\r\n [0x11E, 'G'],\r\n [0x120, 'G'],\r\n [0x122, 'G'],\r\n [0x193, 'G'],\r\n [0x1E4, 'G'],\r\n [0x1E5, 'G'],\r\n [0x1E6, 'G'],\r\n [0x1E7, 'G'],\r\n [0x1F4, 'G'],\r\n [0x262, 'G'],\r\n [0x29B, 'G'],\r\n [0x1E20, 'G'],\r\n [0x24BC, 'G'],\r\n [0xA77D, 'G'],\r\n [0xA77E, 'G'],\r\n [0xFF27, 'G'],\r\n [0x11D, 'g'],\r\n [0x11F, 'g'],\r\n [0x121, 'g'],\r\n [0x123, 'g'],\r\n [0x1F5, 'g'],\r\n [0x260, 'g'],\r\n [0x261, 'g'],\r\n [0x1D77, 'g'],\r\n [0x1D79, 'g'],\r\n [0x1D83, 'g'],\r\n [0x1E21, 'g'],\r\n [0x24D6, 'g'],\r\n [0xA77F, 'g'],\r\n [0xFF47, 'g'],\r\n [0x24A2, '(g)'],\r\n [0x124, 'H'],\r\n [0x126, 'H'],\r\n [0x21E, 'H'],\r\n [0x29C, 'H'],\r\n [0x1E22, 'H'],\r\n [0x1E24, 'H'],\r\n [0x1E26, 'H'],\r\n [0x1E28, 'H'],\r\n [0x1E2A, 'H'],\r\n [0x24BD, 'H'],\r\n [0x2C67, 'H'],\r\n [0x2C75, 'H'],\r\n [0xFF28, 'H'],\r\n [0x125, 'h'],\r\n [0x127, 'h'],\r\n [0x21F, 'h'],\r\n [0x265, 'h'],\r\n [0x266, 'h'],\r\n [0x2AE, 'h'],\r\n [0x2AF, 'h'],\r\n [0x1E23, 'h'],\r\n [0x1E25, 'h'],\r\n [0x1E27, 'h'],\r\n [0x1E29, 'h'],\r\n [0x1E2B, 'h'],\r\n [0x1E96, 'h'],\r\n [0x24D7, 'h'],\r\n [0x2C68, 'h'],\r\n [0x2C76, 'h'],\r\n [0xFF48, 'h'],\r\n [0x1F6, 'HV'],\r\n [0x24A3, '(h)'],\r\n [0x195, 'hv'],\r\n [0xCC, 'I'],\r\n [0xCD, 'I'],\r\n [0xCE, 'I'],\r\n [0xCF, 'I'],\r\n [0x128, 'I'],\r\n [0x12A, 'I'],\r\n [0x12C, 'I'],\r\n [0x12E, 'I'],\r\n [0x130, 'I'],\r\n [0x196, 'I'],\r\n [0x197, 'I'],\r\n [0x1CF, 'I'],\r\n [0x208, 'I'],\r\n [0x20A, 'I'],\r\n [0x26A, 'I'],\r\n [0x1D7B, 'I'],\r\n [0x1E2C, 'I'],\r\n [0x1E2E, 'I'],\r\n [0x1EC8, 'I'],\r\n [0x1ECA, 'I'],\r\n [0x24BE, 'I'],\r\n [0xA7FE, 'I'],\r\n [0xFF29, 'I'],\r\n [0xEC, 'i'],\r\n [0xED, 'i'],\r\n [0xEE, 'i'],\r\n [0xEF, 'i'],\r\n [0x129, 'i'],\r\n [0x12B, 'i'],\r\n [0x12D, 'i'],\r\n [0x12F, 'i'],\r\n [0x131, 'i'],\r\n [0x1D0, 'i'],\r\n [0x209, 'i'],\r\n [0x20B, 'i'],\r\n [0x268, 'i'],\r\n [0x1D09, 'i'],\r\n [0x1D62, 'i'],\r\n [0x1D7C, 'i'],\r\n [0x1D96, 'i'],\r\n [0x1E2D, 'i'],\r\n [0x1E2F, 'i'],\r\n [0x1EC9, 'i'],\r\n [0x1ECB, 'i'],\r\n [0x2071, 'i'],\r\n [0x24D8, 'i'],\r\n [0xFF49, 'i'],\r\n [0x132, 'IJ'],\r\n [0x24A4, '(i)'],\r\n [0x133, 'ij'],\r\n [0x134, 'J'],\r\n [0x248, 'J'],\r\n [0x1D0A, 'J'],\r\n [0x24BF, 'J'],\r\n [0xFF2A, 'J'],\r\n [0x135, 'j'],\r\n [0x1F0, 'j'],\r\n [0x237, 'j'],\r\n [0x249, 'j'],\r\n [0x25F, 'j'],\r\n [0x284, 'j'],\r\n [0x29D, 'j'],\r\n [0x24D9, 'j'],\r\n [0x2C7C, 'j'],\r\n [0xFF4A, 'j'],\r\n [0x24A5, '(j)'],\r\n [0x136, 'K'],\r\n [0x198, 'K'],\r\n [0x1E8, 'K'],\r\n [0x1D0B, 'K'],\r\n [0x1E30, 'K'],\r\n [0x1E32, 'K'],\r\n [0x1E34, 'K'],\r\n [0x24C0, 'K'],\r\n [0x2C69, 'K'],\r\n [0xA740, 'K'],\r\n [0xA742, 'K'],\r\n [0xA744, 'K'],\r\n [0xFF2B, 'K'],\r\n [0x137, 'k'],\r\n [0x199, 'k'],\r\n [0x1E9, 'k'],\r\n [0x29E, 'k'],\r\n [0x1D84, 'k'],\r\n [0x1E31, 'k'],\r\n [0x1E33, 'k'],\r\n [0x1E35, 'k'],\r\n [0x24DA, 'k'],\r\n [0x2C6A, 'k'],\r\n [0xA741, 'k'],\r\n [0xA743, 'k'],\r\n [0xA745, 'k'],\r\n [0xFF4B, 'k'],\r\n [0x24A6, '(k)'],\r\n [0x139, 'L'],\r\n [0x13B, 'L'],\r\n [0x13D, 'L'],\r\n [0x13F, 'L'],\r\n [0x141, 'L'],\r\n [0x23D, 'L'],\r\n [0x29F, 'L'],\r\n [0x1D0C, 'L'],\r\n [0x1E36, 'L'],\r\n [0x1E38, 'L'],\r\n [0x1E3A, 'L'],\r\n [0x1E3C, 'L'],\r\n [0x24C1, 'L'],\r\n [0x2C60, 'L'],\r\n [0x2C62, 'L'],\r\n [0xA746, 'L'],\r\n [0xA748, 'L'],\r\n [0xA780, 'L'],\r\n [0xFF2C, 'L'],\r\n [0x13A, 'l'],\r\n [0x13C, 'l'],\r\n [0x13E, 'l'],\r\n [0x140, 'l'],\r\n [0x142, 'l'],\r\n [0x19A, 'l'],\r\n [0x234, 'l'],\r\n [0x26B, 'l'],\r\n [0x26C, 'l'],\r\n [0x26D, 'l'],\r\n [0x1D85, 'l'],\r\n [0x1E37, 'l'],\r\n [0x1E39, 'l'],\r\n [0x1E3B, 'l'],\r\n [0x1E3D, 'l'],\r\n [0x24DB, 'l'],\r\n [0x2C61, 'l'],\r\n [0xA747, 'l'],\r\n [0xA749, 'l'],\r\n [0xA781, 'l'],\r\n [0xFF4C, 'l'],\r\n [0x1C7, 'LJ'],\r\n [0x1EFA, 'LL'],\r\n [0x1C8, 'Lj'],\r\n [0x24A7, '(l)'],\r\n [0x1C9, 'lj'],\r\n [0x1EFB, 'll'],\r\n [0x2AA, 'ls'],\r\n [0x2AB, 'lz'],\r\n [0x19C, 'M'],\r\n [0x1D0D, 'M'],\r\n [0x1E3E, 'M'],\r\n [0x1E40, 'M'],\r\n [0x1E42, 'M'],\r\n [0x24C2, 'M'],\r\n [0x2C6E, 'M'],\r\n [0xA7FD, 'M'],\r\n [0xA7FF, 'M'],\r\n [0xFF2D, 'M'],\r\n [0x26F, 'm'],\r\n [0x270, 'm'],\r\n [0x271, 'm'],\r\n [0x1D6F, 'm'],\r\n [0x1D86, 'm'],\r\n [0x1E3F, 'm'],\r\n [0x1E41, 'm'],\r\n [0x1E43, 'm'],\r\n [0x24DC, 'm'],\r\n [0xFF4D, 'm'],\r\n [0x24A8, '(m)'],\r\n [0xD1, 'N'],\r\n [0x143, 'N'],\r\n [0x145, 'N'],\r\n [0x147, 'N'],\r\n [0x14A, 'N'],\r\n [0x19D, 'N'],\r\n [0x1F8, 'N'],\r\n [0x220, 'N'],\r\n [0x274, 'N'],\r\n [0x1D0E, 'N'],\r\n [0x1E44, 'N'],\r\n [0x1E46, 'N'],\r\n [0x1E48, 'N'],\r\n [0x1E4A, 'N'],\r\n [0x24C3, 'N'],\r\n [0xFF2E, 'N'],\r\n [0xF1, 'n'],\r\n [0x144, 'n'],\r\n [0x146, 'n'],\r\n [0x148, 'n'],\r\n [0x149, 'n'],\r\n [0x14B, 'n'],\r\n [0x19E, 'n'],\r\n [0x1F9, 'n'],\r\n [0x235, 'n'],\r\n [0x272, 'n'],\r\n [0x273, 'n'],\r\n [0x1D70, 'n'],\r\n [0x1D87, 'n'],\r\n [0x1E45, 'n'],\r\n [0x1E47, 'n'],\r\n [0x1E49, 'n'],\r\n [0x1E4B, 'n'],\r\n [0x207F, 'n'],\r\n [0x24DD, 'n'],\r\n [0xFF4E, 'n'],\r\n [0x1CA, 'NJ'],\r\n [0x1CB, 'Nj'],\r\n [0x24A9, '(n)'],\r\n [0x1CC, 'nj'],\r\n [0xD2, 'O'],\r\n [0xD3, 'O'],\r\n [0xD4, 'O'],\r\n [0xD5, 'O'],\r\n [0xD6, 'O'],\r\n [0xD8, 'O'],\r\n [0x14C, 'O'],\r\n [0x14E, 'O'],\r\n [0x150, 'O'],\r\n [0x186, 'O'],\r\n [0x19F, 'O'],\r\n [0x1A0, 'O'],\r\n [0x1D1, 'O'],\r\n [0x1EA, 'O'],\r\n [0x1EC, 'O'],\r\n [0x1FE, 'O'],\r\n [0x20C, 'O'],\r\n [0x20E, 'O'],\r\n [0x22A, 'O'],\r\n [0x22C, 'O'],\r\n [0x22E, 'O'],\r\n [0x230, 'O'],\r\n [0x1D0F, 'O'],\r\n [0x1D10, 'O'],\r\n [0x1E4C, 'O'],\r\n [0x1E4E, 'O'],\r\n [0x1E50, 'O'],\r\n [0x1E52, 'O'],\r\n [0x1ECC, 'O'],\r\n [0x1ECE, 'O'],\r\n [0x1ED0, 'O'],\r\n [0x1ED2, 'O'],\r\n [0x1ED4, 'O'],\r\n [0x1ED6, 'O'],\r\n [0x1ED8, 'O'],\r\n [0x1EDA, 'O'],\r\n [0x1EDC, 'O'],\r\n [0x1EDE, 'O'],\r\n [0x1EE0, 'O'],\r\n [0x1EE2, 'O'],\r\n [0x24C4, 'O'],\r\n [0xA74A, 'O'],\r\n [0xA74C, 'O'],\r\n [0xFF2F, 'O'],\r\n [0xF2, 'o'],\r\n [0xF3, 'o'],\r\n [0xF4, 'o'],\r\n [0xF5, 'o'],\r\n [0xF6, 'o'],\r\n [0xF8, 'o'],\r\n [0x14D, 'o'],\r\n [0x14F, 'o'],\r\n [0x151, 'o'],\r\n [0x1A1, 'o'],\r\n [0x1D2, 'o'],\r\n [0x1EB, 'o'],\r\n [0x1ED, 'o'],\r\n [0x1FF, 'o'],\r\n [0x20D, 'o'],\r\n [0x20F, 'o'],\r\n [0x22B, 'o'],\r\n [0x22D, 'o'],\r\n [0x22F, 'o'],\r\n [0x231, 'o'],\r\n [0x254, 'o'],\r\n [0x275, 'o'],\r\n [0x1D16, 'o'],\r\n [0x1D17, 'o'],\r\n [0x1D97, 'o'],\r\n [0x1E4D, 'o'],\r\n [0x1E4F, 'o'],\r\n [0x1E51, 'o'],\r\n [0x1E53, 'o'],\r\n [0x1ECD, 'o'],\r\n [0x1ECF, 'o'],\r\n [0x1ED1, 'o'],\r\n [0x1ED3, 'o'],\r\n [0x1ED5, 'o'],\r\n [0x1ED7, 'o'],\r\n [0x1ED9, 'o'],\r\n [0x1EDB, 'o'],\r\n [0x1EDD, 'o'],\r\n [0x1EDF, 'o'],\r\n [0x1EE1, 'o'],\r\n [0x1EE3, 'o'],\r\n [0x2092, 'o'],\r\n [0x24DE, 'o'],\r\n [0x2C7A, 'o'],\r\n [0xA74B, 'o'],\r\n [0xA74D, 'o'],\r\n [0xFF4F, 'o'],\r\n [0x152, 'OE'],\r\n [0x276, 'OE'],\r\n [0xA74E, 'OO'],\r\n [0x222, 'OU'],\r\n [0x1D15, 'OU'],\r\n [0x24AA, '(o)'],\r\n [0x153, 'oe'],\r\n [0x1D14, 'oe'],\r\n [0xA74F, 'oo'],\r\n [0x223, 'ou'],\r\n [0x1A4, 'P'],\r\n [0x1D18, 'P'],\r\n [0x1E54, 'P'],\r\n [0x1E56, 'P'],\r\n [0x24C5, 'P'],\r\n [0x2C63, 'P'],\r\n [0xA750, 'P'],\r\n [0xA752, 'P'],\r\n [0xA754, 'P'],\r\n [0xFF30, 'P'],\r\n [0x1A5, 'p'],\r\n [0x1D71, 'p'],\r\n [0x1D7D, 'p'],\r\n [0x1D88, 'p'],\r\n [0x1E55, 'p'],\r\n [0x1E57, 'p'],\r\n [0x24DF, 'p'],\r\n [0xA751, 'p'],\r\n [0xA753, 'p'],\r\n [0xA755, 'p'],\r\n [0xA7FC, 'p'],\r\n [0xFF50, 'p'],\r\n [0x24AB, '(p)'],\r\n [0x24A, 'Q'],\r\n [0x24C6, 'Q'],\r\n [0xA756, 'Q'],\r\n [0xA758, 'Q'],\r\n [0xFF31, 'Q'],\r\n [0x138, 'q'],\r\n [0x24B, 'q'],\r\n [0x2A0, 'q'],\r\n [0x24E0, 'q'],\r\n [0xA757, 'q'],\r\n [0xA759, 'q'],\r\n [0xFF51, 'q'],\r\n [0x24AC, '(q)'],\r\n [0x239, 'qp'],\r\n [0x154, 'R'],\r\n [0x156, 'R'],\r\n [0x158, 'R'],\r\n [0x210, 'R'],\r\n [0x212, 'R'],\r\n [0x24C, 'R'],\r\n [0x280, 'R'],\r\n [0x281, 'R'],\r\n [0x1D19, 'R'],\r\n [0x1D1A, 'R'],\r\n [0x1E58, 'R'],\r\n [0x1E5A, 'R'],\r\n [0x1E5C, 'R'],\r\n [0x1E5E, 'R'],\r\n [0x24C7, 'R'],\r\n [0x2C64, 'R'],\r\n [0xA75A, 'R'],\r\n [0xA782, 'R'],\r\n [0xFF32, 'R'],\r\n [0x155, 'r'],\r\n [0x157, 'r'],\r\n [0x159, 'r'],\r\n [0x211, 'r'],\r\n [0x213, 'r'],\r\n [0x24D, 'r'],\r\n [0x27C, 'r'],\r\n [0x27D, 'r'],\r\n [0x27E, 'r'],\r\n [0x27F, 'r'],\r\n [0x1D63, 'r'],\r\n [0x1D72, 'r'],\r\n [0x1D73, 'r'],\r\n [0x1D89, 'r'],\r\n [0x1E59, 'r'],\r\n [0x1E5B, 'r'],\r\n [0x1E5D, 'r'],\r\n [0x1E5F, 'r'],\r\n [0x24E1, 'r'],\r\n [0xA75B, 'r'],\r\n [0xA783, 'r'],\r\n [0xFF52, 'r'],\r\n [0x24AD, '(r)'],\r\n [0x15A, 'S'],\r\n [0x15C, 'S'],\r\n [0x15E, 'S'],\r\n [0x160, 'S'],\r\n [0x218, 'S'],\r\n [0x1E60, 'S'],\r\n [0x1E62, 'S'],\r\n [0x1E64, 'S'],\r\n [0x1E66, 'S'],\r\n [0x1E68, 'S'],\r\n [0x24C8, 'S'],\r\n [0xA731, 'S'],\r\n [0xA785, 'S'],\r\n [0xFF33, 'S'],\r\n [0x15B, 's'],\r\n [0x15D, 's'],\r\n [0x15F, 's'],\r\n [0x161, 's'],\r\n [0x17F, 's'],\r\n [0x219, 's'],\r\n [0x23F, 's'],\r\n [0x282, 's'],\r\n [0x1D74, 's'],\r\n [0x1D8A, 's'],\r\n [0x1E61, 's'],\r\n [0x1E63, 's'],\r\n [0x1E65, 's'],\r\n [0x1E67, 's'],\r\n [0x1E69, 's'],\r\n [0x1E9C, 's'],\r\n [0x1E9D, 's'],\r\n [0x24E2, 's'],\r\n [0xA784, 's'],\r\n [0xFF53, 's'],\r\n [0x1E9E, 'SS'],\r\n [0x24AE, '(s)'],\r\n [0xDF, 'ss'],\r\n [0xFB06, 'st'],\r\n [0x162, 'T'],\r\n [0x164, 'T'],\r\n [0x166, 'T'],\r\n [0x1AC, 'T'],\r\n [0x1AE, 'T'],\r\n [0x21A, 'T'],\r\n [0x23E, 'T'],\r\n [0x1D1B, 'T'],\r\n [0x1E6A, 'T'],\r\n [0x1E6C, 'T'],\r\n [0x1E6E, 'T'],\r\n [0x1E70, 'T'],\r\n [0x24C9, 'T'],\r\n [0xA786, 'T'],\r\n [0xFF34, 'T'],\r\n [0x163, 't'],\r\n [0x165, 't'],\r\n [0x167, 't'],\r\n [0x1AB, 't'],\r\n [0x1AD, 't'],\r\n [0x21B, 't'],\r\n [0x236, 't'],\r\n [0x287, 't'],\r\n [0x288, 't'],\r\n [0x1D75, 't'],\r\n [0x1E6B, 't'],\r\n [0x1E6D, 't'],\r\n [0x1E6F, 't'],\r\n [0x1E71, 't'],\r\n [0x1E97, 't'],\r\n [0x24E3, 't'],\r\n [0x2C66, 't'],\r\n [0xFF54, 't'],\r\n [0xDE, 'TH'],\r\n [0xA766, 'TH'],\r\n [0xA728, 'TZ'],\r\n [0x24AF, '(t)'],\r\n [0x2A8, 'tc'],\r\n [0xFE, 'th'],\r\n [0x1D7A, 'th'],\r\n [0xA767, 'th'],\r\n [0x2A6, 'ts'],\r\n [0xA729, 'tz'],\r\n [0xD9, 'U'],\r\n [0xDA, 'U'],\r\n [0xDB, 'U'],\r\n [0xDC, 'U'],\r\n [0x168, 'U'],\r\n [0x16A, 'U'],\r\n [0x16C, 'U'],\r\n [0x16E, 'U'],\r\n [0x170, 'U'],\r\n [0x172, 'U'],\r\n [0x1AF, 'U'],\r\n [0x1D3, 'U'],\r\n [0x1D5, 'U'],\r\n [0x1D7, 'U'],\r\n [0x1D9, 'U'],\r\n [0x1DB, 'U'],\r\n [0x214, 'U'],\r\n [0x216, 'U'],\r\n [0x244, 'U'],\r\n [0x1D1C, 'U'],\r\n [0x1D7E, 'U'],\r\n [0x1E72, 'U'],\r\n [0x1E74, 'U'],\r\n [0x1E76, 'U'],\r\n [0x1E78, 'U'],\r\n [0x1E7A, 'U'],\r\n [0x1EE4, 'U'],\r\n [0x1EE6, 'U'],\r\n [0x1EE8, 'U'],\r\n [0x1EEA, 'U'],\r\n [0x1EEC, 'U'],\r\n [0x1EEE, 'U'],\r\n [0x1EF0, 'U'],\r\n [0x24CA, 'U'],\r\n [0xFF35, 'U'],\r\n [0xF9, 'u'],\r\n [0xFA, 'u'],\r\n [0xFB, 'u'],\r\n [0xFC, 'u'],\r\n [0x169, 'u'],\r\n [0x16B, 'u'],\r\n [0x16D, 'u'],\r\n [0x16F, 'u'],\r\n [0x171, 'u'],\r\n [0x173, 'u'],\r\n [0x1B0, 'u'],\r\n [0x1D4, 'u'],\r\n [0x1D6, 'u'],\r\n [0x1D8, 'u'],\r\n [0x1DA, 'u'],\r\n [0x1DC, 'u'],\r\n [0x215, 'u'],\r\n [0x217, 'u'],\r\n [0x289, 'u'],\r\n [0x1D64, 'u'],\r\n [0x1D99, 'u'],\r\n [0x1E73, 'u'],\r\n [0x1E75, 'u'],\r\n [0x1E77, 'u'],\r\n [0x1E79, 'u'],\r\n [0x1E7B, 'u'],\r\n [0x1EE5, 'u'],\r\n [0x1EE7, 'u'],\r\n [0x1EE9, 'u'],\r\n [0x1EEB, 'u'],\r\n [0x1EED, 'u'],\r\n [0x1EEF, 'u'],\r\n [0x1EF1, 'u'],\r\n [0x24E4, 'u'],\r\n [0xFF55, 'u'],\r\n [0x24B0, '(u)'],\r\n [0x1D6B, 'ue'],\r\n [0x1B2, 'V'],\r\n [0x245, 'V'],\r\n [0x1D20, 'V'],\r\n [0x1E7C, 'V'],\r\n [0x1E7E, 'V'],\r\n [0x1EFC, 'V'],\r\n [0x24CB, 'V'],\r\n [0xA75E, 'V'],\r\n [0xA768, 'V'],\r\n [0xFF36, 'V'],\r\n [0x28B, 'v'],\r\n [0x28C, 'v'],\r\n [0x1D65, 'v'],\r\n [0x1D8C, 'v'],\r\n [0x1E7D, 'v'],\r\n [0x1E7F, 'v'],\r\n [0x24E5, 'v'],\r\n [0x2C71, 'v'],\r\n [0x2C74, 'v'],\r\n [0xA75F, 'v'],\r\n [0xFF56, 'v'],\r\n [0xA760, 'VY'],\r\n [0x24B1, '(v)'],\r\n [0xA761, 'vy'],\r\n [0x174, 'W'],\r\n [0x1F7, 'W'],\r\n [0x1D21, 'W'],\r\n [0x1E80, 'W'],\r\n [0x1E82, 'W'],\r\n [0x1E84, 'W'],\r\n [0x1E86, 'W'],\r\n [0x1E88, 'W'],\r\n [0x24CC, 'W'],\r\n [0x2C72, 'W'],\r\n [0xFF37, 'W'],\r\n [0x175, 'w'],\r\n [0x1BF, 'w'],\r\n [0x28D, 'w'],\r\n [0x1E81, 'w'],\r\n [0x1E83, 'w'],\r\n [0x1E85, 'w'],\r\n [0x1E87, 'w'],\r\n [0x1E89, 'w'],\r\n [0x1E98, 'w'],\r\n [0x24E6, 'w'],\r\n [0x2C73, 'w'],\r\n [0xFF57, 'w'],\r\n [0x24B2, '(w)'],\r\n [0x1E8A, 'X'],\r\n [0x1E8C, 'X'],\r\n [0x24CD, 'X'],\r\n [0xFF38, 'X'],\r\n [0x1D8D, 'x'],\r\n [0x1E8B, 'x'],\r\n [0x1E8D, 'x'],\r\n [0x2093, 'x'],\r\n [0x24E7, 'x'],\r\n [0xFF58, 'x'],\r\n [0x24B3, '(x)'],\r\n [0xDD, 'Y'],\r\n [0x176, 'Y'],\r\n [0x178, 'Y'],\r\n [0x1B3, 'Y'],\r\n [0x232, 'Y'],\r\n [0x24E, 'Y'],\r\n [0x28F, 'Y'],\r\n [0x1E8E, 'Y'],\r\n [0x1EF2, 'Y'],\r\n [0x1EF4, 'Y'],\r\n [0x1EF6, 'Y'],\r\n [0x1EF8, 'Y'],\r\n [0x1EFE, 'Y'],\r\n [0x24CE, 'Y'],\r\n [0xFF39, 'Y'],\r\n [0xFD, 'y'],\r\n [0xFF, 'y'],\r\n [0x177, 'y'],\r\n [0x1B4, 'y'],\r\n [0x233, 'y'],\r\n [0x24F, 'y'],\r\n [0x28E, 'y'],\r\n [0x1E8F, 'y'],\r\n [0x1E99, 'y'],\r\n [0x1EF3, 'y'],\r\n [0x1EF5, 'y'],\r\n [0x1EF7, 'y'],\r\n [0x1EF9, 'y'],\r\n [0x1EFF, 'y'],\r\n [0x24E8, 'y'],\r\n [0xFF59, 'y'],\r\n [0x24B4, '(y)'],\r\n [0x179, 'Z'],\r\n [0x17B, 'Z'],\r\n [0x17D, 'Z'],\r\n [0x1B5, 'Z'],\r\n [0x21C, 'Z'],\r\n [0x224, 'Z'],\r\n [0x1D22, 'Z'],\r\n [0x1E90, 'Z'],\r\n [0x1E92, 'Z'],\r\n [0x1E94, 'Z'],\r\n [0x24CF, 'Z'],\r\n [0x2C6B, 'Z'],\r\n [0xA762, 'Z'],\r\n [0xFF3A, 'Z'],\r\n [0x17A, 'z'],\r\n [0x17C, 'z'],\r\n [0x17E, 'z'],\r\n [0x1B6, 'z'],\r\n [0x21D, 'z'],\r\n [0x225, 'z'],\r\n [0x240, 'z'],\r\n [0x290, 'z'],\r\n [0x291, 'z'],\r\n [0x1D76, 'z'],\r\n [0x1D8E, 'z'],\r\n [0x1E91, 'z'],\r\n [0x1E93, 'z'],\r\n [0x1E95, 'z'],\r\n [0x24E9, 'z'],\r\n [0x2C6C, 'z'],\r\n [0xA763, 'z'],\r\n [0xFF5A, 'z'],\r\n [0x24B5, '(z)'],\r\n [0x2070, '0'],\r\n [0x2080, '0'],\r\n [0x24EA, '0'],\r\n [0x24FF, '0'],\r\n [0xFF10, '0'],\r\n [0xB9, '1'],\r\n [0x2081, '1'],\r\n [0x2460, '1'],\r\n [0x24F5, '1'],\r\n [0x2776, '1'],\r\n [0x2780, '1'],\r\n [0x278A, '1'],\r\n [0xFF11, '1'],\r\n [0x2488, '1.'],\r\n [0x2474, '(1)'],\r\n [0xB2, '2'],\r\n [0x2082, '2'],\r\n [0x2461, '2'],\r\n [0x24F6, '2'],\r\n [0x2777, '2'],\r\n [0x2781, '2'],\r\n [0x278B, '2'],\r\n [0xFF12, '2'],\r\n [0x2489, '2.'],\r\n [0x2475, '(2)'],\r\n [0xB3, '3'],\r\n [0x2083, '3'],\r\n [0x2462, '3'],\r\n [0x24F7, '3'],\r\n [0x2778, '3'],\r\n [0x2782, '3'],\r\n [0x278C, '3'],\r\n [0xFF13, '3'],\r\n [0x248A, '3.'],\r\n [0x2476, '(3)'],\r\n [0x2074, '4'],\r\n [0x2084, '4'],\r\n [0x2463, '4'],\r\n [0x24F8, '4'],\r\n [0x2779, '4'],\r\n [0x2783, '4'],\r\n [0x278D, '4'],\r\n [0xFF14, '4'],\r\n [0x248B, '4.'],\r\n [0x2477, '(4)'],\r\n [0x2075, '5'],\r\n [0x2085, '5'],\r\n [0x2464, '5'],\r\n [0x24F9, '5'],\r\n [0x277A, '5'],\r\n [0x2784, '5'],\r\n [0x278E, '5'],\r\n [0xFF15, '5'],\r\n [0x248C, '5.'],\r\n [0x2478, '(5)'],\r\n [0x2076, '6'],\r\n [0x2086, '6'],\r\n [0x2465, '6'],\r\n [0x24FA, '6'],\r\n [0x277B, '6'],\r\n [0x2785, '6'],\r\n [0x278F, '6'],\r\n [0xFF16, '6'],\r\n [0x248D, '6.'],\r\n [0x2479, '(6)'],\r\n [0x2077, '7'],\r\n [0x2087, '7'],\r\n [0x2466, '7'],\r\n [0x24FB, '7'],\r\n [0x277C, '7'],\r\n [0x2786, '7'],\r\n [0x2790, '7'],\r\n [0xFF17, '7'],\r\n [0x248E, '7.'],\r\n [0x247A, '(7)'],\r\n [0x2078, '8'],\r\n [0x2088, '8'],\r\n [0x2467, '8'],\r\n [0x24FC, '8'],\r\n [0x277D, '8'],\r\n [0x2787, '8'],\r\n [0x2791, '8'],\r\n [0xFF18, '8'],\r\n [0x248F, '8.'],\r\n [0x247B, '(8)'],\r\n [0x2079, '9'],\r\n [0x2089, '9'],\r\n [0x2468, '9'],\r\n [0x24FD, '9'],\r\n [0x277E, '9'],\r\n [0x2788, '9'],\r\n [0x2792, '9'],\r\n [0xFF19, '9'],\r\n [0x2490, '9.'],\r\n [0x247C, '(9)'],\r\n [0x2469, '10'],\r\n [0x24FE, '10'],\r\n [0x277F, '10'],\r\n [0x2789, '10'],\r\n [0x2793, '10'],\r\n [0x2491, '10.'],\r\n [0x247D, '(10)'],\r\n [0x246A, '11'],\r\n [0x24EB, '11'],\r\n [0x2492, '11.'],\r\n [0x247E, '(11)'],\r\n [0x246B, '12'],\r\n [0x24EC, '12'],\r\n [0x2493, '12.'],\r\n [0x247F, '(12)'],\r\n [0x246C, '13'],\r\n [0x24ED, '13'],\r\n [0x2494, '13.'],\r\n [0x2480, '(13)'],\r\n [0x246D, '14'],\r\n [0x24EE, '14'],\r\n [0x2495, '14.'],\r\n [0x2481, '(14)'],\r\n [0x246E, '15'],\r\n [0x24EF, '15'],\r\n [0x2496, '15.'],\r\n [0x2482, '(15)'],\r\n [0x246F, '16'],\r\n [0x24F0, '16'],\r\n [0x2497, '16.'],\r\n [0x2483, '(16)'],\r\n [0x2470, '17'],\r\n [0x24F1, '17'],\r\n [0x2498, '17.'],\r\n [0x2484, '(17)'],\r\n [0x2471, '18'],\r\n [0x24F2, '18'],\r\n [0x2499, '18.'],\r\n [0x2485, '(18)'],\r\n [0x2472, '19'],\r\n [0x24F3, '19'],\r\n [0x249A, '19.'],\r\n [0x2486, '(19)'],\r\n [0x2473, '20'],\r\n [0x24F4, '20'],\r\n [0x249B, '20.'],\r\n [0x2487, '(20)'],\r\n [0xAB, '\"'],\r\n [0xBB, '\"'],\r\n [0x201C, '\"'],\r\n [0x201D, '\"'],\r\n [0x201E, '\"'],\r\n [0x2033, '\"'],\r\n [0x2036, '\"'],\r\n [0x275D, '\"'],\r\n [0x275E, '\"'],\r\n [0x276E, '\"'],\r\n [0x276F, '\"'],\r\n [0xFF02, '\"'],\r\n [0x2018, '\\''],\r\n [0x2019, '\\''],\r\n [0x201A, '\\''],\r\n [0x201B, '\\''],\r\n [0x2032, '\\''],\r\n [0x2035, '\\''],\r\n [0x2039, '\\''],\r\n [0x203A, '\\''],\r\n [0x275B, '\\''],\r\n [0x275C, '\\''],\r\n [0xFF07, '\\''],\r\n [0x2010, '-'],\r\n [0x2011, '-'],\r\n [0x2012, '-'],\r\n [0x2013, '-'],\r\n [0x2014, '-'],\r\n [0x207B, '-'],\r\n [0x208B, '-'],\r\n [0xFF0D, '-'],\r\n [0x2045, '['],\r\n [0x2772, '['],\r\n [0xFF3B, '['],\r\n [0x2046, ']'],\r\n [0x2773, ']'],\r\n [0xFF3D, ']'],\r\n [0x207D, '('],\r\n [0x208D, '('],\r\n [0x2768, '('],\r\n [0x276A, '('],\r\n [0xFF08, '('],\r\n [0x2E28, '(('],\r\n [0x207E, ')'],\r\n [0x208E, ')'],\r\n [0x2769, ')'],\r\n [0x276B, ')'],\r\n [0xFF09, ')'],\r\n [0x2E29, '))'],\r\n [0x276C, '<'],\r\n [0x2770, '<'],\r\n [0xFF1C, '<'],\r\n [0x276D, '>'],\r\n [0x2771, '>'],\r\n [0xFF1E, '>'],\r\n [0x2774, '{'],\r\n [0xFF5B, '{'],\r\n [0x2775, '}'],\r\n [0xFF5D, '}'],\r\n [0x207A, '+'],\r\n [0x208A, '+'],\r\n [0xFF0B, '+'],\r\n [0x207C, '='],\r\n [0x208C, '='],\r\n [0xFF1D, '='],\r\n [0xFF01, '!'],\r\n [0x203C, '!!'],\r\n [0x2049, '!?'],\r\n [0xFF03, '#'],\r\n [0xFF04, '$'],\r\n [0x2052, '%'],\r\n [0xFF05, '%'],\r\n [0xFF06, '&'],\r\n [0x204E, '*'],\r\n [0xFF0A, '*'],\r\n [0xFF0C, ','],\r\n [0xFF0E, '.'],\r\n [0x2044, '/'],\r\n [0xFF0F, '/'],\r\n [0xFF1A, ':'],\r\n [0x204F, ';'],\r\n [0xFF1B, ';'],\r\n [0xFF1F, '?'],\r\n [0x2047, '??'],\r\n [0x2048, '?!'],\r\n [0xFF20, '@'],\r\n [0xFF3C, '\\\\'],\r\n [0x2038, '^'],\r\n [0xFF3E, '^'],\r\n [0xFF3F, '_'],\r\n [0x2053, '~'],\r\n [0xFF5E, '~']\r\n]);\r\n\r\nexport default ASCIIFolder;","import { get, pick } from '../../base/util';\r\nimport asciiFolder from '../../base/ascii-folder';\r\n\r\n// load potential overrides.\r\nlet overrides = typeof (apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nlet { CART_CHECKOUT } = overrides;\r\n\r\nlet braintreeDropin;\r\n\r\n/**\r\n * @class LiabilityNotShiftenError\r\n * Custom error to identify Liability Errors.\r\n */\r\nexport class LiabilityNotShiftedError extends Error {\r\n constructor(message) {\r\n super(message);\r\n }\r\n}\r\n\r\nexport class CheckoutError extends Error {\r\n constructor(message, response) {\r\n super(message);\r\n this.response = response;\r\n this.type = 'CheckoutError';\r\n }\r\n}\r\n\r\nconst defaultBraintreeOptions = {\r\n paymentOptionPriority: ['paypal', 'card'],\r\n paypal: {\r\n flow: 'checkout'\r\n }\r\n}\r\n\r\n/**\r\n * State\r\n */\r\n\r\nconst state = {\r\n purchaseMode: '',\r\n purchaseInProgress: false,\r\n updatingAccount: false,\r\n braintreeLoaded: false,\r\n braintreeValid: false,\r\n braintreeFailed: false,\r\n braintreeClientToken: '',\r\n paymentMethodRequestable: false,\r\n paymentOptionSelected: '',\r\n recaptchaIsOK: false,\r\n recaptchaChallenge: '',\r\n editingGuestDetails: true,\r\n customerDetailsFormDisabled: false,\r\n};\r\n\r\n/**\r\n * Getters\r\n */\r\n\r\nconst getters = {\r\n /**\r\n * Returns whether the payment section should \r\n * be enabled and available or not.\r\n */\r\n paymentAvailable: (state, getters, rootState) => {\r\n if (state.braintreeFailed) { return false; }\r\n if (!state.purchaseMode) { return false; }\r\n let lookupObjectKey = state.purchaseMode === 'guest' \r\n ? 'edit'\r\n : 'current';\r\n\r\n return rootState.account[lookupObjectKey].canPurchase;\r\n },\r\n\r\n /**\r\n * Returns whether the user is editing the eccount details.\r\n * He/she is forced to do so if he is flagged from backend that he needs \r\n * to make updates.\r\n */\r\n editingAccountDetails: (state, getters, rootState) => {\r\n return rootState.account.signedIn && (!rootState.account.current.canPurchase || state.updatingAccount);\r\n },\r\n\r\n /**\r\n * Returns whether threeDSecure should be used or not.\r\n */\r\n useThreeDSecure: (state, getters, rootState) => {\r\n return true; //rootState.shoppingCart.currencyCode !== 'USD';\r\n },\r\n\r\n /**\r\n * Returns whether to use recaptcha or not\r\n */\r\n useRecaptcha: (state, getters, rootState) => {\r\n return true; // for now\r\n },\r\n\r\n getRecaptchaChallenge: (state, getters, rootState) => {\r\n return state.recaptchaChallenge;\r\n }\r\n};\r\n\r\nconst mutations = {\r\n /**\r\n * Updates whether braintree has finished loading \r\n * or not.\r\n * \r\n * @param {Object} state \r\n * @param {Boolean} loaded \r\n */\r\n setBraintreeLoaded(state, loaded) {\r\n state.braintreeLoaded = loaded;\r\n },\r\n\r\n /**\r\n * Sets whether the payment method is requestable in the state\r\n * \r\n * @param {Object} state \r\n * @param {Boolean} requestable \r\n */\r\n setPaymentMethodRequestable(state, requestable) {\r\n state.paymentMethodRequestable = requestable;\r\n },\r\n\r\n /**\r\n * Sets the current purchase mode (which panel is selected.)\r\n * @param {Object} state current state\r\n * @param {String} newMode the new purchase mode.\r\n */\r\n setPurchaseMode(state, newMode) {\r\n state.purchaseMode = newMode;\r\n },\r\n\r\n /**\r\n * Sets whether the user is updating the current account.\r\n * @param {Object} state current state\r\n * @param {Boolean} updatingAccount the new value\r\n */\r\n setUpdatingAccount(state, updatingAccount) {\r\n state.updatingAccount = updatingAccount;\r\n },\r\n\r\n /**\r\n * Sets whether the purchase is in progress\r\n * @param {Object} state state\r\n * @param {Boolean} inProgress whether in progress or not\r\n */\r\n setPurchaseInProgress(state, inProgress) {\r\n state.purchaseInProgress = inProgress;\r\n },\r\n\r\n /**\r\n * Sets whether braintree failed loading.\r\n * @param {Object} state the current state\r\n * @param {Boolean} failed Whether it failed or not\r\n */\r\n setBraintreeFailed(state, failed) {\r\n state.braintreeFailed = failed;\r\n },\r\n\r\n /**\r\n * \r\n * @param {Object} state Vuex state\r\n * @param {Object} merchants a key-value object with currency + merchant ID\r\n */\r\n setMerchants(state, merchants) {\r\n state.merchants = merchants;\r\n },\r\n\r\n setPaymentOptionSelected(state, paymentOption) {\r\n state.paymentOptionSelected = paymentOption;\r\n },\r\n\r\n /**\r\n * \r\n * @param {Object} state Vuex state\r\n * @param {Object} challenge a string value of the Recaptcha challenge\r\n */\r\n setRecaptchaChallenge(state, challenge) {\r\n state.recaptchaChallenge = challenge;\r\n },\r\n\r\n setEditingGuestDetails(state, editing) {\r\n state.editingGuestDetails = editing;\r\n },\r\n\r\n setCustomerDetailsFormDisabled(state, disabled) {\r\n state.customerDetailsFormDisabled = disabled;\r\n }\r\n}\r\n\r\nlet createPromise;\r\n\r\nconst actions = {\r\n /**\r\n * Creates a Braintree dropin instance.\r\n * \r\n * @param {Context} param0 Vuex context\r\n * @param {Object} options the options to send when creating\r\n */\r\n createBraintree({ commit, getters, rootState }, options) {\r\n if (!createPromise) {\r\n createPromise = Promise.resolve();\r\n }\r\n\r\n // if we already have an instance when asked to create one, we first \r\n // tear it down.\r\n return createPromise\r\n // if we need to tear down a previous, do that first.\r\n .then(() => {\r\n if (braintreeDropin) {\r\n return braintreeDropin.teardown();\r\n }\r\n })\r\n\r\n // ... Create a braintree dropin and wire some events.\r\n .then(() => {\r\n let braintreeOptions = Object.assign({}, defaultBraintreeOptions, options);\r\n\r\n braintreeOptions.paypal.amount = rootState.shoppingCart.totalWithVatDecimal.toFixed(2);\r\n braintreeOptions.paypal.currency = rootState.shoppingCart.currencyCode;\r\n\r\n if (getters.useThreeDSecure) {\r\n braintreeOptions.threeDSecure = true;\r\n }\r\n\r\n return braintree.dropin.create(braintreeOptions);\r\n })\r\n\r\n .then(dropinInstance => {\r\n braintreeDropin = dropinInstance;\r\n braintreeDropin.on('paymentMethodRequestable', () => {\r\n commit('setPaymentMethodRequestable', true);\r\n })\r\n braintreeDropin.on('noPaymentMethodRequestable', () => {\r\n commit('setPaymentMethodRequestable', false);\r\n });\r\n braintreeDropin.on('paymentOptionSelected', (evt) => {\r\n commit('setPaymentOptionSelected', evt.paymentOption);\r\n });\r\n\r\n commit('setBraintreeLoaded', true);\r\n })\r\n\r\n .catch(error => {\r\n console.error(error);\r\n commit('setBraintreeFailed', true);\r\n throw error;\r\n })\r\n\r\n .finally(() => {\r\n createPromise = null;\r\n });\r\n },\r\n\r\n /**\r\n * Makes a full purchase with braintree and checkout the \r\n * cart.\r\n * @param {Object} param0 Vuex context.\r\n * @returns {Promise} a promise for completion. \r\n */\r\n makePurchase({ commit, getters, rootState }) {\r\n let url = CART_CHECKOUT || '/api/v1/cart/checkout';\r\n let options;\r\n\r\n commit('setPurchaseInProgress', true);\r\n\r\n // if we should support 3D secure, we need to assign \r\n // more fields\r\n if (getters.useThreeDSecure) {\r\n let account = rootState.account.signedIn \r\n ? rootState.account.current \r\n : rootState.account.edit;\r\n\r\n options = {\r\n threeDSecure: {\r\n collectDeviceData: true,\r\n amount: rootState.shoppingCart.totalWithVatDecimal.toFixed(2),\r\n email: account.email,\r\n mobilePhoneNumber: account.phoneMobile,\r\n billingAddress: {\r\n givenName: asciiFolder.foldReplacing(account.firstName),\r\n surname: asciiFolder.foldReplacing(account.lastName),\r\n streetAddress: account.address.substring(0, 49),\r\n locality: account.city,\r\n region: account.state,\r\n postalCode: account.postcode,\r\n countryCodeAlpha2: account.countryCode,\r\n phoneNumber: account.phoneMobile,\r\n },\r\n additionalInformation: {\r\n ipAddress: rootState.shoppingCart.userIpAddress,\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Checkout at braintree.\r\n return braintreeDropin.requestPaymentMethod(options)\r\n\r\n // if payment at braintree was successful...\r\n .then(payload => {\r\n // if we're using threeDSecure and the liability hasn't shifted\r\n // we \r\n if (getters.useThreeDSecure && payload.type === \"CreditCard\" && !payload.liabilityShifted) {\r\n throw new LiabilityNotShiftedError;\r\n }\r\n\r\n // ... also make a post to our backend to checkout the order...\r\n let checkoutOptions = {\r\n paymentNonce: payload.nonce,\r\n recaptchaChallenge: getters.getRecaptchaChallenge\r\n };\r\n\r\n Object.assign(checkoutOptions, rootState.account.edit);\r\n\r\n return axios\r\n .post(url, checkoutOptions)\r\n .catch(err => {\r\n throw new CheckoutError('Checkout Error', get(err, 'response'));\r\n });\r\n })\r\n\r\n /**\r\n * When that was successful, unwrap what's interesting for the \r\n * caller and return that.\r\n */\r\n .then(response => {\r\n let data = get(response, 'data');\r\n return data;\r\n })\r\n\r\n .catch(error => {\r\n commit('setPurchaseInProgress', false);\r\n console.log(error);\r\n\r\n // re-throw error for anyone listening after this catch.\r\n throw error;\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n actions,\r\n state,\r\n mutations,\r\n getters,\r\n namespaced: true\r\n};","export const NAMESPACE = 'pageHeader';\r\n\r\nexport const MUTATION_TYPES = {\r\n toggleNav: 'toggleNav',\r\n toggleSubMenu: 'toggleSubMenu',\r\n setMeta: 'setMeta'\r\n};\r\n\r\n/**\r\n * @module page-header\r\n *\r\n * this module handles state revolving the page header and\r\n * it's mutations / actions\r\n */\r\n\r\nconst state = {\r\n open: false,\r\n subMenuOpen: false,\r\n metaActive: false\r\n};\r\n\r\nconst mutations = {\r\n [MUTATION_TYPES.toggleNav](state, isOpen) {\r\n if (typeof(isOpen) === 'undefined') {\r\n state.open = !state.open;\r\n return;\r\n }\r\n\r\n state.open = isOpen;\r\n },\r\n\r\n [MUTATION_TYPES.toggleSubMenu](state, isOpen) {\r\n if (typeof(isOpen) === 'undefined') {\r\n state.subMenuOpen = !state.subMenuOpen;\r\n return;\r\n }\r\n\r\n state.subMenuOpen = isOpen;\r\n },\r\n\r\n [MUTATION_TYPES.setMeta](state, isActive) {\r\n state.metaActive = isActive;\r\n }\r\n};\r\n\r\nexport default {\r\n state,\r\n mutations,\r\n namespaced: true\r\n};\r\n","import {get} from '../util';\r\nlet currencyMeta = document.querySelector('meta[property=\"softube:currency\"]');\r\n\r\n/**\r\n * Tracks that a product was added to the cart in the\r\n * enhanced ecom analytics.\r\n * @see https://developers.google.com/tag-manager/enhanced-ecommerce#add\r\n * @param {Object} product the product that was added\r\n */\r\n\r\nexport function trackAddToCart({ product, quantity = 1 }) {\r\n if (typeof(dataLayer) === 'undefined') { return; }\r\n if (!product) { return; }\r\n dataLayer.push({\r\n 'event': 'addToCart',\r\n 'ecommerce': {\r\n 'currencyCode': get(currencyMeta, 'content'),\r\n 'add': {\r\n 'products': [{\r\n 'name': product.name,\r\n 'id': product.id,\r\n 'price': product.price,\r\n 'quantity': quantity\r\n }]\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport function trackRemoveFromCart({ product, quantity = 1 }) {\r\n if (typeof(dataLayer) === 'undefined') { return; }\r\n if (!product) { return; }\r\n dataLayer.push({\r\n 'event': 'removeFromCart',\r\n 'ecommerce': {\r\n 'currencyCode': get(currencyMeta, 'content'),\r\n 'remove': { // 'remove' actionFieldObject measures.\r\n 'products': [{ // removing a product to a shopping cart.\r\n 'name': product.name,\r\n 'id': product.id,\r\n 'price': product.price,\r\n 'quantity': quantity\r\n }]\r\n }\r\n }\r\n });\r\n}\r\n","import axios from 'axios';\r\nimport {get} from '../../base/util';\r\nimport {trackAddToCart, trackRemoveFromCart} from '../../base/analytics/track-cart';\r\nimport {debounce} from '../../base/util';\r\nimport {\r\n NAMESPACE as nsMessages,\r\n ACTION_TYPES as atMessages\r\n} from './messages';\r\n\r\n/**\r\n * @module shopping-cart\r\n * this Vuex module handles the state\r\n * of the cart.\r\n */\r\n\r\n// apply overrides if exists.\r\nconst overrides = typeof (apiOverrides) !== 'undefined' ? apiOverrides : {};\r\nconst { CART, CART_META, CART_ADD, CART_PROMOTION_ADD, CART_PROMOTION_REMOVE, CART_REMOVE } = overrides;\r\n\r\n// this controls whether we want to make sure the loading state\r\n// is visible even though it finishes faster than \r\nconst delayLoader = false;\r\nconst delayTime = 1500;\r\n\r\nfunction getProductTrackingData(row) {\r\n let data = {\r\n id: get(row, 'productId'),\r\n name: get(row, 'name')\r\n };\r\n\r\n let price = get(row, 'price.campaignDecimal') || get(row, 'price.normalDecimal');\r\n if (typeof(price) === 'number') {\r\n data.price = price.toFixed(2).toString();\r\n };\r\n return data;\r\n}\r\n\r\nexport const NAMESPACE = 'shoppingCart';\r\nexport const ACTION_TYPES = {\r\n addItem: 'addItem',\r\n updateItemQuantity: 'updateItemQuantity',\r\n removeItem: 'removeItem',\r\n fetchShoppingCart: 'fetchShoppingCart'\r\n};\r\nexport const GETTERS = {\r\n totalItemsInCart: 'totalItemsInCart'\r\n};\r\n\r\nconst cancellationTokens = {};\r\n\r\nconst state = {\r\n addingPromotion: false,\r\n loading: false,\r\n items: [],\r\n includesHardware: false,\r\n hasItemThatIncludesLegacyPlugins: false,\r\n allowDifferentDeliveryAddress: false,\r\n totalWithVAT: '',\r\n totalWithVatDecimal: 0,\r\n discountWithoutVAT: '',\r\n discountWithVAT: '',\r\n totalVAT: '',\r\n totalVatDecimal: 0,\r\n orderValueWithVAT: '',\r\n deliveryCostWithVAT: '',\r\n deliveryDescription: '',\r\n subtotalWithoutVAT: '',\r\n promotionalCode: '',\r\n newPromotionalCode: '',\r\n promotionalCodeErrorMessage: '',\r\n isBusinessUser: '',\r\n isSoftubeIncOrder: false,\r\n currencyCode: '',\r\n paymentNonce: '',\r\n paymentProviderName: '',\r\n cartMetaErrors: [],\r\n userIpAddress: '',\r\n}\r\n\r\nconst getters = {\r\n count: state => state.items.length,\r\n hasItems: state => !!state.items.length,\r\n hasPromotionalCode: state => !!state.promotionalCode,\r\n isInCart: (state) => (id) => !!state.items.filter(i => i.productId === id)[0],\r\n rowQuantity: (state) => (rowId) => {\r\n var row = state.items.filter(r => r.rowId === rowId)[0];\r\n if (!row) { return 0; }\r\n return row.quantity;\r\n },\r\n totalItemsInCart: (state) => {\r\n return state.items\r\n .map(i => i.quantity)\r\n .reduce((prev, curr) => prev + curr, 0)\r\n },\r\n cartMetaErrors: (state) => {\r\n return state.cartMetaErrors;\r\n }\r\n}\r\n\r\nconst mutations = {\r\n\r\n /**\r\n * Sets the current cart in Vuex to the passed cart object.\r\n * \r\n * @param {Object} state Vuex State\r\n * @param {Object} cart Cart\r\n */\r\n setCart(state, cart) {\r\n cart.items.forEach(item => item.quantityChanging = false);\r\n state.items = cart.items;\r\n state.includesHardware = cart.includesHardware;\r\n state.hasItemThatIncludesLegacyPlugins = cart.hasItemThatIncludesLegacyPlugins;\r\n state.allowDifferentDeliveryAddress = cart.allowDifferentDeliveryAddress;\r\n state.totalWithVAT = cart.totalWithVAT;\r\n state.totalVAT = cart.totalVAT;\r\n state.totalVatDecimal = cart.totalVatDecimal;\r\n state.discountWithoutVAT = cart.discountWithoutVAT;\r\n state.discountWithVAT = cart.discountWithVAT;\r\n state.subtotalWithoutVAT = cart.subtotalWithoutVAT;\r\n state.promotionalCode = cart.promotionalCode;\r\n state.isBusinessUser = cart.isBusinessUser;\r\n state.currencyCode = cart.currencyCode;\r\n state.totalWithVatDecimal = cart.totalWithVatDecimal;\r\n state.orderValueWithVAT = cart.orderValueWithVAT;\r\n state.deliveryCostWithVAT = cart.deliveryCostWithVAT;\r\n state.deliveryDescription = cart.deliveryDescription;\r\n state.isSoftubeIncOrder = cart.isSoftubeIncOrder;\r\n state.userIpAddress = cart.userIpAddress;\r\n if (cart.paymentNonce) {\r\n state.paymentNonce = cart.paymentNonce;\r\n }\r\n state.paymentProviderName = cart.paymentProviderName;\r\n },\r\n setCartMetaErrors(state, cartMetaErrors) {\r\n state.cartMetaErrors = cartMetaErrors;\r\n },\r\n setLoading(state, isLoading) {\r\n state.loading = isLoading;\r\n },\r\n\r\n setRowQuantity(state, { rowId, quantity }) {\r\n var row = state.items.filter(r => r.rowId === rowId)[0];\r\n if (row) {\r\n row.quantity = quantity;\r\n }\r\n },\r\n\r\n setNewPromotionalCode(state, promotionalCode) {\r\n state.newPromotionalCode = promotionalCode;\r\n },\r\n\r\n setAddingPromotion(state, adding) {\r\n state.addingPromotion = adding;\r\n },\r\n\r\n setPromotionalCodeError(state, message) {\r\n state.promotionalCodeErrorMessage = message;\r\n },\r\n\r\n addPendingItem(state, productId) {\r\n state.items.push({ productId, pending: true });\r\n },\r\n\r\n removeItem(state, productId) {\r\n let index = state.items.findIndex(p => p.productId === productId);\r\n if (index < 0) { return; }\r\n state.items.splice(index, 1);\r\n },\r\n\r\n setQuantityChanging(state, { rowId, changing }) {\r\n let row = state.items.find(item => item.rowId === rowId);\r\n if (!row) { return; }\r\n row.quantityChanging = changing;\r\n }\r\n};\r\n\r\n/**\r\n * \r\n */\r\nconst debouncedUpdateItemQuantity = debounce(({ commit, dispatch, rowId, quantity, oldQuantity }) => {\r\n commit('setQuantityChanging', { rowId, changing: true });\r\n axios\r\n .put(`/api/v1/cart/items/${rowId}/${quantity}`)\r\n .then(response => {\r\n commit('setCart', response.data);\r\n })\r\n .catch(error => {\r\n if (error.response.data.errorCode === 106) {\r\n // Not enough stock error\r\n // Reload cart with updated quantities\r\n let endpoint = CART || '/api/v1/cart';\r\n let params = { getForCheckout: true }\r\n\r\n commit('setLoading', true); \r\n \r\n axios\r\n .get(endpoint, { params })\r\n .then(response => {\r\n let newCart = response.data;\r\n if (newCart) {\r\n commit('setCart', newCart);\r\n } \r\n })\r\n .catch(error => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n commit('setLoading', false);\r\n }); \r\n } else {\r\n commit('setRowQuantity', { rowId, quantity: oldQuantity });\r\n }\r\n\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n icon: 'info',\r\n text: error.response.data.message,\r\n type: 'callout'\r\n }, { root: true });\r\n })\r\n .finally(() => {\r\n commit('setQuantityChanging', { rowId, changing: false });\r\n });\r\n}, 500);\r\n\r\nconst actions = {\r\n /**\r\n * Fetches the current shopping cart via the Api.\r\n * @param {Object} param0 vuex context\r\n * @param {Object} options options.\r\n */\r\n fetchShoppingCart({ commit }, options = {}) {\r\n let endpoint = CART || '/api/v1/cart';\r\n let getForCheckout = !!options.getForCheckout;\r\n\r\n commit('setLoading', true);\r\n let start = Date.now();\r\n\r\n let params = {}\r\n if (getForCheckout) {\r\n params.getForCheckout = true;\r\n }\r\n\r\n return axios\r\n .get(endpoint, { params })\r\n .then(response => {\r\n let newCart = response.data;\r\n let pricesChanged = state.totalWithVAT !== newCart.totalWithVAT;\r\n\r\n let prevQty = state.items.reduce(function(prev, cur) { return prev + cur.quantity; }, 0);\r\n let newQty = newCart.items.reduce(function(prev, cur) { return prev + cur.quantity; }, 0);\r\n let productsRemoved = prevQty > newQty;\r\n\r\n if (newCart) {\r\n commit('setCart', newCart);\r\n }\r\n\r\n let end = Date.now();\r\n let diff = end - start;\r\n\r\n if (delayLoader && diff < delayTime) {\r\n return new Promise(resolve => {\r\n setTimeout(resolve({ pricesChanged: pricesChanged, productsRemoved: productsRemoved }), delayTime - diff);\r\n });\r\n } else {\r\n return({ pricesChanged: pricesChanged, productsRemoved: productsRemoved });\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n })\r\n .finally(() => {\r\n commit('setLoading', false);\r\n });\r\n },\r\n\r\n /**\r\n * Makes a XHR call to the cart api and adds and\r\n * tried to add the provided productId to the cart.\r\n * \r\n * @param {Object} context\r\n * @param {Object} payload\r\n * @return {Promise} a promise for completion\r\n */\r\n addItem({commit, dispatch}, { productId, productType = 'product'}) {\r\n commit('addPendingItem', productId);\r\n let messageId;\r\n\r\n // dependind on what type of product is being added...\r\n // we want to display different message types, right now \r\n // we only have two types.\r\n let messageType = productType === 'product'\r\n\r\n switch (productType) {\r\n case 'upgrade':\r\n messageType = 'secondary';\r\n break;\r\n default:\r\n messageType = 'success';\r\n break;\r\n }\r\n\r\n // kick off a message that shows that we're adding\r\n // products to the cart...\r\n return dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n loading: true,\r\n type: messageType,\r\n removeable: false\r\n }, { root: true })\r\n\r\n // ...when we've got an id, initiate the post to the api.\r\n .then(id => {\r\n let endpoint = CART_ADD || `/api/v1/cart/items/${productId}`;\r\n messageId = id;\r\n return axios.post(endpoint);\r\n })\r\n\r\n // ... if we've had a successful add.\r\n .then(response => {\r\n let cart = get(response, 'data.cart');\r\n let text = get(response, 'data.message');\r\n let cta = get(response, 'data.cta');\r\n let myProductsUrl = get(response, 'data.data.myProductsUrl');\r\n\r\n // if this was a free license deposit:\r\n if (myProductsUrl) {\r\n commit('removeItem', productId);\r\n\r\n let message = {\r\n loading: false,\r\n icon: 'open-box',\r\n text,\r\n timeToLive: 5000,\r\n removeable: true,\r\n cta: {\r\n text: 'My Products',\r\n href: myProductsUrl\r\n }\r\n };\r\n\r\n return dispatch(`${nsMessages}/${atMessages.updateMessage}`, {\r\n id: messageId,\r\n message\r\n }, {\r\n root: true\r\n });\r\n }\r\n\r\n // if this happens, the api is malfunctioning.\r\n // we can't do much other than throwing.\r\n if (!cart) { throw new Error('An error occured with your shopping cart'); }\r\n\r\n commit('setCart', cart);\r\n\r\n let message = {\r\n loading: false,\r\n icon: 'cart',\r\n text,\r\n cta,\r\n timeToLive: 5000,\r\n removeable: true,\r\n };\r\n\r\n // find the product that was added now when we have all the info.\r\n let row = cart.items.find(item => item.productId === productId);\r\n trackAddToCart({ product: getProductTrackingData(row) });\r\n\r\n return dispatch(`${nsMessages}/${atMessages.updateMessage}`, {\r\n id: messageId,\r\n message\r\n }, {\r\n root: true\r\n });\r\n })\r\n\r\n .catch(error => {\r\n commit('removeItem', productId);\r\n let text = get(error, 'response.data.message') || get(error, 'message');\r\n let type = get(error, 'response.data.type') || get(error, 'type') || 'callout';\r\n\r\n let message = {\r\n text,\r\n loading: false,\r\n icon: 'info',\r\n type: type,\r\n timeToLive: 10000,\r\n removeable: true,\r\n };\r\n\r\n return dispatch(`${nsMessages}/${atMessages.updateMessage}`, {\r\n id: messageId,\r\n message\r\n }, {\r\n root: true\r\n });\r\n });\r\n },\r\n\r\n addPromotionalCode({ dispatch, commit }, promotionalCode) {\r\n commit('setAddingPromotion', true);\r\n commit('setPromotionalCodeError', null);\r\n let msgId;\r\n\r\n return dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n loading: true,\r\n type: 'success',\r\n removeable: true\r\n }, { root: true })\r\n\r\n .then(id => {\r\n if (promotionalCode)\r\n promotionalCode = promotionalCode.normalize('NFKD');\r\n let endpoint = CART_PROMOTION_ADD || `/api/v1/cart/promotions/${promotionalCode}`;\r\n msgId = id;\r\n return axios.post(endpoint);\r\n })\r\n\r\n .then(response => {\r\n let cart = get(response, 'data.cart');\r\n let text = get(response, 'data.message');\r\n\r\n if (!cart) { throw new Error('An error occurred with your shopping cart'); }\r\n commit('setCart', cart);\r\n commit('setNewPromotionalCode', '');\r\n\r\n let message = {\r\n text,\r\n loading: false,\r\n icon: 'promo',\r\n timeToLive: 5000,\r\n removeable: false\r\n };\r\n\r\n dispatch(`${nsMessages}/${atMessages.updateMessage}`, {\r\n id: msgId,\r\n message\r\n }, {\r\n root: true\r\n });\r\n })\r\n\r\n .catch(error => {\r\n let text = get(error, 'response.data.message') || error.message;\r\n let message = {\r\n text,\r\n loading: false,\r\n icon: 'info',\r\n type: 'callout',\r\n timeToLive: 5000,\r\n removeable: false,\r\n notinteractive: true\r\n };\r\n\r\n dispatch(`${nsMessages}/${atMessages.updateMessage}`, {\r\n id: msgId,\r\n message\r\n }, {\r\n root: true\r\n });\r\n\r\n throw error;\r\n })\r\n\r\n .finally(() => {\r\n commit('setAddingPromotion', false);\r\n });\r\n },\r\n\r\n /**\r\n * Removes the currently applied promotional code from \r\n * the cart.\r\n * \r\n * @param {Object} param0 vuex context\r\n */\r\n removePromotionalCode({ dispatch, commit }) {\r\n let id;\r\n // Start off by showing an loading message.\r\n return dispatch('messages/showMessage', { loading: true, type: 'success' }, { root: true })\r\n\r\n // When that is added, fire off the delete-call...\r\n .then(msgId => {\r\n id = msgId;\r\n let endpoint = CART_PROMOTION_REMOVE || '/api/v1/cart/promotions';\r\n return axios.delete(endpoint);\r\n })\r\n\r\n // ...when response was received.\r\n .then(response => {\r\n let cart = get(response, 'data.cart');\r\n let text = get(response, 'data.message');\r\n\r\n if (!cart) { throw new Error('An error occured while removing your promotional code'); }\r\n commit('setCart', cart);\r\n commit('setNewPromotionalCode', '');\r\n\r\n let message = {\r\n text: text,\r\n loading: false,\r\n icon: 'promo',\r\n timeToLive: 5000,\r\n removeable: false\r\n };\r\n\r\n return dispatch('messages/updateMessage', { id, message }, { root: true })\r\n })\r\n\r\n // any errors recieved\r\n .catch(error => {\r\n let text = get(error, 'response.data.message') || error.message;\r\n let message = {\r\n text: text,\r\n loading: false,\r\n icon: 'promo',\r\n timeToLive: 5000,\r\n removeable: false,\r\n type: 'callout'\r\n };\r\n\r\n return dispatch('message/updateMessage', { id, message }, { root: true });\r\n });\r\n },\r\n\r\n /**\r\n * Updates the quantity of a row in the cart.\r\n * @param {Object} context\r\n * @param {Object} payload \r\n * @return {Promise} A promise for completion.\r\n */\r\n updateItemQuantity({ commit, dispatch, state }, { rowId, quantity }) {\r\n // Ecom-tracking\r\n let row = state.items.find(item => item.rowId === rowId);\r\n let diff = quantity - row.quantity;\r\n if (diff > 0) {\r\n trackAddToCart({ product: getProductTrackingData(row), quantity: diff });\r\n } else if (diff !== 0) {\r\n trackRemoveFromCart({ product: getProductTrackingData(row), quantity: Math.abs(diff) });\r\n }\r\n\r\n // keep track of the old quantity, if the cart update \r\n // should fail remotely, we want to be able to revert to the old \r\n // quantity\r\n let oldQuantity = row.quantity;\r\n commit('setRowQuantity', { rowId, quantity });\r\n\r\n debouncedUpdateItemQuantity({ commit, dispatch, rowId, quantity, oldQuantity });\r\n },\r\n\r\n removeItem({ commit, state }, { rowId }) {\r\n let endpoint = CART_REMOVE || `/api/v1/cart/items/${rowId}`;\r\n \r\n return axios\r\n .delete(endpoint)\r\n .then(response => {\r\n // Ecom-tracking.\r\n let row = state.items.find(item => item.rowId === rowId);\r\n trackRemoveFromCart({ product: getProductTrackingData(row), quantity: row.quantity });\r\n commit('setCart', response.data);\r\n })\r\n .catch(error => {\r\n return Promise.reject();\r\n });\r\n },\r\n\r\n /**\r\n * Updates meta data on the cart itself, specifically things\r\n * like VAT-number and country code. \r\n * \r\n * *Note:* this is only applicable for anonymous users since\r\n * logged in users use their account settings.\r\n * \r\n * @param {Object} param0 vuex context\r\n * @param {Object} metaData the metadata\r\n * @returns Promise for Cart\r\n */\r\n updateCartMeta({ commit, dispatch, state }, metaData) {\r\n let endpoint = CART_META || '/api/v1/cart';\r\n\r\n // first check if a request to update is already running, if \r\n // so; cancel that request and let this run instead.\r\n let cancel = cancellationTokens[endpoint];\r\n if (cancel) {\r\n cancel();\r\n }\r\n\r\n return axios\r\n .patch(endpoint, metaData, {\r\n cancelToken: new axios.CancelToken((c) => {\r\n cancellationTokens[endpoint] = c;\r\n })\r\n })\r\n .then(response => {\r\n let newCart = response.data;\r\n let pricesChanged = state.totalWithVAT !== newCart.totalWithVAT;\r\n\r\n let prevQty = state.items.reduce(function(prev, cur) { return prev + cur.quantity; }, 0);\r\n let newQty = newCart.items.reduce(function(prev, cur) { return prev + cur.quantity; }, 0);\r\n let productsRemoved = prevQty > newQty;\r\n\r\n // TODO: add tracking.\r\n commit('setCart', newCart);\r\n commit('setCartMetaErrors', []);\r\n return { pricesChanged: pricesChanged, productsRemoved: productsRemoved };\r\n })\r\n .catch(error => {\r\n if (error.response.status === 400) {\r\n commit('setCartMetaErrors', error.response.data.errors);\r\n\r\n let generalAddressError = error.response.data.errors.find(err => err.fieldName == 'GeneralAddress');\r\n if (generalAddressError && generalAddressError.errorMessages) {\r\n dispatch(`${nsMessages}/${atMessages.showMessage}`, {\r\n icon: 'info',\r\n text: generalAddressError.errorMessages[0],\r\n type: 'callout'\r\n }, { root: true });\r\n }\r\n }\r\n if (!axios.isCancel(error)) {\r\n console.error(error);\r\n }\r\n throw error;\r\n })\r\n\r\n // ...delete the cancellation token when done...\r\n .finally(() => {\r\n delete cancellationTokens[endpoint];\r\n })\r\n }\r\n};\r\n\r\nexport default {\r\n actions,\r\n state,\r\n mutations,\r\n getters,\r\n namespaced: true\r\n};\r\n","import Vue from 'vue';\r\nimport Vuex from 'vuex';\r\nimport newsletter from './modules/newsletter';\r\nimport support from './modules/support';\r\nimport productsList from './modules/products-list';\r\nimport cookieConsent from './modules/cookie-consent';\r\nimport contents from './modules/contents';\r\nimport account from './modules/account';\r\nimport licenses from './modules/licenses';\r\nimport inputValidation from './modules/input-validation';\r\nimport checkout from './modules/checkout';\r\n\r\n\r\nimport {\r\n default as modals,\r\n NAMESPACE as modalsNamespace \r\n} from './modules/modals';\r\n\r\nimport { \r\n default as pageHeader, \r\n NAMESPACE as pageHeaderNamespace\r\n} from './modules/page-header';\r\n\r\nimport { \r\n default as messages, \r\n NAMESPACE as messagesNamespace\r\n} from './modules/messages';\r\n\r\nimport {\r\n default as shoppingCart,\r\n NAMESPACE as shoppingCartNamespace\r\n} from './modules/shopping-cart';\r\n\r\n\r\nVue.use(Vuex);\r\n\r\n/**\r\n * @module store\r\n * this module is the main file of the applications\r\n * vuex state.\r\n */\r\nexport default new Vuex.Store({\r\n strict: true,\r\n modules: {\r\n [pageHeaderNamespace]: pageHeader,\r\n newsletter,\r\n support,\r\n productsList,\r\n cookieConsent,\r\n [shoppingCartNamespace]: shoppingCart,\r\n contents,\r\n account,\r\n licenses,\r\n inputValidation,\r\n [modalsNamespace]: modals,\r\n [messagesNamespace]: messages,\r\n checkout\r\n }\r\n});\r\n","/*!\n * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it\n * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js\n * License: MIT\n */\n\n(function(root, factory) {\n 'use strict';\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n }\n else if (typeof exports === 'object') {\n // COMMONJS\n module.exports = factory();\n }\n else {\n // BROWSER\n root.Headroom = factory();\n }\n}(this, function() {\n 'use strict';\n\n /* exported features */\n \n var features = {\n bind : !!(function(){}.bind),\n classList : 'classList' in document.documentElement,\n rAF : !!(window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame)\n };\n window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n \n /**\n * Handles debouncing of events via requestAnimationFrame\n * @see http://www.html5rocks.com/en/tutorials/speed/animations/\n * @param {Function} callback The callback to handle whichever event\n */\n function Debouncer (callback) {\n this.callback = callback;\n this.ticking = false;\n }\n Debouncer.prototype = {\n constructor : Debouncer,\n \n /**\n * dispatches the event to the supplied callback\n * @private\n */\n update : function() {\n this.callback && this.callback();\n this.ticking = false;\n },\n \n /**\n * ensures events don't get stacked\n * @private\n */\n requestTick : function() {\n if(!this.ticking) {\n requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\n this.ticking = true;\n }\n },\n \n /**\n * Attach this as the event listeners\n */\n handleEvent : function() {\n this.requestTick();\n }\n };\n /**\n * Check if object is part of the DOM\n * @constructor\n * @param {Object} obj element to check\n */\n function isDOMElement(obj) {\n return obj && typeof window !== 'undefined' && (obj === window || obj.nodeType);\n }\n \n /**\n * Helper function for extending objects\n */\n function extend (object /*, objectN ... */) {\n if(arguments.length <= 0) {\n throw new Error('Missing arguments in extend function');\n }\n \n var result = object || {},\n key,\n i;\n \n for (i = 1; i < arguments.length; i++) {\n var replacement = arguments[i] || {};\n \n for (key in replacement) {\n // Recurse into object except if the object is a DOM element\n if(typeof result[key] === 'object' && ! isDOMElement(result[key])) {\n result[key] = extend(result[key], replacement[key]);\n }\n else {\n result[key] = result[key] || replacement[key];\n }\n }\n }\n \n return result;\n }\n \n /**\n * Helper function for normalizing tolerance option to object format\n */\n function normalizeTolerance (t) {\n return t === Object(t) ? t : { down : t, up : t };\n }\n \n /**\n * UI enhancement for fixed headers.\n * Hides header when scrolling down\n * Shows header when scrolling up\n * @constructor\n * @param {DOMElement} elem the header element\n * @param {Object} options options for the widget\n */\n function Headroom (elem, options) {\n options = extend(options, Headroom.options);\n \n this.lastKnownScrollY = 0;\n this.elem = elem;\n this.tolerance = normalizeTolerance(options.tolerance);\n this.classes = options.classes;\n this.offset = options.offset;\n this.scroller = options.scroller;\n this.initialised = false;\n this.onPin = options.onPin;\n this.onUnpin = options.onUnpin;\n this.onTop = options.onTop;\n this.onNotTop = options.onNotTop;\n this.onBottom = options.onBottom;\n this.onNotBottom = options.onNotBottom;\n }\n Headroom.prototype = {\n constructor : Headroom,\n \n /**\n * Initialises the widget\n */\n init : function() {\n if(!Headroom.cutsTheMustard) {\n return;\n }\n \n this.debouncer = new Debouncer(this.update.bind(this));\n this.elem.classList.add(this.classes.initial);\n \n // defer event registration to handle browser\n // potentially restoring previous scroll position\n setTimeout(this.attachEvent.bind(this), 100);\n \n return this;\n },\n \n /**\n * Unattaches events and removes any classes that were added\n */\n destroy : function() {\n var classes = this.classes;\n \n this.initialised = false;\n \n for (var key in classes) {\n if(classes.hasOwnProperty(key)) {\n this.elem.classList.remove(classes[key]);\n }\n }\n \n this.scroller.removeEventListener('scroll', this.debouncer, false);\n },\n \n /**\n * Attaches the scroll event\n * @private\n */\n attachEvent : function() {\n if(!this.initialised){\n this.lastKnownScrollY = this.getScrollY();\n this.initialised = true;\n this.scroller.addEventListener('scroll', this.debouncer, false);\n \n this.debouncer.handleEvent();\n }\n },\n \n /**\n * Unpins the header if it's currently pinned\n */\n unpin : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(classList.contains(classes.pinned) || !classList.contains(classes.unpinned)) {\n classList.add(classes.unpinned);\n classList.remove(classes.pinned);\n this.onUnpin && this.onUnpin.call(this);\n }\n },\n \n /**\n * Pins the header if it's currently unpinned\n */\n pin : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(classList.contains(classes.unpinned)) {\n classList.remove(classes.unpinned);\n classList.add(classes.pinned);\n this.onPin && this.onPin.call(this);\n }\n },\n \n /**\n * Handles the top states\n */\n top : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.top)) {\n classList.add(classes.top);\n classList.remove(classes.notTop);\n this.onTop && this.onTop.call(this);\n }\n },\n \n /**\n * Handles the not top state\n */\n notTop : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.notTop)) {\n classList.add(classes.notTop);\n classList.remove(classes.top);\n this.onNotTop && this.onNotTop.call(this);\n }\n },\n \n bottom : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.bottom)) {\n classList.add(classes.bottom);\n classList.remove(classes.notBottom);\n this.onBottom && this.onBottom.call(this);\n }\n },\n \n /**\n * Handles the not top state\n */\n notBottom : function() {\n var classList = this.elem.classList,\n classes = this.classes;\n \n if(!classList.contains(classes.notBottom)) {\n classList.add(classes.notBottom);\n classList.remove(classes.bottom);\n this.onNotBottom && this.onNotBottom.call(this);\n }\n },\n \n /**\n * Gets the Y scroll position\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY\n * @return {Number} pixels the page has scrolled along the Y-axis\n */\n getScrollY : function() {\n return (this.scroller.pageYOffset !== undefined)\n ? this.scroller.pageYOffset\n : (this.scroller.scrollTop !== undefined)\n ? this.scroller.scrollTop\n : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n },\n \n /**\n * Gets the height of the viewport\n * @see http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript\n * @return {int} the height of the viewport in pixels\n */\n getViewportHeight : function () {\n return window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n },\n \n /**\n * Gets the physical height of the DOM element\n * @param {Object} elm the element to calculate the physical height of which\n * @return {int} the physical height of the element in pixels\n */\n getElementPhysicalHeight : function (elm) {\n return Math.max(\n elm.offsetHeight,\n elm.clientHeight\n );\n },\n \n /**\n * Gets the physical height of the scroller element\n * @return {int} the physical height of the scroller element in pixels\n */\n getScrollerPhysicalHeight : function () {\n return (this.scroller === window || this.scroller === document.body)\n ? this.getViewportHeight()\n : this.getElementPhysicalHeight(this.scroller);\n },\n \n /**\n * Gets the height of the document\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\n * @return {int} the height of the document in pixels\n */\n getDocumentHeight : function () {\n var body = document.body,\n documentElement = document.documentElement;\n \n return Math.max(\n body.scrollHeight, documentElement.scrollHeight,\n body.offsetHeight, documentElement.offsetHeight,\n body.clientHeight, documentElement.clientHeight\n );\n },\n \n /**\n * Gets the height of the DOM element\n * @param {Object} elm the element to calculate the height of which\n * @return {int} the height of the element in pixels\n */\n getElementHeight : function (elm) {\n return Math.max(\n elm.scrollHeight,\n elm.offsetHeight,\n elm.clientHeight\n );\n },\n \n /**\n * Gets the height of the scroller element\n * @return {int} the height of the scroller element in pixels\n */\n getScrollerHeight : function () {\n return (this.scroller === window || this.scroller === document.body)\n ? this.getDocumentHeight()\n : this.getElementHeight(this.scroller);\n },\n \n /**\n * determines if the scroll position is outside of document boundaries\n * @param {int} currentScrollY the current y scroll position\n * @return {bool} true if out of bounds, false otherwise\n */\n isOutOfBounds : function (currentScrollY) {\n var pastTop = currentScrollY < 0,\n pastBottom = currentScrollY + this.getScrollerPhysicalHeight() > this.getScrollerHeight();\n \n return pastTop || pastBottom;\n },\n \n /**\n * determines if the tolerance has been exceeded\n * @param {int} currentScrollY the current scroll y position\n * @return {bool} true if tolerance exceeded, false otherwise\n */\n toleranceExceeded : function (currentScrollY, direction) {\n return Math.abs(currentScrollY-this.lastKnownScrollY) >= this.tolerance[direction];\n },\n \n /**\n * determine if it is appropriate to unpin\n * @param {int} currentScrollY the current y scroll position\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\n * @return {bool} true if should unpin, false otherwise\n */\n shouldUnpin : function (currentScrollY, toleranceExceeded) {\n var scrollingDown = currentScrollY > this.lastKnownScrollY,\n pastOffset = currentScrollY >= this.offset;\n \n return scrollingDown && pastOffset && toleranceExceeded;\n },\n \n /**\n * determine if it is appropriate to pin\n * @param {int} currentScrollY the current y scroll position\n * @param {bool} toleranceExceeded has the tolerance been exceeded?\n * @return {bool} true if should pin, false otherwise\n */\n shouldPin : function (currentScrollY, toleranceExceeded) {\n var scrollingUp = currentScrollY < this.lastKnownScrollY,\n pastOffset = currentScrollY <= this.offset;\n \n return (scrollingUp && toleranceExceeded) || pastOffset;\n },\n \n /**\n * Handles updating the state of the widget\n */\n update : function() {\n var currentScrollY = this.getScrollY(),\n scrollDirection = currentScrollY > this.lastKnownScrollY ? 'down' : 'up',\n toleranceExceeded = this.toleranceExceeded(currentScrollY, scrollDirection);\n \n if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX\n return;\n }\n \n if (currentScrollY <= this.offset ) {\n this.top();\n } else {\n this.notTop();\n }\n \n if(currentScrollY + this.getViewportHeight() >= this.getScrollerHeight()) {\n this.bottom();\n }\n else {\n this.notBottom();\n }\n \n if(this.shouldUnpin(currentScrollY, toleranceExceeded)) {\n this.unpin();\n }\n else if(this.shouldPin(currentScrollY, toleranceExceeded)) {\n this.pin();\n }\n \n this.lastKnownScrollY = currentScrollY;\n }\n };\n /**\n * Default options\n * @type {Object}\n */\n Headroom.options = {\n tolerance : {\n up : 0,\n down : 0\n },\n offset : 0,\n scroller: window,\n classes : {\n pinned : 'headroom--pinned',\n unpinned : 'headroom--unpinned',\n top : 'headroom--top',\n notTop : 'headroom--not-top',\n bottom : 'headroom--bottom',\n notBottom : 'headroom--not-bottom',\n initial : 'headroom'\n }\n };\n Headroom.cutsTheMustard = typeof features !== 'undefined' && features.rAF && features.bind && features.classList;\n\n return Headroom;\n}));","'use strict';\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nexport default EventEmitter;\nexport {EventEmitter};\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var needDomainExit = false;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n if (needDomainExit)\n domain.exit();\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","\r\nimport {debounce} from './util';\r\nimport EventEmitter from 'events';\r\n\r\n/**\r\n * this class tracks the current breakpoint and exposes it in a `current` property.\r\n * it also allows for event emitting when it changes breakpoint.\r\n * @extend EventEmitter\r\n */\r\nclass Breakpoints extends EventEmitter {\r\n\r\n constructor() {\r\n super();\r\n this.refresh(true);\r\n }\r\n\r\n refresh(silent) {\r\n var bodyAfter = window.getComputedStyle(document.querySelector('body'), ':after');\r\n var bp = bodyAfter.getPropertyValue('content').replace(/[\\\"\\']*/g, '');\r\n if (bp !== this.current) {\r\n this.current = bp;\r\n if (!silent) { this.emit('change', this.current); }\r\n }\r\n }\r\n}\r\n\r\nvar instance = new Breakpoints;\r\nwindow.addEventListener('resize', debounce(() => instance.refresh(), 100), { passive: true });\r\n\r\nexport default instance;\r\n","\r\n/**\r\n * This construct contains helpers for\r\n * tracking events etc. with google analytics or\r\n * other trackers we might be using.\r\n */\r\n\r\nlet ecomLoaded = false;\r\n\r\nexport function trackEvent() {\r\n // if we find a google analytics tracker object,\r\n // use that to track an event.\r\n if (typeof(ga) === 'function') {\r\n ga.apply(this, ['send', 'event', ...arguments]);\r\n }\r\n}\r\n\r\n/**\r\n * tracks an ecommerce transaction. The data expected is in the format\r\n * of google tag manager; https://support.google.com/tagmanager/answer/6107169 but this\r\n * function however tracks via analytics.js. The plan was to support both systems, because it is\r\n * possible to switch in Litium.\r\n */\r\nexport function trackTransaction(transactionData) {\r\n if (typeof(ga) !== 'function') {\r\n return;\r\n }\r\n\r\n if (!ecomLoaded) {\r\n ga('require', 'ecommerce');\r\n ecomLoaded = true;\r\n }\r\n\r\n ga('ecommerce:addTransaction', {\r\n 'id': transactionData.transactionId,\r\n 'revenue': transactionData.transactionTotal,\r\n 'tax': transactionData.transactionTax\r\n });\r\n\r\n let items = transactionData.transactionProducts || [];\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n ga('ecommerce:addItem', {\r\n 'id': transactionData.transactionId,\r\n 'name': item.name,\r\n 'sku': item.sku,\r\n 'price': item.price,\r\n 'quantity': item.quantity\r\n });\r\n }\r\n\r\n // finish up the order, and send it to be tracked.\r\n ga('ecommerce:send');\r\n}\r\n","import ScrollMagic from 'scrollmagic';\r\n\r\nlet controller;\r\n\r\nexport function getScrollController() {\r\n if (!controller) {\r\n controller = new ScrollMagic.Controller();\r\n }\r\n return controller;\r\n}\r\n","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nexport function nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nexport function uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nexport default {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n","/*\nMIT Licence\nCopyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic Denicola\nhttps://github.com/YuzuJS/setImmediate/blob/f1ccbfdf09cb93aadf77c4aa749ea554503b9234/LICENSE.txt\n*/\n\nvar nextHandle = 1; // Spec says greater than zero\nvar tasksByHandle = {};\nvar currentlyRunningATask = false;\nvar doc = global.document;\nvar registerImmediate;\n\nexport function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n}\n\nexport function clearImmediate(handle) {\n delete tasksByHandle[handle];\n}\n\nfunction run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n}\n\nfunction runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n}\n\nfunction installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n}\n\nfunction canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n}\n\nfunction installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n}\n\nfunction installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n}\n\nfunction installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a ","import {isGoogleTagManagerAvailable} from './tracking-util.js';\r\n\r\nexport const AUTHENTICATION_OPTION_NAMES = {\r\n LOGGED_IN: 'Logged in',\r\n NOT_LOGGED_IN: 'Guest'\r\n};\r\n\r\n/**\r\n * Tracks a Checkout with GTM.\r\n * \r\n * @param {Object} cart the cart to track checkout of.\r\n * @param {Number} step the step number (if multiple).\r\n * @param {String} option any option to pass in the action field.\r\n * @param {Function} callback optional callback.\r\n */\r\nexport function trackCheckout(cart, step, option, callback) {\r\n if (!isGoogleTagManagerAvailable()) { return; }\r\n\r\n let actionField = { step };\r\n if (option) {\r\n actionField.option = option;\r\n }\r\n\r\n let data = {\r\n 'event': 'checkout',\r\n 'ecommerce': {\r\n 'currencyCode': cart.currencyCode,\r\n 'checkout': {\r\n actionField,\r\n 'products': cart.items.map(item => ({\r\n 'name': item.name,\r\n 'id': item.productId,\r\n 'price': ((item.price.campaignDecimal || item.price.normalDecimal) / item.quantity).toFixed(2),\r\n 'quantity': item.quantity\r\n }))\r\n }\r\n }\r\n };\r\n\r\n if (callback) {\r\n data.eventCallback = callback;\r\n }\r\n\r\n dataLayer.push(data);\r\n}\r\n\r\n/**\r\n * Tracks a change in a checkout.\r\n * @param {Number} step the current step\r\n * @param {String} purchaseMode whether the user is logged in or not\r\n */\r\nexport function trackCheckoutOptions(step, option, callback) {\r\n if (!isGoogleTagManagerAvailable()) { return; }\r\n\r\n let data = {\r\n 'event': 'checkoutOption',\r\n 'ecommerce': {\r\n 'checkout_option': {\r\n 'actionField': {\r\n 'step': step, \r\n 'option': option \r\n }\r\n }\r\n }\r\n };\r\n\r\n if (callback) {\r\n data.eventCallback = callback;\r\n }\r\n\r\n dataLayer.push(data);\r\n}","\r\n\r\n","import { mapMutations, mapState } from 'vuex';\r\nimport { NAMESPACE as ans } from '../../../store/modules/account';\r\n\r\nexport default {\r\n computed: {\r\n isSelectedMode() {\r\n return this.currentMode === this.mode;\r\n },\r\n currentMode: {\r\n get() { return this.$store.state.checkout.purchaseMode; },\r\n set(value) { this.setMode(value); }\r\n },\r\n ...mapState({\r\n signedIn: state => state[ans].signedIn\r\n })\r\n },\r\n\r\n methods: {\r\n ...mapMutations({\r\n setMode: 'checkout/setPurchaseMode'\r\n })\r\n }\r\n};","\r\n/**\r\n * This function can be used to throw unhandled exception at,\r\n * depending on environment the error is reported.\r\n * \r\n * If all errors is thrown to this function it will be easy to \r\n * log them all the same way.\r\n * \r\n * @param {Error} error the error recieved\r\n */\r\nexport function unhandledError(error) {\r\n if (!console) { return; }\r\n console.error(error);\r\n}\r\n\r\n/**\r\n * This mixin can be used to add a consistent way of showing errors.\r\n */\r\nexport const flashMessageErrorNotifier = {\r\n methods: {\r\n showFlashMessageError(text, cta) {\r\n this.$store.dispatch('messages/showMessage', {\r\n icon: 'info',\r\n type: 'callout',\r\n text,\r\n cta\r\n });\r\n }\r\n }\r\n};","/*!\n * vue-router v3.1.5\n * (c) 2020 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (process.env.NODE_ENV !== 'production' && !condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isExtendedError (constructor, err) {\n return (\n err instanceof constructor ||\n // _name is to support IE9 too\n (err && (err.name === constructor.name || err._name === constructor._name))\n )\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cachce\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nvar decode = decodeURIComponent;\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n parsedQuery[key] = extraQuery[key];\n }\n return parsedQuery\n}\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0\n ? decode(parts.join('='))\n : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj ? Object.keys(obj).map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n }).filter(function (x) { return x.length > 0; }).join('&') : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return (\n a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query)\n )\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params)\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a);\n var bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key) {\n var aVal = a[key];\n var bVal = b[key];\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/\\//g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n if (params.pathMatch) { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n exact: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget);\n classes[activeClass] = this.exact\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\"RouterLink with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href };\n } else {\n // find the first child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n } else {\n // doesn't have child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n instances: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = val;\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n window.history.replaceState({ key: getStateKey() }, '', absolutePath);\n window.addEventListener('popstate', function (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n });\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n window.scrollTo(position.x, position.y);\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && 'pushState' in window.history\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\nvar NavigationDuplicated = /*@__PURE__*/(function (Error) {\n function NavigationDuplicated (normalizedLocation) {\n Error.call(this);\n this.name = this._name = 'NavigationDuplicated';\n // passing the message to super() doesn't seem to work in the transpiled version\n this.message = \"Navigating to current location (\\\"\" + (normalizedLocation.fullPath) + \"\\\") is not allowed\";\n // add a stack property so services like Sentry can correctly display it\n Object.defineProperty(this, 'stack', {\n value: new Error().stack,\n writable: true,\n configurable: true\n });\n // we could also have used\n // Error.captureStackTrace(this, this.constructor)\n // but it only exists on node and chrome\n }\n\n if ( Error ) NavigationDuplicated.__proto__ = Error;\n NavigationDuplicated.prototype = Object.create( Error && Error.prototype );\n NavigationDuplicated.prototype.constructor = NavigationDuplicated;\n\n return NavigationDuplicated;\n}(Error));\n\n// support IE9\nNavigationDuplicated._name = 'NavigationDuplicated';\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1 = this;\n\n var route = this.router.match(location, this.current);\n this.confirmTransition(\n route,\n function () {\n this$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1.ensureURL();\n\n // fire ready cbs once\n if (!this$1.ready) {\n this$1.ready = true;\n this$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1.ready) {\n this$1.ready = true;\n this$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1 = this;\n\n var current = this.current;\n var abort = function (err) {\n // after merging https://github.com/vuejs/vue-router/pull/2771 we\n // When the user navigates through history through back/forward buttons\n // we do not want to throw the error. We only throw it if directly calling\n // push/replace. That's why it's not included in isError\n if (!isExtendedError(NavigationDuplicated, err) && isError(err)) {\n if (this$1.errorCbs.length) {\n this$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n warn(false, 'uncaught error during route navigation:');\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n route.matched.length === current.matched.length\n ) {\n this.ensureURL();\n return abort(new NavigationDuplicated(route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n this.pending = route;\n var iterator = function (hook, next) {\n if (this$1.pending !== route) {\n return abort()\n }\n try {\n hook(route, current, function (to) {\n if (to === false || isError(to)) {\n // next(false) -> abort navigation, ensure current URL\n this$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort();\n if (typeof to === 'object' && to.replace) {\n this$1.replace(to);\n } else {\n this$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n var postEnterCbs = [];\n var isValid = function () { return this$1.current === route; };\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);\n var queue = enterGuards.concat(this$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1.pending !== route) {\n return abort()\n }\n this$1.pending = null;\n onComplete(route);\n if (this$1.router.app) {\n this$1.router.app.$nextTick(function () {\n postEnterCbs.forEach(function (cb) {\n cb();\n });\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n var prev = this.current;\n this.current = route;\n this.cb && this.cb(route);\n this.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated,\n cbs,\n isValid\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key, cbs, isValid)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key,\n cbs,\n isValid\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n cbs.push(function () {\n // #750\n // if a router-view is wrapped with an out-in transition,\n // the instance may not have been registered at this time.\n // we will need to poll for registration until current route\n // is no longer valid.\n poll(cb, match.instances, key, isValid);\n });\n }\n next(cb);\n })\n }\n}\n\nfunction poll (\n cb, // somehow flow cannot infer this is a function\n instances,\n key,\n isValid\n) {\n if (\n instances[key] &&\n !instances[key]._isBeingDestroyed // do not reuse being destroyed instance\n ) {\n cb(instances[key]);\n } else if (isValid()) {\n setTimeout(function () {\n poll(cb, instances, key, isValid);\n }, 16);\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n var this$1 = this;\n\n History.call(this, router, base);\n\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n setupScroll();\n }\n\n var initLocation = getLocation(this.base);\n window.addEventListener('popstate', function (e) {\n var current = this$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1.base);\n if (this$1.current === START && location === initLocation) {\n return\n }\n\n this$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n });\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1.base + route.fullPath));\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = decodeURI(window.location.pathname);\n if (base && path.indexOf(base) === 0) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1 = this;\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n setupScroll();\n }\n\n window.addEventListener(\n supportsPushState ? 'popstate' : 'hashchange',\n function () {\n var current = this$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n }\n );\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n // decode the hash but not the search or hash\n // as search(query) is already decoded\n // https://github.com/vuejs/vue-router/issues/2708\n var searchIndex = href.indexOf('?');\n if (searchIndex < 0) {\n var hashIndex = href.indexOf('#');\n if (hashIndex > -1) {\n href = decodeURI(href.slice(0, hashIndex)) + href.slice(hashIndex);\n } else { href = decodeURI(href); }\n } else {\n href = decodeURI(href.slice(0, searchIndex)) + href.slice(searchIndex);\n }\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);\n this$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n this$1.index = targetIndex;\n this$1.updateRoute(route);\n },\n function (err) {\n if (isExtendedError(NavigationDuplicated, err)) {\n this$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback = mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (\n raw,\n current,\n redirectedFrom\n) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1 = this;\n\n process.env.NODE_ENV !== 'production' && assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1.apps.indexOf(app);\n if (index > -1) { this$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1.app === app) { this$1.app = this$1.apps[0] || null; }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History) {\n history.transitionTo(history.getCurrentLocation());\n } else if (history instanceof HashHistory) {\n var setupHashListener = function () {\n history.setupListeners();\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupHashListener,\n setupHashListener\n );\n }\n\n history.listen(function (route) {\n this$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply([], route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n }))\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(\n to,\n current,\n append,\n this\n );\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\nVueRouter.install = install;\nVueRouter.version = '3.1.5';\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nexport default VueRouter;\n","import 'promise-polyfill/src/polyfill';\r\nimport Vue from 'vue';\r\nimport i18n from './i18n';\r\nimport store from './store';\r\nimport * as components from './components';\r\nimport * as elements from './elements';\r\nimport lazysizes from 'lazysizes';\r\nimport svg4everybody from 'svg4everybody';\r\nimport VueRouter from 'vue-router';\r\nimport PageModal from './components/page-modal/page-modal.vue';\r\nimport {\r\n ACTION_TYPES as messagesActions,\r\n NAMESPACE as messagesNamespace \r\n} from './store/modules/messages';\r\n\r\n//Vue.config.devtools = true;\r\n\r\nlet mountPoint = document.getElementById('softube');\r\nlet pageId = document.querySelector('meta[name=page-id]');\r\nlet adminMode = mountPoint.classList.contains('page--admin-mode');\r\nlet mode = adminMode \r\n ? 'abstract'\r\n : 'history';\r\n\r\nconst router = new VueRouter({mode});\r\n\r\n/**\r\n * Create our root instance Vue object.\r\n */\r\nconst app = new Vue({\r\n el: '#softube',\r\n store,\r\n router,\r\n i18n,\r\n components: {\r\n ...components,\r\n ...elements\r\n },\r\n mounted() {\r\n lazysizes.init();\r\n svg4everybody();\r\n\r\n // Create the page modal.\r\n let PageModalComponent = Vue.extend(PageModal);\r\n let pageModal = new PageModalComponent({ parent: this });\r\n pageModal.$mount();\r\n this.$el.appendChild(pageModal.$el);\r\n\r\n // If we coming from an old link with hash, we can use that to navigate\r\n // with history\r\n if (mode === 'history' && /#\\/.+/.test(window.location.hash)) {\r\n this.$nextTick(() => {\r\n this.$router.replace({ path: window.location.hash.substring(1) });\r\n });\r\n }\r\n\r\n if (typeof(SOF_I18N) !== 'undefined') {\r\n i18n.mergeLocaleMessage(document.documentElement.lang, SOF_I18N);\r\n }\r\n },\r\n created () {\r\n if (!this.$store) { return; }\r\n this.$store.dispatch('shoppingCart/fetchShoppingCart', { getForCheckout: mountPoint.classList.contains('page--checkout') });\r\n this.$store.dispatch(`${messagesNamespace}/${messagesActions.fetchContextMessages}`, { \r\n pageId: pageId.content,\r\n adminMode\r\n });\r\n }\r\n});\r\n\r\nexport default app;\r\n"],"names":["global","self","window","callback","constructor","this","then","value","resolve","reason","reject","setTimeoutFunc","setTimeout","noop","Promise","fn","TypeError","_state","_handled","_value","undefined","_deferreds","doResolve","handle","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","e","promise","push","newValue","finale","thisArg","apply","arguments","length","_unhandledRejectionFn","i","len","Handler","done","ex","prototype","prom","promiseFinally","all","arr","args","Array","slice","call","remaining","res","val","race","values","setImmediate","err","console","warn","globalNS","Error","Vue","use","VueI18n","document","documentElement","lang","debounce","delay","timer","context","pick","o","props","map","prop","get","fieldName","shift","includes","split","supportsLocalStorage","test","setItem","removeItem","getDeserializeObject","key","fallbackToCookie","defaultValue","json","getCookie","localStorage","getItem","JSON","parse","error","MESSAGES_KEY","NAMESPACE","MUTATION_TYPES","ACTION_TYPES","mutations","state","dismissedPermanently","id","seenMessages","obj","stringify","expires","show","type","light","set","modal","closeable","content","commit","modals","adminMode","MESSAGES","apiOverrides","msgCounter","hasLocalStorage","testLocalStorage","getSeenMessageIds","messages","isArray","fetching","fetchingMessages","message","prepend","splice","find","m","$timer","index","findIndex","msg","ctx","dispatch","timeToLive","pageId","url","axios","params","notSeenMessages","response","filter","modalNamespace","modalActions","root","catch","finally","loading","hasOwnProperty","NEWSLETTER","email","post","data","nsMessages","atMessages","overrides","SUPPORT","SUPPORT_FLAT","flat","supportEndpoint","operationsRunning","tagGroups","recentQueries","forEach","group","activeOptions","metaSettings","serverTagGroup","x","tagGroup","options","currentOption","serverOption","numberOfHits","totalResults","supportItems","concat","items","item","open","groupId","itemId","itemToOpen","j","query","fetchCancelToken","actions","init","join","CancelToken","c","isCancel","result","popularSearches","debouncedFetchSupportItems","reduce","prev","count","PRODUCTS_META","PRODUCTS","filterCancelToken","productsCancelToken","sorting","defaultSort","sortingOptions","option","default","active","activeSortingOption","opt","activeSortingOptionId","pageSize","pageNumber","only","onlySoldOnWebsite","products","categoryId","sortingOptionId","metaEndpoint","emptyProducts","getters","activeSort","sort","calculatePrice","productsEndpoint","totalPages","Math","ceil","getLocationWithoutForceCookieModalQueryString","href","replace","dismissed","acceptAll","location","CONTENTS","cancelToken","endpoint","GETTER_TYPES","ACCOUNT_META","ACCOUNT","ACCOUNT_PASSWORD","ACCOUNT_ILOK","ACCOUNT_LOGIN","ACCOUNT_LOGOUT","ACCOUNT_SAVE","fieldDefaults","current","edit","initialLoading","account","iLokId","iLokToken","app","countries","iLokOauthUri","states","allowNewsletterSignupOnAccount","addressIsRequired","meta","provisioning","suggestedIlokId","field","password","oldPassword","repeatPassword","username","login","signedIn","copy","babelHelpers.extends","countryByCode","countryCode","stateByCode","stateCode","locale","Object","entries","omit","mergeLocaleMessage","log","fromCheckout","put","redirectUrl","scrollTo","errorCode","encodeURIComponent","delete","LICENCE_CODE","LICENSES","LICENSE_CODE_DEPOSIT","LICENSE_DEMO_DEPOSIT","licenseCode","licenseCodeToBeRedeemed","redeeming","featuredHighlight","name","images","productToBeRedeemed","redeemError","gotError","licensesCount","licenses","loadingLicenses","depositing","depositingDemo","adding","addingToAccount","product","redeemEndpoint","dataLayer","productId","msgId","text","myProductsUrl","cta","INPUT_VALIDATION","uri","valid","ASCIIFolder","str","replacement","_fold","char","fallback","character","charCodeAt","_this","mapping","Map","CART_CHECKOUT","braintreeDropin","LiabilityNotShiftedError","CheckoutError","defaultBraintreeOptions","createPromise","rootState","teardown","braintreeOptions","paypal","amount","shoppingCart","totalWithVatDecimal","toFixed","currency","currencyCode","useThreeDSecure","threeDSecure","braintree","dropin","create","dropinInstance","on","evt","paymentOption","phoneMobile","asciiFolder","foldReplacing","firstName","lastName","address","substring","city","postcode","userIpAddress","requestPaymentMethod","payload","liabilityShifted","checkoutOptions","nonce","getRecaptchaChallenge","loaded","braintreeLoaded","requestable","paymentMethodRequestable","newMode","purchaseMode","updatingAccount","inProgress","purchaseInProgress","failed","braintreeFailed","merchants","paymentOptionSelected","challenge","recaptchaChallenge","editing","editingGuestDetails","disabled","customerDetailsFormDisabled","lookupObjectKey","canPurchase","isOpen","subMenuOpen","isActive","metaActive","currencyMeta","querySelector","trackAddToCart","quantity","price","trackRemoveFromCart","CART","CART_META","CART_ADD","CART_PROMOTION_ADD","CART_PROMOTION_REMOVE","CART_REMOVE","getProductTrackingData","row","toString","cancellationTokens","debouncedUpdateItemQuantity","rowId","oldQuantity","changing","getForCheckout","newCart","pricesChanged","totalWithVAT","prevQty","cur","productsRemoved","productType","messageId","messageType","cart","promotionalCode","normalize","diff","abs","metaData","cancel","patch","status","errors","generalAddressError","errorMessages","quantityChanging","includesHardware","hasItemThatIncludesLegacyPlugins","allowDifferentDeliveryAddress","totalVAT","totalVatDecimal","discountWithoutVAT","discountWithVAT","subtotalWithoutVAT","isBusinessUser","orderValueWithVAT","deliveryCostWithVAT","deliveryDescription","isSoftubeIncOrder","paymentNonce","paymentProviderName","cartMetaErrors","isLoading","r","newPromotionalCode","addingPromotion","promotionalCodeErrorMessage","pending","p","curr","Vuex","Store","pageHeader","newsletter","support","productsList","cookieConsent","shoppingCartNamespace","contents","inputValidation","modalsNamespace","messagesNamespace","checkout","factory","features","bind","classList","rAF","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","Debouncer","ticking","Headroom","elem","t","extend","object","nodeType","lastKnownScrollY","tolerance","down","up","classes","offset","scroller","initialised","onPin","onUnpin","onTop","onNotTop","onBottom","onNotBottom","update","requestTick","rafCallback","handleEvent","cutsTheMustard","debouncer","add","initial","attachEvent","destroy","remove","removeEventListener","getScrollY","addEventListener","unpin","contains","pinned","unpinned","pin","top","notTop","bottom","notBottom","pageYOffset","scrollTop","body","parentNode","getViewportHeight","innerHeight","clientHeight","getElementPhysicalHeight","elm","max","offsetHeight","getScrollerPhysicalHeight","getDocumentHeight","scrollHeight","getElementHeight","getScrollerHeight","isOutOfBounds","currentScrollY","pastTop","pastBottom","toleranceExceeded","direction","shouldUnpin","scrollingDown","pastOffset","shouldPin","scrollingUp","scrollDirection","module","EventHandlers","EventEmitter","$getMaxListeners","that","_maxListeners","defaultMaxListeners","_addListener","target","listener","events","existing","_events","newListener","emit","_eventsCount","unshift","warned","w","emitter","_onceWrap","fired","g","removeListener","listenerCount","evlistener","arrayClone","usingDomains","domain","Domain","getPrototypeOf","setMaxListeners","n","isNaN","getMaxListeners","er","handler","doError","domainEmitter","domainThrown","isFn","listeners","emitNone","arg1","emitOne","arg2","emitTwo","arg3","emitThree","emitMany","addListener","prependListener","once","prependOnceListener","list","position","originalListener","k","pop","spliceOne","removeAllListeners","keys","unwrapListeners","eventNames","Reflect","ownKeys","instance","refresh","silent","bp","getComputedStyle","getPropertyValue","passive","ga","getScrollController","controller","ScrollMagic","Controller","clearTimeout","performance","tasksByHandle","now","mozNow","msNow","oNow","webkitNow","currentlyRunningATask","doc","runIfPresent","task","run","messagePrefix","onGlobalMessage","attachTo","process","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","event","createElement","random","source","indexOf","Function","timeout","clearFn","close","Timeout","_id","unref","ref","SuiSupportResult","imageInfo","isGoogleTagManagerAvailable","hasTagManagerLoaded","google_tag_manager","trackProductClick","impressionListeners","registerProductImpressionTracker","shouldBeTracked","impressionChecker","removeProductImpressionTracker","element","getBoundingClientRect","trackProductImpression","impression","Boolean","isValid","$emit","$on","inputBlockValidated","submitted","validating","$children","child","$options","fullValidationOnChange","validate","fromSubmit","promises","inputBlocks","ib","validities","y","inputBlock","block","preventDefault","validation","_this2","alwaysPrevent","$el","submit","Number","String","getHeight","bool","innerOpen","doneOpenTransition","$nextTick","duration","container","$refs","h","tag","style","handleTransition","$slots","rootRedirect","routes","hideInMenu","icon","accountSettings","myLicenses","mySubscriptions","registerLicense","ilokAccount","SuiSearchProducts","SuiSearchSupport","SuiSearchContents","results","RegExp","exec","decodeURIComponent","trackCheckout","step","actionField","campaignDecimal","normalDecimal","eventCallback","trackCheckoutOptions","currentMode","mode","$store","setMode","mapState","ans","mapMutations","unhandledError","isError","isExtendedError","_name","a","b","View","functional","render","_","children","parent","routerView","$createElement","route","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","$vnode","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","component","configProps","fillPropsinData","matched","components","registerRouteInstance","vm","instances","hook","prepatch","vnode","componentInstance","propsToPass","config","resolveProps","attrs","encodeReserveRE","encodeReserveReplacer","commaRE","encode","decode","parseQuery","trim","param","parts","stringifyQuery","val2","trailingSlashRE","createRoute","record","redirectedFrom","router","clone","path","hash","fullPath","getFullPath","formatMatch","freeze","START","_stringifyQuery","isSameRoute","isObjectEqual","aKeys","bKeys","every","aVal","bVal","resolvePath","relative","base","append","firstChar","charAt","stack","segments","segment","cleanPath","isarray","pathToRegexp_1","pathToRegexp","parse_1","compile_1","tokensToFunction","tokensToFunction_1","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","tokens","defaultDelimiter","delimiter","escaped","next","prefix","capture","modifier","asterisk","partial","repeat","optional","pattern","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","pretty","token","attachKeys","re","flags","sensitive","strict","end","endsWithDelimiter","groups","match","regexpToRegexp","arrayToRegexp","compile","regexpCompileCache","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","params$1","rawPath","parsedPath","hashIndex","queryIndex","parsePath","basePath","extraQuery","_parseQuery","parsedQuery","resolveQuery","_Vue","toTypes","eventTypes","Link","to","required","exact","activeClass","exactActiveClass","this$1","$router","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","queryIncludes","guardEvent","click","class","scopedSlot","$scopedSlots","$hasNormal","navigate","isExactActive","findAnchor","isStatic","aData","handler$1","event$1","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","currentTarget","getAttribute","inBrowser","createRouteMap","oldPathList","oldPathMap","oldNameMap","pathList","pathMap","nameMap","addRouteRecord","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","redirect","beforeEnter","childMatchAs","alias","aliases","aliasRoute","l","createMatcher","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","aliasedMatch","aliasedRecord","addRoutes","Time","Date","genStateKey","_key","getStateKey","setStateKey","positionStore","setupScroll","protocolAndPath","protocol","host","absolutePath","history","replaceState","saveScrollPosition","handleScroll","from","isPop","behavior","scrollBehavior","getScrollPosition","shouldScroll","scrollToPosition","pageXOffset","isValidPosition","isNumber","normalizePosition","v","hashStartsWithNumberRE","el","docRect","elRect","isObject","selector","getElementById","left","ua","supportsPushState","navigator","userAgent","pushState","stateCopy","runQueue","queue","resolveAsyncComponents","hasAsync","flatMapComponents","def","cid","resolvedDef","__esModule","hasSymbol","Symbol","toStringTag","resolved","comp","flatten","called","NavigationDuplicated","normalizedLocation","defineProperty","writable","configurable","__proto__","History","baseEl","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","extractGuards","records","reverse","guards","guard","extractGuard","bindGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","confirmTransition","updateRoute","ensureURL","abort","updated","activated","deactivated","resolveQueue","beforeHooks","iterator","cbs","postEnterCbs","poll","_isBeingDestroyed","resolveHooks","afterHooks","HTML5History","expectScroll","supportsScroll","initLocation","getLocation","go","fromRoute","getCurrentLocation","decodeURI","pathname","search","HashHistory","checkFallback","ensureSlash","setupListeners","getHash","replaceHash","pushHash","searchIndex","getUrl","AbstractHistory","targetIndex","VueRouter","apps","matcher","prototypeAccessors","registerHook","$once","setupHashListener","_route","beforeEach","beforeResolve","afterEach","back","forward","getMatchedComponents","normalizedTo","defineProperties","install","installed","isDef","registerInstance","callVal","_parentVnode","mixin","beforeCreate","_router","util","defineReactive","destroyed","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","version","mountPoint","elements","pageModal","PageModal","$mount","appendChild","SOF_I18N","messagesActions"],"mappings":"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CT,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,OACT,CAAC,MAAQ,MACT,CAAC,MAAQ,OACT,CAAC,MAAQ,OACT,CAAC,MAAQ,MACT,CAAC,MAAQ,MACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,OACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,MACR,CAAC,KAAQ,OACT,CAAC,IAAO,MACR,CAAC,IAAM,KACP,CAAC,IAAM,KACP,CAAC,IAAM,KACP,CAAC,IAAM,KACP,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAM,KACP,CAAC,IAAM,KACP,CAAC,IAAM,KACP,CAAC,IAAM,KACP,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,MACR,CAAC,KAAQ,OACT,CAAC,IAAO,MACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,OACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,OACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,MACR,CAAC,KAAQ,MACT,CAAC,IAAO,MACR,CAAC,KAAQ,OACT,CAAC,IAAO,MACR,CAAC,KAAQ,MACT,CAAC,IAAO,MACR,CAAC,IAAO,MACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KA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CT,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,OACT,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,OACT,CAAC,IAAO,MACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,OACT,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,IAAO,KACR,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KA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CT,CAAC,KAAQ,OACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,MAAQ,MACT,CAAC,MAAQ,MACT,CAAC,MAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,KAAQ,OACT,CAAC,KAAQ,QACT,CAAC,IAAM,KACP,CAAC,IAAM,KACP,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,MACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,MACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,MACT,CAAC,KAAQ,MACT,CAAC,MAAQ,KACT,CAAC,MAAQ,KACT,CAAC,KAAQ,KACT,CAAC,MAAQ,KA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"}